Commit 5166acdffcba2e5efb7d0f5661af4d1fc18d04cb

Authored by wdn127929
1 parent 288d1636

用餐类型

... ... @@ -119,6 +119,7 @@ class Constant {
'前台',
],
'人数': ['管理员', '店长', '前台'],
'用餐类型': ['管理员', '店长', '前台'],
'消费金额': [
'管理员',
'店长',
... ...
class GetReserveTypeFieldModel {
int ret;
List<GetReserveTypeFieldsSunModel> data;
String msg;
GetReserveTypeFieldModel({this.ret, this.data, this.msg});
GetReserveTypeFieldModel.fromJson(Map<String, dynamic> json) {
ret = json['ret'];
if (json['data'] != null) {
data = <GetReserveTypeFieldsSunModel>[];
json['data'].forEach((v) {
GetReserveTypeFieldsSunModel temp =
GetReserveTypeFieldsSunModel(name: v, select: false);
data.add(temp);
});
}
msg = json['msg'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ret'] = this.ret;
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
data['msg'] = this.msg;
return data;
}
}
class GetReserveTypeFieldsSunModel {
String name;
bool select;
GetReserveTypeFieldsSunModel({this.name, this.select});
GetReserveTypeFieldsSunModel.fromJson(Map<String, dynamic> json) {
name = json['name'];
select = json['select'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['select'] = this.select;
return data;
}
}
... ...
... ... @@ -104,6 +104,7 @@ class NotebookDetail {
String con_amount;
String gid;
String guest_uid;
String reserve_type;
String place_order_name; //下单人
dynamic is_user_comments; //是否评价过
... ... @@ -304,7 +305,7 @@ class NotebookDetail {
@override
String toString() {
return 'NotebookDetail{id: $id, uid: $uid ,con_amount:$con_amount,abolition: $abolition, tableinfo: $tableinfo,actual_pum:$actual_pum, pnum: $pnum, rname: $rname, sex: $sex, phone: $phone, cusdem: $cusdem, cusman: $cusman, ddate: $ddate, is_set_ddate: $is_set_ddate, ddate_solt: $ddate_solt, status: $status, action: $action, type: $type, note_name: $note_name, seller_user_phone:$seller_user_phone, nick_name: $nick_name,channel: $channel, cdate: $cdate, demands: $demands, tables: $tables, cancel: $cancel, gid: $gid,guest_uid:$guest_uid,place_order_name:$place_order_name,is_user_comments:$is_user_comments,up_date:$up_date}';
return 'NotebookDetail{id: $id, uid: $uid ,con_amount:$con_amount,abolition: $abolition, tableinfo: $tableinfo,actual_pum:$actual_pum, pnum: $pnum, rname: $rname, sex: $sex, phone: $phone, cusdem: $cusdem, cusman: $cusman, ddate: $ddate, is_set_ddate: $is_set_ddate, ddate_solt: $ddate_solt, status: $status, action: $action, type: $type, note_name: $note_name, seller_user_phone:$seller_user_phone, nick_name: $nick_name,channel: $channel, cdate: $cdate, demands: $demands, tables: $tables, cancel: $cancel, gid: $gid,guest_uid:$guest_uid,reserve_type:$reserve_type,place_order_name:$place_order_name,is_user_comments:$is_user_comments,up_date:$up_date}';
}
}
... ...
... ... @@ -51,6 +51,7 @@ NotebookDetail _$NotebookDetailFromJson(Map<String, dynamic> json) {
: OrderInfo.fromJson(json['order_info'] as Map<String, dynamic>)
..gid = json['gid'] as String
..guest_uid=json['guest_uid'] as String
..reserve_type = json['reserve_type'] as String
..place_order_name = json['place_order_name'] as String
..is_user_comments = json['is_user_comments'] as dynamic
..up_date = json['up_date'] as String;
... ... @@ -91,6 +92,7 @@ Map<String, dynamic> _$NotebookDetailToJson(NotebookDetail instance) =>
'order_info': instance.orderInfo,
'gid': instance.gid,
'guest_uid':instance.guest_uid,
'reserve_type':instance.reserve_type,
'place_order_name': instance.place_order_name,
'is_user_comments': instance.is_user_comments,
'up_date':instance.up_date,
... ...
... ... @@ -495,4 +495,7 @@ class HttpUrl {
static const String get_export_info =
"?service=App.Seller.GetExportInfo"; // 获取App导出数据
static const String get_reserve_type_field =
"?service=App.Seller.GetReserveTypeField"; // 获取用餐类型
}
... ...
... ... @@ -118,6 +118,7 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
CollectStoreProvider collectStoreProvider;
ScrollController controller = ScrollController();
String reserveType = '请选择';
@override
void initState() {
... ... @@ -133,6 +134,7 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
offset: value.toString().length)));
});
getSellerVersion();
_getReserveTypeField();
_initCancel();
_getReserveDetail();
_getOrderInfo();
... ... @@ -170,6 +172,10 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
});
}
_getReserveTypeField() async {
await detailModel.getReserveTypeField(context);
}
/// 通过预订ID查收定金详情
_getReserveDepositByRid() async {
Map<String, String> params = {
... ... @@ -432,6 +438,11 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
"rid": widget.rid,
},
showCircle: showCicle);
reserveType =
detailEntity.reserve_type == null || detailEntity.reserve_type == ''
? '请选择'
: detailEntity.reserve_type;
_initTime(int.parse(detailEntity.ddate_solt));
setState(() {
// detailModel.selectNum = detailEntity.actual_pum;
... ... @@ -1913,7 +1924,7 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
child: TitleAndBtn(
title: "时间",
content: ddateHm,
list: personNumList,
// list: personNumList,
detailModel: model,
uid: widget.uid,
callback: () {
... ... @@ -2031,6 +2042,42 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
))
]),
TitleAndBtn(
title: "用餐类型",
content: reserveType,
// list: personNumList,
detailModel: model,
callback: () {
FocusScope.of(context)
.requestFocus(
FocusNode()); //隐藏键盘
// 存储
DialogUtil
.openDishTypeSelectModalBottomSheet(
context,
detailModel
.reserveTypes,
reserveType,
rCallback:
(value) async {
if (value != null) {
reserveType = value;
setState(() {});
bool sucess =
await detailModel
.upReserveInfo(
context,
widget.rid,
reserveType:
reserveType,
needToast:
false);
if (sucess) {}
}
});
}),
// ),
// Offstage(
// offstage:
... ... @@ -4329,7 +4376,7 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
class TitleAndBtn extends StatelessWidget {
final String title;
final String content;
final List<String> list;
// final List<String> list;
final NotebookDetailModel detailModel;
final GestureTapCallback callback;
final String uid;
... ... @@ -4337,7 +4384,7 @@ class TitleAndBtn extends StatelessWidget {
{Key key,
this.title,
this.content,
this.list,
// this.list,
this.detailModel,
this.callback,
this.uid})
... ... @@ -4405,7 +4452,10 @@ class TitleAndBtn extends StatelessWidget {
uid == userModel.user.openid)
? MyColours.color_199095
: MyColours.color_999999))),
child: Text(content == null || content == '' ? "修改" : content,
child: Text(
content == null || content == '' || content == '请选择'
? "修改"
: content,
style: TextStyle(
color: (Utils.getAuthority(context, title) ||
uid == userModel.user.openid)
... ...
... ... @@ -168,6 +168,7 @@ class InvicationPageState extends State<InvicationPage>
List<String> styleList = []; //餐单类型
String styleShow = '';
int styleIndex;
String reserveType = '请选择';
MyTextSelectionControls _myExtendedMaterialTextSelectionControls =
MyTextSelectionControls();
... ... @@ -287,6 +288,7 @@ class InvicationPageState extends State<InvicationPage>
await _getCustomerActivityBaseinfo();
getDzSellerConf();
_getReserveTypeField();
_timerShow();
await _getReserveDetail(showCicle: false);
... ... @@ -1136,6 +1138,10 @@ class InvicationPageState extends State<InvicationPage>
}
}
_getReserveTypeField() async {
await detailModel.getReserveTypeField(context);
}
///订座详情
_getReserveDetail({bool showCicle = false}) async {
detailEntity = await detailModel.getReserveDetail(
... ... @@ -1145,6 +1151,12 @@ class InvicationPageState extends State<InvicationPage>
},
showCircle: false,
isShowLoading: false);
reserveType =
detailEntity.reserve_type == null || detailEntity.reserve_type == ''
? '请选择'
: detailEntity.reserve_type;
_initTime(int.parse(detailEntity.ddate_solt));
_baseIndoProvider.pageState = PageState.Success;
String _nameStr = '';
... ... @@ -2425,6 +2437,101 @@ class InvicationPageState extends State<InvicationPage>
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
margin: EdgeInsets.only(
// top: ScreenUtil().setWidth(40),
bottom: ScreenUtil().setWidth(40)),
height: ScreenUtil().setWidth(68),
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(16)),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(12)),
// color: Colors.red,
border: Border.all(
width: ScreenUtil().setWidth(2),
color: MyColours.color_DBDBDB)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: TextField(
maxLines: 1,
enabled: false,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_353535),
controller: _baseIndoProvider.nameController,
focusNode: _nameNode,
// textAlignVertical: TextAlignVertical.top,
decoration: InputDecoration(
hintText: "用餐类型",
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(28),
),
// contentPadding:
// EdgeInsets.only(bottom: ScreenUtil().setWidth(17)),
// border: InputBorder.none,
contentPadding: EdgeInsets.zero,
border: OutlineInputBorder(
borderSide: BorderSide.none),
),
onChanged: (value) {},
onTap: () {},
onEditingComplete: () {},
keyboardType: TextInputType.text,
),
),
InkWell(
onTap: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //隐藏键盘
// 存储
DialogUtil.openDishTypeSelectModalBottomSheet(
context,
detailModel.reserveTypes,
reserveType, rCallback: (value) async {
if (value != null) {
reserveType = value;
setState(() {});
bool sucess = await detailModel
.upReserveInfo(context, widget.rid,
reserveType: reserveType,
needToast: false);
if (sucess) {
EventBus()
.emit("refresh_tablemanager"); //刷新桌位
bus.emit("refresh_book_list"); //刷新已预订列表
bus.emit("refresh_detail");
// await _getReserveDetail(
// showCicle: false);
}
}
});
},
child: Row(children: [
Text(
reserveType,
style: TextStyle(
color: reserveType == '请选择'
? MyColours.color_999999
: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28),
),
),
HEmptyView(4),
Image.asset(Utils.getImgPath('quan_down_f'),
width: ScreenUtil().setWidth(28),
height: ScreenUtil().setWidth(28)),
]),
)
],
)),
//输入框
Container(
width: double.infinity,
... ...
... ... @@ -16,6 +16,7 @@ import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/loading.dart';
import 'package:provider/provider.dart';
import '../models/get_reserve_type_field_model.dart';
import '../models/notebook.dart';
import '../models/reserve_deposit_model.dart';
import '../models/reserve_recheck_model.dart';
... ... @@ -36,6 +37,8 @@ class NotebookDetailModel extends ChangeNotifier {
List<ReserveDepositSunModel> reserveDepositList = []; //订单订金数据
List<ReserveRecheckSunModel> reserveRecheckList = []; //核餐记录数据
List<GetReserveTypeFieldsSunModel> reserveTypes = []; //用餐类型
NotebookDetailModel() {
initSexList();
}
... ... @@ -123,6 +126,40 @@ class NotebookDetailModel extends ChangeNotifier {
notifyListeners();
}
///获取用餐类型
Future<dynamic> getReserveTypeField(BuildContext context,
{isShowLoading = true, bool showCircle = false}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.get_reserve_type_field,
showLoading: isShowLoading ? false : showCircle)
.catchError((error) {
print(error.toString());
if (error is MyError) {
// switch (error.type) {
// case 1:
// pageState = PageState.ConnectivityError;
// break;
// case 2:
// pageState = PageState.ConnectivityTimeOut;
// break;
// default:
// pageState = PageState.ConnectivityError;
// break;
// }
}
notifyListeners();
});
if (baseResp.code == Constant.status_success) {
reserveTypes =
GetReserveTypeFieldModel.fromJson(baseResp.responseData).data;
} else {
pageState = PageState.ConnectivityError;
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
}
}
///获取已预订订单
Future<NotebookDetail> getReserveDetail(
BuildContext context, Map<String, String> params,
... ... @@ -355,6 +392,7 @@ class NotebookDetailModel extends ChangeNotifier {
String name,
String phone,
String ymd,
String reserveType,
bool showLoading = false,
bool needToast = true}) async {
if (phone != null && phone != '') {
... ... @@ -399,6 +437,10 @@ class NotebookDetailModel extends ChangeNotifier {
if (phone != null && phone != '') {
params['phone'] = phone;
}
if (reserveType != null && reserveType != '') {
params['reserve_type'] = reserveType;
}
bool sucess = await _upReserveInfo(context, params,
showLoading: showLoading, needToast: needToast);
if (sucess) {
... ...
... ... @@ -38,6 +38,7 @@ import 'package:one_key/models/table.dart' as t;
import 'package:url_launcher/url_launcher.dart';
import '../models/cookbook_model.dart';
import '../models/get_reserve_type_field_model.dart';
import '../models/radio_model.dart';
import '../models/seller_template_color_list_model.dart';
import '../models/seller_version_model.dart';
... ... @@ -60,6 +61,176 @@ typedef ClickCallback = void Function(String value);
// };
class DialogUtil {
static List<Widget> dishSelectBtn(
List<GetReserveTypeFieldsSunModel> menuSunModel,
state,
ClickCallback callback) {
List<Widget> temp = [];
for (int i = 0; i < menuSunModel.length; i++) {
GetReserveTypeFieldsSunModel practiceModel = menuSunModel[i];
temp.add(InkWell(
onTap: () {
for (int j = 0; j < menuSunModel.length; j++) {
menuSunModel[j].select = false;
}
menuSunModel[i].select = true;
callback(menuSunModel[i].name);
state(() {});
},
child: Container(
// height: w(34),
padding:
EdgeInsets.symmetric(horizontal: w(10), vertical: w(5)),
decoration: BoxDecoration(
border: Border.all(
color: practiceModel.select
? MyColours.color_438E93
: MyColours.color_515151,
width: w(1)),
borderRadius: BorderRadius.circular(r(5)),
color: practiceModel.select
? MyColours.color_438E93
: MyColours.color_ffffff,
),
child: Text(practiceModel.name,
style: TextStyle(
fontSize: font(14),
color: practiceModel.select
? MyColours.color_ffffff
: MyColours.color_515151,
)),
))
// RoundButton(
// text: practiceModel.name,
// // bgColor: MyColours.color_ffffff,
// gradientStart: practiceModel.select
// ? MyColours.color_438E93
// : MyColours.color_ffffff,
// gradientEnd: practiceModel.select
// ? MyColours.color_438E93
// : MyColours.color_ffffff,
// // width: w(80),
// padding: EdgeInsets.symmetric(horizontal: w(10), vertical: w(5)),
// height: w(34),
// isBold: false,
// radius: r(5),
// textColor: practiceModel.select
// ? MyColours.color_ffffff
// : MyColours.color_515151,
// borderColor: practiceModel.select
// ? MyColours.color_438E93
// : MyColours.color_515151,
// onPressed: () {
// for (int j = 0; j < menuSunModel.length; j++) {
// menuSunModel[j].select = false;
// }
// menuSunModel[i].select = true;
// callback(menuSunModel[i].name);
// state(() {});
// },
// )
);
}
return temp;
}
///用餐类型
static openDishTypeSelectModalBottomSheet(context,
List<GetReserveTypeFieldsSunModel> reserveTypes, String reserveType,
{VoidCallback lCallback, ClickCallback rCallback}) async {
String selectType = reserveType;
if (selectType != '请选择') {
reserveTypes.forEach((element) {
element.select = false;
if (element.name == selectType) {
element.select = true;
}
});
}
final option = await showModalBottomSheet(
context: context,
backgroundColor: Colors.transparent,
isDismissible: false,
isScrollControlled: true,
builder: (BuildContext context) {
return StatefulBuilder(builder: (context, state) {
return Container(
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(ScreenUtil().setWidth(10)),
topRight: Radius.circular(ScreenUtil().setWidth(10)))),
child:
Column(mainAxisSize: MainAxisSize.min, children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
Navigator.of(context).pop();
},
child: Container(
// width: double.infinity,
alignment: Alignment.center,
padding: EdgeInsets.symmetric(
horizontal: w(15),
vertical: ScreenUtil().setWidth(40)),
child: Text(
"取消",
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_438E93),
),
)),
Container(
// width: double.infinity,
alignment: Alignment.center,
padding: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(40)),
child: Text(
"选择客户宴请类型",
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_E6000000),
),
),
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
Navigator.of(context).pop();
rCallback(selectType);
},
child: Container(
// width: double.infinity,
alignment: Alignment.center,
padding: EdgeInsets.symmetric(
horizontal: w(15),
vertical: ScreenUtil().setWidth(40)),
child: Text("确定",
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_438E93)),
)),
]),
VEmptyView(50),
Wrap(
spacing: w(12),
runSpacing: w(12),
children: dishSelectBtn(reserveTypes, state, (value) {
selectType = value;
})),
VEmptyView(50),
]));
});
});
reserveTypes.forEach((element) {
element.select = false;
});
}
static showAuthorityDestination(
BuildContext context, String name, String title, String subTitle) async {
Timer _timer = Timer(const Duration(seconds: 5), () {
... ...