Commit c3a563903c123677c659b74229b99d69c6d8e645

Authored by wdn127929
1 parent ce6ede7f

录入预订新页面布局OK,接口and通讯录未测

... ... @@ -6,16 +6,20 @@ 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/home_enter_order/home_enter_order.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/home_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/remark_manager_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';
... ... @@ -44,7 +48,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;
int numPush = 0; //推送消息个数
... ... @@ -63,6 +67,12 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
WidgetsBinding.instance.addObserver(this);
_currIndex = widget.initialIndex;
pages
..add(ChangeNotifierProvider<HomeEnterModel>(
create: (_) => HomeEnterModel(),
child: ChangeNotifierProvider<RemarkManagerModel>(
create: (_) => RemarkManagerModel(),
child: SafeArea(child: HomeEnterPage()),
)))
..add(ChangeNotifierProvider<MessageModel>(
create: (_) => MessageModel(),
child: SafeArea(child: MessagePage()),
... ... @@ -85,7 +95,7 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
));
WidgetsBinding.instance.addPostFrameCallback((_) {
initPlatformState();
if (widget.initialIndex == 0) return;
if (widget.initialIndex == 1) return;
_getIntent();
Future.delayed(Duration(milliseconds: 30000), () {
ContactModel.getInstance().uploadLocalContact(context);
... ... @@ -462,6 +472,24 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
items: [
BottomNavigationBarItem(
icon: Image(
image: AssetImage("assets/enter_order_n.png"),
width: ScreenUtil().setWidth(48),
height: ScreenUtil().setWidth(48),
),
activeIcon: Image(
image: AssetImage("assets/enter_order_s.png"),
width: ScreenUtil().setWidth(48),
height: ScreenUtil().setWidth(48),
),
title: Text(
"录入预订",
style: TextStyle(
color: _currIndex == 0 ? _activeColor : _defaultColor,
fontSize: ScreenUtil().setSp(22)),
),
),
BottomNavigationBarItem(
icon: Image(
image: AssetImage("assets/message_default.png"),
width: ScreenUtil().setWidth(48),
height: ScreenUtil().setWidth(48),
... ... @@ -474,7 +502,7 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
title: Text(
"消息中心",
style: TextStyle(
color: _currIndex == 0 ? _activeColor : _defaultColor,
color: _currIndex == 1 ? _activeColor : _defaultColor,
fontSize: ScreenUtil().setSp(22)),
),
),
... ... @@ -510,7 +538,7 @@ 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)),
),
),
... ... @@ -528,7 +556,7 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
title: Text(
"桌位",
style: TextStyle(
color: _currIndex == 2 ? _activeColor : _defaultColor,
color: _currIndex == 3 ? _activeColor : _defaultColor,
fontSize: ScreenUtil().setSp(22)),
),
),
... ... @@ -546,7 +574,7 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
title: Text(
"我的",
style: TextStyle(
color: _currIndex == 3 ? _activeColor : _defaultColor,
color: _currIndex == 4 ? _activeColor : _defaultColor,
fontSize: ScreenUtil().setSp(22)),
),
),
... ...
import 'dart:convert';
import 'dart:ui';
import 'package:common_utils/common_utils.dart';
// import 'package:contacts_service/contacts_service.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/remark.dart';
import 'package:one_key/models/reserve_info_model.dart';
import 'package:one_key/provider/home_enter_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/remark_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/event_bus.dart';
import 'package:one_key/utils/misc.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/triangle_custom_painter.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/round_button.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:one_key/models/table_list.dart' as t;
import 'dart:convert' as convert;
import 'package:easy_contact_picker/easy_contact_picker.dart';
typedef ClickCallback = void Function(String value);
class HomeEnterPage extends StatefulWidget {
const HomeEnterPage({Key key}) : super(key: key);
@override
_HomeEnterPageState createState() => _HomeEnterPageState();
}
class _HomeEnterPageState extends State<HomeEnterPage> {
DateTime dateTimeNow; //当前日期
HomeEnterModel _homeEnterModel;
FocusNode _phoneNode = FocusNode();
FocusNode _nameNode = FocusNode();
FocusNode _needNode = FocusNode();
NotebookDetailModel detailModel = NotebookDetailModel();
EasyContactPicker _contactPicker = EasyContactPicker();
RemarkManagerModel remarkManagerModel;
String currentRemark = '';
bool showPhoneHistory = false; //显示客户历史记录
String sid = ""; //商户id
ScrollController _controller = ScrollController();
NotebookDetail detailEntity;
UserModel userModel;
String dateText = ""; //当前显示日期时间
int currTimeIndex; //当前选中时间段
String morning; //早市时间段
String noon; //午市时间段
String night; //晚市时间段
String pnum = '6'; //人数 默认6
int selectPnum = 5; //选中的人数
@override
void initState() {
super.initState();
dateTimeNow = DateTime.now();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
_initTime();
setState(() {});
sid = Provider.of<UserModel>(context, listen: false).user.sellerid;
_homeEnterModel.initDateHourMinuteList(context, currTimeIndex);
String ddate = DateTime.now().millisecondsSinceEpoch.toString() + '000';
_homeEnterModel
.getNewTableList(context, ddate, currTimeIndex.toString(), pnum, []);
Map<String, String> params = {
"uid": Provider.of<UserModel>(context, listen: false).user.openid
};
remarkManagerModel.getRemarks(context, params);
});
}
@override
void dispose() {
_nameNode.unfocus();
_phoneNode.unfocus();
super.dispose();
}
//初始化时间
_initTime() {
dateTimeNow = DateTime.now();
dateText = "${dateTimeNow.year}" +
"-" +
Utils.addZeroNumber(dateTimeNow.month) +
"-" +
Utils.addZeroNumber(dateTimeNow.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 (morning != '' &&
dateTimeNow.isBefore(DateTime.parse(dateTimeNow.year.toString() +
"-" +
Utils.addZeroNumber(dateTimeNow.month) +
"-" +
Utils.addZeroNumber(dateTimeNow.day) +
" " +
morning.split("-")[1] +
":00"))) {
//未过早市
currTimeIndex = 1;
} else if (noon != '' &&
dateTimeNow.isAfter(DateTime.parse(dateTimeNow.year.toString() +
"-" +
Utils.addZeroNumber(dateTimeNow.month) +
"-" +
Utils.addZeroNumber(dateTimeNow.day) +
" " +
morning.split("-")[1] +
":00")) &&
dateTimeNow.isBefore(DateTime.parse(dateTimeNow.year.toString() +
"-" +
Utils.addZeroNumber(dateTimeNow.month) +
"-" +
Utils.addZeroNumber(dateTimeNow.day) +
" " +
noon.split("-")[1] +
":00"))) {
//过了早市,未过午市
currTimeIndex = 2;
} else if (night != '' &&
dateTimeNow.isAfter(DateTime.parse(dateTimeNow.year.toString() +
"-" +
Utils.addZeroNumber(dateTimeNow.month) +
"-" +
Utils.addZeroNumber(dateTimeNow.day) +
" " +
noon.split("-")[1] +
":00")) &&
dateTimeNow.isBefore(DateTime.parse(dateTimeNow.year.toString() +
"-" +
Utils.addZeroNumber(dateTimeNow.month) +
"-" +
Utils.addZeroNumber(dateTimeNow.day) +
" " +
night.split("-")[1] +
":00"))) {
//过了午市,未过晚市
currTimeIndex = 3;
} else {
//过了晚市
currTimeIndex = 3;
}
}
// _initData() {
// print(widget.detailEntity);
// for (var item in widget.detailEntity.tables) {
// item.selected = true;
// }
// }
_buttonChoose(String title, ClickCallback callback) {
return InkWell(
onTap: () {
callback(title);
},
child: Container(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(20),
vertical: ScreenUtil().setWidth(10)),
height: ScreenUtil().setWidth(60),
decoration: BoxDecoration(
border: Border.all(
width: ScreenUtil().setWidth(2),
color: MyColours.color_199095),
borderRadius: BorderRadius.circular(ScreenUtil().setWidth(10))),
child: Row(
children: [
Text(
title,
style: TextStyle(
color: title == '时间(选填)'
? MyColours.color_999999
: MyColours.color_199095,
fontSize: ScreenUtil().setWidth(28)),
),
HEmptyView(10),
Image.asset(
Utils.getImgPath('enter_order_arrow'),
width: ScreenUtil().setWidth(20),
height: ScreenUtil().setWidth(10),
)
],
)));
}
_topWidget() {
return Container(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(50)),
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: _homeEnterModel.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) {
print('ggg');
},
onEditingComplete: () {
print('fff');
_nameNode.unfocus();
},
keyboardType: TextInputType.text,
),
),
HEmptyView(40),
Row(
children: _homeEnterModel.sexList.map((value) {
return _callButton(
onPress: () {
for (var item in _homeEnterModel.sexList) {
item['select'] = false;
if (item['title'] == value['title']) {
item['select'] = true;
}
}
_homeEnterModel.notifyListeners();
},
content: value['title'],
hasLeftBorder: value['hasLeftBorder'],
isSelect: value['select']);
}).toList()),
],
),
VEmptyView(30),
MyDivider(double.infinity, ScreenUtil().setWidth(2),
color: MyColours.color_efefef),
//电话
VEmptyView(50),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: TextField(
maxLines: 1,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(34),
color: MyColours.color_353535),
controller: _homeEnterModel.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) {
LogUtil.v("value:$value");
if (value.isEmpty || value.length >= 11) {
//内容为空,或 超过11位
setState(() {
_homeEnterModel.userHistorys.clear();
});
return;
}
Map<String, String> params = {
"keywords": value,
"sid": sid
};
_homeEnterModel.getUserHistorys(context, params);
},
onEditingComplete: () {
print('fff');
_phoneNode.unfocus();
},
onTap: () {
setState(() {
showPhoneHistory = true;
});
// Future.delayed(Duration(milliseconds: 300), () {
// _controller.jumpTo(_controller.position.maxScrollExtent);
// });
},
keyboardType: TextInputType.number,
),
),
HEmptyView(40),
InkWell(
onTap: () {
_openAddressBook();
},
child: Container(
height: ScreenUtil().setWidth(48),
alignment: Alignment.center,
child: Text(
'一键录入',
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(30)),
),
),
),
],
),
VEmptyView(30),
MyDivider(double.infinity, ScreenUtil().setWidth(2),
color: MyColours.color_efefef),
//备注
VEmptyView(50),
Row(
children: [
Expanded(
child: TextField(
maxLines: 1,
inputFormatters: [LengthLimitingTextInputFormatter(25)],
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(34),
color: MyColours.color_353535),
controller: _homeEnterModel.customController,
focusNode: _needNode,
// 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) {
print(value);
currentRemark = value;
// print();
},
onEditingComplete: () {
print('fff');
_needNode.unfocus();
},
// keyboardType: TextInputType.number,
)),
InkWell(
onTap: () {
DialogUtil.showRemarkDialog(
context, remarkManagerModel.ofenRemarks, (item) {
int index = remarkManagerModel.ofenRemarks.indexOf(item);
_refreshRemark(remarkManagerModel.ofenRemarks, index);
});
},
child: Container(
margin: EdgeInsets.only(left: ScreenUtil().setWidth(40)),
width: ScreenUtil().setWidth(122),
height: ScreenUtil().setWidth(42),
child: Text(
'常用备注',
style: TextStyle(
fontSize: ScreenUtil().setSp(30),
color: MyColours.color_199095),
),
),
),
],
),
VEmptyView(30),
MyDivider(double.infinity, ScreenUtil().setWidth(2),
color: MyColours.color_efefef),
//日期2020-01-01 ***** 早餐/午餐/晚餐 ***** 时间段16:30
VEmptyView(50),
Row(
// mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
_buttonChoose(dateText, (value) {
if (dateText == '') {
_calendWidget(DateTime.now());
} else {
// bool isThird = true;
_calendWidget(dateTimeNow);
}
}),
HEmptyView(40),
_buttonChoose(
currTimeIndex == 1
? '早餐'
: currTimeIndex == 2
? '午餐'
: '晚餐', (value) {
FocusScope.of(context).requestFocus(FocusNode()); //隐藏键盘
List<String> temp = [];
for (int i = 0; i < _homeEnterModel.sunDateList.length; i++) {
temp.add(_homeEnterModel.sunDateList[i]['dateText']);
}
_showMorningAndNightChooseWidget(context, temp);
}),
HEmptyView(40),
_buttonChoose(
_homeEnterModel.ddateStr == '' ||
_homeEnterModel.isSetDate == '0'
? '时间(选填)'
: _homeEnterModel.ddateStr, (value) {
FocusScope.of(context).requestFocus(FocusNode()); //隐藏键盘
_showDateChooseWidget(context);
}),
],
),
VEmptyView(40),
Row(
children: [
Text('预计人数',
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setWidth(28))),
HEmptyView(20),
_buttonChoose(pnum, (value) {
FocusScope.of(context).requestFocus(FocusNode()); //隐藏键盘
DialogUtil.showSelectCusmanDialog(
context, _homeEnterModel.personNumList, (value) {
if (value != null) {
setState(() {
selectPnum = value.first;
pnum = _homeEnterModel.personNumList[value.first];
});
String ymyStr = dateText; //年月日
String timeStr = ymyStr + ' ' + "00:00:00";
int ddate = DateUtil.getDateMsByTimeStr(timeStr); //筛选日期时间戳
// String pnum = Utils.getPnum(_homeEnterModel.personNumList);
_homeEnterModel.getNewTableList(
context,
'${ddate}',
currTimeIndex.toString(),
pnum,
_homeEnterModel.tableList);
_homeEnterModel.notifyListeners();
}
}, selecteds: selectPnum == null ? [] : [selectPnum])
.then((value) {});
}),
HEmptyView(20),
Text('人',
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setWidth(28))),
],
),
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: _homeEnterModel.dateList.map((value) {
// return CustomButton(
// dateText: value['title'].toString().length <= 5
// ? value['title'].toString()
// : value['title'].toString().substring(5),
// 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 < _homeEnterModel.dateList.length;
// j++) {
// _homeEnterModel.dateList[j]['select'] = false;
// if (_homeEnterModel.dateList[j]['title'] ==
// value['title']) {
// _homeEnterModel.dateList[j]['select'] = true;
// if (j == 0 || j == 1) {
// _homeEnterModel.dateList[2]['title'] = '其他';
// }
// if (j == _homeEnterModel.dateList.length - 1) {
// String selectStr = _homeEnterModel.dateList[2]
// ['title'] +
// " 00:00:00";
// _calendWidget(DateUtil.getDateTime(selectStr));
// }
// }
// }
// _homeEnterModel.initHourAndMinuteSelect();
// //选完今天明天刷新页面
// int ddate = Utils.getDdate(_homeEnterModel.dateList);
// String ddateSolt =
// Utils.getDdateSolt(_homeEnterModel.sunDateList);
// // String pnum =
// // Utils.getPnum(_homeEnterModel.personNumList);
// List<t.TableList> list =
// await _homeEnterModel.getNewTableList(
// context,
// '${ddate}',
// ddateSolt,
// pnum,
// _homeEnterModel.tableList);
// if (list.length == 0) {
// _homeEnterModel.isRecommend = true;
// }
// }
// _homeEnterModel.notifyListeners();
// },
// );
// }).toList()),
// VEmptyView(40),
// //早市、午市、晚市
// Row(
// // mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: _homeEnterModel.sunDateList.map((value) {
// return Container(
// margin: _homeEnterModel.sunDateList.length == 3 &&
// value['ddateSolt'] == 3
// ? EdgeInsets.only(right: 0)
// : EdgeInsets.only(right: ScreenUtil().setWidth(20)),
// child: CustomButton(
// onTap: () {
// FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
// String key = '';
// for (var item in _homeEnterModel.sunDateList) {
// item['isSelect'] = false;
// if (item['dateText'] == value['dateText']) {
// item['isSelect'] = true;
// if (item['ddateSolt'] == 1) {
// //早市
// key = 'morning';
// } else if (item['ddateSolt'] == 2) {
// //午市
// key = 'noon';
// } else if (item['ddateSolt'] == 3) {
// //晚市
// key = 'night';
// }
// }
// }
// _homeEnterModel.initHourAndMinuteSelect();
// if (key != '') {
// for (var sunitem in _homeEnterModel.dailyMap[key]) {
// if (sunitem['select'] == true) {
// _homeEnterModel.ddateStr = sunitem['title'];
// }
// }
// }
// _homeEnterModel.notifyListeners();
// int ddate = Utils.getDdate(_homeEnterModel.dateList);
// // String pnum = Utils.getPnum(_homeEnterModel.personNumList);
// String ddateSolt =
// Utils.getDdateSolt(_homeEnterModel.sunDateList);
// _homeEnterModel.getNewTableList(context, '${ddate}',
// '${ddateSolt}', pnum, _homeEnterModel.tableList);
// },
// dateText: value['dateText'],
// dayText: '',
// isSelect: value['isSelect'],
// ),
// );
// }).toList()),
// VEmptyView(40),
// ///人数选择
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: _homeEnterModel.personNumList.map((value) {
// return CustomButton(
// onTap: () {
// for (int j = 0;
// j < _homeEnterModel.personNumList.length;
// j++) {
// _homeEnterModel.personNumList[j]['isSelect'] = false;
// if (_homeEnterModel.personNumList[j]['dateText'] ==
// value['dateText']) {
// _homeEnterModel.personNumList[j]['isSelect'] = true;
// if (j < 5) {
// _homeEnterModel.numController.text = value['dateText'];
// FocusScope.of(context)
// .requestFocus(FocusNode()); //点击空白处隐藏键盘
// }
// // if (j < 5) {
// // _homeEnterModel.personNumList[5]
// // ['dateText'] = '更多';
// // }
// }
// }
// _homeEnterModel.notifyListeners();
// //人数选择页面刷新
// // String pnum = Utils.getPnum(_homeEnterModel.personNumList);
// int ddate = Utils.getDdate(_homeEnterModel.dateList);
// String ddateSolt =
// Utils.getDdateSolt(_homeEnterModel.sunDateList);
// _homeEnterModel.getNewTableList(context, '${ddate}',
// ddateSolt, pnum, _homeEnterModel.tableList);
// },
// dateText: value['dateText'],
// fontSize: value['fontSize'],
// dayText: '',
// width: value['width'],
// isImage: value['isImage'],
// isSelect: value['isSelect'],
// isTextFiled: value['isTextFiled'],
// model: _homeEnterModel,
// );
// }).toList(),
// ),
// VEmptyView(20),
],
),
);
}
_calendWidget(DateTime dateTime) {
FocusScope.of(context).requestFocus(FocusNode()); //隐藏键盘
DialogUtil.showCalendarDialog(context, dateTime).then((day) {
if (day != null) {
// _createDateText(day);
dateTimeNow = day;
int dateTimeMill = day.millisecondsSinceEpoch;
dateText = DateUtil.formatDateMs(dateTimeMill, format: 'yyyy-MM-dd');
// bool isThird = true;
// for (int i = 0; i < _homeEnterModel.dateList.length; i++) {
// _homeEnterModel.dateList[i]['select'] = false;
// if (_homeEnterModel.dateList[i]['title'] == dateText) {
// _homeEnterModel.dateList[i]['select'] = true;
// isThird = false;
// }
// }
// if (isThird) {
// _homeEnterModel.dateList[2]['select'] = true;
// _homeEnterModel.dateList[2]['title'] = dateText;
// } else {
// _homeEnterModel.dateList[2]['title'] = '其他';
// }
_homeEnterModel.initHourAndMinuteSelect();
// 选完日历刷新页面
// String pnum = Utils.getPnum(_homeEnterModel.personNumList);
_homeEnterModel.getNewTableList(context, '${dateTimeMill}',
currTimeIndex.toString(), pnum, _homeEnterModel.tableList);
}
_homeEnterModel.notifyListeners();
});
}
/// 可订桌位
_middleWidget() {
List canBookTable = [];
if (_homeEnterModel.isRecommend) {
canBookTable = _homeEnterModel.recommendList;
} else {
canBookTable = _homeEnterModel.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 ymyStr = dateText; //年月日
String timeStr = ymyStr + ' ' + "00:00:00";
int ddate = DateUtil.getDateMsByTimeStr(timeStr); //筛选日期时间戳
String ddateSolt = currTimeIndex.toString();
// String tempDdate = ymyStr + ' ' + ddateStr + ':00';
// int ddate = DateUtil.getDateMsByTimeStr(timeStr);
Map temp = await NavigatorUtil.goSelectTablePage(
context, '', ddate, ddateSolt,
canChoose: true,
object: {'object': _homeEnterModel.tableList});
// if (temp['tid'] != null) {
// setReserveStatus("5", tid: temp['tid']);
// }
if (temp == null || temp['object'].length == 0) {
if (_homeEnterModel.tableList.length == 0) {
_homeEnterModel.isRecommend = true;
_homeEnterModel.tableList = [];
for (t.TableList item in _homeEnterModel.recommendList) {
item.selected = false;
}
setState(() {});
}
} else {
_homeEnterModel.isRecommend = false;
_homeEnterModel.tableList = temp['object'];
// if (_homeEnterModel.tableList.length == 0) {
// isRecommend = true;
// }
for (t.TableList item in _homeEnterModel.tableList) {
item.selected = true;
}
setState(() {});
}
// _homeEnterModel.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) {
_homeEnterModel.tableList.add(table);
} else {
_homeEnterModel.tableList
.removeWhere((t) => t.id == table.id);
}
},
);
},
itemCount: canBookTable.length > 3 ? 3 : canBookTable.length,
shrinkWrap: true,
scrollDirection: Axis.horizontal,
),
),
),
],
),
);
}
_refreshRemark(List<Remark> remark, int index) {
if (remark[index].selected) {
if (currentRemark.length == 0) {
currentRemark += '${remark[index].custom}';
} else {
if (!currentRemark.contains(remark[index].custom)) {
if (currentRemark.endsWith('、')) {
currentRemark += '${remark[index].custom}';
} else {
currentRemark += '、${remark[index].custom}';
}
}
}
} else {
if (currentRemark.contains(remark[index].custom)) {
int start = currentRemark.indexOf(remark[index].custom);
int end = start + remark[index].custom.length;
currentRemark = currentRemark.replaceRange(start, end, '');
if (currentRemark.endsWith('、')) {
currentRemark = currentRemark.substring(0, currentRemark.length - 1);
}
if (currentRemark.startsWith('、')) {
currentRemark = currentRemark.substring(1, currentRemark.length);
}
if (currentRemark.contains('、、')) {
currentRemark = currentRemark.replaceRange(
currentRemark.indexOf('、、'),
currentRemark.indexOf('、、') + 2,
'、');
}
}
}
if (currentRemark.length > 25) {
currentRemark = currentRemark.substring(0, 25);
}
setState(() {
_homeEnterModel.customController.text = currentRemark;
});
}
_getCurruntIndex(String title) {
switch (title) {
case '早餐':
return 1;
case '午餐':
return 2;
case '晚餐':
return 3;
default:
return 4;
}
}
List<Widget> _eatTimeWidget(List list) {
List<Widget> temp = [];
for (int i = 0; i < list.length; i++) {
temp.add(CustomButton(
onTap: () {
currTimeIndex = _getCurruntIndex(list[i]);
// state(() {
// for (var item in tempMndList) {
// item['select'] = false;
// if (item['title'] ==
// tempMndList[index]['title']) {
// item['select'] = true;
// _homeEnterModel.isSetDate = "1";
// _homeEnterModel.ddateStr = item['title'];
// }
// }
// });
if (currTimeIndex == 1) {
_homeEnterModel.ddateStr = '8:00';
} else if (currTimeIndex == 2) {
_homeEnterModel.ddateStr = '12:00';
} else if (currTimeIndex == 3) {
_homeEnterModel.ddateStr = '18:30';
}
// _homeEnterModel.initHourAndMinuteSelect();
// 刷新页面
String ymyStr = dateText; //年月日
String timeStr = ymyStr + ' ' + "00:00:00";
int ddate = DateUtil.getDateMsByTimeStr(timeStr); //筛选日期时间戳
// String pnum = Utils.getPnum(_homeEnterModel.personNumList);
_homeEnterModel.getNewTableList(context, '${ddate}',
currTimeIndex.toString(), pnum, _homeEnterModel.tableList);
_homeEnterModel.notifyListeners();
Navigator.pop(context);
},
width: 80,
height: 36,
dateText: list[i],
dayText: '',
isSelect: _getCurruntIndex(list[i]) == currTimeIndex,
));
if (i < list.length - 1) {
temp.add(HEmptyView(80));
}
}
return temp;
}
///底部弹框,早餐,午餐,晚餐
_showMorningAndNightChooseWidget(
BuildContext context, List<String> list) async {
// List tempMndList = [];
String title = '用餐时段';
// String key;
// for (var item in _homeEnterModel.sunDateList) {
// if (item['isSelect'] == true) {
// title = item['dateText'];
// key = item['key'];
// tempMndList = _homeEnterModel.dailyMap[key];
// }
// }
final option = await showModalBottomSheet(
context: context,
isScrollControlled: true,
backgroundColor: Colors.white,
builder: (context) {
return StatefulBuilder(builder: (context, state) {
return SafeArea(
child: Container(
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(ScreenUtil().setWidth(10))),
child: Column(
mainAxisSize: MainAxisSize.min,
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)),
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(60),
vertical: ScreenUtil().setWidth(40)),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: _eatTimeWidget(list)),
// child:GridView.builder(
// padding:
// EdgeInsets.only(top: ScreenUtil().setWidth(20)),
// shrinkWrap: true,
// cacheExtent: ScreenUtil().setWidth(0),
// itemCount: list.length,
// gridDelegate:
// SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: list.length,
// childAspectRatio: 80 / 36,
// mainAxisSpacing:
// ScreenUtil().setWidth(15 * 2),
// crossAxisSpacing:
// ScreenUtil().setWidth(40 * 2)),
// itemBuilder: (BuildContext context, int index) {
// // locationState = state;
// return CustomButton(
// onTap: () {
// currTimeIndex = _getCurruntIndex(list[index]);
// // state(() {
// // for (var item in tempMndList) {
// // item['select'] = false;
// // if (item['title'] ==
// // tempMndList[index]['title']) {
// // item['select'] = true;
// // _homeEnterModel.isSetDate = "1";
// // _homeEnterModel.ddateStr = item['title'];
// // }
// // }
// // });
// if (currTimeIndex == 1) {
// _homeEnterModel.ddateStr = '8:00';
// } else if (currTimeIndex == 2) {
// _homeEnterModel.ddateStr = '12:00';
// } else if (currTimeIndex == 3) {
// _homeEnterModel.ddateStr = '18:30';
// }
// // _homeEnterModel.initHourAndMinuteSelect();
// _homeEnterModel.notifyListeners();
// Navigator.pop(context);
// },
// width: 80,
// height: 36,
// dateText: list[index],
// dayText: '',
// isSelect: _getCurruntIndex(list[index]) ==
// currTimeIndex,
// );
// })
),
VEmptyView(30)
],
),
));
});
});
}
///底部弹框,设置时间30分钟间隔布局
_showDateChooseWidget(BuildContext context) async {
List tempMndList = [];
String title = '早市';
String key;
for (var item in _homeEnterModel.sunDateList) {
int tempIndex = _getCurruntIndex(item['dateText']);
if (currTimeIndex == tempIndex) {
title = item['dateText'];
key = item['key'];
tempMndList = _homeEnterModel.dailyMap[key];
}
// if (item['isSelect'] == true) {
// }
}
final option = await showModalBottomSheet(
context: context,
isScrollControlled: true,
backgroundColor: Colors.white,
builder: (context) {
return StatefulBuilder(builder: (context, state) {
return SafeArea(
child: Container(
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(ScreenUtil().setWidth(10))),
child: Column(
mainAxisSize: MainAxisSize.min,
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)),
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(60),
vertical: ScreenUtil().setWidth(40)),
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;
_homeEnterModel.isSetDate = "1";
_homeEnterModel.ddateStr = item['title'];
}
}
// });
String ymyStr = dateText; //年月日
String timeStr = ymyStr + ' ' + "00:00:00";
int ddate = DateUtil.getDateMsByTimeStr(
timeStr); //筛选日期时间戳
// String pnum = Utils.getPnum(_homeEnterModel.personNumList);
_homeEnterModel.getNewTableList(
context,
'${ddate}',
currTimeIndex.toString(),
pnum,
_homeEnterModel.tableList);
_homeEnterModel.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)),
),
),
),
);
}
_openAddressBook() async {
if (!(await checkContactPermission())) {
PermissionStatus permissionStatus = await contactPermissionStatus();
if (permissionStatus == PermissionStatus.permanentlyDenied) {
//用户选择不在弹出权限提示框
print('never');
DialogUtil.openAlertDialog(
context, '未获得通讯录权限', "请在手机的权限管理里,将通讯录权限开启", '去设置', 340.0,
onTap: () {
openSetting();
Navigator.pop(context, '');
});
} else {
// 申请权限
bool canContacts = await requestContactPermission();
if (canContacts) {
_getContactData();
} else {
//拒绝通讯录权限 , 苹果拒绝权限后,不再提示权限框,进入此处
DialogUtil.openAlertDialog(
context, '未获得通讯录权限', "请在手机的权限管理里,将通讯录权限开启。", '去设置', 340.0,
onTap: () {
openSetting();
Navigator.pop(context, '');
});
}
}
} else {
_getContactData();
}
}
_getContactData() async {
Contact contact = await _contactPicker.selectContactWithNative();
setState(() {
String fullName =
contact.fullName.replaceAll(new RegExp(r"\s+\b|\b\s"), "");
String phone =
contact.phoneNumber.replaceAll(new RegExp(r"\s+\b|\b\s"), "");
if (fullName.compareTo(phone) == 0) {
fullName = '';
} else {
fullName = contact.fullName;
}
_homeEnterModel.phoneController.text = contact.phoneNumber;
_homeEnterModel.nameController.text = fullName;
});
}
@override
Widget build(BuildContext context) {
_homeEnterModel = Provider.of<HomeEnterModel>(context, listen: true);
userModel = Provider.of<UserModel>(context, listen: false);
remarkManagerModel = Provider.of<RemarkManagerModel>(context, listen: true);
return GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
},
child: Scaffold(
backgroundColor: Colors.white,
body: Column(children: <Widget>[
SystemAppBar(
'录入预订',
showLeading: false,
rightImgName: '清空',
onTapRight: () async {
_initTime();
_homeEnterModel.nameController.text = '';
_homeEnterModel.phoneController.text = '';
_homeEnterModel.customController.text = '';
dateText = ""; //当前显示日期时间
// currTimeIndex = null;
_homeEnterModel.ddateStr = '';
pnum = '6';
selectPnum = 5;
dateTimeNow = DateTime.now();
dateText = "${dateTimeNow.year}" +
"-" +
Utils.addZeroNumber(dateTimeNow.month) +
"-" +
Utils.addZeroNumber(dateTimeNow.day);
String ddate =
DateTime.now().millisecondsSinceEpoch.toString() + '000';
await _homeEnterModel.getNewTableList(
context, ddate, currTimeIndex.toString(), pnum, []);
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
_homeEnterModel.notifyListeners();
},
),
Expanded(
child: SingleChildScrollView(
controller: _controller,
child: Column(
children: [
_topWidget(),
_middleWidget(),
// _bottomWidget()
],
))),
Container(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(36),
vertical: ScreenUtil().setWidth(30),
),
child: CommonButton(
width: double.infinity,
height: 84,
fontSize: 34,
content: "完成预订",
state: 2,
onPress: () async {
String name = _homeEnterModel.nameController.text.trim();
if (ObjectUtil.isEmpty(name)) {
Utils.showToast("请填写客户姓名");
return;
}
if (_homeEnterModel.tableList.length == 0) {
Utils.showToast("请选择桌位");
return;
}
SunReserveInfoModel _model =
await _homeEnterModel.setReserveInfo(context);
if (ObjectUtil.isNotEmpty(_model.row) ||
ObjectUtil.isNotEmpty(_model.row.id)) {
print('成功');
// _homeEnterModel.clearData();
bus.emit("refresh_detail");
bus.emit("refresh_book_list"); //刷新已预订列表
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 = t.TableList.fromJson(tableinfo[0]).name;
if (tableinfo.length > 1) {
_nameStr = t.TableList.fromJson(tableinfo[0]).name +
'等${tableinfo.length}桌';
}
LogUtil.v(_nameStr);
NavigatorUtil.goInvicationPage(
context,
_model.row.id,
_nameStr,
_model.row.ddate,
ddate_solt,
_model.row.phone,
replace: true);
EventBus().emit("refresh_tablemanager"); //刷新桌位
} else {
Utils.showToast("录入预订订单失败,请重试!");
}
},
))
]),
));
}
}
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 HomeEnterModel model;
final double height;
final String pnum;
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,
this.pnum,
}) : 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 = Utils.getDdate(widget.model.dateList);
String ddateSolt =
Utils.getDdateSolt(widget.model.sunDateList);
// String pnum = Utils.getPnum(widget.model.personNumList);
widget.model.getNewTableList(context, '${ddate}',
ddateSolt, widget.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)))
],
),
),
);
}
}
Widget remarkButton({GestureTapCallback onPress, content, isSelect = false}) {
return InkWell(
onTap: onPress,
child: Container(
height: ScreenUtil().setHeight(48),
margin: EdgeInsets.only(right: ScreenUtil().setWidth(20)),
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(20),
vertical: ScreenUtil().setWidth(6)),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(ScreenUtil().setWidth(10)),
color: isSelect ? MyColours.color_199095 : MyColours.color_f5f5f5,
),
child: Align(
alignment: Alignment.center,
child: Text(
content,
style: TextStyle(
color: isSelect ? Colors.white : MyColours.color_353535,
fontSize: ScreenUtil().setSp(28)),
),
),
),
);
}
... ...
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:one_key/app.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/models/user_history_entity.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 HomeEnterModel with ChangeNotifier {
List dateList = []; //日期选择 月-日 某天
List sunDateList = []; // 早市、午市、晚市
List personNumList = []; // 人数
TextEditingController numController = TextEditingController(); //人数
TextEditingController phoneController = TextEditingController(); //电话
TextEditingController nameController = TextEditingController(); //客户姓名
TextEditingController customController = TextEditingController(); //客户要求
List sexList = []; // 先生、女士、公司
Map dailyMap = {}; // 早市对应半点钟,午市对应半点钟、晚市对应半点钟
List<String> mornings = []; //早市时间段
List<String> noons = []; //午市时间段
List<String> nights = []; //晚市时间段
String ddateStr = ''; //16:30
List<TableList> tableList = [];
String isSetDate = '0';
List<TableList> recommendList = []; //推荐列表
bool isRecommend = false; //是否展示推荐
List oldTableList = [];
List<UserHistoryEntity> userHistorys = []; //历史录入
clearData() {
dateList = []; //日期选择 月-日 某天
sunDateList = []; // 早市、午市、晚市
personNumList = []; // 人数
numController = TextEditingController(); //人数
phoneController = TextEditingController(); //电话
nameController = TextEditingController(); //客户姓名
customController = TextEditingController(); //客户要求
sexList = []; // 先生、女士、公司
dailyMap = {}; // 早市对应半点钟,午市对应半点钟、晚市对应半点钟
ddateStr = ''; //16:30
tableList = [];
isSetDate = '0';
}
//构造函数,初始化
HomeEnterModel() {
_initDateList();
_initPersonNumList();
_initSexList();
}
///初始化 日期选择 月-日 某天
_initDateList() {
//今天
DateTime dateTime = DateTime.now();
int dateTimeMill = dateTime.millisecondsSinceEpoch;
String dateText = DateUtil.formatDateMs(dateTimeMill, format: 'yyyy-MM-dd');
dateList.add({
'title': dateText,
'select': false,
'fontSize': 34.0,
'dayText': ' 今天',
'isImage': false
});
//明天
int tomorrowMill = dateTimeMill + 24 * 60 * 60 * 1000;
String dateTextTomorrow =
DateUtil.formatDateMs(tomorrowMill, format: 'yyyy-MM-dd');
dateList.add({
'title': dateTextTomorrow,
'select': false,
'fontSize': 34.0,
'dayText': ' 明天',
'isImage': false
});
//第三个
dateList.add({
'title': '其他',
'select': false,
'fontSize': 30.0,
'dayText': '',
'isImage': true
});
}
/// 初始化 早市、午市、晚市
_initSunDateList(morning, noon, night, ddateSolt) {
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 (night != '') {
sunDateList.add({
'dateText': '晚餐',
'dayText': '',
'ddateSolt': 3,
'key': 'night',
'isSelect': ddateSolt == 3 ? true : false
});
}
initHourAndMinuteSelect();
notifyListeners();
}
//人数
_initPersonNumList() {
personNumList = [];
for (int i = 1; i < 31; i++) {
personNumList.add(i.toString());
}
personNumList.add('30以上');
}
///称谓
_initSexList() {
String sexStr = '1';
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, int index) async {
UserModel userModel = Provider.of<UserModel>(context, listen: false);
userModel.user.morning == ''
? dailyMap.putIfAbsent('morning', () => '')
: dailyMap.putIfAbsent(
'morning', () => _getHourAndMinute(userModel.user.morning, 1));
userModel.user.noon == ''
? dailyMap.putIfAbsent('noon', () => '')
: dailyMap.putIfAbsent(
'noon', () => _getHourAndMinute(userModel.user.noon, 2));
userModel.user.night == ''
? dailyMap.putIfAbsent('night', () => '')
: dailyMap.putIfAbsent(
'night', () => _getHourAndMinute(userModel.user.night, 3));
_initSunDateList(userModel.user.morning, userModel.user.noon,
userModel.user.night, index);
}
//根据获取时间 11:00-12:30 获取30分钟间隔组装的数组
_getHourAndMinute(String hourAndMinuteStr, int mnd) {
List tempDate = hourAndMinuteStr.split("-");
String beginDate = tempDate[0];
String endDate = tempDate[1];
List tempHour = beginDate.split(':');
/*获取开始小时*/
int beginHour = int.parse(tempHour[0]);
/*获取开始分钟*/
int beginMinute = int.parse(tempHour[1]);
List res = [];
bool tempLimit = true;
while (tempLimit) {
String temp = _dealTime(beginHour, beginMinute);
if (mnd == 1) {
//早市
mornings.add(temp);
} else if (mnd == 2) {
//午市
noons.add(temp);
} else if (mnd == 3) {
//晚市
nights.add(temp);
}
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;
}
//初始化早市午市晚市选中时间
initHourAndMinuteSelect() {
int timeMillsNow = DateTime.now().millisecondsSinceEpoch;
//当前选中 年-月-日
String ymyStr = "";
//今天 明天 其他天
for (var item in dateList) {
if (item['select'] == true) {
ymyStr = item['title'];
}
}
String timeStr = ymyStr + ' 00:00:00';
LogUtil.v(timeStr);
DateTime dateTime = DateUtil.getDateTime(timeStr); //当前年月日
for (var sunDate in sunDateList) {
if (sunDate['isSelect'] == false) continue;
switch (sunDate['key']) {
case "morning": //选中早市
bool select = false;
for (var temp in dailyMap['morning']) {
//早市选中距离当前时间最近
temp['select'] = false;
if (select) continue; //只选中第一个
if (timeMillsNow <=
DateUtil.getDateMsByTimeStr(DateUtil.formatDate(dateTime)
.replaceRange(11, 19, "${temp['title']}:00"))) {
temp['select'] = true;
select = true;
}
}
break;
case "noon": //选中午市
bool select = false;
for (var temp in dailyMap['noon']) {
//午市选中12:30
temp['select'] = false;
if (select) continue;
if (noons.contains("12:30") &&
timeMillsNow <=
DateUtil.getDateMsByTimeStr(DateUtil.formatDate(dateTime)
.replaceRange(11, 19, "12:30:00"))) {
if (temp['title'] == "12:30") {
temp['select'] = true;
select = true;
}
} else {
if (timeMillsNow <=
DateUtil.getDateMsByTimeStr(DateUtil.formatDate(dateTime)
.replaceRange(11, 19, "${temp['title']}:00"))) {
temp['select'] = true;
select = true;
}
}
}
break;
case "night": //选中晚市
bool select = false;
for (var temp in dailyMap['night']) {
//晚市选中18:30
temp['select'] = false;
if (select) continue;
if (nights.contains("18:30") &&
timeMillsNow <=
DateUtil.getDateMsByTimeStr(DateUtil.formatDate(dateTime)
.replaceRange(11, 19, "18:30:00"))) {
if (temp['title'] == "18:30") {
temp['select'] = true;
select = true;
}
} else {
if (timeMillsNow <=
DateUtil.getDateMsByTimeStr(DateUtil.formatDate(dateTime)
.replaceRange(11, 19, "${temp['title']}:00"))) {
temp['select'] = true;
select = true;
}
}
}
break;
}
}
LogUtil.v(dailyMap);
}
/// 根据时间和分钟组装 格式: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,
"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 ymyStr = "";
//今天 明天 其他天
for (var item in dateList) {
if (item['select'] == true) {
ymyStr = item['title'];
}
}
String timeStr = ymyStr + ' ' + ddateStr + ':00';
// int start = DateUtil.getDateMsByTimeStr(timeStr);
LogUtil.v(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 != '') {
List temp = dailyMap[keys];
String timeStrStart = ymyStr + ' ' + temp.first['title'] + ':00';
String timeStrEnd = ymyStr + ' ' + temp.last['title'] + ':00';
int startM = DateUtil.getDateMsByTimeStr(timeStrStart);
int endM = DateUtil.getDateMsByTimeStr(timeStrEnd);
String start = '${startM}'.substring(0, 10);
String end = '${endM}'.substring(0, 10);
rdate = start + '-' + end;
}
}
}
Map<String, String> params = {
"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汉字
'note_name': userModel.user.account,
'type': "0", //内部预订
"rdate": rdate, //预定用餐时间范围:时间戳 开始时间戳(time)-结束时间戳(time)
"ddate": '${ddate}'.substring(0, 10), //到店时间
'is_set_ddate': "1"
};
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("录入预订订单失败,请重试!");
}
return itemModel;
}
}
//获取历史录入
getUserHistorys(BuildContext context, Map<String, String> params) async {
BaseResp<List> baseResp = await DioUtil()
.request<List>(context, Method.get, HttpUrl.get_reserve_user,
data: params, showLoading: false)
.catchError((error) {
print(error.toString());
});
if (baseResp != null && baseResp.code == Constant.status_success) {
userHistorys = baseResp.data.map<UserHistoryEntity>((value) {
return UserHistoryEntity.fromJson(value);
}).toList();
notifyListeners();
}
}
}
... ...
... ... @@ -35,7 +35,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);
}
... ...