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

.

parent 7f4d2341
...@@ -11,8 +11,8 @@ class RoomManagementBlock extends StatefulWidget { ...@@ -11,8 +11,8 @@ class RoomManagementBlock extends StatefulWidget {
class _RoomManagementBlockState extends State<RoomManagementBlock> { class _RoomManagementBlockState extends State<RoomManagementBlock> {
late final ServiceIndexController _controller; late final ServiceIndexController _controller;
String _selectedFloor = '1楼'; String? _selectedFloor;
String _selectedType = '客房'; String? _selectedType;
String? _selectedRoom; String? _selectedRoom;
String _searchText = ''; String _searchText = '';
final TextEditingController _searchController = TextEditingController(); final TextEditingController _searchController = TextEditingController();
...@@ -28,7 +28,22 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> { ...@@ -28,7 +28,22 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
List<Map<String, dynamic>> _getFilteredRooms() { 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) { if (_searchText.isEmpty) {
return allRooms; return allRooms;
} }
...@@ -76,8 +91,8 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> { ...@@ -76,8 +91,8 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
// 搜索框 // 搜索框
_buildSearchBox(), _buildSearchBox(),
SizedBox(height: 15.h), SizedBox(height: 15.h),
// 房间区域或其他类型内容 // 房间区域
_selectedType == '客房' ? _buildRoomGrid() : _buildOtherContent(), _buildRoomGrid(),
SizedBox(height: 20.h), SizedBox(height: 20.h),
// 选中状态提示 // 选中状态提示
if (_selectedRoom != null) if (_selectedRoom != null)
...@@ -115,7 +130,11 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> { ...@@ -115,7 +130,11 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
setState(() { setState(() {
if (_selectedFloor == floor) {
_selectedFloor = null;
} else {
_selectedFloor = floor; _selectedFloor = floor;
}
_searchController.clear(); _searchController.clear();
_searchText = ''; _searchText = '';
}); });
...@@ -158,7 +177,11 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> { ...@@ -158,7 +177,11 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
setState(() { setState(() {
if (_selectedType == type) {
_selectedType = null;
} else {
_selectedType = type; _selectedType = type;
}
}); });
}, },
child: Container( child: Container(
...@@ -229,6 +252,12 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> { ...@@ -229,6 +252,12 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
); );
} }
String _buildFilterLabel() {
final typePart = _selectedType ?? '全部类型';
final floorPart = _selectedFloor ?? '全部楼层';
return '$typePart · $floorPart';
}
Widget _buildRoomGrid() { Widget _buildRoomGrid() {
final filteredRooms = _getFilteredRooms(); final filteredRooms = _getFilteredRooms();
final crossAxisCount = 8; // 列 final crossAxisCount = 8; // 列
...@@ -240,7 +269,7 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> { ...@@ -240,7 +269,7 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Text(
'客房 $_selectedFloor · 左右滑动选择', _buildFilterLabel(),
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.white, color: Colors.white,
...@@ -377,26 +406,6 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> { ...@@ -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() { Widget _buildBottomButtons() {
return Row( return Row(
children: [ children: [
......
...@@ -31,30 +31,45 @@ class ServiceIndexController { ...@@ -31,30 +31,45 @@ class ServiceIndexController {
return ['1楼', '2楼', '3楼', '4楼', '5楼', '6楼']; return ['1楼', '2楼', '3楼', '4楼', '5楼', '6楼'];
} }
List<Map<String, dynamic>> getRoomsByFloor(String floor) { Map<String, List<Map<String, dynamic>>> _buildRoomCache() {
_roomCache ??= { return {
'1楼': _generateRooms(1, 40), '1楼': _generateRooms(1, 80),
'2楼': _generateRooms(2, Random().nextInt(41) + 10), '2楼': _generateRooms(2, Random().nextInt(41) + 10),
'3楼': _generateRooms(3, Random().nextInt(41) + 10), '3楼': _generateRooms(3, Random().nextInt(41) + 10),
'4楼': _generateRooms(4, Random().nextInt(41) + 10), '4楼': _generateRooms(4, Random().nextInt(41) + 10),
'5楼': _generateRooms(5, Random().nextInt(5) + 10), '5楼': _generateRooms(5, Random().nextInt(5) + 10),
'6楼': _generateRooms(6, Random().nextInt(41) + 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] ?? []; return _roomCache![floor] ?? [];
} }
List<Map<String, dynamic>> _generateRooms(int floor, int count) { List<Map<String, dynamic>> _generateRooms(int floor, int count) {
final statuses = ['空闲', '入住', '待清洁']; final statuses = ['空闲', '入住', '待清洁'];
final types = ['客房', '大堂', '过道', '会议', '餐厅'];
final List<Map<String, dynamic>> rooms = []; final List<Map<String, dynamic>> rooms = [];
for (int i = 1; i <= count; i++) { for (int i = 1; i <= count; i++) {
final roomNum = floor * 100 + i; final roomNum = floor * 100 + i;
// 随机分配状态,但保持一定比例
final statusIndex = (roomNum % 3); final statusIndex = (roomNum % 3);
final typeIndex = (roomNum % types.length);
rooms.add({ rooms.add({
'number': roomNum.toString(), 'number': roomNum.toString(),
'status': statuses[statusIndex], '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