台桌列表页面
This commit is contained in:
parent
c93cc46da1
commit
04720c2ef1
|
|
@ -0,0 +1,4 @@
|
||||||
|
description: This file stores settings for Dart & Flutter DevTools.
|
||||||
|
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
|
||||||
|
extensions:
|
||||||
|
- provider: true
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import 'package:cashier_reserve/common/push/push.dart';
|
import 'package:cashier_reserve/common/push/push.dart';
|
||||||
import 'package:cashier_reserve/datas/login/login_result.dart';
|
import 'package:cashier_reserve/data_model/login/login_result.dart';
|
||||||
import 'package:cashier_reserve/login/login_view.dart';
|
import 'package:cashier_reserve/login/login_view.dart';
|
||||||
|
|
||||||
import '../base/ui.dart';
|
import '../base/ui.dart';
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:cashier_reserve/common/manager/app_manager.dart';
|
import 'package:cashier_reserve/common/manager/app_manager.dart';
|
||||||
import 'package:cashier_reserve/common/manager/hive_manager.dart';
|
import 'package:cashier_reserve/common/manager/hive_manager.dart';
|
||||||
import 'package:cashier_reserve/common/print/print.dart';
|
import 'package:cashier_reserve/common/print/print.dart';
|
||||||
|
|
@ -10,22 +12,30 @@ const String kBaseUrl = 'https://admintestpapi.sxczgkj.cn';
|
||||||
const kSuccessCode = 200;
|
const kSuccessCode = 200;
|
||||||
const kNeedLoginCode = 401;
|
const kNeedLoginCode = 401;
|
||||||
|
|
||||||
class RequestManager {
|
const Map<String, dynamic> _emptyMap = {};
|
||||||
|
|
||||||
|
class RequestManager {
|
||||||
/// HttpClient
|
/// HttpClient
|
||||||
static final Dio _c = Dio(BaseOptions(
|
static final Dio _c = Dio(BaseOptions(
|
||||||
baseUrl: kBaseUrl,
|
baseUrl: kBaseUrl,
|
||||||
connectTimeout: const Duration(milliseconds: 5000),
|
connectTimeout: const Duration(milliseconds: 5000),
|
||||||
receiveTimeout: const Duration(milliseconds: 5000)
|
receiveTimeout: const Duration(milliseconds: 5000)));
|
||||||
));
|
|
||||||
|
|
||||||
/// GET
|
/// GET
|
||||||
static Future<dynamic> get(String url, {bool catchError = true}) {
|
static Future<dynamic> get(String url,
|
||||||
|
{Map<String, dynamic> params = _emptyMap, bool catchError = true}) {
|
||||||
if (url.contains("?")) {
|
if (url.contains("?")) {
|
||||||
url += "&shopId=${HiveManager.getShopId()}";
|
url += "&shopId=${HiveManager.getShopId()}";
|
||||||
} else {
|
} else {
|
||||||
url += "?shopId=${HiveManager.getShopId()}";
|
url += "?shopId=${HiveManager.getShopId()}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理传入的其他参数
|
||||||
|
if (params.isNotEmpty) {
|
||||||
|
String paramString = Uri(queryParameters: params).query;
|
||||||
|
url += "&$paramString";
|
||||||
|
}
|
||||||
|
|
||||||
return _doRequest("GET", url, catchError: catchError);
|
return _doRequest("GET", url, catchError: catchError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,11 +73,11 @@ class RequestManager {
|
||||||
try {
|
try {
|
||||||
final resp = await _c.request(url,
|
final resp = await _c.request(url,
|
||||||
data: body,
|
data: body,
|
||||||
options: Options(
|
options: Options(method: method, headers: {
|
||||||
method: method,
|
"authorization": "Bearer ${AppManager.getUserToken()}"
|
||||||
headers: {"authorization": "Bearer ${AppManager.getUserToken()}"}
|
}));
|
||||||
));
|
|
||||||
yjPrint("[RequestManager resp]: $method 【$url】body === $resp");
|
yjPrint("[RequestManager resp]: $method 【$url】body === $resp");
|
||||||
|
|
||||||
if (catchError) {
|
if (catchError) {
|
||||||
if (resp.statusCode == kNeedLoginCode) {
|
if (resp.statusCode == kNeedLoginCode) {
|
||||||
AppManager.gotoLogin();
|
AppManager.gotoLogin();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,547 @@
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
/// amount : 0.00
|
||||||
|
/// areaId : 20
|
||||||
|
/// autoClear : 0
|
||||||
|
/// bookingInfo : {"arrivedTime":null,"bookingDate":"2024-11-22","bookingPerson":"王","bookingTableNum":0,"bookingTime":"2024-11-22 18:30:00","bookingType":"dinner","createTime":"2024-11-22 16:16:17","createUserName":"双屿pirse(测77)","delFlag":0,"dinerNum":6,"diningStandardPrice":0.00,"diningStandardUnit":"table","diningType":"普通用餐","focus":1,"gender":1,"id":1,"orderNo":"BK241122161617-cwba","phoneNumber":"13011223344","receiveMarketingSms":1,"remark":"今个高兴,和哥几个一醉方休","shopId":11,"shopTableId":151,"status":20,"timeoutMinute":60,"updateTime":"2024-11-22 16:27:47"}
|
||||||
|
/// createdAt : 1726283309239
|
||||||
|
/// endTime : "2024-11-06 18:03:33"
|
||||||
|
/// id : 151
|
||||||
|
/// isPredate : 1
|
||||||
|
/// maxCapacity : 4
|
||||||
|
/// name : "A1"
|
||||||
|
/// perhour : null
|
||||||
|
/// predateAmount : 0.00
|
||||||
|
/// productNum : 6
|
||||||
|
/// qrcode : "3000101848"
|
||||||
|
/// realAmount : 33.70
|
||||||
|
/// shopId : 11
|
||||||
|
/// sort : 0
|
||||||
|
/// status : "using"
|
||||||
|
/// totalAmount : 33.70
|
||||||
|
/// type : 0
|
||||||
|
/// updatedAt : 1728720069117
|
||||||
|
/// useNum : 1
|
||||||
|
/// useTime : "2024-11-22 16:28:59"
|
||||||
|
/// view : null
|
||||||
|
|
||||||
|
TableModel tableModelFromJson(String str) =>
|
||||||
|
TableModel.fromJson(json.decode(str));
|
||||||
|
|
||||||
|
String tableModelToJson(TableModel data) => json.encode(data.toJson());
|
||||||
|
|
||||||
|
class TableModel {
|
||||||
|
TableModel({
|
||||||
|
num? amount,
|
||||||
|
num? areaId,
|
||||||
|
num? autoClear,
|
||||||
|
BookingInfo? bookingInfo,
|
||||||
|
num? createdAt,
|
||||||
|
String? endTime,
|
||||||
|
num? id,
|
||||||
|
num? isPredate,
|
||||||
|
num? maxCapacity,
|
||||||
|
String? name,
|
||||||
|
dynamic perhour,
|
||||||
|
num? predateAmount,
|
||||||
|
num? productNum,
|
||||||
|
String? qrcode,
|
||||||
|
num? realAmount,
|
||||||
|
num? shopId,
|
||||||
|
num? sort,
|
||||||
|
String? status,
|
||||||
|
num? totalAmount,
|
||||||
|
num? type,
|
||||||
|
num? updatedAt,
|
||||||
|
num? useNum,
|
||||||
|
String? useTime,
|
||||||
|
dynamic view,
|
||||||
|
}) {
|
||||||
|
_amount = amount;
|
||||||
|
_areaId = areaId;
|
||||||
|
_autoClear = autoClear;
|
||||||
|
_bookingInfo = bookingInfo;
|
||||||
|
_createdAt = createdAt;
|
||||||
|
_endTime = endTime;
|
||||||
|
_id = id;
|
||||||
|
_isPredate = isPredate;
|
||||||
|
_maxCapacity = maxCapacity;
|
||||||
|
_name = name;
|
||||||
|
_perhour = perhour;
|
||||||
|
_predateAmount = predateAmount;
|
||||||
|
_productNum = productNum;
|
||||||
|
_qrcode = qrcode;
|
||||||
|
_realAmount = realAmount;
|
||||||
|
_shopId = shopId;
|
||||||
|
_sort = sort;
|
||||||
|
_status = status;
|
||||||
|
_totalAmount = totalAmount;
|
||||||
|
_type = type;
|
||||||
|
_updatedAt = updatedAt;
|
||||||
|
_useNum = useNum;
|
||||||
|
_useTime = useTime;
|
||||||
|
_view = view;
|
||||||
|
}
|
||||||
|
|
||||||
|
TableModel.fromJson(dynamic json) {
|
||||||
|
_amount = json['amount'];
|
||||||
|
_areaId = json['areaId'];
|
||||||
|
_autoClear = json['autoClear'];
|
||||||
|
_bookingInfo = json['bookingInfo'] != null
|
||||||
|
? BookingInfo.fromJson(json['bookingInfo'])
|
||||||
|
: null;
|
||||||
|
_createdAt = json['createdAt'];
|
||||||
|
_endTime = json['endTime'];
|
||||||
|
_id = json['id'];
|
||||||
|
_isPredate = json['isPredate'];
|
||||||
|
_maxCapacity = json['maxCapacity'];
|
||||||
|
_name = json['name'];
|
||||||
|
_perhour = json['perhour'];
|
||||||
|
_predateAmount = json['predateAmount'];
|
||||||
|
_productNum = json['productNum'];
|
||||||
|
_qrcode = json['qrcode'];
|
||||||
|
_realAmount = json['realAmount'];
|
||||||
|
_shopId = json['shopId'];
|
||||||
|
_sort = json['sort'];
|
||||||
|
_status = json['status'];
|
||||||
|
_totalAmount = json['totalAmount'];
|
||||||
|
_type = json['type'];
|
||||||
|
_updatedAt = json['updatedAt'];
|
||||||
|
_useNum = json['useNum'];
|
||||||
|
_useTime = json['useTime'];
|
||||||
|
_view = json['view'];
|
||||||
|
}
|
||||||
|
|
||||||
|
num? _amount;
|
||||||
|
num? _areaId;
|
||||||
|
num? _autoClear;
|
||||||
|
BookingInfo? _bookingInfo;
|
||||||
|
num? _createdAt;
|
||||||
|
String? _endTime;
|
||||||
|
num? _id;
|
||||||
|
num? _isPredate;
|
||||||
|
num? _maxCapacity;
|
||||||
|
String? _name;
|
||||||
|
dynamic _perhour;
|
||||||
|
num? _predateAmount;
|
||||||
|
num? _productNum;
|
||||||
|
String? _qrcode;
|
||||||
|
num? _realAmount;
|
||||||
|
num? _shopId;
|
||||||
|
num? _sort;
|
||||||
|
String? _status;
|
||||||
|
num? _totalAmount;
|
||||||
|
num? _type;
|
||||||
|
num? _updatedAt;
|
||||||
|
num? _useNum;
|
||||||
|
String? _useTime;
|
||||||
|
dynamic _view;
|
||||||
|
|
||||||
|
TableModel copyWith({
|
||||||
|
num? amount,
|
||||||
|
num? areaId,
|
||||||
|
num? autoClear,
|
||||||
|
BookingInfo? bookingInfo,
|
||||||
|
num? createdAt,
|
||||||
|
String? endTime,
|
||||||
|
num? id,
|
||||||
|
num? isPredate,
|
||||||
|
num? maxCapacity,
|
||||||
|
String? name,
|
||||||
|
dynamic perhour,
|
||||||
|
num? predateAmount,
|
||||||
|
num? productNum,
|
||||||
|
String? qrcode,
|
||||||
|
num? realAmount,
|
||||||
|
num? shopId,
|
||||||
|
num? sort,
|
||||||
|
String? status,
|
||||||
|
num? totalAmount,
|
||||||
|
num? type,
|
||||||
|
num? updatedAt,
|
||||||
|
num? useNum,
|
||||||
|
String? useTime,
|
||||||
|
dynamic view,
|
||||||
|
}) =>
|
||||||
|
TableModel(
|
||||||
|
amount: amount ?? _amount,
|
||||||
|
areaId: areaId ?? _areaId,
|
||||||
|
autoClear: autoClear ?? _autoClear,
|
||||||
|
bookingInfo: bookingInfo ?? _bookingInfo,
|
||||||
|
createdAt: createdAt ?? _createdAt,
|
||||||
|
endTime: endTime ?? _endTime,
|
||||||
|
id: id ?? _id,
|
||||||
|
isPredate: isPredate ?? _isPredate,
|
||||||
|
maxCapacity: maxCapacity ?? _maxCapacity,
|
||||||
|
name: name ?? _name,
|
||||||
|
perhour: perhour ?? _perhour,
|
||||||
|
predateAmount: predateAmount ?? _predateAmount,
|
||||||
|
productNum: productNum ?? _productNum,
|
||||||
|
qrcode: qrcode ?? _qrcode,
|
||||||
|
realAmount: realAmount ?? _realAmount,
|
||||||
|
shopId: shopId ?? _shopId,
|
||||||
|
sort: sort ?? _sort,
|
||||||
|
status: status ?? _status,
|
||||||
|
totalAmount: totalAmount ?? _totalAmount,
|
||||||
|
type: type ?? _type,
|
||||||
|
updatedAt: updatedAt ?? _updatedAt,
|
||||||
|
useNum: useNum ?? _useNum,
|
||||||
|
useTime: useTime ?? _useTime,
|
||||||
|
view: view ?? _view,
|
||||||
|
);
|
||||||
|
|
||||||
|
num? get amount => _amount;
|
||||||
|
|
||||||
|
num? get areaId => _areaId;
|
||||||
|
|
||||||
|
num? get autoClear => _autoClear;
|
||||||
|
|
||||||
|
BookingInfo? get bookingInfo => _bookingInfo;
|
||||||
|
|
||||||
|
num? get createdAt => _createdAt;
|
||||||
|
|
||||||
|
String? get endTime => _endTime;
|
||||||
|
|
||||||
|
num? get id => _id;
|
||||||
|
|
||||||
|
num? get isPredate => _isPredate;
|
||||||
|
|
||||||
|
num? get maxCapacity => _maxCapacity;
|
||||||
|
|
||||||
|
String? get name => _name;
|
||||||
|
|
||||||
|
dynamic get perhour => _perhour;
|
||||||
|
|
||||||
|
num? get predateAmount => _predateAmount;
|
||||||
|
|
||||||
|
num? get productNum => _productNum;
|
||||||
|
|
||||||
|
String? get qrcode => _qrcode;
|
||||||
|
|
||||||
|
num? get realAmount => _realAmount;
|
||||||
|
|
||||||
|
num? get shopId => _shopId;
|
||||||
|
|
||||||
|
num? get sort => _sort;
|
||||||
|
|
||||||
|
String? get status => _status;
|
||||||
|
|
||||||
|
num? get totalAmount => _totalAmount;
|
||||||
|
|
||||||
|
num? get type => _type;
|
||||||
|
|
||||||
|
num? get updatedAt => _updatedAt;
|
||||||
|
|
||||||
|
num? get useNum => _useNum;
|
||||||
|
|
||||||
|
String? get useTime => _useTime;
|
||||||
|
|
||||||
|
dynamic get view => _view;
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final map = <String, dynamic>{};
|
||||||
|
map['amount'] = _amount;
|
||||||
|
map['areaId'] = _areaId;
|
||||||
|
map['autoClear'] = _autoClear;
|
||||||
|
if (_bookingInfo != null) {
|
||||||
|
map['bookingInfo'] = _bookingInfo?.toJson();
|
||||||
|
}
|
||||||
|
map['createdAt'] = _createdAt;
|
||||||
|
map['endTime'] = _endTime;
|
||||||
|
map['id'] = _id;
|
||||||
|
map['isPredate'] = _isPredate;
|
||||||
|
map['maxCapacity'] = _maxCapacity;
|
||||||
|
map['name'] = _name;
|
||||||
|
map['perhour'] = _perhour;
|
||||||
|
map['predateAmount'] = _predateAmount;
|
||||||
|
map['productNum'] = _productNum;
|
||||||
|
map['qrcode'] = _qrcode;
|
||||||
|
map['realAmount'] = _realAmount;
|
||||||
|
map['shopId'] = _shopId;
|
||||||
|
map['sort'] = _sort;
|
||||||
|
map['status'] = _status;
|
||||||
|
map['totalAmount'] = _totalAmount;
|
||||||
|
map['type'] = _type;
|
||||||
|
map['updatedAt'] = _updatedAt;
|
||||||
|
map['useNum'] = _useNum;
|
||||||
|
map['useTime'] = _useTime;
|
||||||
|
map['view'] = _view;
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// arrivedTime : null
|
||||||
|
/// bookingDate : "2024-11-22"
|
||||||
|
/// bookingPerson : "王"
|
||||||
|
/// bookingTableNum : 0
|
||||||
|
/// bookingTime : "2024-11-22 18:30:00"
|
||||||
|
/// bookingType : "dinner"
|
||||||
|
/// createTime : "2024-11-22 16:16:17"
|
||||||
|
/// createUserName : "双屿pirse(测77)"
|
||||||
|
/// delFlag : 0
|
||||||
|
/// dinerNum : 6
|
||||||
|
/// diningStandardPrice : 0.00
|
||||||
|
/// diningStandardUnit : "table"
|
||||||
|
/// diningType : "普通用餐"
|
||||||
|
/// focus : 1
|
||||||
|
/// gender : 1
|
||||||
|
/// id : 1
|
||||||
|
/// orderNo : "BK241122161617-cwba"
|
||||||
|
/// phoneNumber : "13011223344"
|
||||||
|
/// receiveMarketingSms : 1
|
||||||
|
/// remark : "今个高兴,和哥几个一醉方休"
|
||||||
|
/// shopId : 11
|
||||||
|
/// shopTableId : 151
|
||||||
|
/// status : 20
|
||||||
|
/// timeoutMinute : 60
|
||||||
|
/// updateTime : "2024-11-22 16:27:47"
|
||||||
|
|
||||||
|
BookingInfo bookingInfoFromJson(String str) =>
|
||||||
|
BookingInfo.fromJson(json.decode(str));
|
||||||
|
|
||||||
|
String bookingInfoToJson(BookingInfo data) => json.encode(data.toJson());
|
||||||
|
|
||||||
|
class BookingInfo {
|
||||||
|
BookingInfo({
|
||||||
|
dynamic arrivedTime,
|
||||||
|
String? bookingDate,
|
||||||
|
String? bookingPerson,
|
||||||
|
num? bookingTableNum,
|
||||||
|
String? bookingTime,
|
||||||
|
String? bookingType,
|
||||||
|
String? createTime,
|
||||||
|
String? createUserName,
|
||||||
|
num? delFlag,
|
||||||
|
num? dinerNum,
|
||||||
|
num? diningStandardPrice,
|
||||||
|
String? diningStandardUnit,
|
||||||
|
String? diningType,
|
||||||
|
num? focus,
|
||||||
|
num? gender,
|
||||||
|
num? id,
|
||||||
|
String? orderNo,
|
||||||
|
String? phoneNumber,
|
||||||
|
num? receiveMarketingSms,
|
||||||
|
String? remark,
|
||||||
|
num? shopId,
|
||||||
|
num? shopTableId,
|
||||||
|
num? status,
|
||||||
|
num? timeoutMinute,
|
||||||
|
String? updateTime,
|
||||||
|
}) {
|
||||||
|
_arrivedTime = arrivedTime;
|
||||||
|
_bookingDate = bookingDate;
|
||||||
|
_bookingPerson = bookingPerson;
|
||||||
|
_bookingTableNum = bookingTableNum;
|
||||||
|
_bookingTime = bookingTime;
|
||||||
|
_bookingType = bookingType;
|
||||||
|
_createTime = createTime;
|
||||||
|
_createUserName = createUserName;
|
||||||
|
_delFlag = delFlag;
|
||||||
|
_dinerNum = dinerNum;
|
||||||
|
_diningStandardPrice = diningStandardPrice;
|
||||||
|
_diningStandardUnit = diningStandardUnit;
|
||||||
|
_diningType = diningType;
|
||||||
|
_focus = focus;
|
||||||
|
_gender = gender;
|
||||||
|
_id = id;
|
||||||
|
_orderNo = orderNo;
|
||||||
|
_phoneNumber = phoneNumber;
|
||||||
|
_receiveMarketingSms = receiveMarketingSms;
|
||||||
|
_remark = remark;
|
||||||
|
_shopId = shopId;
|
||||||
|
_shopTableId = shopTableId;
|
||||||
|
_status = status;
|
||||||
|
_timeoutMinute = timeoutMinute;
|
||||||
|
_updateTime = updateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
BookingInfo.fromJson(dynamic json) {
|
||||||
|
_arrivedTime = json['arrivedTime'];
|
||||||
|
_bookingDate = json['bookingDate'];
|
||||||
|
_bookingPerson = json['bookingPerson'];
|
||||||
|
_bookingTableNum = json['bookingTableNum'];
|
||||||
|
_bookingTime = json['bookingTime'];
|
||||||
|
_bookingType = json['bookingType'];
|
||||||
|
_createTime = json['createTime'];
|
||||||
|
_createUserName = json['createUserName'];
|
||||||
|
_delFlag = json['delFlag'];
|
||||||
|
_dinerNum = json['dinerNum'];
|
||||||
|
_diningStandardPrice = json['diningStandardPrice'];
|
||||||
|
_diningStandardUnit = json['diningStandardUnit'];
|
||||||
|
_diningType = json['diningType'];
|
||||||
|
_focus = json['focus'];
|
||||||
|
_gender = json['gender'];
|
||||||
|
_id = json['id'];
|
||||||
|
_orderNo = json['orderNo'];
|
||||||
|
_phoneNumber = json['phoneNumber'];
|
||||||
|
_receiveMarketingSms = json['receiveMarketingSms'];
|
||||||
|
_remark = json['remark'];
|
||||||
|
_shopId = json['shopId'];
|
||||||
|
_shopTableId = json['shopTableId'];
|
||||||
|
_status = json['status'];
|
||||||
|
_timeoutMinute = json['timeoutMinute'];
|
||||||
|
_updateTime = json['updateTime'];
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamic _arrivedTime;
|
||||||
|
String? _bookingDate;
|
||||||
|
String? _bookingPerson;
|
||||||
|
num? _bookingTableNum;
|
||||||
|
String? _bookingTime;
|
||||||
|
String? _bookingType;
|
||||||
|
String? _createTime;
|
||||||
|
String? _createUserName;
|
||||||
|
num? _delFlag;
|
||||||
|
num? _dinerNum;
|
||||||
|
num? _diningStandardPrice;
|
||||||
|
String? _diningStandardUnit;
|
||||||
|
String? _diningType;
|
||||||
|
num? _focus;
|
||||||
|
num? _gender;
|
||||||
|
num? _id;
|
||||||
|
String? _orderNo;
|
||||||
|
String? _phoneNumber;
|
||||||
|
num? _receiveMarketingSms;
|
||||||
|
String? _remark;
|
||||||
|
num? _shopId;
|
||||||
|
num? _shopTableId;
|
||||||
|
num? _status;
|
||||||
|
num? _timeoutMinute;
|
||||||
|
String? _updateTime;
|
||||||
|
|
||||||
|
BookingInfo copyWith({
|
||||||
|
dynamic arrivedTime,
|
||||||
|
String? bookingDate,
|
||||||
|
String? bookingPerson,
|
||||||
|
num? bookingTableNum,
|
||||||
|
String? bookingTime,
|
||||||
|
String? bookingType,
|
||||||
|
String? createTime,
|
||||||
|
String? createUserName,
|
||||||
|
num? delFlag,
|
||||||
|
num? dinerNum,
|
||||||
|
num? diningStandardPrice,
|
||||||
|
String? diningStandardUnit,
|
||||||
|
String? diningType,
|
||||||
|
num? focus,
|
||||||
|
num? gender,
|
||||||
|
num? id,
|
||||||
|
String? orderNo,
|
||||||
|
String? phoneNumber,
|
||||||
|
num? receiveMarketingSms,
|
||||||
|
String? remark,
|
||||||
|
num? shopId,
|
||||||
|
num? shopTableId,
|
||||||
|
num? status,
|
||||||
|
num? timeoutMinute,
|
||||||
|
String? updateTime,
|
||||||
|
}) =>
|
||||||
|
BookingInfo(
|
||||||
|
arrivedTime: arrivedTime ?? _arrivedTime,
|
||||||
|
bookingDate: bookingDate ?? _bookingDate,
|
||||||
|
bookingPerson: bookingPerson ?? _bookingPerson,
|
||||||
|
bookingTableNum: bookingTableNum ?? _bookingTableNum,
|
||||||
|
bookingTime: bookingTime ?? _bookingTime,
|
||||||
|
bookingType: bookingType ?? _bookingType,
|
||||||
|
createTime: createTime ?? _createTime,
|
||||||
|
createUserName: createUserName ?? _createUserName,
|
||||||
|
delFlag: delFlag ?? _delFlag,
|
||||||
|
dinerNum: dinerNum ?? _dinerNum,
|
||||||
|
diningStandardPrice: diningStandardPrice ?? _diningStandardPrice,
|
||||||
|
diningStandardUnit: diningStandardUnit ?? _diningStandardUnit,
|
||||||
|
diningType: diningType ?? _diningType,
|
||||||
|
focus: focus ?? _focus,
|
||||||
|
gender: gender ?? _gender,
|
||||||
|
id: id ?? _id,
|
||||||
|
orderNo: orderNo ?? _orderNo,
|
||||||
|
phoneNumber: phoneNumber ?? _phoneNumber,
|
||||||
|
receiveMarketingSms: receiveMarketingSms ?? _receiveMarketingSms,
|
||||||
|
remark: remark ?? _remark,
|
||||||
|
shopId: shopId ?? _shopId,
|
||||||
|
shopTableId: shopTableId ?? _shopTableId,
|
||||||
|
status: status ?? _status,
|
||||||
|
timeoutMinute: timeoutMinute ?? _timeoutMinute,
|
||||||
|
updateTime: updateTime ?? _updateTime,
|
||||||
|
);
|
||||||
|
|
||||||
|
dynamic get arrivedTime => _arrivedTime;
|
||||||
|
|
||||||
|
String? get bookingDate => _bookingDate;
|
||||||
|
|
||||||
|
String? get bookingPerson => _bookingPerson;
|
||||||
|
|
||||||
|
num? get bookingTableNum => _bookingTableNum;
|
||||||
|
|
||||||
|
String? get bookingTime => _bookingTime;
|
||||||
|
|
||||||
|
String? get bookingType => _bookingType;
|
||||||
|
|
||||||
|
String? get createTime => _createTime;
|
||||||
|
|
||||||
|
String? get createUserName => _createUserName;
|
||||||
|
|
||||||
|
num? get delFlag => _delFlag;
|
||||||
|
|
||||||
|
num? get dinerNum => _dinerNum;
|
||||||
|
|
||||||
|
num? get diningStandardPrice => _diningStandardPrice;
|
||||||
|
|
||||||
|
String? get diningStandardUnit => _diningStandardUnit;
|
||||||
|
|
||||||
|
String? get diningType => _diningType;
|
||||||
|
|
||||||
|
num? get focus => _focus;
|
||||||
|
|
||||||
|
num? get gender => _gender;
|
||||||
|
|
||||||
|
num? get id => _id;
|
||||||
|
|
||||||
|
String? get orderNo => _orderNo;
|
||||||
|
|
||||||
|
String? get phoneNumber => _phoneNumber;
|
||||||
|
|
||||||
|
num? get receiveMarketingSms => _receiveMarketingSms;
|
||||||
|
|
||||||
|
String? get remark => _remark;
|
||||||
|
|
||||||
|
num? get shopId => _shopId;
|
||||||
|
|
||||||
|
num? get shopTableId => _shopTableId;
|
||||||
|
|
||||||
|
num? get status => _status;
|
||||||
|
|
||||||
|
num? get timeoutMinute => _timeoutMinute;
|
||||||
|
|
||||||
|
String? get updateTime => _updateTime;
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final map = <String, dynamic>{};
|
||||||
|
map['arrivedTime'] = _arrivedTime;
|
||||||
|
map['bookingDate'] = _bookingDate;
|
||||||
|
map['bookingPerson'] = _bookingPerson;
|
||||||
|
map['bookingTableNum'] = _bookingTableNum;
|
||||||
|
map['bookingTime'] = _bookingTime;
|
||||||
|
map['bookingType'] = _bookingType;
|
||||||
|
map['createTime'] = _createTime;
|
||||||
|
map['createUserName'] = _createUserName;
|
||||||
|
map['delFlag'] = _delFlag;
|
||||||
|
map['dinerNum'] = _dinerNum;
|
||||||
|
map['diningStandardPrice'] = _diningStandardPrice;
|
||||||
|
map['diningStandardUnit'] = _diningStandardUnit;
|
||||||
|
map['diningType'] = _diningType;
|
||||||
|
map['focus'] = _focus;
|
||||||
|
map['gender'] = _gender;
|
||||||
|
map['id'] = _id;
|
||||||
|
map['orderNo'] = _orderNo;
|
||||||
|
map['phoneNumber'] = _phoneNumber;
|
||||||
|
map['receiveMarketingSms'] = _receiveMarketingSms;
|
||||||
|
map['remark'] = _remark;
|
||||||
|
map['shopId'] = _shopId;
|
||||||
|
map['shopTableId'] = _shopTableId;
|
||||||
|
map['status'] = _status;
|
||||||
|
map['timeoutMinute'] = _timeoutMinute;
|
||||||
|
map['updateTime'] = _updateTime;
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
import 'package:cashier_reserve/common/base/ui.dart';
|
import 'package:cashier_reserve/common/base/ui.dart';
|
||||||
import 'package:cashier_reserve/common/print/print.dart';
|
import 'package:cashier_reserve/common/print/print.dart';
|
||||||
|
import 'package:cashier_reserve/data_model/reserve/table_area_model.dart';
|
||||||
import 'package:cashier_reserve/home/reserve_view_model.dart';
|
import 'package:cashier_reserve/home/reserve_view_model.dart';
|
||||||
|
|
||||||
|
import 'reserve_right_table_list.dart';
|
||||||
|
|
||||||
class ReserveRightContentView extends StatelessWidget {
|
class ReserveRightContentView extends StatelessWidget {
|
||||||
final ReserveViewModel provider;
|
final ReserveViewModel provider;
|
||||||
final TabController? tabController;
|
final TabController? tabController;
|
||||||
|
|
@ -18,6 +21,7 @@ class ReserveRightContentView extends StatelessWidget {
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
_buildTabBar(context),
|
_buildTabBar(context),
|
||||||
|
_buildTableListWidget(context),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
@ -40,8 +44,54 @@ class ReserveRightContentView extends StatelessWidget {
|
||||||
indicatorWeight: 2,
|
indicatorWeight: 2,
|
||||||
labelPadding: const EdgeInsets.only(left: 10, right: 10),
|
labelPadding: const EdgeInsets.only(left: 10, right: 10),
|
||||||
onTap: (index) {
|
onTap: (index) {
|
||||||
yjPrint("tab index: $index");
|
provider.pageController.jumpToPage(index);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildTableListWidget(BuildContext context) {
|
||||||
|
if ((provider.tableAreaList?.length ?? 0) == 0) {
|
||||||
|
return Container();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Expanded(
|
||||||
|
child: Container(
|
||||||
|
padding: const EdgeInsets.only(left: 15, right: 15),
|
||||||
|
color: const Color(0xFFF5F5F5),
|
||||||
|
child: PageView(
|
||||||
|
controller: provider.pageController,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
children: _buildTableList(context),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Widget> _buildTableList(BuildContext context) {
|
||||||
|
List<Widget> list = [];
|
||||||
|
|
||||||
|
for (int i = 0; i < provider.tableAreaList!.length; i++) {
|
||||||
|
List<TableAreaModel?> areas = [];
|
||||||
|
if (i == 0) {
|
||||||
|
/// 排除第一个全部
|
||||||
|
areas.addAll(provider.tableAreaList!.sublist(1));
|
||||||
|
} else {
|
||||||
|
areas.add(provider.tableAreaList![i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
list.add(
|
||||||
|
ReserveRightTableList(
|
||||||
|
areas: areas,
|
||||||
|
getAreaTableListFunc: (areaId) {
|
||||||
|
return provider.tableMap[areaId] ?? [];
|
||||||
|
},
|
||||||
|
tableClickFunc: (table) {
|
||||||
|
yjPrint("table: ${table.name}");
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,162 @@
|
||||||
|
import 'package:cashier_reserve/common/base/ui.dart';
|
||||||
|
import 'package:cashier_reserve/common/print/print.dart';
|
||||||
|
import 'package:cashier_reserve/data_model/reserve/table_area_model.dart';
|
||||||
|
import 'package:cashier_reserve/data_model/reserve/table_model.dart';
|
||||||
|
|
||||||
|
typedef GetAreaTableListFunc = List<TableModel?> Function(String areaId);
|
||||||
|
typedef TableClickFunc = void Function(TableModel table);
|
||||||
|
|
||||||
|
class ReserveRightTableList extends StatelessWidget {
|
||||||
|
final List<TableAreaModel?> areas;
|
||||||
|
final GetAreaTableListFunc getAreaTableListFunc;
|
||||||
|
final TableClickFunc? tableClickFunc;
|
||||||
|
|
||||||
|
const ReserveRightTableList({
|
||||||
|
super.key,
|
||||||
|
required this.areas,
|
||||||
|
required this.getAreaTableListFunc,
|
||||||
|
this.tableClickFunc,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return ListView.builder(
|
||||||
|
itemBuilder: _buildTableAreaItem, itemCount: areas.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildTableAreaItem(BuildContext context, int index) {
|
||||||
|
TableAreaModel? area = areas[index];
|
||||||
|
List<TableModel?> tables = getAreaTableListFunc(area?.id.toString() ?? "");
|
||||||
|
return Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
_buildTableAreaTitle(context, area, tables),
|
||||||
|
const SizedBox(height: 5),
|
||||||
|
_buildTableList(context, tables),
|
||||||
|
const SizedBox(height: 10),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildTableAreaTitle(
|
||||||
|
BuildContext context, TableAreaModel? area, List<TableModel?> tables) {
|
||||||
|
return Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: 2,
|
||||||
|
height: 15,
|
||||||
|
color: Colors.blue,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 10),
|
||||||
|
Text(
|
||||||
|
"${area?.name ?? ""}(${tables.length})",
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 15,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildTableList(BuildContext context, List<TableModel?> tables) {
|
||||||
|
return Wrap(
|
||||||
|
children: tables.map((e) => _buildTableItem(context, e)).toList(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildTableItem(BuildContext context, TableModel? table) {
|
||||||
|
bool isBooking = table?.bookingInfo != null;
|
||||||
|
|
||||||
|
const itemNormalTextStyle = TextStyle(
|
||||||
|
color: Color(0xff333333),
|
||||||
|
fontSize: 12,
|
||||||
|
);
|
||||||
|
return GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
if (tableClickFunc != null) {
|
||||||
|
tableClickFunc!(table!);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
width: 103,
|
||||||
|
height: 129,
|
||||||
|
margin: const EdgeInsets.fromLTRB(0, 0, 10, 0),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: isBooking ? const Color(0xffFFF4DF) : Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(5),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
padding: const EdgeInsets.all(10),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
table?.name ?? "",
|
||||||
|
style: const TextStyle(
|
||||||
|
color: Color(0xff333333),
|
||||||
|
fontSize: 16,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 3),
|
||||||
|
if (!isBooking)
|
||||||
|
Text(
|
||||||
|
"${table?.maxCapacity ?? ""} 人",
|
||||||
|
style: itemNormalTextStyle,
|
||||||
|
),
|
||||||
|
if (isBooking)
|
||||||
|
Text(
|
||||||
|
"${(table?.bookingInfo?.createUserName?.length ?? 0) > 3 ? '${table?.bookingInfo?.createUserName?.substring(0, 3)}...' : table?.bookingInfo?.createUserName} 订",
|
||||||
|
style: itemNormalTextStyle,
|
||||||
|
maxLines: 1,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
if (isBooking) const SizedBox(height: 3),
|
||||||
|
if (isBooking)
|
||||||
|
Text(
|
||||||
|
"${table?.bookingInfo?.bookingPerson ?? ""}(${table?.bookingInfo?.gender == 1 ? '先生' : '女士'})",
|
||||||
|
style: itemNormalTextStyle,
|
||||||
|
),
|
||||||
|
if (isBooking) const SizedBox(height: 3),
|
||||||
|
if (isBooking)
|
||||||
|
Text(
|
||||||
|
"${table?.bookingInfo?.dinerNum ?? ""}人/(${table?.bookingInfo?.phoneNumber?.substring(7) ?? ""})",
|
||||||
|
style: itemNormalTextStyle,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(child: Container()),
|
||||||
|
if (isBooking)
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
decoration: const BoxDecoration(
|
||||||
|
color: Color(0xffF8AD13),
|
||||||
|
borderRadius: BorderRadius.only(
|
||||||
|
bottomLeft: Radius.circular(5),
|
||||||
|
bottomRight: Radius.circular(5),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: const Row(
|
||||||
|
children: [
|
||||||
|
SizedBox(width: 5),
|
||||||
|
Text(
|
||||||
|
"新",
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 11,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import 'package:cashier_reserve/common/base/ui.dart';
|
import 'package:cashier_reserve/common/base/ui.dart';
|
||||||
import 'package:cashier_reserve/common/base/ui_model.dart';
|
import 'package:cashier_reserve/common/base/ui_model.dart';
|
||||||
import 'package:cashier_reserve/common/print/print.dart';
|
|
||||||
import 'package:cashier_reserve/home/reserve_left_content_view.dart';
|
import 'package:cashier_reserve/home/reserve_left_content_view.dart';
|
||||||
import 'package:cashier_reserve/home/reserve_right_content_view.dart';
|
import 'package:cashier_reserve/home/reserve_right_content_view.dart';
|
||||||
import 'package:cashier_reserve/home/reserve_view_model.dart';
|
import 'package:cashier_reserve/home/reserve_view_model.dart';
|
||||||
|
|
@ -177,35 +176,44 @@ class ReserveView extends BaseUI with TickerProviderStateMixin {
|
||||||
BuildContext context, ReserveViewModel provider) {
|
BuildContext context, ReserveViewModel provider) {
|
||||||
return Row(
|
return Row(
|
||||||
children: [
|
children: [
|
||||||
_buildDateSelectItem(context,
|
_buildDateSelectItem(
|
||||||
day: provider.getOffsetDay(0),
|
context,
|
||||||
week: provider.getOffsetWeekday(0),
|
provider,
|
||||||
isToday: true),
|
),
|
||||||
_buildDateSelectItem(context,
|
_buildDateSelectItem(
|
||||||
day: provider.getOffsetDay(1), week: provider.getOffsetWeekday(1)),
|
context,
|
||||||
_buildDateSelectItem(context,
|
provider,
|
||||||
day: provider.getOffsetDay(2), week: provider.getOffsetWeekday(2)),
|
offset: 1,
|
||||||
|
),
|
||||||
|
_buildDateSelectItem(
|
||||||
|
context,
|
||||||
|
provider,
|
||||||
|
offset: 2,
|
||||||
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildDateSelectItem(
|
Widget _buildDateSelectItem(
|
||||||
BuildContext context, {
|
BuildContext context,
|
||||||
String day = "",
|
ReserveViewModel provider, {
|
||||||
String week = "",
|
int offset = 0,
|
||||||
isToday = false,
|
|
||||||
}) {
|
}) {
|
||||||
|
bool isSelect = provider.selectedDateIndex ~/ 2 == offset;
|
||||||
|
bool firstBtnSelect = provider.selectedDateIndex == (offset * 2);
|
||||||
|
bool secondBtnSelect = provider.selectedDateIndex == (offset * 2 + 1);
|
||||||
|
|
||||||
const double itemHeight = 45;
|
const double itemHeight = 45;
|
||||||
const double btnWidth = 60;
|
const double btnWidth = 60;
|
||||||
return Container(
|
return Container(
|
||||||
height: itemHeight,
|
height: itemHeight,
|
||||||
margin: const EdgeInsets.only(left: 15),
|
margin: const EdgeInsets.only(left: 15),
|
||||||
padding: const EdgeInsets.fromLTRB(10, 0, 6, 0),
|
padding: const EdgeInsets.fromLTRB(10, 0, 0, 0),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(5),
|
borderRadius: BorderRadius.circular(5),
|
||||||
border: Border.all(
|
border: Border.all(
|
||||||
color:
|
color:
|
||||||
isToday ? const Color(0xff318AFE) : const Color(0xffafafaf),
|
isSelect ? const Color(0xff318AFE) : const Color(0xffafafaf),
|
||||||
width: 1),
|
width: 1),
|
||||||
),
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
|
|
@ -214,18 +222,18 @@ class ReserveView extends BaseUI with TickerProviderStateMixin {
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
day,
|
provider.getOffsetDay(offset),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: isToday
|
color: isSelect
|
||||||
? const Color(0xff6A8DC6)
|
? const Color(0xff6A8DC6)
|
||||||
: const Color(0xff333333),
|
: const Color(0xff333333),
|
||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
week,
|
provider.getOffsetWeekday(offset),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: isToday
|
color: isSelect
|
||||||
? const Color(0xff6A8DC6)
|
? const Color(0xff6A8DC6)
|
||||||
: const Color(0xff333333),
|
: const Color(0xff333333),
|
||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
|
|
@ -240,13 +248,23 @@ class ReserveView extends BaseUI with TickerProviderStateMixin {
|
||||||
color: const Color(0xffafafaf),
|
color: const Color(0xffafafaf),
|
||||||
),
|
),
|
||||||
InkWell(
|
InkWell(
|
||||||
onTap: () {},
|
onTap: () {
|
||||||
child: const SizedBox(
|
provider.setSelectedDateIndex(offset * 2);
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color:
|
||||||
|
firstBtnSelect ? const Color(0xff318AFE) : Colors.white,
|
||||||
|
),
|
||||||
width: btnWidth,
|
width: btnWidth,
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Text(
|
child: Text(
|
||||||
"午餐",
|
"午餐",
|
||||||
style: TextStyle(fontSize: 16, color: Color(0xff333333)),
|
style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
color: firstBtnSelect
|
||||||
|
? Colors.white
|
||||||
|
: const Color(0xff333333)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -257,13 +275,23 @@ class ReserveView extends BaseUI with TickerProviderStateMixin {
|
||||||
color: const Color(0xffafafaf),
|
color: const Color(0xffafafaf),
|
||||||
),
|
),
|
||||||
InkWell(
|
InkWell(
|
||||||
onTap: () {},
|
onTap: () {
|
||||||
child: const SizedBox(
|
provider.setSelectedDateIndex(offset * 2 + 1);
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color:
|
||||||
|
secondBtnSelect ? const Color(0xff318AFE) : Colors.white,
|
||||||
|
),
|
||||||
width: btnWidth,
|
width: btnWidth,
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Text(
|
child: Text(
|
||||||
"晚餐",
|
"晚餐",
|
||||||
style: TextStyle(fontSize: 16, color: Color(0xff333333)),
|
style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
color: secondBtnSelect
|
||||||
|
? Colors.white
|
||||||
|
: const Color(0xff333333)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@ 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/call_log_model.dart';
|
||||||
import 'package:cashier_reserve/common/channel/channel_manager.dart';
|
import 'package:cashier_reserve/common/channel/channel_manager.dart';
|
||||||
import 'package:cashier_reserve/common/manager/event_manager.dart';
|
import 'package:cashier_reserve/common/manager/event_manager.dart';
|
||||||
import 'package:cashier_reserve/datas/reserve/table_area_model.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';
|
import 'package:cashier_reserve/model/reserve_model.dart';
|
||||||
|
|
||||||
class ReserveViewModel extends BaseUIModel {
|
class ReserveViewModel extends BaseUIModel {
|
||||||
|
|
@ -23,12 +24,26 @@ class ReserveViewModel extends BaseUIModel {
|
||||||
2: "后",
|
2: "后",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
PageController pageController = PageController();
|
||||||
|
|
||||||
|
DateTime now = DateTime.now();
|
||||||
|
|
||||||
|
int selectedDateIndex = 0;
|
||||||
|
String selectedDate = "";
|
||||||
|
String bookingType = "lunch";
|
||||||
|
|
||||||
List<TableAreaModel?>? _tableAreaList;
|
List<TableAreaModel?>? _tableAreaList;
|
||||||
List<TableAreaModel?>? get tableAreaList => _tableAreaList;
|
List<TableAreaModel?>? get tableAreaList => _tableAreaList;
|
||||||
|
|
||||||
|
List<TableModel?>? _tableList;
|
||||||
|
List<TableModel?>? get tableList => _tableList;
|
||||||
|
Map<String, List<TableModel?>> tableMap = {};
|
||||||
|
|
||||||
List<CallLogModel?>? callLogs = [];
|
List<CallLogModel?>? callLogs = [];
|
||||||
|
|
||||||
ReserveViewModel() {
|
ReserveViewModel() {
|
||||||
|
selectedDate = "${now.year}-${now.month}-${now.day}";
|
||||||
|
|
||||||
EventManager.addListener<GetCallLogEvent>(this, (event) {
|
EventManager.addListener<GetCallLogEvent>(this, (event) {
|
||||||
if (event.isSuccess) {
|
if (event.isSuccess) {
|
||||||
if (!event.isSuccess) {
|
if (!event.isSuccess) {
|
||||||
|
|
@ -41,6 +56,13 @@ class ReserveViewModel extends BaseUIModel {
|
||||||
|
|
||||||
loadCallLog();
|
loadCallLog();
|
||||||
loadTableAreaList();
|
loadTableAreaList();
|
||||||
|
loadAreaTableList(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
pageController.dispose();
|
||||||
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -52,22 +74,56 @@ class ReserveViewModel extends BaseUIModel {
|
||||||
final r = await ReserveModel.getShopTableAreaList();
|
final r = await ReserveModel.getShopTableAreaList();
|
||||||
|
|
||||||
_tableAreaList = r;
|
_tableAreaList = r;
|
||||||
|
|
||||||
|
_tableAreaList ??= [];
|
||||||
|
|
||||||
|
_tableAreaList!.insert(0, TableAreaModel(id: 0, name: "全部"));
|
||||||
|
|
||||||
notifyListeners();
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
String getCurrentDate() {
|
String getCurrentDate() {
|
||||||
DateTime now = DateTime.now();
|
|
||||||
return "${now.year}/${now.month}/${now.day}";
|
return "${now.year}/${now.month}/${now.day}";
|
||||||
}
|
}
|
||||||
|
|
||||||
String getOffsetDay(int offset) {
|
String getOffsetDay(int offset) {
|
||||||
DateTime now = DateTime.now();
|
|
||||||
DateTime offsetDay = now.add(Duration(days: offset));
|
DateTime offsetDay = now.add(Duration(days: offset));
|
||||||
return "${dayInfoMap[offset]}/${offsetDay.day}";
|
return "${dayInfoMap[offset]}/${offsetDay.day}";
|
||||||
}
|
}
|
||||||
|
|
||||||
String getOffsetWeekday(int offset) {
|
String getOffsetWeekday(int offset) {
|
||||||
DateTime now = DateTime.now();
|
|
||||||
DateTime offsetDay = now.add(Duration(days: offset));
|
DateTime offsetDay = now.add(Duration(days: offset));
|
||||||
return weekdayMap[offsetDay.weekday] ?? "";
|
return weekdayMap[offsetDay.weekday] ?? "";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import 'package:cashier_reserve/common/request/request_manager.dart';
|
import 'package:cashier_reserve/common/request/request_manager.dart';
|
||||||
import 'package:cashier_reserve/datas/login/login_result.dart';
|
import 'package:cashier_reserve/data_model/login/login_result.dart';
|
||||||
|
|
||||||
/// LoginModel 登录相关请求
|
/// LoginModel 登录相关请求
|
||||||
class LoginModel {
|
class LoginModel {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import 'package:cashier_reserve/common/request/request_manager.dart';
|
import 'package:cashier_reserve/common/request/request_manager.dart';
|
||||||
import 'package:cashier_reserve/datas/reserve/table_area_model.dart';
|
import 'package:cashier_reserve/data_model/reserve/table_area_model.dart';
|
||||||
|
import 'package:cashier_reserve/data_model/reserve/table_model.dart';
|
||||||
|
|
||||||
/// ReserveModel 台桌预定相关请求
|
/// ReserveModel 台桌预定相关请求
|
||||||
class ReserveModel {
|
class ReserveModel {
|
||||||
|
|
@ -15,4 +16,24 @@ class ReserveModel {
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// getAreaTableList 获取区域桌台列表
|
||||||
|
static Future<List<TableModel?>> getAreaTableList(num areaId, String date, String type) async {
|
||||||
|
Map<String, dynamic> paramData = {
|
||||||
|
"bookingDate": date,
|
||||||
|
"bookingType": type,
|
||||||
|
};
|
||||||
|
if (areaId > 0) {
|
||||||
|
paramData["areaId"] = areaId;
|
||||||
|
}
|
||||||
|
final r = await RequestManager.get("/api/booking/shop-table/list", params: paramData);
|
||||||
|
if (r == null) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
List<TableModel?> list = [];
|
||||||
|
for (var item in r as List) {
|
||||||
|
list.add(TableModel.fromJson(item));
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue