import 'package:cashier_reserve/common/base/ui.dart'; import 'package:cashier_reserve/common/base/ui_model.dart'; import 'package:cashier_reserve/common/channel/call_log_model.dart'; import 'package:cashier_reserve/common/channel/channel_manager.dart'; import 'package:cashier_reserve/common/manager/event_manager.dart'; import 'package:cashier_reserve/data_model/reserve/table_area_model.dart'; import 'package:cashier_reserve/data_model/reserve/table_model.dart'; import 'package:cashier_reserve/model/reserve_model.dart'; class ReserveViewModel extends BaseUIModel { Map weekdayMap = { 1: "星期一", 2: "星期二", 3: "星期三", 4: "星期四", 5: "星期五", 6: "星期六", 7: "星期日", }; Map dayInfoMap = { 0: "今", 1: "明", 2: "后", }; PageController pageController = PageController(); DateTime now = DateTime.now(); int selectedDateIndex = 0; String selectedDate = ""; String bookingType = "lunch"; List? _tableAreaList; List? get tableAreaList => _tableAreaList; List? _tableList; List? get tableList => _tableList; Map> tableMap = {}; List? callLogs = []; /// bookingGender 预订人性别 1: 男 2: 女 int bookingGender = 1; /// bookingNumController 就餐人数 TextEditingController bookingNumController = TextEditingController(); /// bookingPhoneController 联系电话 TextEditingController bookingPhoneController = TextEditingController(); /// bookingNameController 预订人姓名 TextEditingController bookingNameController = TextEditingController(); /// bookingTypeController 预订类型 TextEditingController bookingTypeController = TextEditingController(); /// bookingTableNumController 预订台桌数量 TextEditingController bookingTableNumController = TextEditingController(); /// bookingStandardController 预定餐标 TextEditingController bookingStandardController = TextEditingController(); /// bookingRemarkController 备注 TextEditingController bookingRemarkController = TextEditingController(); /// bookingSelectedTime 预订时间 String bookingSelectedTime = ""; /// bookingFocus 重点关注 bool bookingFocus = false; /// bookingSms 短信通知 bool bookingSms = false; /// bookingStandardType 餐标类型 String bookingStandardType = "table"; TableModel? selectedTable; ReserveViewModel() { selectedDate = "${now.year}-${now.month}-${now.day}"; EventManager.addListener(this, (event) { if (event.isSuccess) { if (!event.isSuccess) { return; } callLogs = event.callLogs; notifyListeners(); } }); loadCallLog(); loadTableAreaList(); loadAreaTableList(0); } @override void dispose() { pageController.dispose(); bookingNumController.dispose(); bookingPhoneController.dispose(); bookingNameController.dispose(); bookingTypeController.dispose(); bookingTableNumController.dispose(); bookingStandardController.dispose(); bookingRemarkController.dispose(); super.dispose(); } void loadCallLog() { ChannelManager.getCallLog("getCallLog"); } void loadTableAreaList() async { final r = await ReserveModel.getShopTableAreaList(); _tableAreaList = r; _tableAreaList ??= []; _tableAreaList!.insert(0, TableAreaModel(id: 0, name: "全部")); notifyListeners(); } void loadAreaTableList(int areaId) async { final r = await ReserveModel.getAreaTableList(areaId, selectedDate, bookingType); _tableList = r; _tableList ??= []; tableMap = {}; tableMap["0"] = _tableList!; for (var item in _tableList!) { String areaId = item!.areaId.toString(); if (tableMap[areaId] == null) { tableMap[areaId] = []; } tableMap[areaId]!.add(item); } notifyListeners(); } void setSelectedDateIndex(int index) { selectedDateIndex = index; DateTime offsetDay = now.add(Duration(days: index ~/ 2)); selectedDate = "${offsetDay.year}-${offsetDay.month}-${offsetDay.day}"; bookingType = index % 2 == 0 ? "lunch" : "dinner"; notifyListeners(); loadAreaTableList(0); } updateBookingTime(int hour, int minute) { bookingSelectedTime = "${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}"; notifyListeners(); } updateBookingGender(int gender) { if (bookingGender == gender) { return; } bookingGender = gender; notifyListeners(); } updateBookingAttr(String key, bool val) { if (key == "focus") { bookingFocus = val; } else if (key == "sms") { bookingSms = val; } notifyListeners(); } updateBookingStandard(String standard) { bookingStandardType = standard; notifyListeners(); } String getCurrentDate() { return "${now.year}/${now.month}/${now.day}"; } String getOffsetDay(int offset) { DateTime offsetDay = now.add(Duration(days: offset)); return "${dayInfoMap[offset]}/${offsetDay.day}"; } String getOffsetWeekday(int offset) { DateTime offsetDay = now.add(Duration(days: offset)); return weekdayMap[offsetDay.weekday] ?? ""; } }