Commit 25ee3657cf40ca0cf908151cfcbb3041ed3be0bc

Authored by wdn127929
1 parent 88f32d67

查看排菜单

... ... @@ -131,6 +131,27 @@ class NotebookDetail {
return demand.substring(0, demand.length - 1);
}
String get ddateymd {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
String md = "${dateTime.year}-" +
Utils.addZeroNumber(dateTime.month) +
"-" +
Utils.addZeroNumber(dateTime.day);
switch (ddate_solt) {
case "1":
md += " 早餐";
break;
case "2":
md += " 午餐";
break;
case "3":
md += " 晚餐";
break;
}
return md;
}
String get ddateMd {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
... ... @@ -213,10 +234,10 @@ class NotebookDetail {
if (type == "0" || (type == "1" && is_set_ddate == "1")) {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
String Hm = Utils.addZeroNumber(dateTime.hour) +
String hm = Utils.addZeroNumber(dateTime.hour) +
":" +
Utils.addZeroNumber(dateTime.minute);
return Hm;
return hm;
} else {
return "";
}
... ...
import 'dart:convert';
import 'package:one_key/models/cookbook_model.dart';
class PlanCookByRidModel {
int ret;
PlanCookByRidSunModel data;
String msg;
PlanCookByRidModel({this.ret, this.data, this.msg});
PlanCookByRidModel.fromJson(Map<String, dynamic> json) {
ret = json['ret'];
data = json['data'] != null
? new PlanCookByRidSunModel.fromJson(json['data'])
: null;
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.toJson();
}
data['msg'] = this.msg;
return data;
}
}
class PlanCookByRidSunModel {
String id;
String sellerid;
String rid;
String uid;
String pnum;
String perPrice;
String totalPrice;
String taboos;
String like;
String serve;
List<MenuModel> cooklist;
List<MenuSunModel> packageList;
// Null? oftenList;
// Null? temporaryList;
List<MenuSunModel> planList;
String menuPrice;
String memberPrice;
String planPrice;
String remark;
String cdate;
String planName;
String status;
PlanCookByRidSunModel(
{this.id,
this.sellerid,
this.rid,
this.uid,
this.pnum,
this.perPrice,
this.totalPrice,
this.taboos,
this.like,
this.serve,
this.cooklist,
this.packageList,
// this.oftenList,
// this.temporaryList,
this.planList,
this.menuPrice,
this.memberPrice,
this.planPrice,
this.remark,
this.cdate,
this.planName,
this.status});
PlanCookByRidSunModel.fromJson(Map<String, dynamic> json1) {
id = json1['id'];
sellerid = json1['sellerid'];
rid = json1['rid'];
uid = json1['uid'];
pnum = json1['pnum'];
perPrice = json1['per_price'];
totalPrice = json1['total_price'];
taboos = json1['taboos'];
like = json1['like'];
serve = json1['serve'];
if (json1['cooklist'] != null && json1['cooklist'] != '') {
cooklist = <MenuModel>[];
if (json1['cooklist'] is List) {
json1['cooklist'].forEach((v) {
cooklist.add(new MenuModel.fromJson2(v));
});
} else {
json.decode(json1['cooklist']).forEach((v) {
cooklist.add(new MenuModel.fromJson2(v));
});
}
}
if (json1['package_list'] != null && json1['package_list'] != '') {
packageList = <MenuSunModel>[];
if (json1['package_list'] is List) {
json1['package_list'].forEach((v) {
packageList.add(new MenuSunModel.fromJson2(v));
});
} else {
json.decode(json1['package_list']).forEach((v) {
packageList.add(new MenuSunModel.fromJson2(v));
});
}
}
// oftenList = json['often_list'];
// temporaryList = json['temporary_list'];
if (json1['plan_list'] != null && json1['plan_list'] != '') {
planList = <MenuSunModel>[];
if (json1['plan_list'] is List) {
json1['plan_list'].forEach((v) {
planList.add(new MenuSunModel.fromJson2(v));
});
} else {
json.decode(json1['plan_list']).forEach((v) {
planList.add(new MenuSunModel.fromJson2(v));
});
}
}
menuPrice = json1['menu_price'];
memberPrice = json1['member_price'];
planPrice = json1['plan_price'];
remark = json1['remark'];
cdate = json1['cdate'];
planName = json1['plan_name'];
status = json1['status'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['sellerid'] = this.sellerid;
data['rid'] = this.rid;
data['uid'] = this.uid;
data['pnum'] = this.pnum;
data['per_price'] = this.perPrice;
data['total_price'] = this.totalPrice;
data['taboos'] = this.taboos;
data['like'] = this.like;
data['serve'] = this.serve;
data['cooklist'] = this.cooklist;
data['package_list'] = this.packageList;
// data['often_list'] = this.oftenList;
// data['temporary_list'] = this.temporaryList;
data['plan_list'] = this.planList;
data['menu_price'] = this.menuPrice;
data['member_price'] = this.memberPrice;
data['plan_price'] = this.planPrice;
data['remark'] = this.remark;
data['cdate'] = this.cdate;
data['plan_name'] = this.planName;
data['status'] = this.status;
return data;
}
}
... ...
... ... @@ -343,9 +343,13 @@ class HttpUrl {
static const String get_plan_cook_list =
"?service=App.PlanCook.GetPlanCookList"; // 排菜/套餐列表
static const String del_plan_cook =
static const String del_plan_cook =
"?service=App.PlanCook.DelPlanCook"; // 删除排菜/套餐列表
static const String set_plan_cook_by_reserve =
"?service=App.PlanCook.SetPlanCookByReserve"; // 经理预订订单排菜
static const String get_plan_cook_by_rid =
"?service=App.PlanCook.GetPlanCookByRid"; // 根据预定ID获取排菜
}
... ...
... ... @@ -2618,8 +2618,9 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
onTap: () {
NavigatorUtil
.goOrderAdvanceHomePage(
context,
);
context,
detailEntity,
widget.rid);
},
child: Container(
margin: EdgeInsets.only(
... ...
... ... @@ -2,6 +2,7 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:one_key/models/cookbook_model.dart';
import 'package:one_key/models/plan_cook_by_rid_model.dart';
import 'package:one_key/models/plan_cook_list_model.dart';
import 'package:one_key/provider/plan_dish_provider.dart';
import 'package:one_key/utils/screen_util.dart';
... ... @@ -20,13 +21,22 @@ import '../../../widgets/MyDivider.dart';
import '../../../widgets/page_exception.dart';
import '../../../widgets/round_button.dart';
import '../../models/cookbook_model.dart';
import '../../models/notebook_detail.dart';
import '../../provider/user_model.dart';
const scrollDuration = Duration(microseconds: 500);
class OrderAdvanceEidtPage extends StatefulWidget {
final String planId;
final String rid;
final PlanCookByRidSunModel planCookByRidSunModel;
final NotebookDetail detailEntity;
OrderAdvanceEidtPage({
Key key,
this.planId,
this.rid,
this.planCookByRidSunModel,
this.detailEntity,
}) : super(key: key);
@override
... ... @@ -54,11 +64,17 @@ class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
String planDishName;
String planDishRemark;
bool isCar = true;
@override
void initState() {
super.initState();
if (widget.planCookByRidSunModel != null) {
planDishName = widget.planCookByRidSunModel.planName ?? '';
planDishRemark = widget.planCookByRidSunModel.remark ?? '';
}
WidgetsBinding.instance.addPostFrameCallback((_) async {
_getPageMenuData();
});
... ... @@ -72,6 +88,27 @@ class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
if (results[0] && results[1]) {
_planDishProvider.menuModelForManager =
List.from(_planDishProvider.menuModel);
//单个菜品
if (widget.planCookByRidSunModel != null &&
widget.planCookByRidSunModel.cooklist != null &&
widget.planCookByRidSunModel.cooklist.length > 0) {
_planDishProvider.menuModelForManager.forEach((old) {
widget.planCookByRidSunModel.cooklist.forEach((newvalue) {
if (old.id == newvalue.id) {
//同一分类
old.cookbooklist.forEach((oldcook) {
newvalue.cookbooklist.forEach((newcook) {
if (oldcook.id == newcook.id) {
//同一个菜
oldcook.amount = newcook.amount;
carSum += newcook.amount;
}
});
});
}
});
});
}
//成功
MenuModel menuModelSetMeal = MenuModel();
... ... @@ -92,6 +129,33 @@ class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
// menuSunModel.amount = element.amount;
menuSunModel.cookList = element.cookList;
if (widget.planCookByRidSunModel != null &&
widget.planCookByRidSunModel.packageList != null &&
widget.planCookByRidSunModel.packageList.length > 0) {
//套餐数据对应
widget.planCookByRidSunModel.packageList.forEach((package) {
if (package.id == menuSunModel.id) {
//同一个套餐
menuSunModel.amount = package.amount;
menuSunModel.cookList.forEach((oldcooklist) {
package.cookList.forEach((newcooklist) {
if (oldcooklist.id == newcooklist.id) {
//同一菜品分类
oldcooklist.cookbooklist.forEach((oldcook) {
newcooklist.cookbooklist.forEach((newcook) {
if (oldcook.id == newcook.id) {
oldcook.amount = newcook.amount;
carSum += newcook.amount;
}
});
});
}
});
});
}
});
}
cookList.add(menuSunModel);
}
});
... ... @@ -116,6 +180,33 @@ class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
// menuSunModel.amount = element.amount;
menuSunModel.cookList = element.cookList;
if (widget.planCookByRidSunModel != null &&
widget.planCookByRidSunModel.planList != null &&
widget.planCookByRidSunModel.planList.length > 0) {
//排菜数据对应
widget.planCookByRidSunModel.planList.forEach((package) {
if (package.id == menuSunModel.id) {
//同一个排菜
menuSunModel.amount = package.amount;
menuSunModel.cookList.forEach((oldcooklist) {
package.cookList.forEach((newcooklist) {
if (oldcooklist.id == newcooklist.id) {
//同一菜品分类
oldcooklist.cookbooklist.forEach((oldcook) {
newcooklist.cookbooklist.forEach((newcook) {
if (oldcook.id == newcook.id) {
oldcook.amount = newcook.amount;
carSum += newcook.amount;
}
});
});
}
});
});
}
});
}
cookListPlanDish.add(menuSunModel);
}
});
... ... @@ -123,6 +214,12 @@ class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
_planDishProvider.menuModelForManager
.insert(1, menuModelPlanDish); //添加排菜
if (widget.planCookByRidSunModel != null &&
widget.planCookByRidSunModel.planPrice != null) {
_calculatePrice(planPrice: widget.planCookByRidSunModel.planPrice);
} else {
_calculatePrice();
}
_planDishProvider.pageStateMenu = PageState.Success;
setState(() {});
... ... @@ -134,6 +231,12 @@ class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
}
_planDishProvider.pageStateMenu = PageState.ConnectivityError;
}
if (widget.planCookByRidSunModel.status == '1' ||
widget.planCookByRidSunModel.status == null) {
isCar = true;
} else {
isCar = false;
}
}).catchError((e) {
print(e);
});
... ... @@ -373,6 +476,86 @@ class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
});
}
//提交接口
Future<bool> setPlanCookByReserve() async {
Map<String, String> params = {
'sellerid': Provider.of<UserModel>(context, listen: false).user.sellerid,
'uid': Provider.of<UserModel>(context, listen: false).user.openid,
'rid': widget.rid,
};
if (widget.planId != null && widget.planId != '') {
//已经存在id,则修改
params['id'] = widget.planId;
}
//单品
List<MenuModel> cooklistdata = [];
_planDishProvider.menuModelForManager.forEach((element) {
if (element.className == '套餐') {
List<MenuSunModel> packagelist = [];
element.cookbooklist.forEach((cooklist) {
if (cooklist.amount > 0) {
packagelist.add(cooklist);
}
});
if (packagelist.length > 0) {
params['package_list'] = json.encode(packagelist);
} else {
params['package_list'] = null;
}
} else if (element.className == '我的排菜') {
List<MenuSunModel> planlist = [];
element.cookbooklist.forEach((cooklist) {
if (cooklist.amount > 0) {
planlist.add(cooklist);
}
});
if (planlist.length > 0) {
params['plan_list'] = json.encode(planlist);
} else {
params['plan_list'] = null;
}
} else {
//单品
cooklistdata.add(element);
}
if (cooklistdata.length > 0) {
cooklistdata.forEach((cooklist) {
cooklist.cookbooklist.removeWhere((element) => element.amount == 0);
});
if (cooklistdata.length > 0) {
params['cooklist'] = json.encode(cooklistdata);
} else {
params['cooklist'] = null;
}
}
});
params['menu_price'] = priceSum.toString();
params['member_price'] = memberPriceSum.toString();
params['plan_price'] = planDishC.text;
params['remark'] = planDishRemark ?? "";
params['plan_name'] = planDishName ?? "";
if (isCar) {
params['status'] = '1';
} else {
params['status'] = '2';
}
// cooklist 字符串 可选 单点菜品列表
// package_list 字符串 可选 选中套餐数据,[{"id":1,"num":2},{"id":2,"num":1}]
// often_list 字符串 可选 选中店内常点数据,[{"id":1,"num":2},{"id":2,"num":1}]
// temporary_list 字符串 可选 临时加菜,[{"cook_name":"炒土豆丝","price":20,"num",1,"unit":"份","practice":"香辣"},{"cook_name":"麻婆豆腐","price":18,"num",1,"unit":"份","practice":"香辣"}]
// plan_list 字符串 可选 选中排菜数据,[{"id":1,"num":2},{"id":2,"num":1}]
// menu_price 浮点型 可选 菜单总价
// member_price 浮点型 可选 会员总价
// plan_price 浮点型 可选 排菜总价
//
bool success =
await _planDishProvider.setPlanCookByReserve(context, params);
return success;
}
//计算价格
_calculatePrice({String planPrice}) {
priceSum = 0;
... ... @@ -1061,7 +1244,10 @@ class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
object2: {
'object2': _planDishProvider.mineList
},
planPrice: planDishC.text);
planPrice: planDishC.text,
planCookByRidSunModel:
widget.planCookByRidSunModel,
detailEntity: widget.detailEntity);
// } else {
// temp =
// await NavigatorUtil.goPlanNewDishPage(
... ... @@ -1168,9 +1354,22 @@ class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
borderColor: MyColours.color_438E93,
textColor: MyColours.color_438E93,
isBold: false,
onPressed: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
onPressed: () async {
if (carSum == 0) {
Utils.showToast('请选择菜品');
return;
}
if (isCar) {
bool success = await setPlanCookByReserve();
if (!success) {
return;
}
}
//调用提交排菜接口
//调用排菜信息提交接口
FocusScope.of(context).requestFocus(
FocusNode()); //点击空白处隐藏键盘‘i7 8uuUUUUUUum'x\c []
List<MenuModel> showList = [];
List<MenuSunModel> dataLocalShowMore = []; //二级菜单
List<MenuModel> dataLocalShowOne = []; //一级菜单
... ... @@ -1368,7 +1567,8 @@ class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
remark: planDishRemark,
priceSum: priceSum.toString(),
memberPriceSum: memberPriceSum.toString(),
planDishText: planDishC.text);
planDishText: planDishC.text,
detailEntity: widget.detailEntity);
},
),
RoundButton(
... ... @@ -1380,8 +1580,19 @@ class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
radius: r(5),
fontSize: 36,
isBold: false,
onPressed: () {
Navigator.pop(context);
onPressed: () async {
if (carSum == 0) {
Utils.showToast('请选择菜品');
return;
}
//调用提交排菜接口
//调用排菜信息提交接口
isCar = false;
bool success = await setPlanCookByReserve();
if (success) {
Navigator.pop(context);
}
// Navigator.pop(context);
// NavigatorUtil.goFinalPlanDishPage(context);
},
)
... ... @@ -1391,7 +1602,7 @@ class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
);
} else {
return ExceptionPage(
pageState: model.pageState,
pageState: model.pageStateMenu,
emptyMsg: '暂时没有菜单哦',
callback: () {
_getCookbookByClass();
... ...
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import '../../../res/colors.dart';
import '../../../utils/screen_util.dart';
import '../../../widgets/round_button.dart';
import '../../constant/state.dart';
import '../../models/cookbook_model.dart';
import '../../models/notebook_detail.dart';
import '../../models/plan_cook_list_model.dart';
import '../../provider/plan_dish_provider.dart';
import '../../utils/event_bus.dart';
/**
* 订座详情---预点菜入口
*/
class OrderAdvanceHomePage extends StatefulWidget {
OrderAdvanceHomePage({Key key}) : super(key: key);
final NotebookDetail detailEntity;
final String rid;
OrderAdvanceHomePage({Key key, this.detailEntity, this.rid})
: super(key: key);
@override
_OrderAdvanceHomePageState createState() => _OrderAdvanceHomePageState();
... ... @@ -28,27 +40,318 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
TextEditingController likeController = TextEditingController();
TextEditingController serviceController = TextEditingController();
TextEditingController pnumController = TextEditingController();
bool isTotal = false; //默认人均
TextEditingController totalController = TextEditingController(); //预计总计
TextEditingController perController = TextEditingController(); //人均消费
PlanDishProvider _planDishProvider;
String name;
@override
void initState() {
super.initState();
pnumController.text = widget.detailEntity.actual_pum;
WidgetsBinding.instance.addPostFrameCallback((_) async {
_getPlanCookByRid();
_getPageMenuData();
bus.on("refresh_order_advance_home", (args) {
_getPlanCookByRid();
_getPageMenuData();
});
});
}
Widget _selectItem(String title, bool select, String hintText,
TextEditingController controller) {
@override
void dispose() {
super.dispose();
bus.off("refresh_order_advance_home");
}
_getPlanCookByRid() async {
await _planDishProvider.getPlanCookByRid(context, {'rid': widget.rid});
if (_planDishProvider.planCookByRidSunModel != null) {
pnumController.text = _planDishProvider.planCookByRidSunModel.pnum;
if (_planDishProvider.planCookByRidSunModel.totalPrice != '0' &&
_planDishProvider.planCookByRidSunModel.totalPrice != null) {
//选中总计
isTotal = true;
totalController.text =
_planDishProvider.planCookByRidSunModel.totalPrice;
} else if (_planDishProvider.planCookByRidSunModel.perPrice != '0' &&
_planDishProvider.planCookByRidSunModel.perPrice != null) {
//选中人均
isTotal = false;
perController.text = _planDishProvider.planCookByRidSunModel.perPrice;
}
likeController.text = _planDishProvider.planCookByRidSunModel.like ?? "";
noFoodController.text =
_planDishProvider.planCookByRidSunModel.taboos ?? '';
serviceController.text =
_planDishProvider.planCookByRidSunModel.serve ?? '';
name = _planDishProvider.planCookByRidSunModel.planName ?? "";
}
setState(() {});
}
_getPageMenuData() async {
Future.wait<bool>(
[_getCookbookByClass(showLoading: true), _getPlanCookList()])
.then((results) {
print(results[0]);
if (results[0] && results[1]) {
_planDishProvider.menuModelForManager =
List.from(_planDishProvider.menuModel);
//单个菜品
if (_planDishProvider.planCookByRidSunModel != null &&
_planDishProvider.planCookByRidSunModel.cooklist != null &&
_planDishProvider.planCookByRidSunModel.cooklist.length > 0) {
_planDishProvider.menuModelForManager.forEach((old) {
_planDishProvider.planCookByRidSunModel.cooklist
.forEach((newvalue) {
if (old.id == newvalue.id) {
//同一分类
old.cookbooklist.forEach((oldcook) {
newvalue.cookbooklist.forEach((newcook) {
if (oldcook.id == newcook.id) {
//同一个菜
oldcook.amount = newcook.amount;
}
});
});
}
});
});
}
//成功
MenuModel menuModelSetMeal = MenuModel();
menuModelSetMeal.className = '套餐';
menuModelSetMeal.isChange = false;
List<MenuSunModel> cookList = [];
List<SunListPlan> storeList = _planDishProvider.storeListTemp;
storeList.forEach((element) {
if (element.status == '1') {
MenuSunModel menuSunModel = MenuSunModel();
menuSunModel.id = element.id;
menuSunModel.name = element.pname;
// menuSunModel.price = element.menuPrice;
menuSunModel.price = element.planPrice;
menuSunModel.member_price = element.memberPrice;
menuSunModel.unit = '份';
// menuSunModel.amount = element.amount;
menuSunModel.cookList = element.cookList;
if (_planDishProvider.planCookByRidSunModel != null &&
_planDishProvider.planCookByRidSunModel.packageList != null &&
_planDishProvider.planCookByRidSunModel.packageList.length >
0) {
//套餐数据对应
_planDishProvider.planCookByRidSunModel.packageList
.forEach((package) {
if (package.id == menuSunModel.id) {
//同一个套餐
menuSunModel.amount = package.amount;
menuSunModel.cookList.forEach((oldcooklist) {
package.cookList.forEach((newcooklist) {
if (oldcooklist.id == newcooklist.id) {
//同一菜品分类
oldcooklist.cookbooklist.forEach((oldcook) {
newcooklist.cookbooklist.forEach((newcook) {
if (oldcook.id == newcook.id) {
oldcook.amount = newcook.amount;
}
});
});
}
});
});
}
});
}
cookList.add(menuSunModel);
}
});
menuModelSetMeal.cookbooklist = cookList;
_planDishProvider.menuModelForManager
.insert(0, menuModelSetMeal); //添加套餐
MenuModel menuModelPlanDish = MenuModel();
menuModelPlanDish.className = '我的排菜';
menuModelPlanDish.isChange = false;
List<MenuSunModel> cookListPlanDish = [];
List<SunListPlan> mineList = _planDishProvider.mineListTemp;
mineList.forEach((element) {
if (element.status == '1') {
MenuSunModel menuSunModel = MenuSunModel();
menuSunModel.id = element.id;
menuSunModel.name = element.pname;
menuSunModel.price = element.menuPrice;
menuSunModel.member_price = element.memberPrice;
menuSunModel.unit = '份';
// menuSunModel.amount = element.amount;
menuSunModel.cookList = element.cookList;
if (_planDishProvider.planCookByRidSunModel != null &&
_planDishProvider.planCookByRidSunModel.planList != null &&
_planDishProvider.planCookByRidSunModel.planList.length > 0) {
//排菜数据对应
_planDishProvider.planCookByRidSunModel.planList
.forEach((package) {
if (package.id == menuSunModel.id) {
//同一个排菜
menuSunModel.amount = package.amount;
menuSunModel.cookList.forEach((oldcooklist) {
package.cookList.forEach((newcooklist) {
if (oldcooklist.id == newcooklist.id) {
//同一菜品分类
oldcooklist.cookbooklist.forEach((oldcook) {
newcooklist.cookbooklist.forEach((newcook) {
if (oldcook.id == newcook.id) {
oldcook.amount = newcook.amount;
}
});
});
}
});
});
}
});
}
cookListPlanDish.add(menuSunModel);
}
});
menuModelPlanDish.cookbooklist = cookListPlanDish;
_planDishProvider.menuModelForManager
.insert(1, menuModelPlanDish); //添加排菜
// if (_planDishProvider.planCookByRidSunModel != null &&
// _planDishProvider.planCookByRidSunModel.planPrice != null) {
// _calculatePrice(planPrice: _planDishProvider.planCookByRidSunModel.planPrice);
// } else {
// _calculatePrice();
// }
_planDishProvider.pageStateMenu = PageState.Success;
setState(() {});
} else {
if (!results[0]) {
// Utils.showToast('');
} else {
// Utils.showToast('');
}
_planDishProvider.pageStateMenu = PageState.ConnectivityError;
}
}).catchError((e) {
print(e);
});
}
///菜品数据
Future<bool> _getCookbookByClass({bool showLoading = true}) async {
Map<String, String> params = {
"sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
};
bool success = await _planDishProvider.getCookbookByClass(context, params,
showLoading: showLoading);
if (success) {
return true;
} else {
return false;
}
// print(widget.data);
// if (widget.data.length > 0) {
// widget.data.forEach((old) {
// _planDishProvider.menuModel.forEach((element) {
// if (old.id == element.id) {
// element.cookbooklist.forEach((value) {
// old.cookbooklist.forEach((oldCook) {
// if (oldCook.id == value.id) {
// value.amount = oldCook.amount;
// if (oldCook.amount > 0) {
// carSum += oldCook.amount;
// priceSum += double.parse(oldCook.price) * oldCook.amount;
// memberPriceSum +=
// double.parse(oldCook.member_price) * oldCook.amount;
// }
// }
// });
// });
// }
// });
// });
// if (widget.planDishPrice != '' && widget.planDishPrice != null) {
// planDishC.text = widget.planDishPrice;
// } else {
// planDishC.text = '${priceSum}';
// }
// setState(() {});
// }
}
///排菜/套餐列表
Future<bool> _getPlanCookList({bool isShowLoading = true}) async {
Map<String, String> params = {
"uid": Provider.of<UserModel>(context, listen: false).user.openid,
// 'is_time': '0'
"sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
};
bool success = await _planDishProvider.getPlanCookList(context, params,
showLoading: isShowLoading);
if (success) {
return true;
} else {
return false;
}
}
Widget _selectItem(
String title,
bool select,
String hintText,
TextEditingController controller,
) {
return Row(
children: [
HEmptyView(86),
Image.asset(
Utils.getImgPath(
select ? 'plan_dish_select' : 'plan_dish_unselect'),
width: w(20)),
HEmptyView(10),
Text(
title,
style: TextStyle(fontSize: font(16), color: MyColours.color_515151),
InkWell(
onTap: () {
if (title == '预计人均' && !isTotal) {
return;
}
if (title == '预计总价' && isTotal) {
return;
}
setState(() {
isTotal = !isTotal;
});
},
child: Container(
padding: EdgeInsets.symmetric(vertical: w(8)),
child: Row(
children: [
HEmptyView(86),
Image.asset(
Utils.getImgPath(
select ? 'plan_dish_select' : 'plan_dish_unselect'),
width: w(20)),
HEmptyView(10),
Text(
title,
style: TextStyle(
fontSize: font(16), color: MyColours.color_515151),
),
HEmptyView(20),
],
)),
),
HEmptyView(20),
select
? Expanded(
child: TextField(
... ... @@ -197,6 +500,7 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
@override
Widget build(BuildContext context) {
_planDishProvider = Provider.of<PlanDishProvider>(context, listen: true);
return KeyboardDismissOnTap(
// dismissOnCapturedTaps: true,
child: Scaffold(
... ... @@ -208,12 +512,13 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
child: SingleChildScrollView(
// controller: controller,
child: Padding(
padding: EdgeInsets.symmetric(horizontal: w(20)),
padding: EdgeInsets.only(left: w(20)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
height: w(48),
padding: EdgeInsets.only(right: w(20)),
child: Row(
children: [
Text(
... ... @@ -224,7 +529,7 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
),
Spacer(),
Text(
'2022-11-08 午餐',
widget.detailEntity.ddateymd,
style: TextStyle(
fontSize: font(16),
color: MyColours.color_99515151),
... ... @@ -232,11 +537,13 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
],
),
),
MyDivider(
double.infinity,
w(1),
color: MyColours.color_DBDBDB,
),
Padding(
padding: EdgeInsets.only(right: w(20)),
child: MyDivider(
double.infinity,
w(1),
color: MyColours.color_DBDBDB,
)),
Container(
height: w(48),
child: Row(
... ... @@ -248,19 +555,36 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
color: MyColours.color_515151),
),
Spacer(),
Image.asset(
Utils.getImgPath('plan_dish_minus'),
width: w(16),
),
InkWell(
onTap: () {
int temp = int.parse(pnumController.text);
if (temp == 0) {
return;
}
temp--;
pnumController.text = temp.toString();
},
child: Container(
height: w(48),
padding: EdgeInsets.only(
left: w(40),
),
child: Image.asset(
Utils.getImgPath('plan_dish_minus'),
width: w(16),
))),
Container(
width: w(50),
// constraints: BoxConstraints(minWidth: w(20)),
child: TextField(
maxLines: 1,
// controller:
controller: pnumController,
// focusNode: _focusNode,
// autofocus: true,
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp(r'[0-9]')),
],
style: TextStyle(
color: MyColours.color_438E93,
fontSize: font(16)),
... ... @@ -295,9 +619,24 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
// _focusNode.unfocus();
},
)),
Image.asset(
Utils.getImgPath('plan_dish_add'),
width: w(16),
InkWell(
onTap: () {
int temp = int.parse(pnumController.text == ''
? '0'
: pnumController.text);
temp++;
pnumController.text = temp.toString();
},
child: Container(
height: w(48),
// color: Colors.red,
padding: EdgeInsets.only(
right: w(20),
),
child: Image.asset(
Utils.getImgPath('plan_dish_add'),
width: w(16),
)),
),
],
),
... ... @@ -308,18 +647,26 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
style: TextStyle(
fontSize: font(16), color: MyColours.color_515151),
),
VEmptyView(48),
_selectItem('预计人均', false, '点击这里输入预计人均金额', null),
VEmptyView(30),
_selectItem('预计总价', true, '点击这里输入预计总金额', null),
VEmptyView(46),
MyDivider(
double.infinity,
w(1),
color: MyColours.color_DBDBDB,
),
VEmptyView(33),
Padding(
padding: EdgeInsets.only(right: w(20)),
child: _selectItem(
'预计人均', !isTotal, '点击这里输入预计人均金额', perController)),
Padding(
padding: EdgeInsets.only(right: w(20)),
child: _selectItem(
'预计总价', isTotal, '点击这里输入预计总金额', totalController)),
VEmptyView(31),
Padding(
padding: EdgeInsets.only(right: w(20)),
child: MyDivider(
double.infinity,
w(1),
color: MyColours.color_DBDBDB,
)),
Container(
padding: EdgeInsets.symmetric(vertical: w(10)),
padding: EdgeInsets.only(
top: w(10), bottom: w(10), right: w(20)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
... ... @@ -337,13 +684,22 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
),
),
VEmptyView(32),
_textMulLine('喜好', '点这里输入客户喜好的东西,请用逗号隔开。', likeController),
Padding(
padding: EdgeInsets.only(right: w(20)),
child: _textMulLine(
'喜好', '点这里输入客户喜好的东西,请用逗号隔开。', likeController)),
VEmptyView(20),
_textMulLine(
'忌口', '点这里输入客户忌口的东西,请用逗号隔开。', noFoodController),
Padding(
padding: EdgeInsets.only(right: w(20)),
child: _textMulLine(
'忌口', '点这里输入客户忌口的东西,请用逗号隔开。', noFoodController)),
VEmptyView(20),
_textMulLine('服务', '点这里输入客户需要的服务,如安静的包间、远离厕所等,请用逗号隔开。',
serviceController),
Padding(
padding: EdgeInsets.only(right: w(20)),
child: _textMulLine(
'服务',
'点这里输入客户需要的服务,如安静的包间、远离厕所等,请用逗号隔开。',
serviceController)),
],
),
),
... ... @@ -393,10 +749,77 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
Expanded(
flex: 2,
child: InkWell(
onTap: () {
NavigatorUtil.goOrderAdvanceEditPage(
context,
);
onTap: () async {
//调用排菜信息提交接口
Map<String, String> params = {
'sellerid':
Provider.of<UserModel>(context, listen: false)
.user
.sellerid,
'uid':
Provider.of<UserModel>(context, listen: false)
.user
.openid,
'rid': widget.rid,
};
if (_planDishProvider.planId != null &&
_planDishProvider.planId != '') {
//已经存在id,则修改
params['id'] = _planDishProvider.planId;
}
if (isTotal &&
totalController.text.trim().length > 0) {
//预计总价
params['total_price'] = totalController.text;
params['per_price'] = '0';
}
if (!isTotal &&
perController.text.trim().length > 0) {
//预计人均
params['per_price'] = perController.text;
params['total_price'] = '0';
}
if (likeController.text.trim().length > 0) {
//喜好
params['like'] = likeController.text;
}
if (noFoodController.text.trim().length > 0) {
//忌口
params['taboos'] = noFoodController.text;
}
if (serviceController.text.trim().length > 0) {
//服务
params['serve'] = serviceController.text;
}
if (pnumController.text.trim().length > 0) {
params['pnum'] = pnumController.text;
}
params['plan_name'] = name ?? '';
// cooklist 字符串 可选 单点菜品列表
// package_list 字符串 可选 选中套餐数据,[{"id":1,"num":2},{"id":2,"num":1}]
// often_list 字符串 可选 选中店内常点数据,[{"id":1,"num":2},{"id":2,"num":1}]
// temporary_list 字符串 可选 临时加菜,[{"cook_name":"炒土豆丝","price":20,"num",1,"unit":"份","practice":"香辣"},{"cook_name":"麻婆豆腐","price":18,"num",1,"unit":"份","practice":"香辣"}]
// plan_list 字符串 可选 选中排菜数据,[{"id":1,"num":2},{"id":2,"num":1}]
// menu_price 浮点型 可选 菜单总价
// member_price 浮点型 可选 会员总价
// plan_price 浮点型 可选 排菜总价
// remark
bool success = await _planDishProvider
.setPlanCookByReserve(context, params);
if (success) {
NavigatorUtil.goOrderAdvanceEditPage(context,
planId: _planDishProvider.planId,
rid: widget.rid,
planCookByRidSunModel:
_planDishProvider.planCookByRidSunModel,
detailEntity: widget.detailEntity);
} else {
Utils.showToast('信息提交失败,请重试');
}
},
child: Container(
decoration: BoxDecoration(
... ... @@ -423,8 +846,11 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
EdgeInsets.symmetric(horizontal: ScreenUtil().setHeight(40)),
decoration: BoxDecoration(
border: Border.all(
color:
true ? MyColours.color_999999 : MyColours.color_199095,
color: _planDishProvider.planCookByRidSunModel != null &&
_planDishProvider.planCookByRidSunModel.status ==
'2'
? MyColours.color_199095
: MyColours.color_999999,
width: ScreenUtil().setWidth(2)),
borderRadius: BorderRadius.circular(ScreenUtil().setWidth(10)),
),
... ... @@ -434,18 +860,55 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
child: Row(
children: [
Expanded(
child: _cancelAndChangeBtn(() {
NavigatorUtil.goOrderEditListShowPage(context);
child: _cancelAndChangeBtn(() async {
if (_planDishProvider.planCookByRidSunModel != null &&
_planDishProvider.planCookByRidSunModel.status ==
'2') {
//已经提交过菜单,可查看
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
Map temp =
await NavigatorUtil.goOrderEditListShowPage(
context,
object: {
'object':
_planDishProvider.menuModelForManager,
},
object1: {
'object1': _planDishProvider.storeList
},
object2: {
'object2': _planDishProvider.mineList
},
planPrice: _planDishProvider
.planCookByRidSunModel.planPrice,
planCookByRidSunModel:
_planDishProvider.planCookByRidSunModel,
detailEntity: widget.detailEntity,
needSubmmit: true,
rid: widget.rid,
planId: _planDishProvider.planId);
}
}, '查看排菜单',
fontColor: true
? MyColours.color_999999
: MyColours.color_199095)),
fontColor:
_planDishProvider.planCookByRidSunModel !=
null &&
_planDishProvider
.planCookByRidSunModel
.status ==
'2'
? MyColours.color_199095
: MyColours.color_999999)),
MyDivider(
ScreenUtil().setWidth(2),
ScreenUtil().setWidth(50),
color: true
? MyColours.color_999999
: MyColours.color_199095,
color:
_planDishProvider.planCookByRidSunModel != null &&
_planDishProvider
.planCookByRidSunModel.status ==
'2'
? MyColours.color_199095
: MyColours.color_999999,
),
Expanded(
child: _cancelAndChangeBtn(() {
... ... @@ -457,11 +920,222 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
// } else {
// _showCancelWidget(context);
// }
NavigatorUtil.goOrderPreviewPage(context);
if (_planDishProvider.planCookByRidSunModel != null &&
_planDishProvider.planCookByRidSunModel.status ==
'2') {
//提交过排菜单
FocusScope.of(context).requestFocus(
FocusNode()); //点击空白处隐藏键盘‘i7 8uuUUUUUUum'x\c []
List<MenuModel> showList = [];
List<MenuSunModel> dataLocalShowMore = []; //二级菜单
List<MenuModel> dataLocalShowOne = []; //一级菜单
if (_planDishProvider.menuModelForManager != null) {
_planDishProvider.menuModelForManager
.forEach((element) {
if (element.className == '套餐' ||
element.className == '我的排菜') {
// //如果是套餐,则看cooklist有没有选中的
// bool isChange = false; //套餐或者排菜数量是否选中
// if (element.className == '套餐') {
// isChange = _isChange(widget.storeList);
// } else {
// // isChange = _isChange(widget.storeList);
// }
element.cookbooklist.forEach((value) {
if (value.amount > 0) {
// if (!isChange) {
// priceSum += double.parse(value.price) * value.amount;
// memberPriceSum +=
// double.parse(value.member_price) * value.amount;
// }
//选中了该套餐
//把套餐中没有选中的菜品踢出去
MenuSunModel menuSunModel = MenuSunModel();
List<MenuModel> moreMenu = [];
int moreSum = 0;
//遍历套餐中的菜分类
value.cookList.forEach((cook) {
//遍历套餐中的具体菜品
List<MenuSunModel> cooklistSun = [];
int cookSum = 0;
cook.cookbooklist.forEach((cookSun) {
// 具体菜品
if (cookSun.amount > 0) {
//当前菜品已选择
// moreSum += cookSun.amount;
cookSum += cookSun.amount;
// if (isChange) {
// priceSum += double.parse(cookSun.price) * cookSun.amount;
// memberPriceSum +=
// double.parse(cookSun.member_price) * cookSun.amount;
// }
// carSum += cookSun.amount;
cooklistSun.add(cookSun);
}
});
if (cooklistSun.length > 0) {
cook.cookbooklist = cooklistSun;
cook.allSum = cookSum;
moreMenu.add(cook);
value.cookList = moreMenu;
}
});
value.moreSum = value.amount;
value.channel = element.className == '套餐'
? '1'
: '2'; // 1套餐----2排菜
dataLocalShowMore.add(value);
}
});
} else if (element.className == '店内常点') {
// //如果是我的排菜,则看cooklist有没有选中的
// bool hasmMine =
// element.cookbooklist.any(((value) => value.amount > 0));
// if (hasmMine) {
// //套餐中有被选中
// maxIndex++;
// }
} else if (element.className == '临时加菜') {
} else {
//单菜
bool hasmMenu = element.cookbooklist
.any(((value) => value.amount > 0));
if (hasmMenu) {
//单品此类有选中菜品
MenuModel menuModel = MenuModel();
menuModel.className = element.className;
menuModel.classLabel = element.classLabel;
menuModel.classType = element.classType;
menuModel.id = element.id;
menuModel.order = element.order;
menuModel.sellerid = element.sellerid;
menuModel.status = element.status;
menuModel.cookbooklist = [];
List<MenuSunModel> cookbooklist = [];
int allSum = 0;
element.cookbooklist.forEach((value) {
if (value.amount > 0) {
allSum += value.amount;
// priceSum += double.parse(value.price) * value.amount;
// memberPriceSum +=
// double.parse(value.member_price) * value.amount;
// carSum += value.amount;
cookbooklist.add(value);
}
});
menuModel.allSum = allSum;
menuModel.cookbooklist.addAll(cookbooklist);
dataLocalShowOne.add(menuModel);
}
}
// planDishC.text = priceSum.toString();
});
}
dataLocalShowMore.forEach((value) {
value.cookList.forEach((newValue) {
if (showList.length == 0) {
showList.add(
MenuModel.fromJson2(newValue.toJson()));
} else {
bool hasC = false;
showList.forEach((show) {
if (show.id == newValue.id) {
hasC = true;
//数据存在相同菜类
newValue.cookbooklist.forEach((newcook) {
bool has = false;
show.cookbooklist.forEach((oldshow) {
if (oldshow.id == newcook.id) {
//同一个菜品
has = true;
oldshow.amount += newcook.amount;
show.allSum += newcook.amount;
}
});
if (!has) {
//旧的里面没有该菜品
show.cookbooklist.add(newcook);
}
});
}
});
if (!hasC) {
showList.add(
MenuModel.fromJson2(newValue.toJson()));
}
}
});
});
print(showList);
dataLocalShowOne.forEach((element) {
if (showList.length == 0) {
showList
.add(MenuModel.fromJson2(element.toJson()));
} else {
bool hasC = false;
showList.forEach((show) {
if (show.id == element.id) {
hasC = true;
//数据存在相同菜类
element.cookbooklist.forEach((newcook) {
bool has = false;
show.cookbooklist.forEach((oldshow) {
if (oldshow.id == newcook.id) {
//同一个菜品
has = true;
oldshow.amount += newcook.amount;
show.allSum += newcook.amount;
}
});
if (!has) {
//旧的里面没有该菜品
show.cookbooklist.add(newcook);
}
});
}
});
if (!hasC) {
showList
.add(MenuModel.fromJson2(element.toJson()));
}
}
});
NavigatorUtil.goOrderPreviewPage(context,
object: {'object': showList},
name: _planDishProvider
.planCookByRidSunModel.planName,
remark: _planDishProvider
.planCookByRidSunModel.remark,
priceSum: _planDishProvider
.planCookByRidSunModel.menuPrice,
memberPriceSum: _planDishProvider
.planCookByRidSunModel.memberPrice,
planDishText: _planDishProvider
.planCookByRidSunModel.planPrice,
detailEntity: widget.detailEntity);
}
}, '分享排菜单',
fontColor: true
? MyColours.color_999999
: MyColours.color_199095)),
fontColor:
_planDishProvider.planCookByRidSunModel !=
null &&
_planDishProvider
.planCookByRidSunModel
.status ==
'2'
? MyColours.color_199095
: MyColours.color_999999)),
],
)),
),
... ...
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:provider/provider.dart';
import '../../../res/colors.dart';
import '../../../utils/screen_util.dart';
... ... @@ -11,18 +14,38 @@ import '../../../widgets/h_empty_view.dart';
import '../../../widgets/round_button.dart';
import '../../../widgets/v_empty_view.dart';
import '../../models/cookbook_model.dart';
import '../../models/notebook_detail.dart';
import '../../models/plan_cook_by_rid_model.dart';
import '../../models/plan_cook_list_model.dart';
import '../../provider/plan_dish_provider.dart';
import '../../provider/user_model.dart';
import '../../route/navigator_util.dart';
import '../../utils/dialog_util.dart';
import '../../utils/event_bus.dart';
class OrderEditListShowPage extends StatefulWidget {
final List<SunListPlan> storeList; //套餐元数据
final List<SunListPlan> mineList; //我的排菜元数据
final List<MenuModel> data;
final String planPrice;
final PlanCookByRidSunModel planCookByRidSunModel;
final NotebookDetail detailEntity;
final bool needSubmmit;
final String planId;
final String rid;
final List<MenuModel> datatemp;
OrderEditListShowPage(
{Key key, this.data, this.storeList, this.mineList, this.planPrice})
{Key key,
this.data,
this.storeList,
this.mineList,
this.planPrice,
this.planCookByRidSunModel,
this.detailEntity,
this.needSubmmit = false,
this.planId,
this.rid,
this.datatemp})
: super(key: key);
@override
... ... @@ -71,6 +94,11 @@ class _OrderEditListShowPageState extends State<OrderEditListShowPage> {
void initState() {
super.initState();
if (widget.planCookByRidSunModel != null) {
planDishName.text = widget.planCookByRidSunModel.planName ?? '';
planDishRemark.text = widget.planCookByRidSunModel.remark ?? '';
}
if (widget.data != null) {
widget.data.forEach((element) {
if (element.className == '套餐' || element.className == '我的排菜') {
... ... @@ -128,6 +156,7 @@ class _OrderEditListShowPageState extends State<OrderEditListShowPage> {
value.channel =
element.className == '套餐' ? '1' : '2'; // 1套餐----2排菜
dataLocalShowMore.add(value);
// dataLocalShowMore.add(MenuSunModel.fromJson3(value.toJson()));
}
});
} else if (element.className == '店内常点') {
... ... @@ -367,6 +396,87 @@ class _OrderEditListShowPageState extends State<OrderEditListShowPage> {
return copyList;
}
//提交接口
Future<bool> setPlanCookByReserve(List<MenuModel> temp) async {
Map<String, String> params = {
'sellerid': Provider.of<UserModel>(context, listen: false).user.sellerid,
'uid': Provider.of<UserModel>(context, listen: false).user.openid,
'rid': widget.rid,
};
if (widget.planId != null && widget.planId != '') {
//已经存在id,则修改
params['id'] = widget.planId;
}
//单品
List<MenuModel> cooklistdata = [];
temp.forEach((element) {
if (element.className == '套餐') {
List<MenuSunModel> packagelist = [];
element.cookbooklist.forEach((cooklist) {
if (cooklist.amount > 0) {
packagelist.add(cooklist);
}
});
if (packagelist.length > 0) {
params['package_list'] = json.encode(packagelist);
} else {
params['package_list'] = null;
}
} else if (element.className == '我的排菜') {
List<MenuSunModel> planlist = [];
element.cookbooklist.forEach((cooklist) {
if (cooklist.amount > 0) {
planlist.add(cooklist);
}
});
if (planlist.length > 0) {
params['plan_list'] = json.encode(planlist);
} else {
params['plan_list'] = null;
}
} else {
//单品
cooklistdata.add(element);
}
if (cooklistdata.length > 0) {
cooklistdata.forEach((cooklist) {
cooklist.cookbooklist.removeWhere((element) => element.amount == 0);
});
if (cooklistdata.length > 0) {
params['cooklist'] = json.encode(cooklistdata);
} else {
params['cooklist'] = null;
}
}
});
params['menu_price'] = priceSum.toString();
params['member_price'] = memberPriceSum.toString();
params['plan_price'] = planDishC.text;
params['remark'] = planDishRemark.text ?? "";
params['plan_name'] = planDishName.text ?? "";
// if (isCar) {
// params['status'] = '1';
// } else {
// params['status'] = '2';
// }
// cooklist 字符串 可选 单点菜品列表
// package_list 字符串 可选 选中套餐数据,[{"id":1,"num":2},{"id":2,"num":1}]
// often_list 字符串 可选 选中店内常点数据,[{"id":1,"num":2},{"id":2,"num":1}]
// temporary_list 字符串 可选 临时加菜,[{"cook_name":"炒土豆丝","price":20,"num",1,"unit":"份","practice":"香辣"},{"cook_name":"麻婆豆腐","price":18,"num",1,"unit":"份","practice":"香辣"}]
// plan_list 字符串 可选 选中排菜数据,[{"id":1,"num":2},{"id":2,"num":1}]
// menu_price 浮点型 可选 菜单总价
// member_price 浮点型 可选 会员总价
// plan_price 浮点型 可选 排菜总价
//
PlanDishProvider _planDishProvider =
Provider.of<PlanDishProvider>(context, listen: false);
bool success =
await _planDishProvider.setPlanCookByReserve(context, params);
return success;
}
@override
Widget build(BuildContext context) {
return KeyboardDismissOnTap(
... ... @@ -1795,18 +1905,105 @@ class _OrderEditListShowPageState extends State<OrderEditListShowPage> {
radius: r(5),
fontSize: 36,
isBold: false,
onPressed: () {
onPressed: () async {
// List<MenuSunModel> dataLocalShowMore = []; //二级菜单
// List<MenuModel> dataLocalShowOne = []; //一级菜单
Map data = {
'more': dataLocalShowMore,
'one': dataLocalShowOne,
'planPrice': planDishC.text,
'name': planDishName.text,
'remark': planDishRemark.text
};
Navigator.of(context).pop(data);
if (widget.needSubmmit) {
//提交接口
// Map temp = {
// 'more': dataLocalShowMore,
// 'one': dataLocalShowOne,
// 'planPrice': planDishC.text,
// 'name': planDishName.text,
// 'remark': planDishRemark.text
// };
// List<MenuSunModel> dataLocalShowMore =
// temp['more']; //二级菜单
// List<MenuModel> dataLocalShowOne =
// temp['one']; //一级菜单
// planDishName = planDishName.text;
// planDishRemark = planDishRemark.text;
// 刷新页面***************
print(dataLocalShowMore);
print(dataLocalShowOne);
widget.datatemp.forEach((element) {
if (element.className == '套餐' ||
element.className == '我的排菜') {
dataLocalShowMore.forEach((value) {
element.cookbooklist.forEach((elementCook) {
if (value.id == elementCook.id) {
//同一个套餐
// elementCook.cookList = value.cookList;
elementCook.amount = value.moreSum;
elementCook.cookList.forEach((oldValue) {
print(dataLocalShowMore);
oldValue.cookbooklist.forEach((oldCook) {
oldCook.amount = 0;
});
print(dataLocalShowMore);
value.cookList.forEach((newValue) {
if (newValue.id == oldValue.id) {
//同一个分类
oldValue.cookbooklist
.forEach((oldCook) {
// oldCook.amount =
// newValue.allSum;
newValue.cookbooklist
.forEach((newCook) {
if (oldCook.id == newCook.id) {
//同一个菜品
oldCook.amount = newCook.amount;
// carSumTemp += newCook.amount;
}
});
});
}
});
});
}
});
});
} else {
//单品
print(dataLocalShowOne);
dataLocalShowOne.forEach((one) {
if (element.id == one.id) {
//同一分类
element.cookbooklist.forEach((old) {
one.cookbooklist.forEach((newvalue) {
if (old.id == newvalue.id) {
old.amount = newvalue.amount;
}
});
});
}
});
}
});
bool success =
await setPlanCookByReserve(widget.datatemp);
if (success) {
//刷新首页
bus.emit('refresh_order_advance_home');
Navigator.pop(context);
}
} else {
Map data = {
'more': dataLocalShowMore,
'one': dataLocalShowOne,
'planPrice': planDishC.text,
'name': planDishName.text,
'remark': planDishRemark.text
};
Navigator.of(context).pop(data);
}
// NavigatorUtil.goOrderEditListShowPage(context);
},
),
... ...
... ... @@ -11,6 +11,7 @@ import '../../../widgets/h_empty_view.dart';
import '../../../widgets/round_button.dart';
import '../../../widgets/v_empty_view.dart';
import '../../models/cookbook_model.dart';
import '../../models/notebook_detail.dart';
import '../../provider/user_model.dart';
import '../../utils/share_helper.dart';
... ... @@ -24,6 +25,7 @@ class OrderPreviewPage extends StatefulWidget {
final String planDishText;
final String name;
final String remark;
final NotebookDetail detailEntity;
OrderPreviewPage(
{Key key,
this.showList,
... ... @@ -31,7 +33,8 @@ class OrderPreviewPage extends StatefulWidget {
this.memberPriceSum,
this.planDishText,
this.name,
this.remark})
this.remark,
this.detailEntity})
: super(key: key);
@override
... ... @@ -77,6 +80,16 @@ class _OrderPreviewPageState extends State<OrderPreviewPage> {
Provider.of<UserModel>(context, listen: false).user.sellername;
String sellerAdr =
Provider.of<UserModel>(context, listen: false).user.sellerAddr;
String tables = '';
widget.detailEntity.tables.forEach((element) {
tables += '${element.name}、';
});
if (tables.endsWith('、')) {
tables = tables.substring(0, tables.length - 1);
}
String servicePerson = '${widget.detailEntity.nick_name ?? ''}' +
' ' +
'${widget.detailEntity.seller_user_phone ?? ''}';
return Scaffold(
backgroundColor: MyColours.color_ffffff,
body: Column(
... ... @@ -122,21 +135,21 @@ class _OrderPreviewPageState extends State<OrderPreviewPage> {
),
VEmptyView(26),
Text(
'预定贵宾 | 刘生先生',
'预定贵宾 | ${widget.detailEntity.rnameStr ?? ''}',
style: TextStyle(
fontSize: font(14),
color: MyColours.color_303030),
),
VEmptyView(10),
Text(
'预定时间 | 2022年11月11日 晚餐',
'预定时间 | ${widget.detailEntity.ddateymd}',
style: TextStyle(
fontSize: font(14),
color: MyColours.color_303030),
),
VEmptyView(10),
Text(
'区域桌台 | 一楼包间 108、一楼包间 108、一楼包间 108、一楼包间 108、一楼包间 108',
'区域桌台 | ${tables}',
style: TextStyle(
fontSize: font(14),
color: MyColours.color_303030),
... ... @@ -150,7 +163,7 @@ class _OrderPreviewPageState extends State<OrderPreviewPage> {
),
VEmptyView(10),
Text(
'专属服务 | 张山山 18866668888',
'专属服务 | ${servicePerson}',
style: TextStyle(
fontSize: font(14),
color: MyColours.color_303030),
... ...
import 'package:flutter/material.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/plan_cook_by_rid_model.dart';
import 'package:one_key/models/plan_cook_list_model.dart';
import 'package:one_key/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
... ... @@ -20,7 +21,7 @@ class PlanDishProvider extends ChangeNotifier {
PageState pageStateMine = PageState.Success;
PageState pageStateMy = PageState.Loading;
PageState pageStateMenu = PageState.Loading;
PageState pageStateMenu = PageState.Loading;
List<MenuModel> menuModel; //菜品数据
List<MenuModel> menuModelForManager = []; //经理点菜菜品数据
... ... @@ -31,6 +32,8 @@ class PlanDishProvider extends ChangeNotifier {
List<SunListPlan> storeListTemp = []; //排菜套餐列表--店铺
List<SunListPlan> mineListTemp = []; //排菜套餐列表--我的
String planId;
PlanCookByRidSunModel planCookByRidSunModel; //订单排菜的数据
// List<CookbookCategorySunModel> categorySunModel; //菜品分类数据
// List<CookbookSpecSunModel> specSunModel; //计价单位
... ... @@ -84,6 +87,63 @@ class PlanDishProvider extends ChangeNotifier {
}
}
/// 根据预定ID获取排菜
getPlanCookByRid(BuildContext context, Map<String, String> params,
{showLoading = false}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.get_plan_cook_by_rid,
data: params, showLoading: showLoading)
.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();
return false;
});
// menuModel = [];
if (baseResp != null && baseResp.code == Constant.status_success) {
if (baseResp.data == false) {
// planCookByRidSunModel = PlanCookByRidSunModel();
} else {
planCookByRidSunModel =
PlanCookByRidModel.fromJson(baseResp.responseData).data;
if (planCookByRidSunModel != null) {
planId = baseResp.data['id'];
}
}
// pageState = PageState.Empty;
// } else {
// List menu = baseResp.data[0]['list'];
// for (int i = 0; i < menu.length; i++) {
// menuModel.add(MenuModel.fromJson(menu[i]));
// }
// print(menuModel);
// pageState = PageState.Success;
// }
// notifyListeners();
return true;
} else {
Utils.showToast(baseResp.msg ?? "");
// pageState = PageState.ConnectivityError;
// notifyListeners();
return false;
}
}
///添加排菜/套餐
Future<bool> setPlanCook(BuildContext context, Map<String, String> params,
... ... @@ -105,6 +165,32 @@ class PlanDishProvider extends ChangeNotifier {
}
}
Future<bool> setPlanCookByReserve(
BuildContext context, Map<String, String> params,
{showLoading = false}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.set_plan_cook_by_reserve,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
if (error is MyError) {}
return false;
});
if (baseResp != null && baseResp.code == Constant.status_success) {
if (baseResp.data == 1) {
return true;
}
if (baseResp.data['id'] != null && baseResp.data['id'] != '') {
planId = baseResp.data['id'];
return true;
}
} else {
Utils.showToast(baseResp.msg ?? "");
return false;
}
}
///删除排菜/套餐列表
Future<bool> delPlanCook(BuildContext context, Map<String, String> params,
... ...
... ... @@ -29,6 +29,7 @@ import '../app.dart';
import '../models/get_banquet_by_id_new_model.dart';
import '../models/get_banquet_deposit_model.dart';
import '../models/otherset_model.dart';
import '../models/plan_cook_by_rid_model.dart';
import '../models/plan_cook_list_model.dart';
import '../models/set_xuan_tai_model.dart';
import '../models/wine_model.dart';
... ... @@ -1209,7 +1210,9 @@ class NavigatorUtil {
///经理排菜-首页
static Future<dynamic> goOrderAdvanceHomePage(
BuildContext context, {
BuildContext context,
NotebookDetail detailEntity,
String rid, {
replace = false,
}) {
// if (invoice != null) {
... ... @@ -1221,41 +1224,45 @@ class NavigatorUtil {
// return _navigateTo(context,
// "${Routes.order_advance_home_page}?tids=$tids&tableidNow=$tableidNow&fromPage=$fromPage&canChoose=$canChoose&object=${FluroConvertUtils.object2string(object)}");
// }
return _navigateTo(context, "${Routes.order_advance_home_page}",
return _navigateTo(context,
"${Routes.order_advance_home_page}?detail=${FluroConvertUtils.object2string(detailEntity)}&rid=$rid",
replace: replace);
}
///经理排菜-编辑
static Future<dynamic> goOrderAdvanceEditPage(
BuildContext context, {
replace = false,
}) {
static Future<dynamic> goOrderAdvanceEditPage(BuildContext context,
{replace = false,
String planId,
String rid,
PlanCookByRidSunModel planCookByRidSunModel,
NotebookDetail detailEntity}) {
// if (invoice != null) {
// return _navigateTo(context,
// "${Routes.order_advance_home_page}?invoice=${FluroConvertUtils.object2string(invoice)}",
// replace: replace);
// }
// if (object != null) {
// return _navigateTo(context,
// "${Routes.order_advance_home_page}?tids=$tids&tableidNow=$tableidNow&fromPage=$fromPage&canChoose=$canChoose&object=${FluroConvertUtils.object2string(object)}");
// }
return _navigateTo(context, "${Routes.order_advance_edit_page}",
if (planCookByRidSunModel != null) {
return _navigateTo(context,
"${Routes.order_advance_edit_page}?planId=$planId&rid=$rid&planCookByRidSunModel=${FluroConvertUtils.object2string(planCookByRidSunModel)}&detail=${FluroConvertUtils.object2string(detailEntity)}",
replace: replace);
}
return _navigateTo(context,
"${Routes.order_advance_edit_page}?planId=$planId&rid=$rid&detail=${FluroConvertUtils.object2string(detailEntity)}",
replace: replace);
}
///经理排菜-预览
static Future<dynamic> goOrderPreviewPage(
BuildContext context, {
replace = false,
Map object,
String priceSum,
String memberPriceSum,
String planDishText,
String name,
String remark,
}) {
static Future<dynamic> goOrderPreviewPage(BuildContext context,
{replace = false,
Map object,
String priceSum,
String memberPriceSum,
String planDishText,
String name,
String remark,
NotebookDetail detailEntity}) {
// if (invoice != null) {
// return _navigateTo(context,
// "${Routes.order_advance_home_page}?invoice=${FluroConvertUtils.object2string(invoice)}",
... ... @@ -1266,7 +1273,7 @@ class NavigatorUtil {
// "${Routes.order_advance_home_page}?tids=$tids&tableidNow=$tableidNow&fromPage=$fromPage&canChoose=$canChoose&object=${FluroConvertUtils.object2string(object)}");
// }
return _navigateTo(context,
"${Routes.order_preview_page}?object=${FluroConvertUtils.object2string(object)}&priceSum=$priceSum&memberPriceSum=$memberPriceSum&planDishText=$planDishText&name=${Uri.encodeComponent(name)}&remark=${Uri.encodeComponent(remark)}",
"${Routes.order_preview_page}?object=${FluroConvertUtils.object2string(object)}&priceSum=$priceSum&memberPriceSum=$memberPriceSum&planDishText=$planDishText&name=${Uri.encodeComponent(name)}&remark=${Uri.encodeComponent(remark)}&detail=${FluroConvertUtils.object2string(detailEntity)}",
replace: replace);
}
... ... @@ -1277,17 +1284,27 @@ class NavigatorUtil {
Map object,
Map object1,
Map object2,
String planPrice}) {
String planPrice,
PlanCookByRidSunModel planCookByRidSunModel,
NotebookDetail detailEntity,
bool needSubmmit = false,
String planId,
String rid}) {
// if (invoice != null) {
// return _navigateTo(context,
// "${Routes.order_advance_home_page}?invoice=${FluroConvertUtils.object2string(invoice)}",
// replace: replace);
// }
if (object != null && planCookByRidSunModel != null) {
return _navigateTo(context,
"${Routes.order_edit_list_show_page}?object=${FluroConvertUtils.object2string(object)}&object1=${FluroConvertUtils.object2string(object1)}&object2=${FluroConvertUtils.object2string(object2)}&planPrice=$planPrice&planCookByRidSunModel=${FluroConvertUtils.object2string(planCookByRidSunModel)}&detail=${FluroConvertUtils.object2string(detailEntity)}&needSubmmit=$needSubmmit&planId=$planId&rid=$rid");
}
if (object != null) {
return _navigateTo(context,
"${Routes.order_edit_list_show_page}?object=${FluroConvertUtils.object2string(object)}&object1=${FluroConvertUtils.object2string(object1)}&object2=${FluroConvertUtils.object2string(object2)}&planPrice=$planPrice");
"${Routes.order_edit_list_show_page}?object=${FluroConvertUtils.object2string(object)}&object1=${FluroConvertUtils.object2string(object1)}&object2=${FluroConvertUtils.object2string(object2)}&planPrice=$planPrice&detail=${FluroConvertUtils.object2string(detailEntity)}&needSubmmit=$needSubmmit&planId=$planId&rid=$rid");
}
return _navigateTo(context, "${Routes.order_edit_list_show_page}",
return _navigateTo(context,
"${Routes.order_edit_list_show_page}?needSubmmit=$needSubmmit&planId=$planId&rid=$rid",
replace: replace);
}
... ...
... ... @@ -150,6 +150,7 @@ import 'package:one_key/utils/utils.dart';
import 'package:provider/provider.dart';
import '../models/get_banquet_by_id_new_model.dart';
import '../models/plan_cook_by_rid_model.dart';
import '../models/plan_cook_list_model.dart';
import '../models/set_xuan_tai_model.dart';
import '../models/setmeal_by_id_model.dart';
... ... @@ -1931,7 +1932,7 @@ var finalPlanDishPageHandle = new Handler(
var orderAdvanceHomePageHandle = new Handler(
handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) {
// String fromPage = params["fromPage"].first;
// String tids = params["tids"].first;
String rid = params["rid"].first;
// String tableidNow = params["tableidNow"].first;
// bool canChoose = params["canChoose"].first == "true" ? true : false;
... ... @@ -1944,15 +1945,34 @@ var orderAdvanceHomePageHandle = new Handler(
// res.add(TableList.fromJson(item));
// }
// }
NotebookDetail detailEntity = NotebookDetail.fromJson(json
.decode(FluroConvertUtils.fluroCnParamsDecode(params["detail"].first)));
return ChangeNotifierProvider<PlanDishProvider>(
create: (_) => PlanDishProvider(), child: OrderAdvanceHomePage());
create: (_) => PlanDishProvider(),
child: OrderAdvanceHomePage(detailEntity: detailEntity, rid: rid));
});
///经理排菜---编辑
var orderAdvanceEidtPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) {
// String fromPage = params["fromPage"].first;
// String tids = params["tids"].first;
String planId = params["planId"].first;
String rid = params["rid"].first;
NotebookDetail detailEntity = NotebookDetail.fromJson(json
.decode(FluroConvertUtils.fluroCnParamsDecode(params["detail"].first)));
PlanCookByRidSunModel planCookByRidSunModel;
if (params.keys.contains('planCookByRidSunModel')) {
planCookByRidSunModel = PlanCookByRidSunModel.fromJson(json.decode(
FluroConvertUtils.fluroCnParamsDecode(
params["planCookByRidSunModel"].first)));
}
// Map object = FluroConvertUtils.string2map(params["object"].first);
// List temp = object['object'];
// for (var item in temp) {
// res.add(TableList.fromJson(item));
// }
// }
// String tableidNow = params["tableidNow"].first;
// bool canChoose = params["canChoose"].first == "true" ? true : false;
... ... @@ -1966,7 +1986,12 @@ var orderAdvanceEidtPageHandle = new Handler(
// }
// }
return ChangeNotifierProvider<PlanDishProvider>(
create: (_) => PlanDishProvider(), child: OrderAdvanceEidtPage());
create: (_) => PlanDishProvider(),
child: OrderAdvanceEidtPage(
planId: planId,
rid: rid,
planCookByRidSunModel: planCookByRidSunModel,
detailEntity: detailEntity));
});
///经理排菜---预览页
... ... @@ -1986,7 +2011,8 @@ var orderPreviewPageHandle = new Handler(
// res.add(TableList.fromJson(item));
// }
// }
NotebookDetail detailEntity = NotebookDetail.fromJson(json
.decode(FluroConvertUtils.fluroCnParamsDecode(params["detail"].first)));
List<MenuModel> res = [];
// String planDishPrice = '';
if (params.keys.contains('object')) {
... ... @@ -2016,7 +2042,8 @@ var orderPreviewPageHandle = new Handler(
memberPriceSum: memberPriceSum,
planDishText: planDishText,
name: name,
remark: remark));
remark: remark,
detailEntity: detailEntity));
});
///经理排菜---排菜编辑列表展示
... ... @@ -2037,7 +2064,18 @@ var orderEditListShowPageHandle = new Handler(
// }
// }
bool needSubmmit = FluroConvertUtils.string2bool(params["needSubmmit"].first);
NotebookDetail detailEntity = NotebookDetail.fromJson(json
.decode(FluroConvertUtils.fluroCnParamsDecode(params["detail"].first)));
PlanCookByRidSunModel planCookByRidSunModel;
if (params.keys.contains('planCookByRidSunModel')) {
planCookByRidSunModel = PlanCookByRidSunModel.fromJson(json.decode(
FluroConvertUtils.fluroCnParamsDecode(
params["planCookByRidSunModel"].first)));
}
List<MenuModel> res = [];
List<MenuModel> res1 = [];
// String planDishPrice = '';
if (params.keys.contains('object')) {
Map object = FluroConvertUtils.string2map(params["object"].first);
... ... @@ -2050,6 +2088,7 @@ var orderEditListShowPageHandle = new Handler(
// res.add(menuModel);
// print(res);
res.add(MenuModel.fromJson2(item));
res1.add(MenuModel.fromJson2(item));
}
}
List<SunListPlan> storeList = [];
... ... @@ -2084,11 +2123,22 @@ var orderEditListShowPageHandle = new Handler(
String planPrice = params["planPrice"].first;
return OrderEditListShowPage(
data: res,
storeList: storeList,
mineList: mineList,
planPrice: planPrice);
String rid = params["rid"].first;
String planId = params["planId"].first;
return ChangeNotifierProvider<PlanDishProvider>(
create: (_) => PlanDishProvider(),
child: OrderEditListShowPage(
data: res,
storeList: storeList,
mineList: mineList,
planPrice: planPrice,
planCookByRidSunModel: planCookByRidSunModel,
detailEntity: detailEntity,
needSubmmit: needSubmmit,
rid: rid,
planId: planId,
datatemp: res1));
});
///经理排菜--类型选择
... ...