Commit f38aebeeedfce37207611e4d797542344ee93e3b

Authored by gaiyaguang
1 parent 40e3c18c

桌位

import 'dart:convert';
import 'dart:ui';
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:one_key/models/notebook_detail.dart';
import 'package:one_key/models/reserve_info_model.dart';
import 'package:one_key/provider/notebook_detail_change_model.dart';
import 'package:one_key/provider/notebook_detail_model.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/widgets/app_bar.dart';
import 'package:one_key/widgets/common_button.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/new_table_item.dart';
import 'package:one_key/widgets/table_item.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import 'package:one_key/models/table_list.dart' as t;
import 'dart:convert' as convert;
typedef clickCallback = void Function(String value);
class EnterPage extends StatefulWidget {
final NotebookDetail detailEntity;
final String rid;
const EnterPage({Key key, this.detailEntity, this.rid})
: super(key: key);
@override
_EnterPageState createState() => _EnterPageState();
}
class _EnterPageState extends State<EnterPage> {
DateTime dateTime; //当前日期
NotebookDetailChangeModel _notebookDetailChangeModel;
FocusNode _phoneNode = FocusNode();
FocusNode _nameNode = FocusNode();
FocusNode _needNode = FocusNode();
NotebookDetailModel detailModel = NotebookDetailModel();
@override
void initState() {
super.initState();
dateTime = DateTime.now();
_notebookDetailChangeModel =
Provider.of<NotebookDetailChangeModel>(context, listen: false);
_notebookDetailChangeModel.initDateHourMinuteList(context);
String ddate = widget.detailEntity.ddate.toString() + '000';
_notebookDetailChangeModel.getNewTableList(
context,
ddate,
widget.detailEntity.ddate_solt,
widget.detailEntity.pnum,
widget.detailEntity.tables);
_initData();
}
_initData() {
print(widget.detailEntity);
for (var item in widget.detailEntity.tables) {
item.selected = true;
}
}
_topWidget() {
return Container(
padding: EdgeInsets.all(ScreenUtil().setWidth(40)),
child: Column(
children: [
//第一行 日期选择
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: _notebookDetailChangeModel.dateList.map((value) {
return CustomButton(
dateText: value['title'],
fontSize: value['fontSize'],
dayText: value['dayText'],
isImage: value['isImage'],
isSelect: value['select'],
onTap: () async {
print(value['title']);
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
if (value['title'] == '其他') {
_calendWidget(DateTime.now());
} else {
for (int j = 0;
j < _notebookDetailChangeModel.dateList.length;
j++) {
_notebookDetailChangeModel.dateList[j]['select'] =
false;
if (_notebookDetailChangeModel.dateList[j]['title'] ==
value['title']) {
_notebookDetailChangeModel.dateList[j]['select'] =
true;
if (j == 0 || j == 1) {
_notebookDetailChangeModel.dateList[2]['title'] =
'其他';
}
if (j ==
_notebookDetailChangeModel.dateList.length - 1) {
String selectStr =
_notebookDetailChangeModel.dateList[2]['title'];
String timeNow = DateUtil.formatDate(
DateTime.now(),
);
String selectDate =
timeNow.replaceRange(5, 10, selectStr);
_calendWidget(DateUtil.getDateTime(selectDate));
}
}
}
//选完今天明天刷新页面
int ddate = _getDdate(_notebookDetailChangeModel);
String ddateSolt =
_getDdateSolt(_notebookDetailChangeModel);
String pnum = _getPnum(_notebookDetailChangeModel);
List<t.TableList> list =
await _notebookDetailChangeModel.getNewTableList(
context,
'${ddate}',
ddateSolt,
pnum,
_notebookDetailChangeModel.tableList);
if (list.length == 0) {
_notebookDetailChangeModel.isRecommend = true;
}
}
_notebookDetailChangeModel.notifyListeners();
},
);
}).toList()),
VEmptyView(60),
//早市、午市、晚市
Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: _notebookDetailChangeModel.sunDateList.map((value) {
return Container(
margin: _notebookDetailChangeModel.sunDateList.length == 3 &&
value['ddateSolt'] == 3
? EdgeInsets.only(right: 0)
: EdgeInsets.only(right: ScreenUtil().setWidth(20)),
child: CustomButton(
onTap: () {
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
for (var item in _notebookDetailChangeModel.sunDateList) {
item['isSelect'] = false;
if (item['dateText'] == value['dateText']) {
item['isSelect'] = true;
String key = '';
if (item['ddateSolt'] == 1) {
//早市
key = 'morning';
} else if (item['ddateSolt'] == 2) {
//午市
key = 'noon';
} else if (item['ddateSolt'] == 3) {
//晚市
key = 'night';
}
if (key != '') {
for (var sunitem
in _notebookDetailChangeModel.dailyMap[key]) {
if (sunitem['select'] == true) {
_notebookDetailChangeModel.ddateStr =
sunitem['title'];
}
}
}
_notebookDetailChangeModel.notifyListeners();
}
}
int ddate = _getDdate(_notebookDetailChangeModel);
String pnum = _getPnum(_notebookDetailChangeModel);
String ddateSolt = _getDdateSolt(_notebookDetailChangeModel);
_notebookDetailChangeModel.getNewTableList(
context,
'${ddate}',
'${ddateSolt}',
pnum,
_notebookDetailChangeModel.tableList);
},
dateText: value['dateText'],
dayText: '',
isSelect: value['isSelect'],
),
);
}).toList()),
VEmptyView(60),
///人数选择
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: _notebookDetailChangeModel.personNumList.map((value) {
return CustomButton(
onTap: () {
for (int j = 0;
j < _notebookDetailChangeModel.personNumList.length;
j++) {
_notebookDetailChangeModel.personNumList[j]['isSelect'] =
false;
if (_notebookDetailChangeModel.personNumList[j]
['dateText'] ==
value['dateText']) {
_notebookDetailChangeModel.personNumList[j]['isSelect'] =
true;
if (j < 5) {
_notebookDetailChangeModel.numController.text =
value['dateText'];
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
}
// if (j < 5) {
// _notebookDetailChangeModel.personNumList[5]
// ['dateText'] = '更多';
// }
}
}
_notebookDetailChangeModel.notifyListeners();
//人数选择页面刷新
String pnum = _getPnum(_notebookDetailChangeModel);
int ddate = _getDdate(_notebookDetailChangeModel);
String ddateSolt = _getDdateSolt(_notebookDetailChangeModel);
_notebookDetailChangeModel.getNewTableList(
context,
'${ddate}',
ddateSolt,
pnum,
_notebookDetailChangeModel.tableList);
},
dateText: value['dateText'],
fontSize: value['fontSize'],
dayText: '',
width: value['width'],
isImage: value['isImage'],
isSelect: value['isSelect'],
isTextFiled: value['isTextFiled'],
model: _notebookDetailChangeModel,
);
}).toList(),
)
],
),
);
}
_calendWidget(DateTime dateTime) {
DialogUtil.showCalendarDialog(context, dateTime).then((day) {
if (day != null) {
// _createDateText(day);
dateTime = day;
int dateTimeMill = day.millisecondsSinceEpoch;
String dateText = DateUtil.formatDateMs(dateTimeMill, format: 'MM-dd');
bool isThird = true;
for (int i = 0; i < _notebookDetailChangeModel.dateList.length; i++) {
_notebookDetailChangeModel.dateList[i]['select'] = false;
if (_notebookDetailChangeModel.dateList[i]['title'] == dateText) {
_notebookDetailChangeModel.dateList[i]['select'] = true;
isThird = false;
}
}
if (isThird) {
_notebookDetailChangeModel.dateList[2]['select'] = true;
_notebookDetailChangeModel.dateList[2]['title'] = dateText;
} else {
_notebookDetailChangeModel.dateList[2]['title'] = '其他';
}
// 选完日历刷新页面
String ddateSolt = _getDdateSolt(_notebookDetailChangeModel);
String pnum = _getPnum(_notebookDetailChangeModel);
_notebookDetailChangeModel.getNewTableList(
context,
'${dateTimeMill}',
ddateSolt,
_getPnum(_notebookDetailChangeModel),
_notebookDetailChangeModel.tableList);
}
_notebookDetailChangeModel.notifyListeners();
});
}
/// 可订桌位
_middleWidget() {
List canBookTable = [];
if (_notebookDetailChangeModel.isRecommend) {
canBookTable = _notebookDetailChangeModel.recommendList;
} else {
canBookTable = _notebookDetailChangeModel.tableList;
}
return Container(
padding: EdgeInsets.all(ScreenUtil().setWidth(40)),
color: MyColours.color_f5f5f5,
child: Column(
children: [
InkWell(
onTap: () async {
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
//当前选中 月 日string
String mdStr = '';
//今天 明天 其他天
for (var item in _notebookDetailChangeModel.dateList) {
if (item['select'] == true) {
mdStr = item['title'];
}
}
String timeNowYear =
DateUtil.formatDate(DateTime.now(), format: 'yyyy');
String ymyStr = timeNowYear + '-' + mdStr; //年月日
String timeStr = ymyStr + ' ' + "00:00:00";
int ddate = DateUtil.getDateMsByTimeStr(timeStr); //筛选日期时间戳
String ddateSolt = '';
for (var item in _notebookDetailChangeModel.sunDateList) {
if (item['isSelect']) {
ddateSolt = '${item['ddateSolt']}';
}
}
// String tempDdate = ymyStr + ' ' + ddateStr + ':00';
// int ddate = DateUtil.getDateMsByTimeStr(timeStr);
Map temp = await NavigatorUtil.goSelectTablePage(
context, widget.rid, ddate, ddateSolt,
canChoose: true,
object: {'object': _notebookDetailChangeModel.tableList});
// if (temp['tid'] != null) {
// setReserveStatus("5", tid: temp['tid']);
// }
if (temp == null || temp['object'].length == 0) {
if (_notebookDetailChangeModel.tableList.length == 0) {
_notebookDetailChangeModel.isRecommend = true;
_notebookDetailChangeModel.tableList = [];
for (t.TableList item
in _notebookDetailChangeModel.recommendList) {
item.selected = false;
}
setState(() {});
}
} else {
_notebookDetailChangeModel.isRecommend = false;
_notebookDetailChangeModel.tableList = temp['object'];
// if (_notebookDetailChangeModel.tableList.length == 0) {
// isRecommend = true;
// }
for (t.TableList item
in _notebookDetailChangeModel.tableList) {
item.selected = true;
}
setState(() {});
}
// _notebookDetailChangeModel.notifyListeners();
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'可订桌位',
style: TextStyle(
color: MyColours.color_353535,
fontSize: ScreenUtil().setSp(30)),
),
Row(
children: [
Text('更多',
style: TextStyle(
color: MyColours.color_353535,
fontSize: ScreenUtil().setSp(26))),
HEmptyView(20),
Image.asset(
'assets/arr_right_gray.png',
width: ScreenUtil().setWidth(12),
height: ScreenUtil().setWidth(22),
)
],
),
],
)),
VEmptyView(32),
Align(
alignment: Alignment.centerRight,
child: Container(
// color: Colors.red,
// height: ScreenUtil().setHeight(178),
height: ScreenUtil().setWidth(185),
child: ListView.builder(
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (BuildContext contxt, int index) {
return NewTableItem(
canBookTable[index],
isRegionName: true,
canSelected: true,
onSelected: (table) {
if ((table as t.TableList).selected) {
_notebookDetailChangeModel.tableList.add(table);
} else {
_notebookDetailChangeModel.tableList
.removeWhere((t) => t.id == table.id);
}
},
);
},
itemCount: canBookTable.length > 3 ? 3 : canBookTable.length,
shrinkWrap: true,
scrollDirection: Axis.horizontal,
),
),
),
],
),
);
}
_bottomWidget() {
return Container(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
margin: EdgeInsets.only(top: ScreenUtil().setWidth(72)),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: TextField(
maxLines: 1,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(34),
color: MyColours.color_353535),
controller: _notebookDetailChangeModel.phoneController,
focusNode: _phoneNode,
// textAlignVertical: TextAlignVertical.top,
decoration: InputDecoration(
hintText: "客户电话",
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(34),
),
// contentPadding:
// EdgeInsets.only(bottom: ScreenUtil().setWidth(17)),
border: InputBorder.none,
),
onChanged: (value) {},
onEditingComplete: () {
print('fff');
_phoneNode.unfocus();
},
keyboardType: TextInputType.number,
),
),
HEmptyView(40),
InkWell(
onTap: () {
_showDateChooseWidget(context);
},
child: Text(
int.parse(widget.detailEntity.is_set_ddate) == 0
? '未设置到店时间'
: _notebookDetailChangeModel.ddateStr,
style: TextStyle(
color: int.parse(widget.detailEntity.is_set_ddate) == 0
? MyColours.color_999999
: MyColours.color_199095,
fontSize: ScreenUtil().setSp(34),
),
),
),
],
),
VEmptyView(40),
MyDivider(ScreenUtil().setWidth(335 * 2), ScreenUtil().setWidth(2),
color: MyColours.color_F1F0F4),
VEmptyView(72),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: TextField(
maxLines: 1,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(34),
color: MyColours.color_353535),
controller: _notebookDetailChangeModel.nameController,
focusNode: _nameNode,
// textAlignVertical: TextAlignVertical.top,
decoration: InputDecoration(
hintText: "客户姓名(必填)",
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(34),
),
// contentPadding:
// EdgeInsets.only(bottom: ScreenUtil().setWidth(17)),
border: InputBorder.none,
),
onChanged: (value) {},
onEditingComplete: () {
print('fff');
_nameNode.unfocus();
},
// keyboardType: TextInputType.number,
),
),
HEmptyView(40),
Row(
children: _notebookDetailChangeModel.sexList.map((value) {
return _callButton(
onPress: () {
for (var item in _notebookDetailChangeModel.sexList) {
item['select'] = false;
if (item['title'] == value['title']) {
item['select'] = true;
}
}
_notebookDetailChangeModel.notifyListeners();
},
content: value['title'],
hasLeftBorder: value['hasLeftBorder'],
isSelect: value['select']);
}).toList()),
],
),
VEmptyView(40),
MyDivider(ScreenUtil().setWidth(335 * 2), ScreenUtil().setWidth(2),
color: MyColours.color_F1F0F4),
VEmptyView(72),
TextField(
maxLines: 1,
inputFormatters: [LengthLimitingTextInputFormatter(25)],
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(34),
color: MyColours.color_353535),
controller: _notebookDetailChangeModel.customController,
focusNode: _needNode,
// textAlignVertical: TextAlignVertical.top,
decoration: InputDecoration(
hintText: "客户要求(25字以内,选填)",
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(34),
),
// contentPadding:
// EdgeInsets.only(bottom: ScreenUtil().setWidth(17)),
border: InputBorder.none,
),
onChanged: (value) {},
onEditingComplete: () {
print('fff');
_needNode.unfocus();
},
// keyboardType: TextInputType.number,
),
VEmptyView(40),
MyDivider(ScreenUtil().setWidth(335 * 2), ScreenUtil().setWidth(2),
color: MyColours.color_F1F0F4),
// VEmptyView(72),
// VEmptyView(62),
],
),
);
}
///底部弹框,设置时间30分钟间隔布局
_showDateChooseWidget(BuildContext context) async {
List tempMndList = [];
String title = '早市';
String key;
for (var item in _notebookDetailChangeModel.sunDateList) {
if (item['isSelect'] == true) {
title = item['dateText'];
key = item['key'];
tempMndList = _notebookDetailChangeModel.dailyMap[key];
}
}
//计算行数
int line = 0;
int count = tempMndList.length;
if (count % 3 == 0) {
line = int.parse('${count / 3}');
} else {
line = (count / 3).ceil();
}
int height = 85 + 40 + 36 * line + (line - 1) * 15;
final option = await showModalBottomSheet(
context: context,
backgroundColor: Colors.white,
builder: (context) {
return StatefulBuilder(builder: (context, state) {
return SafeArea(
child: Container(
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(ScreenUtil().setWidth(10))),
height: ScreenUtil().setWidth(height * 2),
child: Column(
children: [
InkWell(
onTap: () {
Navigator.pop(context);
},
child: Align(
alignment: Alignment.centerRight,
child: Container(
padding: EdgeInsets.fromLTRB(
ScreenUtil().setWidth(40),
ScreenUtil().setWidth(40),
ScreenUtil().setWidth(40),
ScreenUtil().setWidth(10)),
child: Image.asset(
'assets/close.png',
width: ScreenUtil().setWidth(32),
height: ScreenUtil().setWidth(32),
),
),
),
),
Center(
child: Text(title,
style: TextStyle(
fontSize: ScreenUtil().setSp(34),
fontWeight: FontWeight.bold,
color: MyColours.color_353535)),
),
VEmptyView(40),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(60)),
child: GridView.builder(
padding:
EdgeInsets.only(top: ScreenUtil().setWidth(20)),
shrinkWrap: true,
cacheExtent: ScreenUtil().setWidth(0),
itemCount: tempMndList.length,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
childAspectRatio: 80 / 36,
mainAxisSpacing:
ScreenUtil().setWidth(15 * 2),
crossAxisSpacing:
ScreenUtil().setWidth(38 * 2)),
itemBuilder: (BuildContext context, int index) {
// locationState = state;
return CustomButton(
onTap: () {
// state(() {
for (var item in tempMndList) {
item['select'] = false;
if (item['title'] ==
tempMndList[index]['title']) {
item['select'] = true;
widget.detailEntity.is_set_ddate = '1';
_notebookDetailChangeModel.isSetDate = "1";
_notebookDetailChangeModel.ddateStr =
item['title'];
}
}
// });
_notebookDetailChangeModel.notifyListeners();
Navigator.pop(context);
},
width: 80,
height: 36,
dateText: tempMndList[index]['title'].toString(),
dayText: '',
isSelect: tempMndList[index]['select'],
);
}))
],
),
));
});
});
}
Widget _callButton(
{GestureTapCallback onPress,
content,
hasLeftBorder = true,
isSelect = false}) {
return InkWell(
onTap: onPress,
child: Container(
width: ScreenUtil().setWidth(84),
height: ScreenUtil().setHeight(48),
decoration: BoxDecoration(
color: isSelect ? MyColours.color_199095 : MyColours.color_fefefe,
border: Border(
bottom: BorderSide(
color: MyColours.color_6AB6B9,
width: ScreenUtil().setWidth(2)),
top: BorderSide(
color: MyColours.color_6AB6B9,
width: ScreenUtil().setWidth(2)),
left: hasLeftBorder
? BorderSide(
color: MyColours.color_6AB6B9,
width: ScreenUtil().setWidth(2))
: BorderSide.none,
right: BorderSide(
color: MyColours.color_6AB6B9,
width: ScreenUtil().setWidth(2)))),
child: Align(
alignment: Alignment.center,
child: Text(
content,
style: TextStyle(
color: isSelect ? Colors.white : MyColours.color_353535,
fontSize: ScreenUtil().setSp(28)),
),
),
),
);
}
@override
Widget build(BuildContext context) {
_notebookDetailChangeModel =
Provider.of<NotebookDetailChangeModel>(context, listen: true);
return GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
},
child: Scaffold(
backgroundColor: Colors.white,
body: Column(children: <Widget>[
SizedBox(height: ScreenUtil.statusBarHeight),
MyAppBar(
"变更预订",
showBack: true,
),
Expanded(
child: SingleChildScrollView(
child: Column(
children: [_topWidget(), _middleWidget(), _bottomWidget()],
))),
Container(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(60),
),
child: CommonButton(
width: double.infinity,
height: 84,
fontSize: 34,
content: "确定修改",
state: 2,
onPress: () async {
String name =
_notebookDetailChangeModel.nameController.text.trim();
if (ObjectUtil.isEmpty(name)) {
Utils.showToast("请填写客户姓名");
return;
}
if (_notebookDetailChangeModel.tableList.length == 0) {
Utils.showToast("请选择桌位");
return;
}
SunReserveInfoModel _model =
await _notebookDetailChangeModel
.setReserveInfo(context);
if (ObjectUtil.isNotEmpty(_model.row) ||
ObjectUtil.isNotEmpty(_model.row.id)) {
print('变更成功');
// _notebookDetailChangeModel.clearData();
bus.emit("refresh_detail");
String ddate_solt = '';
if (_model.row.isSetDdate == '1') {
String createtime = _model.row.ddate.toString() + '000';
DateTime createTime =
DateTime.fromMillisecondsSinceEpoch(
int.parse(createtime));
ddate_solt = DateUtil.formatDate(createTime,
format: DateFormats.h_m);
} else {
if (_model.row.ddateSolt == '1') {
ddate_solt = '早餐';
} else if (_model.row.ddateSolt == '2') {
ddate_solt = '午餐';
} else if (_model.row.ddateSolt == '3') {
ddate_solt = '晚餐';
}
}
List<dynamic> tableinfo =
convert.jsonDecode(_model.row.tableinfo);
print(tableinfo);
String _nameStr = _model.row.name;
if (tableinfo.length > 1) {
_nameStr = _model.row.name + '等${tableinfo.length}桌';
}
NavigatorUtil.goInvicationPage(context, _model.row.id,
_nameStr, _model.row.ddate, ddate_solt,
replace: true);
} else {
Utils.showToast("变更预订订单失败,请重试!");
}
},
))
]),
));
}
}
/// 获取日期 今天 明天 后天等等
int _getDdate(NotebookDetailChangeModel model) {
//当前选中 月 日string
String mdStr = '';
//今天 明天 其他天
for (var item in model.dateList) {
if (item['select'] == true) {
mdStr = item['title'];
}
}
String timeNowYear = DateUtil.formatDate(DateTime.now(), format: 'yyyy');
String ymyStr = timeNowYear + '-' + mdStr; //年月日
String timeStr = ymyStr + ' ' + "00:00:00";
int ddate = DateUtil.getDateMsByTimeStr(timeStr); //筛选日期时间戳
return ddate;
}
/// 获取早餐、午餐、晚餐字段 1 ,2, 3
String _getDdateSolt(NotebookDetailChangeModel model) {
String ddateSolt = '';
for (var item in model.sunDateList) {
if (item['isSelect']) {
ddateSolt = '${item['ddateSolt']}';
}
}
return ddateSolt;
}
/// 选中前面的按钮获取人数,输入的自己获取
String _getPnum(NotebookDetailChangeModel model) {
String pnum = '6';
for (var item in model.personNumList) {
if (item['isSelect']) {
pnum = item['dateText'];
}
}
if (pnum == '更多') {
pnum = '6';
}
return pnum;
}
class CustomButton extends StatefulWidget {
final String dateText;
final String dayText;
final bool isSelect;
final double fontSize;
final bool isImage;
final double width;
final GestureTapCallback onTap;
final bool isTextFiled;
final NotebookDetailChangeModel model;
final double height;
const CustomButton({
Key key,
this.dateText,
this.dayText,
this.isSelect,
this.fontSize = 34,
this.isImage = false,
this.width = 105,
this.onTap,
this.isTextFiled = false,
this.model,
this.height = 25,
}) : super(key: key);
@override
_ButtonState createState() => _ButtonState();
}
class _ButtonState extends State<CustomButton> {
FocusNode _cancelNode = FocusNode();
@override
Widget build(BuildContext context) {
String imgStrSelect = widget.isImage && !widget.isTextFiled
? 'assets/calender_select.png'
: 'assets/more_select.png';
String imgStrNormal = widget.isImage && !widget.isTextFiled
? 'assets/calender_narmol.png'
: 'assets/more_narmol.png';
return InkWell(
onTap: widget.onTap,
child: Container(
width: ScreenUtil().setWidth(widget.width * 2),
height: ScreenUtil().setWidth(widget.height * 2),
decoration: BoxDecoration(
color: widget.isSelect ? MyColours.color_199095 : Colors.white,
borderRadius: BorderRadius.circular(ScreenUtil().setWidth(10)),
border: Border.all(
color: MyColours.color_199095,
width: ScreenUtil().setWidth(2))),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
widget.isTextFiled
? Container(
alignment: Alignment.center,
// color: Colors.red,
width: ScreenUtil().setWidth(114),
height: ScreenUtil().setWidth(50),
// padding: EdgeInsets.zero,
child: TextField(
controller: widget.model.numController,
maxLines: 1,
inputFormatters: [
LengthLimitingTextInputFormatter(3),
WhitelistingTextInputFormatter.digitsOnly
],
//光标颜色
cursorColor: widget.isSelect
? Colors.white
: MyColours.color_199095,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(30),
color: widget.isSelect
? Colors.white
: MyColours.color_199095),
// controller: _cancelController,
focusNode: _cancelNode,
textAlignVertical: TextAlignVertical.bottom,
decoration: InputDecoration(
// fillColor: Colors.lightGreenAccent,
// filled: true,
border: OutlineInputBorder(borderSide: BorderSide.none),
hintText: "更多",
hintStyle: TextStyle(
color: widget.isSelect
? Colors.white
: MyColours.color_199095,
fontSize: ScreenUtil().setSp(30),
),
// contentPadding: EdgeInsets.only(
// bottom: ScreenUtil().setWidth(30)), //ios 17
// border: InputBorder.none,
),
onChanged: (value) {
bool isThird = true;
for (int i = 0;
i < widget.model.personNumList.length;
i++) {
widget.model.personNumList[i]['isSelect'] = false;
if (widget.model.personNumList[i]['dateText'] ==
value) {
widget.model.personNumList[i]['isSelect'] = true;
isThird = false;
}
}
if (isThird) {
widget.model.personNumList[5]['isSelect'] = true;
widget.model.personNumList[5]['dateText'] = value;
} else {
widget.model.personNumList[5]['dateText'] = '更多';
}
widget.model.notifyListeners();
},
onEditingComplete: () {
_cancelNode.unfocus();
int ddate = _getDdate(widget.model);
String ddateSolt = _getDdateSolt(widget.model);
String pnum = _getPnum(widget.model);
widget.model.getNewTableList(context, '${ddate}',
ddateSolt, pnum, widget.model.tableList);
},
keyboardType: TextInputType.number,
),
)
: Text(widget.dateText,
style: TextStyle(
fontWeight: widget.isImage && widget.dateText == "其他"
? FontWeight.normal
: FontWeight.bold,
color: widget.isSelect
? MyColours.color_fefefe
: MyColours.color_199095,
fontSize: ScreenUtil().setSp(widget.fontSize))),
widget.isImage && !widget.isTextFiled
? HEmptyView(20)
: Container(),
widget.isImage
? Image.asset(widget.isSelect ? imgStrSelect : imgStrNormal,
width: ScreenUtil().setWidth(36))
: Text(widget.dayText,
style: TextStyle(
fontWeight: FontWeight.bold,
color: widget.isSelect
? MyColours.color_fefefe
: MyColours.color_199095,
fontSize: ScreenUtil().setSp(30)))
],
),
),
);
}
}
... ...
... ... @@ -5,14 +5,18 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/app.dart';
import 'package:one_key/pages/enter/enter_page.dart';
import 'package:one_key/pages/message/message_page.dart';
import 'package:one_key/pages/my/my_page.dart';
import 'package:one_key/pages/notebook/notebook_page.dart';
import 'package:one_key/pages/table/table_manager_page.dart';
import 'package:one_key/provider/contact_model.dart';
import 'package:one_key/provider/enter_model.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:one_key/provider/message_model.dart';
import 'package:one_key/provider/my_model.dart';
import 'package:one_key/provider/notebook_model.dart';
import 'package:one_key/provider/table_manager_model.dart';
import 'package:one_key/provider/tools.dart';
import 'package:one_key/provider/update_model.dart';
import 'package:one_key/provider/user_model.dart';
... ... @@ -29,7 +33,7 @@ import 'package:tpns_flutter_plugin/tpns_flutter_plugin.dart';
class HomePage extends StatefulWidget {
final int initialIndex; //初始tab
HomePage({this.initialIndex = 1});
HomePage({this.initialIndex = 2});
@override
State<StatefulWidget> createState() {
... ... @@ -40,7 +44,7 @@ class HomePage extends StatefulWidget {
class HomePageState extends State<HomePage> with WidgetsBindingObserver {
List<Widget> pages = List<Widget>();
int _currIndex = 1;
int _currIndex = 2;
Color _activeColor = MyColours.color_199095;
Color _defaultColor = MyColours.color_999999;
... ... @@ -60,10 +64,18 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
create: (_) => MessageModel(),
child: SafeArea(child: MessagePage()),
))
..add(ChangeNotifierProvider<EnterModel>(
create: (_) => EnterModel(null),
child: SafeArea(child: EnterPage()),
))
..add(ChangeNotifierProvider<NoteBookModel>(
create: (_) => NoteBookModel(),
child: SafeArea(child: NoteBookPage()),
))
..add(ChangeNotifierProvider<TableManagerModel>(
create: (_) => TableManagerModel(),
child: SafeArea(child: TableManagerPage()),
))
..add(ChangeNotifierProvider<MyModel>(
create: (_) => MyModel(),
child: MyPage(),
... ... @@ -313,6 +325,24 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
),
BottomNavigationBarItem(
icon: Image(
image: AssetImage("assets/message_default.png"),
width: ScreenUtil().setWidth(48),
height: ScreenUtil().setWidth(48),
),
activeIcon: Image(
image: AssetImage("assets/message_selected.png"),
width: ScreenUtil().setWidth(48),
height: ScreenUtil().setWidth(48),
),
title: Text(
"订座",
style: TextStyle(
color: _currIndex == 1 ? _activeColor : _defaultColor,
fontSize: ScreenUtil().setSp(22)),
),
),
BottomNavigationBarItem(
icon: Image(
image: AssetImage("assets/notebook_default.png"),
width: ScreenUtil().setWidth(48),
height: ScreenUtil().setWidth(48),
... ... @@ -325,7 +355,25 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
title: Text(
"已预订",
style: TextStyle(
color: _currIndex == 1 ? _activeColor : _defaultColor,
color: _currIndex == 2 ? _activeColor : _defaultColor,
fontSize: ScreenUtil().setSp(22)),
),
),
BottomNavigationBarItem(
icon: Image(
image: AssetImage("assets/notebook_default.png"),
width: ScreenUtil().setWidth(48),
height: ScreenUtil().setWidth(48),
),
activeIcon: Image(
image: AssetImage("assets/notebook_selected.png"),
width: ScreenUtil().setWidth(48),
height: ScreenUtil().setWidth(48),
),
title: Text(
"桌位",
style: TextStyle(
color: _currIndex == 3? _activeColor : _defaultColor,
fontSize: ScreenUtil().setSp(22)),
),
),
... ... @@ -343,7 +391,7 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
title: Text(
"我的",
style: TextStyle(
color: _currIndex == 2 ? _activeColor : _defaultColor,
color: _currIndex == 4 ? _activeColor : _defaultColor,
fontSize: ScreenUtil().setSp(22)),
),
),
... ... @@ -355,7 +403,7 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
setState(() {
_currIndex = index;
});
if (_currIndex == 2) {
if (_currIndex == 4) {
Utils.changeStatusColor(color: MyColours.color_199095);
} else {
Utils.changeStatusColor(color: MyColours.color_ffffff);
... ...
import 'dart:ffi';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/area.dart';
import 'package:one_key/models/notebook.dart';
import 'package:one_key/models/tableOuter.dart';
import 'package:one_key/models/table_list.dart';
import 'package:one_key/provider/choose_table_model.dart';
import 'package:one_key/provider/notebook_detail_change_model.dart';
import 'package:one_key/provider/notebook_model.dart';
import 'package:one_key/provider/select_table_model.dart';
import 'package:one_key/provider/table_manager_model.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/log_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/widgets/app_bar.dart';
import 'package:one_key/widgets/area_item.dart';
import 'package:one_key/widgets/common_button.dart';
import 'package:one_key/widgets/table_item.dart';
import 'package:one_key/models/table.dart' as t;
import 'package:provider/provider.dart';
import 'dart:convert' as convert;
class TableManagerPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return new TableManagerPageState();
}
}
class TableManagerPageState extends State<TableManagerPage> {
List<Area> areas = []; //区域列表
List<t.Table> selectTables = []; //选择的桌位
List<TableOuter> tableOuterList = []; //区域-桌位列表
Map<String, List<t.Table>> areaTableMap = {}; //区域-桌位Map
TableManagerModel tableManagerModel;
Map<String, Notebook> tableMap = {}; //记录已预订桌位对应的订单
String currentArea; //当前选中区域
DateTime dateTime=DateTime.now();
String dateText = ""; //当前显示日期时间
int currTimeIndex = 1; //当前选中时间段
String morning; //早市时间段
String noon; //午市时间段
String night; //晚市时间段
UserModel userModel;
@override
void initState() {
// TODO: implement initState
super.initState();
LogUtil.v("table_manager_page initState");
WidgetsBinding.instance.addPostFrameCallback((_) {
userModel = Provider.of<UserModel>(context, listen: false);
tableManagerModel=Provider.of<TableManagerModel>(context,listen: false);
_initTime();
getTableList();
});
}
//初始化时间
_initTime() {
dateTime = DateTime.now();
dateText = Utils.addZeroNumber(dateTime.month) +
"月" +
Utils.addZeroNumber(dateTime.day) +
"日" +
" 今天";
morning =
userModel.user.morning.isEmpty ? "00:00-00:00" : userModel.user.morning;
noon = userModel.user.noon.isEmpty ? "00:00-00:00" : userModel.user.noon;
night = userModel.user.night.isEmpty ? "00:00-00:00" : userModel.user.night;
if (dateTime.isBefore(DateTime.parse(dateTime.year.toString() +
"-" +
Utils.addZeroNumber(dateTime.month) +
"-" +
Utils.addZeroNumber(dateTime.day) +
" " +
morning.split("-")[1] +
":00"))) {
//未过早市
currTimeIndex = 1;
} else if (dateTime.isAfter(DateTime.parse(dateTime.year.toString() +
"-" +
Utils.addZeroNumber(dateTime.month) +
"-" +
Utils.addZeroNumber(dateTime.day) +
" " +
morning.split("-")[1] +
":00")) &&
dateTime.isBefore(DateTime.parse(dateTime.year.toString() +
"-" +
Utils.addZeroNumber(dateTime.month) +
"-" +
Utils.addZeroNumber(dateTime.day) +
" " +
noon.split("-")[1] +
":00"))) {
//过了早市,未过午市
currTimeIndex = 2;
} else if (dateTime.isAfter(DateTime.parse(dateTime.year.toString() +
"-" +
Utils.addZeroNumber(dateTime.month) +
"-" +
Utils.addZeroNumber(dateTime.day) +
" " +
noon.split("-")[1] +
":00")) &&
dateTime.isBefore(DateTime.parse(dateTime.year.toString() +
"-" +
Utils.addZeroNumber(dateTime.month) +
"-" +
Utils.addZeroNumber(dateTime.day) +
" " +
night.split("-")[1] +
":00"))) {
//过了午市,未过晚市
currTimeIndex = 3;
} else {
//过了晚市
currTimeIndex = 3;
}
}
//获取桌位列表
getTableList() async {
Map<String, String> params = {"sellerid": userModel.user.sellerid};
tableOuterList = await tableManagerModel.getTableList(context, params);
_getReserveList();
}
//获取已预订列表
_getReserveList() async {
NoteBookModel model = new NoteBookModel();
Map<String, String> params = {
"sid": userModel.user.sellerid,
"rdate": _getRdate(),
"ddate_solt": currTimeIndex.toString(),
"y": "200",
"x": "1",
"keywords": "",
"sort": "1"
};
List<Notebook> noteBooks = await model.getReserveList(context, params);
for (Notebook notebook in noteBooks) {
if (notebook.tid.isEmpty) continue;
if (notebook.status == "1" ||
notebook.status == "2" ||
notebook.status == "5") {
//已预订,用餐中,已安排
List<String> tids = notebook.tid.split(",");
for (String tid in tids) {
tableMap["$tid"] = notebook;
}
}
}
print(tableMap);
initData();
}
//初始桌位数据
initData() {
for (TableOuter outer in tableOuterList) {
int count = 0;
for (t.Table table in outer.list) {
if (table.tablestatus == "0") {
//没有用餐中
if (tableMap["${table.id}"] != null) {
Notebook notebook = tableMap["${table.id}"];
table.sign = notebook.status;
table.notebookId = notebook.id;
table.reserver = notebook.rnameStr;
} else {
table.sign = "";
table.notebookId = "";
if (table.enable == "1") {
count++;
}
}
} else {
table.sign = "2";
table.notebookId = "";
}
}
areaTableMap["${outer.name}"] = outer.list;
Area area = Area();
area.name = outer.name;
area.count = count;
areas.add(area);
}
currentArea = areaTableMap.keys.first;
setState(() {});
}
//获取一天开始-结束时间字符串
String _getRdate() {
//一天开始时间
double startDay = (DateTime.parse((dateTime.year.toString() +
"-" +
Utils.addZeroNumber(dateTime.month) +
"-" +
Utils.addZeroNumber(dateTime.day) +
" 00:00:00"))
.millisecondsSinceEpoch) /
1000;
//一天结束时间
double endDay = (DateTime.parse((dateTime.year.toString() +
"-" +
Utils.addZeroNumber(dateTime.month) +
"-" +
Utils.addZeroNumber(dateTime.day) +
" 23:59:59"))
.millisecondsSinceEpoch) /
1000;
return startDay.floor().toString() + "-" + endDay.floor().toString();
}
//生成日期文本
_createDateText(DateTime day) {
if (Utils.isOneDay(day, dateTime)) return; //日期没变
setState(() {
DateTime dateNow = DateTime.now();
dateText = Utils.addZeroNumber(day.month) +
"月" +
Utils.addZeroNumber(day.day) +
"日";
if (Utils.isOneDay(day, dateNow)) {
dateText += " 今天";
} else if (Utils.isOneDay(day, dateNow.add(Duration(days: 1)))) {
dateText += " 明天";
} else if (Utils.isOneDay(day, dateNow.add(Duration(days: 2)))) {
dateText += " 后天";
} else {
dateText += " 周${Utils.formatWeekDayNum(day.weekday)}";
}
dateTime = day;
});
_getReserveList();
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: areaTableMap.isEmpty
? Container(
width: double.infinity,
height: double.infinity,
color: MyColours.color_ffffff,
)
: Column(
children: <Widget>[
MyAppBar(
"桌位",
showBack: true,
),
Container(
color: MyColours.color_ffffff,
width: double.infinity,
padding: EdgeInsets.symmetric(vertical: ScreenUtil().setHeight(16)),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: Center(
child: GestureDetector(
onTap: () {
DialogUtil.showCalendarDialog(context, dateTime)
.then((day) {
if (day != null) {
_createDateText(day);
}
});
},
child: Container(
child: Text(
dateText,
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(34)),
),
),
),
),
),
MyDivider(
ScreenUtil().setWidth(2),
ScreenUtil().setHeight(68),
color: MyColours.color_E0E0E0,
),
Expanded(
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(30)),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Offstage(
offstage: morning == "00:00-00:00" ? true : false,
child: Padding(
padding: EdgeInsets.only(
right: ScreenUtil().setWidth(18)),
child: CommonButton(
content: "早市",
state: currTimeIndex == 1 ? 1 : 0,
width: 92,
height: 48,
fontSize: 32,
onPress: () {
if (currTimeIndex == 1) return;
setState(() {
currTimeIndex = 1;
});
_getReserveList();
},
))),
Offstage(
offstage: noon == "00:00-00:00" ? true : false,
child: Padding(
padding: EdgeInsets.only(
right: ScreenUtil().setWidth(18)),
child: CommonButton(
content: "午市",
state: currTimeIndex == 2 ? 1 : 0,
width: 92,
height: 48,
fontSize: 32,
onPress: () {
if (currTimeIndex == 2) return;
setState(() {
currTimeIndex = 2;
});
_getReserveList();
},
))),
Offstage(
offstage: night == "00:00-00:00" ? true : false,
child: Container(
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(10)),
child: CommonButton(
content: "晚市",
state: currTimeIndex == 3 ? 1 : 0,
width: 92,
height: 48,
fontSize: 32,
onPress: () {
if (currTimeIndex == 3) return;
setState(() {
currTimeIndex = 3;
});
_getReserveList();
},
)),
),
],
),
),
)
],
),
),
Expanded(
child: Container(
color: MyColours.color_ffffff,
child: Row(
children: <Widget>[
Container(
width: ScreenUtil().setWidth(170),
height: double.infinity,
color: MyColours.color_f1f1f1,
child: ListView.builder(
itemBuilder: (context, index) {
return AreaItem(areas[index], currentArea,
(area) {
setState(() {
currentArea = (area as Area).name;
});
});
},
itemExtent: ScreenUtil().setHeight(207),
itemCount: areas.length,
),
),
Expanded(
child: Padding(
padding: EdgeInsets.symmetric(
vertical: ScreenUtil().setHeight(10),
horizontal: ScreenUtil().setWidth(9)),
child: Column(
children: [
Expanded(
child: GridView.builder(
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
childAspectRatio: 8 / 9),
itemBuilder: (context, index) {
return TableItem(
areaTableMap[currentArea][index],
onSelected: (table) {
if ((table as t.Table).selected) {
selectTables.add(table);
} else {
selectTables.removeWhere(
(t) => t.id == table.id);
}
},
canSelected: false,
canChoose: false,
tableMap: tableMap,
rid: "");
},
itemCount: areaTableMap[currentArea].length,
)),
],
)),
)
],
),
),
),
],
),
);
}
tableToTableList(t.Table table) {
TableList _tableList = TableList(
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '');
_tableList.id = table.id;
_tableList.rid = table.rid;
_tableList.tid = table.tid;
_tableList.name = table.name;
_tableList.tablePnum = table.table_pnum;
_tableList.sellerid = null;
_tableList.qrcode = null;
_tableList.mostPnum = table.most_pnum;
_tableList.hot = null;
_tableList.orderO = table.order_o;
_tableList.status = table.status;
_tableList.enable = table.enable;
_tableList.spell = table.spell;
_tableList.cdate = null;
_tableList.rname = table.rname;
_tableList.regionName = table.rname;
_tableList.selected = true;
return _tableList;
}
}
... ...
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:one_key/constant/constant.dart';
import 'package:one_key/models/notebook_detail.dart';
import 'package:one_key/models/reserve_info_model.dart';
import 'package:one_key/models/seller_info.dart';
import 'package:one_key/models/table_list.dart';
import 'package:one_key/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/net/http_url.dart';
import 'package:one_key/provider/notebook_detail_model.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/utils/utils.dart';
import 'package:provider/provider.dart';
class EnterModel with ChangeNotifier {
List dateList = []; //日期选择 月-日 某天
List sunDateList = []; // 早市、午市、晚市
List personNumList = []; // 人数
TextEditingController numController = TextEditingController(); //人数
TextEditingController phoneController = TextEditingController(); //电话
TextEditingController nameController = TextEditingController(); //客户姓名
TextEditingController customController = TextEditingController(); //客户要求
List sexList = []; // 先生、女士、公司
Map dailyMap = {}; // 早市对应半点钟,午市对应半点钟、晚市对应半点钟
String ddateStr = ''; //16:30
NotebookDetail detailEntity;
List<TableList> tableList = [];
String isSetDate = '0';
List<TableList> recommendList = []; //推荐列表
bool isRecommend = false; //是否展示推荐
List oldTableList = [];
clearData() {
dateList = []; //日期选择 月-日 某天
sunDateList = []; // 早市、午市、晚市
personNumList = []; // 人数
numController = TextEditingController(); //人数
phoneController = TextEditingController(); //电话
nameController = TextEditingController(); //客户姓名
customController = TextEditingController(); //客户要求
sexList = []; // 先生、女士、公司
dailyMap = {}; // 早市对应半点钟,午市对应半点钟、晚市对应半点钟
ddateStr = ''; //16:30
tableList = [];
isSetDate = '0';
}
//构造函数,初始化
EnterModel(this.detailEntity) {
// clearData();
print(detailEntity);
if (detailEntity.phone != '0') {
phoneController.text = detailEntity.phone;
}
if (detailEntity.rnameStr != '') {
nameController.text = detailEntity.rname;
}
if (detailEntity.cusdem != '') {
customController.text = detailEntity.cusdem;
}
_initDateList();
_initPersonNumList();
_initSexList();
}
///初始化 日期选择 月-日 某天
_initDateList() {
String createtime = detailEntity.ddate.toString() + '000';
DateTime createTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(createtime));
ddateStr = DateUtil.formatDate(createTime, format: DateFormats.h_m);
String dateTimeSelect = DateUtil.formatDateMs(
createTime.millisecondsSinceEpoch,
format: 'MM-dd');
//今天
DateTime dateTime = DateTime.now();
int dateTimeMill = dateTime.millisecondsSinceEpoch;
String dateText = DateUtil.formatDateMs(dateTimeMill, format: 'MM-dd');
dateList.add({
'title': dateText,
'select': dateTimeSelect == dateText ? true : false,
'fontSize': 34.0,
'dayText': ' 今天',
'isImage': false
});
//明天
int tomorrowMill = dateTimeMill + 24 * 60 * 60 * 1000;
String dateTextTomorrow =
DateUtil.formatDateMs(tomorrowMill, format: 'MM-dd');
dateList.add({
'title': dateTextTomorrow,
'select': dateTimeSelect == dateTextTomorrow ? true : false,
'fontSize': 34.0,
'dayText': ' 明天',
'isImage': false
});
//第三个
dateList.add({
'title': dateTimeSelect != dateText && dateTimeSelect != dateTextTomorrow
? dateTimeSelect
: '其他',
'select': dateTimeSelect != dateText && dateTimeSelect != dateTextTomorrow
? true
: false,
'fontSize': 30.0,
'dayText': '',
'isImage': true
});
}
/// 初始化 早市、午市、晚市
_initSunDateList(morning, noon, night) {
String ddateSolt = detailEntity.ddate_solt;
if (morning != '') {
sunDateList.add({
'dateText': '早市',
'dayText': '',
'ddateSolt': 1,
'key': 'morning',
'isSelect': ddateSolt == '1' ? true : false
});
}
if (noon != '') {
sunDateList.add({
'dateText': '午市',
'dayText': '',
'ddateSolt': 2,
'key': 'noon',
'isSelect': ddateSolt == '2' ? true : false
});
}
if (noon != '') {
sunDateList.add({
'dateText': '晚市',
'dayText': '',
'ddateSolt': 3,
'key': 'night',
'isSelect': ddateSolt == '3' ? true : false
});
}
notifyListeners();
}
//人数
_initPersonNumList() {
String pnum = detailEntity.pnum;
if (int.parse(pnum) < 6 || int.parse(pnum) > 10) {
numController.text = pnum;
}
personNumList = [
{
'dateText': '6',
'width': 30.0,
'fontSize': 34.0,
'isImage': false,
'isSelect': pnum == '6' ? true : false,
'isTextFiled': false
},
{
'dateText': '7',
'width': 30.0,
'fontSize': 34.0,
'isImage': false,
'isSelect': pnum == '7' ? true : false,
'isTextFiled': false
},
{
'dateText': '8',
'width': 30.0,
'fontSize': 34.0,
'isImage': false,
'isSelect': pnum == '8' ? true : false,
'isTextFiled': false
},
{
'dateText': '9',
'width': 30.0,
'fontSize': 34.0,
'isImage': false,
'isSelect': pnum == '9' ? true : false,
'isTextFiled': false
},
{
'dateText': '10',
'width': 30.0,
'fontSize': 34.0,
'isImage': false,
'isSelect': pnum == '10' ? true : false,
'isTextFiled': false
},
{
'dateText': numController.text.length > 0 ? numController.text : '更多',
'width': 105.0,
'fontSize': 30.0,
'isImage': true,
'isSelect': int.parse(pnum) < 6 || int.parse(pnum) > 10 ? true : false,
'isTextFiled': true
}
];
}
///称谓
_initSexList() {
String sexStr = detailEntity.sex;
sexList = [
{
'title': '先生',
'select': sexStr == '1' ? true : false,
'code': '1',
'hasLeftBorder': true
},
{
'title': '女士',
'select': sexStr == '2' ? true : false,
'code': '2',
'hasLeftBorder': false
},
{
'title': '公司',
'select': sexStr == '3' ? true : false,
'code': '3',
'hasLeftBorder': false
}
];
}
/// 早市、午市、晚市对应的半个小时间隔时间段
initDateHourMinuteList(BuildContext context) async {
SunSellerInfoModel model = await getManagersInfo(context);
model.daily.morning == ''
? dailyMap.putIfAbsent('morning', () => '')
: dailyMap.putIfAbsent(
'morning', () => _getHourAndMinute(model.daily.morning, 1, model));
model.daily.noon == ''
? dailyMap.putIfAbsent('noon', () => '')
: dailyMap.putIfAbsent(
'noon', () => _getHourAndMinute(model.daily.noon, 2, model));
model.daily.night == ''
? dailyMap.putIfAbsent('night', () => '')
: dailyMap.putIfAbsent(
'night', () => _getHourAndMinute(model.daily.night, 3, model));
_initSunDateList(model.daily.morning, model.daily.noon, model.daily.night);
}
//根据获取时间 11:00-12:30 获取30分钟间隔组装的数组
_getHourAndMinute(
String hourAndMinuteStr, int mnd, SunSellerInfoModel model) {
List tempDate = hourAndMinuteStr.split("-");
String beginDate = tempDate[0];
String endDate = tempDate[1];
List tempHour = beginDate.split(':');
String isSetDate = detailEntity.is_set_ddate;
String ddateSolt = detailEntity.ddate_solt;
/*获取开始小时*/
int beginHour = int.parse(tempHour[0]);
/*获取开始分钟*/
int beginMinute = int.parse(tempHour[1]);
List res = [];
bool tempLimit = true;
while (tempLimit) {
String temp = _dealTime(beginHour, beginMinute);
bool tempSelect = false;
if (int.parse(isSetDate) == 1) //设置预订时间
{
if (temp == ddateStr) {
tempSelect = true;
}
} else {
if (mnd == 1) {
if (temp == '08:00') {
tempSelect = true;
}
} else if (mnd == 2) {
if (temp == '12:00') {
tempSelect = true;
}
} else if (mnd == 3) {
if (temp == '18:30') {
tempSelect = true;
}
}
}
Map tempMap = {'title': temp, 'select': tempSelect};
res.add(tempMap);
if (temp == endDate) {
tempLimit = false;
break;
}
if (beginMinute == 30) {
beginHour++;
if (beginHour >= 24) {
beginHour = 0;
}
}
beginMinute = (beginMinute + 30) % 60;
}
return res;
}
/// 根据时间和分钟组装 格式:11:00
_dealTime(int begin, int mm) {
String sb = '';
if (begin < 10) {
sb = '0$begin';
} else {
sb = '$begin';
}
sb = '$sb:';
if (mm < 10) {
sb = '${sb}0${mm}';
} else {
sb = '${sb}${mm}';
}
return sb;
}
///获取某个商家下所有服务员信息 **** 取得某个商家的早市、午市、晚市营业时间
Future<SunSellerInfoModel> getManagersInfo(BuildContext context) async {
UserModel userModel = Provider.of<UserModel>(context, listen: false);
Map<String, String> params = {
"seller_id": userModel.user.sellerid,
"seller_openid": userModel.user.openid
};
BaseResp<Map<String, dynamic>> baseResp = await DioUtil()
.request<Map<String, dynamic>>(context, Method.get, HttpUrl.sellerinfo,
data: params)
.catchError((error) {
print(error.toString());
});
SunSellerInfoModel itemModel;
if (baseResp == null) return itemModel;
if (baseResp.code == Constant.status_success) {
if (int.parse(baseResp.status) != Constant.status_success) {
Utils.showToast(baseResp.msg ?? "");
return itemModel;
}
if (baseResp.responseData['data'] != null) {
itemModel = SellerInfoModel.fromJson(baseResp.responseData).data;
} else {
Utils.showToast(baseResp.msg ?? "");
}
return itemModel;
}
}
///根据商家ID 获取桌位信息列表: 1:散座 2:包间 默认:获取所有数据
Future<List<TableList>> getNewTableList(BuildContext context, String ddate,
String ddate_solt, String pnum, List oldTableList) async {
if (pnum == '') {
pnum = '6';
}
DateTime createTime = DateTime.fromMillisecondsSinceEpoch(int.parse(ddate));
String rdate = DateUtil.formatDate(createTime, format: "yyyyMMdd");
UserModel userModel = Provider.of<UserModel>(context, listen: false);
Map<String, String> params = {
"sid": userModel.user.sellerid,
"rid": detailEntity.id,
"rdate": rdate,
'ddate_solt': ddate_solt,
'pnum': pnum
};
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.get_table_list,
data: params)
.catchError((error) {
print(error.toString());
});
List<TableListSunModel> itemModelList;
if (baseResp == null) return tableList;
if (baseResp.code == Constant.status_success) {
if (int.parse(baseResp.status) != Constant.status_success) {
Utils.showToast(baseResp.msg ?? "");
return tableList;
}
if (baseResp.responseData['data'] != null) {
itemModelList = TableListModel.fromJson(baseResp.responseData).data;
} else {
Utils.showToast(baseResp.msg ?? "");
}
tableList = [];
for (int i = 0; i < itemModelList.length; i++) {
if (itemModelList[i].name == "推荐") {
recommendList = itemModelList[i].list;
itemModelList.removeAt(i);
}
}
for (TableListSunModel item in itemModelList) {
if (item.name == "推荐") {
itemModelList.remove(item);
}
for (var item in item.list) {
for (var table in oldTableList) {
if (item.id == table.id) {
item.selected = true;
if (!tableList.contains(item)) {
tableList.add(item);
}
}
}
}
}
// List usedTableList = []; //被占用的包间
// for (var itemOld in oldTableList) {
// if (tableList.length == 0) {
// usedTableList = oldTableList;
// } else {
// for (var item in tableList) {
// if (item.id != itemOld.id) {
// usedTableList.add(item);
// }
// }
// }
// }
List idold = [];
for (var itemOld in oldTableList) {
idold.add(itemOld.id);
}
List idnew = [];
for (var item in tableList) {
idnew.add(item.id);
}
for (var item in idnew) {
idold.remove(item);
}
print(idold); //被占用的桌子的id
if (idold.length > 0) {
String msg = '';
for (var item in oldTableList) {
if (idold.contains(item.id)) {
msg += '${item.name},';
}
}
if (msg.endsWith(',')) {
msg = msg.substring(0, msg.length - 1);
}
Utils.showToast('${msg}已被占用啦');
}
// if (usedTableList.length > 0) {
// print(usedTableList);
// String msg = '';
// for (var item in usedTableList) {
// msg += '${item.name},';
// }
// if (msg.endsWith(',')) {
// msg = msg.substring(0, msg.length - 1);
// }
// Utils.showToast('${msg}已被占用啦');
// }
// if(usedTableList.length > 0){
// for (TableList item in usedTableList) {
// item
// }
// }
if (tableList.length == 0) {
// Utils.showToast('包间已经被预订');
isRecommend = true;
} else {
isRecommend = false;
}
print(tableList);
notifyListeners();
return tableList;
}
}
///录入顾客订座相关信息,同时更新商家桌位状态
Future<SunReserveInfoModel> setReserveInfo(BuildContext context) async {
UserModel userModel = Provider.of<UserModel>(context, listen: false);
String pnum = '6';
for (var item in personNumList) {
if (item['isSelect']) {
pnum = item['dateText'];
}
}
if (pnum == '') {
pnum = '6';
}
String sex = '1';
for (var item in sexList) {
if (item['select']) {
sex = item['code'];
}
}
//当前选中 月 日string
String mdStr = '';
//今天 明天 其他天
for (var item in dateList) {
if (item['select'] == true) {
mdStr = item['title'];
}
}
String timeNowYear = DateUtil.formatDate(DateTime.now(), format: 'yyyy');
String ymyStr = timeNowYear + '-' + mdStr; //年月日
String timeStr = ymyStr + ' ' + ddateStr + ':00';
// int start = DateUtil.getDateMsByTimeStr(timeStr);
// String tempDdate = ymyStr + ' ' + ddateStr + ':00';
int ddate = DateUtil.getDateMsByTimeStr(timeStr);
String tableSelectInfo = '';
for (TableList item in tableList) {
// if (item.selected) {
tableSelectInfo += ',${item.id}';
// }
}
print(tableSelectInfo);
if (tableSelectInfo.startsWith(',')) {
tableSelectInfo = tableSelectInfo.substring(1);
}
print(tableSelectInfo);
String rdate = '';
String ddateSolt = '';
print(sunDateList);
for (var item in sunDateList) {
if (item['isSelect'] == true) {
String keys = '';
ddateSolt = '${item['ddateSolt']}';
if (item['ddateSolt'] == 1) {
//早市
keys = 'morning';
} else if (item['ddateSolt'] == 2) {
//午市
keys = 'noon';
} else if (item['ddateSolt'] == 3) {
//晚市
keys = 'night';
}
if (keys != '') {
String start = '${ddate}'.substring(0, 10);
List temp = dailyMap[keys];
String timeStrEnd = ymyStr + ' ' + temp.last['title'] + ':00';
int endM = DateUtil.getDateMsByTimeStr(timeStrEnd);
String end = '${endM}'.substring(0, 10);
rdate = start + '-' + end;
}
}
}
Map<String, String> params = {
'is_set_ddate': isSetDate,
"rid": detailEntity.id, //变更订单必传预定ID
"sid": userModel.user.sellerid, //商家ID
"tid": tableSelectInfo, //桌子ID: 格式 2,3,4
"pnum": pnum, //预定用餐人数
"rname": nameController.text, //预订人姓名
"sex": sex, //预订人姓名:1:男 2:女
"phone": phoneController.text, //预订人电话
"cusdem": customController.text, //预订人需求:25汉字
"rdate": rdate, //预定用餐时间范围:时间戳 开始时间戳(time)-结束时间戳(time)
"ddate": '${ddate}'.substring(0, 10), //到店时间
"ddate_solt": ddateSolt
};
print(params);
BaseResp<Map<String, dynamic>> baseResp = await DioUtil()
.request<Map<String, dynamic>>(
context, Method.get, HttpUrl.set_reserve_info,
data: params)
.catchError((error) {
print(error.toString());
});
SunReserveInfoModel itemModel;
if (baseResp == null) return itemModel;
if (baseResp.code == Constant.status_success) {
if (int.parse(baseResp.status) != Constant.status_success) {
Utils.showToast(baseResp.msg ?? "");
return itemModel;
}
if (baseResp.responseData['data'] != null &&
baseResp.responseData['data']['row'] != null) {
itemModel = ReserveInfoModel.fromJson(baseResp.responseData).data;
} else {
Utils.showToast(baseResp.msg ?? "变更预订失败,请重试");
}
return itemModel;
}
}
}
... ...
import 'package:flutter/material.dart';
import 'package:one_key/constant/constant.dart';
import 'package:one_key/models/tableOuter.dart';
import 'package:one_key/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/net/http_url.dart';
import 'package:one_key/models/table.dart' as t;
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
class TableManagerModel with ChangeNotifier{
//获取桌位数据
Future<List<TableOuter>> getTableList(BuildContext context,Map<String,String> params) async {
BaseResp<List> baseResp = await DioUtil()
.request<List>(context, Method.get, HttpUrl.table_list,
data: params,showLoading: true)
.catchError((error) {
print(error.toString());
});
if(baseResp.code==Constant.status_success){
return (baseResp.data[0] as List).map((value){
TableOuter tableOuter=TableOuter();
tableOuter.name=value["name"];
tableOuter.list=(value["list"] as List).map((table){
return t.Table.fromJson(table as Map<String,dynamic>);
}).toList();
return tableOuter;
}).toList();
}
return [];
}
}
\ No newline at end of file
... ...
... ... @@ -32,7 +32,7 @@ class NavigatorUtil {
}
/// 首页
static void goHomePage(BuildContext context, {int initialIndex = 1}) {
static void goHomePage(BuildContext context, {int initialIndex = 2}) {
_navigateTo(context, "${Routes.home}?initialIndex=$initialIndex",
clearStack: true);
}
... ...
... ... @@ -64,14 +64,14 @@ class TableItemState extends State<TableItem> {
}
}
}
} else {
//从安排桌位进来
if (widget.canSelected && table.signStr.isEmpty) {
setState(() {
table.selected = !(table.selected ?? false);
});
widget.onSelected(table);
}
} else if (widget.canSelected && table.signStr.isEmpty){//从安排桌位进来
setState(() {
table.selected = !(table.selected ?? false);
});
widget.onSelected(table);
}else{
table.selected = !(table.selected ?? false);
widget.onSelected(table);
}
},
child: Stack(
... ...