Commit 1bfb3cc9 authored by 张宏's avatar 张宏

.

parent 7f4d2341
......@@ -11,8 +11,8 @@ class RoomManagementBlock extends StatefulWidget {
class _RoomManagementBlockState extends State<RoomManagementBlock> {
late final ServiceIndexController _controller;
String _selectedFloor = '1楼';
String _selectedType = '客房';
String? _selectedFloor;
String? _selectedType;
String? _selectedRoom;
String _searchText = '';
final TextEditingController _searchController = TextEditingController();
......@@ -28,7 +28,22 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
List<Map<String, dynamic>> _getFilteredRooms() {
final allRooms = _controller.getRoomsByFloor(_selectedFloor);
List<Map<String, dynamic>> allRooms;
if (_selectedFloor == null) {
allRooms = [];
for (final floor in _controller.getFloors()) {
allRooms.addAll(_controller.getRoomsByFloor(floor));
}
} else {
allRooms = _controller.getRoomsByFloor(_selectedFloor!);
}
if (_selectedType != null) {
allRooms = allRooms
.where((room) => room['type'] == _selectedType)
.toList();
}
if (_searchText.isEmpty) {
return allRooms;
}
......@@ -76,8 +91,8 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
// 搜索框
_buildSearchBox(),
SizedBox(height: 15.h),
// 房间区域或其他类型内容
_selectedType == '客房' ? _buildRoomGrid() : _buildOtherContent(),
// 房间区域
_buildRoomGrid(),
SizedBox(height: 20.h),
// 选中状态提示
if (_selectedRoom != null)
......@@ -115,7 +130,11 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
child: GestureDetector(
onTap: () {
setState(() {
if (_selectedFloor == floor) {
_selectedFloor = null;
} else {
_selectedFloor = floor;
}
_searchController.clear();
_searchText = '';
});
......@@ -158,7 +177,11 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
child: GestureDetector(
onTap: () {
setState(() {
if (_selectedType == type) {
_selectedType = null;
} else {
_selectedType = type;
}
});
},
child: Container(
......@@ -229,6 +252,12 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
);
}
String _buildFilterLabel() {
final typePart = _selectedType ?? '全部类型';
final floorPart = _selectedFloor ?? '全部楼层';
return '$typePart · $floorPart';
}
Widget _buildRoomGrid() {
final filteredRooms = _getFilteredRooms();
final crossAxisCount = 8; // 列
......@@ -240,7 +269,7 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'客房 $_selectedFloor · 左右滑动选择',
_buildFilterLabel(),
style: TextStyle(
fontSize: 16.sp,
color: Colors.white,
......@@ -377,26 +406,6 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
);
}
Widget _buildOtherContent() {
return Container(
width: double.infinity,
height: 200.h,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20.r),
color: Color.fromRGBO(51, 65, 85, 1),
),
child: Center(
child: Text(
'$_selectedType 区域内容',
style: TextStyle(
fontSize: 16.sp,
color: Colors.grey,
),
),
),
);
}
Widget _buildBottomButtons() {
return Row(
children: [
......
......@@ -31,30 +31,45 @@ class ServiceIndexController {
return ['1楼', '2楼', '3楼', '4楼', '5楼', '6楼'];
}
List<Map<String, dynamic>> getRoomsByFloor(String floor) {
_roomCache ??= {
'1楼': _generateRooms(1, 40),
Map<String, List<Map<String, dynamic>>> _buildRoomCache() {
return {
'1楼': _generateRooms(1, 80),
'2楼': _generateRooms(2, Random().nextInt(41) + 10),
'3楼': _generateRooms(3, Random().nextInt(41) + 10),
'4楼': _generateRooms(4, Random().nextInt(41) + 10),
'5楼': _generateRooms(5, Random().nextInt(5) + 10),
'6楼': _generateRooms(6, Random().nextInt(41) + 10),
};
}
bool get _cacheValid {
if (_roomCache == null) return false;
final firstFloor = _roomCache!['1楼'];
if (firstFloor == null || firstFloor.isEmpty) return false;
return firstFloor.first.containsKey('type');
}
List<Map<String, dynamic>> getRoomsByFloor(String floor) {
if (!_cacheValid) {
_roomCache = _buildRoomCache();
}
return _roomCache![floor] ?? [];
}
List<Map<String, dynamic>> _generateRooms(int floor, int count) {
final statuses = ['空闲', '入住', '待清洁'];
final types = ['客房', '大堂', '过道', '会议', '餐厅'];
final List<Map<String, dynamic>> rooms = [];
for (int i = 1; i <= count; i++) {
final roomNum = floor * 100 + i;
// 随机分配状态,但保持一定比例
final statusIndex = (roomNum % 3);
final typeIndex = (roomNum % types.length);
rooms.add({
'number': roomNum.toString(),
'status': statuses[statusIndex],
'type': types[typeIndex],
});
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment