Browse Source

增加预约时间;

登录页更改;
增加日期选择器;
预约时间更改-预约商品直接显示立即预约-立即预约选好商品规格直接跳转结算页-结算页如果是预约商品就显示预约时间和预约店铺-下单时把预约时间,预约店铺放备注一起传过去,下单时外加(预约时间,是否是预约订单);
详情页增加下单时间;
点单页,商品详情页均增加立即预约;
new_revision_app
wurong 2 years ago
parent
commit
1d2340ec9d
  1. 2
      lib/order/edit_remarks_page.dart
  2. 5
      lib/order/order_view/order_info.dart
  3. 96
      lib/retrofit/data/findMiNiGroupList.dart
  4. 511
      lib/retrofit/data/miNiDetail.dart
  5. 5
      lib/retrofit/data/placeOrderFirst.dart
  6. 593
      lib/settlement/settlement.dart
  7. 274
      lib/settlement/settlement_view/activity_coupon_remarks.dart
  8. 118
      lib/store/shop_details_page.dart
  9. 42
      lib/store/store_order.dart
  10. 2
      lib/store/store_view/product_sku.dart
  11. 417
      lib/store/store_view/shop_goods.dart
  12. 82
      lib/store/store_view/store_order_list.dart
  13. 8
      lib/view_widget/cupertino_date_picker.dart
  14. 7
      pubspec.lock
  15. 3
      pubspec.yaml

2
lib/order/edit_remarks_page.dart

@ -214,7 +214,7 @@ class _EditRemarksPage extends State<EditRemarksPage> {
fontSize: 12.sp, fontSize: 12.sp,
), ),
), ),
),onTap: (){addRemarksCnt("");},), ),onTap: (){addRemarksCnt("软一");},),
]; ];
} }
} }

5
lib/order/order_view/order_info.dart

@ -48,6 +48,9 @@ class _OrderInfoView extends State<OrderInfoView> {
orderInfoItem(S.of(context).peisongfangshi, widget.isTakeOut == 0 orderInfoItem(S.of(context).peisongfangshi, widget.isTakeOut == 0
? S.of(context).ziqu :(widget.orderInfo != null && widget.orderInfo.logisticsName != "") ? widget.orderInfo.logisticsName : "美团配送"), ? S.of(context).ziqu :(widget.orderInfo != null && widget.orderInfo.logisticsName != "") ? widget.orderInfo.logisticsName : "美团配送"),
// orderInfoItem(S.of(context).peisongfangshi,"美团配送"), // orderInfoItem(S.of(context).peisongfangshi,"美团配送"),
if(widget?.orderInfo?.subcribeTime != null && widget?.orderInfo?.subcribeTime != "")
orderInfoItem("预约时间",
widget.orderInfo != null ? widget.orderInfo.subcribeTime : ""),
orderInfoItem( orderInfoItem(
S.of(context).beizhuxinxi, S.of(context).beizhuxinxi,
widget.orderInfo != null widget.orderInfo != null
@ -88,7 +91,7 @@ class _OrderInfoView extends State<OrderInfoView> {
margin: EdgeInsets.only(top: 8.h, bottom: 8.h), margin: EdgeInsets.only(top: 8.h, bottom: 8.h),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
leftText, leftText,

96
lib/retrofit/data/findMiNiGroupList.dart

@ -102,6 +102,7 @@ class ProductListBean {
int setMeal; int setMeal;
String printerFlag; String printerFlag;
dynamic markProductNone; dynamic markProductNone;
SubscribeParam subscribeParam;
static ProductListBean fromJson(Map<String, dynamic> map) { static ProductListBean fromJson(Map<String, dynamic> map) {
if (map == null) return null; if (map == null) return null;
@ -135,6 +136,7 @@ class ProductListBean {
productListBean.setMeal = map['setMeal']; productListBean.setMeal = map['setMeal'];
productListBean.printerFlag = map['printerFlag']; productListBean.printerFlag = map['printerFlag'];
productListBean.markProductNone = map['markProductNone']; productListBean.markProductNone = map['markProductNone'];
productListBean.subscribeParam = SubscribeParam.fromJson(map['subscribeParam']);
return productListBean; return productListBean;
} }
@ -168,5 +170,97 @@ class ProductListBean {
"setMeal": setMeal, "setMeal": setMeal,
"printerFlag": printerFlag, "printerFlag": printerFlag,
"markProductNone": markProductNone, "markProductNone": markProductNone,
"subscribeParam": subscribeParam,
}; };
} }
/// isEnableSubscribe : true
/// dayOrDate : 3
/// startAfterDays : null
/// daysValidate : null
/// subscribeStartTime : "2023-04-20 00:00:00"
/// subscribeEndTime : "2023-04-30 00:00:00"
/// stores : ["海峡姐妹","前进麦味","百年川椒","小吃街"]
class SubscribeParam {
SubscribeParam({
bool isEnableSubscribe,
num dayOrDate,
dynamic startAfterDays,
dynamic daysValidate,
String subscribeStartTime,
String subscribeEndTime,
List<String> stores,}) {
_isEnableSubscribe = isEnableSubscribe;
_dayOrDate = dayOrDate;
_startAfterDays = startAfterDays;
_daysValidate = daysValidate;
_subscribeStartTime = subscribeStartTime;
_subscribeEndTime = subscribeEndTime;
_stores = stores;
}
SubscribeParam.fromJson(dynamic json) {
if(json == null)
return;
_isEnableSubscribe = json['isEnableSubscribe'];
_dayOrDate = json['dayOrDate'];
_startAfterDays = json['startAfterDays'];
_daysValidate = json['daysValidate'];
_subscribeStartTime = json['subscribeStartTime'];
_subscribeEndTime = json['subscribeEndTime'];
_stores = json['stores'] != null ? json['stores'].cast<String>() : [];
}
bool _isEnableSubscribe;
num _dayOrDate;
dynamic _startAfterDays;
dynamic _daysValidate;
String _subscribeStartTime;
String _subscribeEndTime;
List<String> _stores;
SubscribeParam copyWith({ bool isEnableSubscribe,
num dayOrDate,
dynamic startAfterDays,
dynamic daysValidate,
String subscribeStartTime,
String subscribeEndTime,
List<String> stores,
}) =>
SubscribeParam(
isEnableSubscribe: isEnableSubscribe ?? _isEnableSubscribe,
dayOrDate: dayOrDate ?? _dayOrDate,
startAfterDays: startAfterDays ?? _startAfterDays,
daysValidate: daysValidate ?? _daysValidate,
subscribeStartTime: subscribeStartTime ?? _subscribeStartTime,
subscribeEndTime: subscribeEndTime ?? _subscribeEndTime,
stores: stores ?? _stores,
);
bool get isEnableSubscribe => _isEnableSubscribe;
num get dayOrDate => _dayOrDate;
dynamic get startAfterDays => _startAfterDays;
dynamic get daysValidate => _daysValidate;
String get subscribeStartTime => _subscribeStartTime;
String get subscribeEndTime => _subscribeEndTime;
List<String> get stores => _stores;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['isEnableSubscribe'] = _isEnableSubscribe;
map['dayOrDate'] = _dayOrDate;
map['startAfterDays'] = _startAfterDays;
map['daysValidate'] = _daysValidate;
map['subscribeStartTime'] = _subscribeStartTime;
map['subscribeEndTime'] = _subscribeEndTime;
map['stores'] = _stores;
return map;
}
}

511
lib/retrofit/data/miNiDetail.dart

@ -86,6 +86,7 @@ class MiNiDetail {
dynamic markProductNone; dynamic markProductNone;
dynamic namePinyin; dynamic namePinyin;
dynamic nameInitials; dynamic nameInitials;
SubscribeParam subscribeParam;
static MiNiDetail fromJson(Map<String, dynamic> map) { static MiNiDetail fromJson(Map<String, dynamic> map) {
if (map == null) return null; if (map == null) return null;
@ -123,16 +124,14 @@ class MiNiDetail {
miNiDetailBean.printerFlag = map['printerFlag']; miNiDetailBean.printerFlag = map['printerFlag'];
miNiDetailBean.thumbnailImg = map['thumbnailImg']; miNiDetailBean.thumbnailImg = map['thumbnailImg'];
miNiDetailBean.materialId = map['materialId']; miNiDetailBean.materialId = map['materialId'];
miNiDetailBean.imgs = []..addAll( miNiDetailBean.imgs = []
(map['imgs'] as List ?? []).map((o) => o.toString()) ..addAll((map['imgs'] as List ?? []).map((o) => o.toString()));
);
miNiDetailBean.storeDTO = StoreDTOBean.fromJson(map['storeDTO']); miNiDetailBean.storeDTO = StoreDTOBean.fromJson(map['storeDTO']);
miNiDetailBean.attrList = []..addAll( miNiDetailBean.attrList = []..addAll(
(map['attrList'] as List ?? []).map((o) => AttrListBean.fromJson(o)) (map['attrList'] as List ?? []).map((o) => AttrListBean.fromJson(o)));
);
miNiDetailBean.productSkuVOList = []..addAll( miNiDetailBean.productSkuVOList = []..addAll(
(map['productSkuVOList'] as List ?? []).map((o) => ProductSkuVOListBean.fromJson(o)) (map['productSkuVOList'] as List ?? [])
); .map((o) => ProductSkuVOListBean.fromJson(o)));
miNiDetailBean.shipAddress = map['shipAddress']; miNiDetailBean.shipAddress = map['shipAddress'];
miNiDetailBean.buyCount = map['buyCount']; miNiDetailBean.buyCount = map['buyCount'];
miNiDetailBean.promotionShowVOList = map['promotionShowVOList']; miNiDetailBean.promotionShowVOList = map['promotionShowVOList'];
@ -141,56 +140,59 @@ class MiNiDetail {
miNiDetailBean.markProductNone = map['markProductNone']; miNiDetailBean.markProductNone = map['markProductNone'];
miNiDetailBean.namePinyin = map['namePinyin']; miNiDetailBean.namePinyin = map['namePinyin'];
miNiDetailBean.nameInitials = map['nameInitials']; miNiDetailBean.nameInitials = map['nameInitials'];
miNiDetailBean.subscribeParam =
SubscribeParam.fromJson(map['subscribeParam']);
return miNiDetailBean; return miNiDetailBean;
} }
Map toJson() => { Map toJson() => {
"id": id, "id": id,
"createTime": createTime, "createTime": createTime,
"createUser": createUser, "createUser": createUser,
"updateTime": updateTime, "updateTime": updateTime,
"updateUser": updateUser, "updateUser": updateUser,
"supplierName": supplierName, "supplierName": supplierName,
"storeId": storeId, "storeId": storeId,
"categoryId": categoryId, "categoryId": categoryId,
"groupId": groupId, "groupId": groupId,
"shortName": shortName, "shortName": shortName,
"productName": productName, "productName": productName,
"sellDesc": sellDesc, "sellDesc": sellDesc,
"productCode": productCode, "productCode": productCode,
"weight": weight, "weight": weight,
"applyPrice": applyPrice, "applyPrice": applyPrice,
"price": price, "price": price,
"stock": stock, "stock": stock,
"sellCount": sellCount, "sellCount": sellCount,
"needLogistics": needLogistics, "needLogistics": needLogistics,
"oversold": oversold, "oversold": oversold,
"organic" : organic, "organic": organic,
"status": status, "status": status,
"posShow": posShow, "posShow": posShow,
"productType": productType, "productType": productType,
"productNumber": productNumber, "productNumber": productNumber,
"setMeal": setMeal, "setMeal": setMeal,
"attrStyle": attrStyle, "attrStyle": attrStyle,
"detail" :detail, "detail": detail,
"details" :details, "details": details,
"isDelete": isDelete, "isDelete": isDelete,
"printerFlag": printerFlag, "printerFlag": printerFlag,
"thumbnailImg": thumbnailImg, "thumbnailImg": thumbnailImg,
"materialId": materialId, "materialId": materialId,
"imgs": imgs, "imgs": imgs,
"storeDTO": storeDTO, "storeDTO": storeDTO,
"attrList": attrList, "attrList": attrList,
"productSkuVOList": productSkuVOList, "productSkuVOList": productSkuVOList,
"shipAddress": shipAddress, "shipAddress": shipAddress,
"buyCount": buyCount, "buyCount": buyCount,
"promotionShowVOList": promotionShowVOList, "promotionShowVOList": promotionShowVOList,
"buyNum": buyNum, "buyNum": buyNum,
"productPlatterInfos": productPlatterInfos, "productPlatterInfos": productPlatterInfos,
"markProductNone": markProductNone, "markProductNone": markProductNone,
"namePinyin": namePinyin, "namePinyin": namePinyin,
"nameInitials": nameInitials, "nameInitials": nameInitials,
}; "subscribeParam": subscribeParam,
};
} }
/// id : "1446382612795883520" /// id : "1446382612795883520"
@ -271,41 +273,41 @@ class ProductSkuVOListBean {
productSkuVOListBean.version = map['version']; productSkuVOListBean.version = map['version'];
productSkuVOListBean.skuAttrCodeDTOList = map['skuAttrCodeDTOList']; productSkuVOListBean.skuAttrCodeDTOList = map['skuAttrCodeDTOList'];
productSkuVOListBean.skuAttrList = []..addAll( productSkuVOListBean.skuAttrList = []..addAll(
(map['skuAttrList'] as List ?? []).map((o) => SkuAttrListBean.fromJson(o)) (map['skuAttrList'] as List ?? [])
); .map((o) => SkuAttrListBean.fromJson(o)));
productSkuVOListBean.productSetMeals = []..addAll( productSkuVOListBean.productSetMeals = []..addAll(
(map['productSetMeals'] as List ?? []).map((o) => ProductSetMeals.fromJson(o)) (map['productSetMeals'] as List ?? [])
); .map((o) => ProductSetMeals.fromJson(o)));
productSkuVOListBean.setMealDTOList = map['setMealDTOList']; productSkuVOListBean.setMealDTOList = map['setMealDTOList'];
return productSkuVOListBean; return productSkuVOListBean;
} }
Map toJson() => { Map toJson() => {
"id": id, "id": id,
"createTime": createTime, "createTime": createTime,
"createUser": createUser, "createUser": createUser,
"updateTime": updateTime, "updateTime": updateTime,
"updateUser": updateUser, "updateUser": updateUser,
"storeId": storeId, "storeId": storeId,
"skuCode": skuCode, "skuCode": skuCode,
"skuNameStr": skuNameStr, "skuNameStr": skuNameStr,
"productId": productId, "productId": productId,
"skuPrice": skuPrice, "skuPrice": skuPrice,
"applyPrice": applyPrice, "applyPrice": applyPrice,
"vipPrice": vipPrice, "vipPrice": vipPrice,
"skuImg": skuImg, "skuImg": skuImg,
"skuStock": skuStock, "skuStock": skuStock,
"sort": sort, "sort": sort,
"setMeal": setMeal, "setMeal": setMeal,
"weight": weight, "weight": weight,
"volume": volume, "volume": volume,
"isDelete": isDelete, "isDelete": isDelete,
"material": material, "material": material,
"version": version, "version": version,
"skuAttrCodeDTOList": skuAttrCodeDTOList, "skuAttrCodeDTOList": skuAttrCodeDTOList,
"skuAttrList": skuAttrList, "skuAttrList": skuAttrList,
"setMealDTOList": setMealDTOList, "setMealDTOList": setMealDTOList,
}; };
} }
/// id : "1446382613043347456" /// id : "1446382613043347456"
@ -348,17 +350,17 @@ class SkuAttrListBean {
} }
Map toJson() => { Map toJson() => {
"id": id, "id": id,
"createTime": createTime, "createTime": createTime,
"createUser": createUser, "createUser": createUser,
"updateTime": updateTime, "updateTime": updateTime,
"updateUser": updateUser, "updateUser": updateUser,
"skuId": skuId, "skuId": skuId,
"attrId": attrId, "attrId": attrId,
"attrValueId": attrValueId, "attrValueId": attrValueId,
"sortOrder": sortOrder, "sortOrder": sortOrder,
"isDelete": isDelete, "isDelete": isDelete,
}; };
} }
/// groupName : "酒水选1" /// groupName : "酒水选1"
@ -371,7 +373,8 @@ class ProductSetMeals {
String groupName, String groupName,
int totalNumber, int totalNumber,
int optionalNumber, int optionalNumber,
List<ProductInfoList> productInfoList,}){ List<ProductInfoList> productInfoList,
}) {
_groupName = groupName; _groupName = groupName;
_totalNumber = totalNumber; _totalNumber = totalNumber;
_optionalNumber = optionalNumber; _optionalNumber = optionalNumber;
@ -389,22 +392,31 @@ class ProductSetMeals {
}); });
} }
} }
String _groupName; String _groupName;
int _totalNumber; int _totalNumber;
int _optionalNumber; int _optionalNumber;
List<ProductInfoList> _productInfoList; List<ProductInfoList> _productInfoList;
ProductSetMeals copyWith({ String groupName,
ProductSetMeals copyWith({
String groupName,
int totalNumber, int totalNumber,
int optionalNumber, int optionalNumber,
List<ProductInfoList> productInfoList, List<ProductInfoList> productInfoList,
}) => ProductSetMeals( groupName: groupName ?? _groupName, }) =>
totalNumber: totalNumber ?? _totalNumber, ProductSetMeals(
optionalNumber: optionalNumber ?? _optionalNumber, groupName: groupName ?? _groupName,
productInfoList: productInfoList ?? _productInfoList, totalNumber: totalNumber ?? _totalNumber,
); optionalNumber: optionalNumber ?? _optionalNumber,
productInfoList: productInfoList ?? _productInfoList,
);
String get groupName => _groupName; String get groupName => _groupName;
int get totalNumber => _totalNumber; int get totalNumber => _totalNumber;
int get optionalNumber => _optionalNumber; int get optionalNumber => _optionalNumber;
List<ProductInfoList> get productInfoList => _productInfoList; List<ProductInfoList> get productInfoList => _productInfoList;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -417,7 +429,6 @@ class ProductSetMeals {
} }
return map; return map;
} }
} }
/// productId : "1372091668961951744" /// productId : "1372091668961951744"
@ -436,7 +447,8 @@ class ProductInfoList {
bool allSku, bool allSku,
List<SkuInfoList> skuInfoList, List<SkuInfoList> skuInfoList,
List<ProductAttrInfoList> productAttrInfoList, List<ProductAttrInfoList> productAttrInfoList,
int number,}){ int number,
}) {
_productId = productId; _productId = productId;
_productName = productName; _productName = productName;
_productImg = productImg; _productImg = productImg;
@ -465,6 +477,7 @@ class ProductInfoList {
} }
_number = json['number']; _number = json['number'];
} }
String _productId; String _productId;
String _productName; String _productName;
String _productImg; String _productImg;
@ -473,26 +486,36 @@ class ProductInfoList {
List<ProductAttrInfoList> _productAttrInfoList; List<ProductAttrInfoList> _productAttrInfoList;
int _number; int _number;
int _count = 0; int _count = 0;
ProductInfoList copyWith({ String productId,
ProductInfoList copyWith({
String productId,
String productName, String productName,
String productImg, String productImg,
bool allSku, bool allSku,
List<SkuInfoList> skuInfoList, List<SkuInfoList> skuInfoList,
List<ProductAttrInfoList> productAttrInfoList, List<ProductAttrInfoList> productAttrInfoList,
int number, int number,
}) => ProductInfoList( productId: productId ?? _productId, }) =>
productName: productName ?? _productName, ProductInfoList(
productImg: productImg ?? _productImg, productId: productId ?? _productId,
allSku: allSku ?? _allSku, productName: productName ?? _productName,
skuInfoList: skuInfoList ?? _skuInfoList, productImg: productImg ?? _productImg,
productAttrInfoList: productAttrInfoList ?? _productAttrInfoList, allSku: allSku ?? _allSku,
number: number ?? _number, skuInfoList: skuInfoList ?? _skuInfoList,
); productAttrInfoList: productAttrInfoList ?? _productAttrInfoList,
number: number ?? _number,
);
String get productId => _productId; String get productId => _productId;
String get productName => _productName; String get productName => _productName;
String get productImg => _productImg; String get productImg => _productImg;
bool get allSku => _allSku; bool get allSku => _allSku;
List<SkuInfoList> get skuInfoList => _skuInfoList; List<SkuInfoList> get skuInfoList => _skuInfoList;
List<ProductAttrInfoList> get productAttrInfoList => _productAttrInfoList; List<ProductAttrInfoList> get productAttrInfoList => _productAttrInfoList;
int number; int number;
@ -502,8 +525,6 @@ class ProductInfoList {
_count = value; _count = value;
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final map = <String, dynamic>{}; final map = <String, dynamic>{};
map['productId'] = _productId; map['productId'] = _productId;
@ -514,12 +535,12 @@ class ProductInfoList {
map['skuInfoList'] = _skuInfoList.map((v) => v.toJson()).toList(); map['skuInfoList'] = _skuInfoList.map((v) => v.toJson()).toList();
} }
if (_productAttrInfoList != null) { if (_productAttrInfoList != null) {
map['productAttrInfoList'] = _productAttrInfoList.map((v) => v.toJson()).toList(); map['productAttrInfoList'] =
_productAttrInfoList.map((v) => v.toJson()).toList();
} }
map['number'] = _number; map['number'] = _number;
return map; return map;
} }
} }
/// attrId : "1372091668978728960" /// attrId : "1372091668978728960"
@ -530,7 +551,8 @@ class ProductAttrInfoList {
ProductAttrInfoList({ ProductAttrInfoList({
String attrId, String attrId,
String attrName, String attrName,
List<AttrValueList> attrValueList,}){ List<AttrValueList> attrValueList,
}) {
_attrId = attrId; _attrId = attrId;
_attrName = attrName; _attrName = attrName;
_attrValueList = attrValueList; _attrValueList = attrValueList;
@ -546,21 +568,28 @@ class ProductAttrInfoList {
}); });
} }
} }
String _attrId; String _attrId;
String _attrName; String _attrName;
List<AttrValueList> _attrValueList; List<AttrValueList> _attrValueList;
String _selectSku; String _selectSku;
ProductAttrInfoList copyWith({ String attrId,
ProductAttrInfoList copyWith({
String attrId,
String attrName, String attrName,
List<AttrValueList> attrValueList, List<AttrValueList> attrValueList,
}) => ProductAttrInfoList( attrId: attrId ?? _attrId, }) =>
attrName: attrName ?? _attrName, ProductAttrInfoList(
attrValueList: attrValueList ?? _attrValueList, attrId: attrId ?? _attrId,
); attrName: attrName ?? _attrName,
attrValueList: attrValueList ?? _attrValueList,
);
String get attrId => _attrId; String get attrId => _attrId;
String get attrName => _attrName; String get attrName => _attrName;
List<AttrValueList> get attrValueList => _attrValueList;
List<AttrValueList> get attrValueList => _attrValueList;
String get selectSku => _selectSku; String get selectSku => _selectSku;
@ -577,7 +606,6 @@ class ProductAttrInfoList {
} }
return map; return map;
} }
} }
/// attrId : "1372091668987117568" /// attrId : "1372091668987117568"
@ -588,7 +616,8 @@ class AttrValueList {
AttrValueList({ AttrValueList({
String attrId, String attrId,
String attrName, String attrName,
dynamic attrValueList,}){ dynamic attrValueList,
}) {
_attrId = attrId; _attrId = attrId;
_attrName = attrName; _attrName = attrName;
_attrValueList = attrValueList; _attrValueList = attrValueList;
@ -599,18 +628,26 @@ class AttrValueList {
_attrName = json['attrName']; _attrName = json['attrName'];
_attrValueList = json['attrValueList']; _attrValueList = json['attrValueList'];
} }
String _attrId; String _attrId;
String _attrName; String _attrName;
dynamic _attrValueList; dynamic _attrValueList;
AttrValueList copyWith({ String attrId,
AttrValueList copyWith({
String attrId,
String attrName, String attrName,
dynamic attrValueList, dynamic attrValueList,
}) => AttrValueList( attrId: attrId ?? _attrId, }) =>
attrName: attrName ?? _attrName, AttrValueList(
attrValueList: attrValueList ?? _attrValueList, attrId: attrId ?? _attrId,
); attrName: attrName ?? _attrName,
attrValueList: attrValueList ?? _attrValueList,
);
String get attrId => _attrId; String get attrId => _attrId;
String get attrName => _attrName; String get attrName => _attrName;
dynamic get attrValueList => _attrValueList; dynamic get attrValueList => _attrValueList;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -620,7 +657,6 @@ class AttrValueList {
map['attrValueList'] = _attrValueList; map['attrValueList'] = _attrValueList;
return map; return map;
} }
} }
/// id : "1372091669003894784" /// id : "1372091669003894784"
@ -631,7 +667,8 @@ class SkuInfoList {
SkuInfoList({ SkuInfoList({
String id, String id,
String skuName, String skuName,
List<ProductSkuAttrList> productSkuAttrList,}){ List<ProductSkuAttrList> productSkuAttrList,
}) {
_id = id; _id = id;
_skuName = skuName; _skuName = skuName;
_productSkuAttrList = productSkuAttrList; _productSkuAttrList = productSkuAttrList;
@ -647,19 +684,27 @@ class SkuInfoList {
}); });
} }
} }
String _id; String _id;
String _skuName; String _skuName;
bool _isSelected = false; bool _isSelected = false;
List<ProductSkuAttrList> _productSkuAttrList; List<ProductSkuAttrList> _productSkuAttrList;
SkuInfoList copyWith({ String id,
SkuInfoList copyWith({
String id,
String skuName, String skuName,
List<ProductSkuAttrList> productSkuAttrList, List<ProductSkuAttrList> productSkuAttrList,
}) => SkuInfoList( id: id ?? _id, }) =>
skuName: skuName ?? _skuName, SkuInfoList(
productSkuAttrList: productSkuAttrList ?? _productSkuAttrList, id: id ?? _id,
); skuName: skuName ?? _skuName,
productSkuAttrList: productSkuAttrList ?? _productSkuAttrList,
);
String get id => _id; String get id => _id;
String get skuName => _skuName; String get skuName => _skuName;
List<ProductSkuAttrList> get productSkuAttrList => _productSkuAttrList; List<ProductSkuAttrList> get productSkuAttrList => _productSkuAttrList;
bool get isSelected => _isSelected; bool get isSelected => _isSelected;
@ -673,11 +718,11 @@ class SkuInfoList {
map['id'] = _id; map['id'] = _id;
map['skuName'] = _skuName; map['skuName'] = _skuName;
if (_productSkuAttrList != null) { if (_productSkuAttrList != null) {
map['productSkuAttrList'] = _productSkuAttrList.map((v) => v.toJson()).toList(); map['productSkuAttrList'] =
_productSkuAttrList.map((v) => v.toJson()).toList();
} }
return map; return map;
} }
} }
/// id : "1372091669012283392" /// id : "1372091669012283392"
@ -702,7 +747,8 @@ class ProductSkuAttrList {
String attrId, String attrId,
String attrValueId, String attrValueId,
dynamic sortOrder, dynamic sortOrder,
int isDelete,}){ int isDelete,
}) {
_id = id; _id = id;
_createTime = createTime; _createTime = createTime;
_createUser = createUser; _createUser = createUser;
@ -727,6 +773,7 @@ class ProductSkuAttrList {
_sortOrder = json['sortOrder']; _sortOrder = json['sortOrder'];
_isDelete = json['isDelete']; _isDelete = json['isDelete'];
} }
String _id; String _id;
String _createTime; String _createTime;
String _createUser; String _createUser;
@ -737,7 +784,9 @@ class ProductSkuAttrList {
String _attrValueId; String _attrValueId;
dynamic _sortOrder; dynamic _sortOrder;
int _isDelete; int _isDelete;
ProductSkuAttrList copyWith({ String id,
ProductSkuAttrList copyWith({
String id,
String createTime, String createTime,
String createUser, String createUser,
String updateTime, String updateTime,
@ -747,26 +796,38 @@ class ProductSkuAttrList {
String attrValueId, String attrValueId,
dynamic sortOrder, dynamic sortOrder,
int isDelete, int isDelete,
}) => ProductSkuAttrList( id: id ?? _id, }) =>
createTime: createTime ?? _createTime, ProductSkuAttrList(
createUser: createUser ?? _createUser, id: id ?? _id,
updateTime: updateTime ?? _updateTime, createTime: createTime ?? _createTime,
updateUser: updateUser ?? _updateUser, createUser: createUser ?? _createUser,
skuId: skuId ?? _skuId, updateTime: updateTime ?? _updateTime,
attrId: attrId ?? _attrId, updateUser: updateUser ?? _updateUser,
attrValueId: attrValueId ?? _attrValueId, skuId: skuId ?? _skuId,
sortOrder: sortOrder ?? _sortOrder, attrId: attrId ?? _attrId,
isDelete: isDelete ?? _isDelete, attrValueId: attrValueId ?? _attrValueId,
); sortOrder: sortOrder ?? _sortOrder,
isDelete: isDelete ?? _isDelete,
);
String get id => _id; String get id => _id;
String get createTime => _createTime; String get createTime => _createTime;
String get createUser => _createUser; String get createUser => _createUser;
String get updateTime => _updateTime; String get updateTime => _updateTime;
String get updateUser => _updateUser; String get updateUser => _updateUser;
String get skuId => _skuId; String get skuId => _skuId;
String get attrId => _attrId; String get attrId => _attrId;
String get attrValueId => _attrValueId; String get attrValueId => _attrValueId;
dynamic get sortOrder => _sortOrder; dynamic get sortOrder => _sortOrder;
int get isDelete => _isDelete; int get isDelete => _isDelete;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -783,7 +844,6 @@ class ProductSkuAttrList {
map['isDelete'] = _isDelete; map['isDelete'] = _isDelete;
return map; return map;
} }
} }
/// productId : "1433994980233314304" /// productId : "1433994980233314304"
@ -815,22 +875,21 @@ class AttrListBean {
attrListBean.isDelete = map['isDelete']; attrListBean.isDelete = map['isDelete'];
attrListBean.attrCode = map['attrCode']; attrListBean.attrCode = map['attrCode'];
attrListBean.id = map['id']; attrListBean.id = map['id'];
attrListBean.attrValueList = []..addAll( attrListBean.attrValueList = []..addAll((map['attrValueList'] as List ?? [])
(map['attrValueList'] as List ?? []).map((o) => AttrValueListBean.fromJson(o)) .map((o) => AttrValueListBean.fromJson(o)));
);
return attrListBean; return attrListBean;
} }
Map toJson() => { Map toJson() => {
"productId": productId, "productId": productId,
"attrName": attrName, "attrName": attrName,
"sortOrder": sortOrder, "sortOrder": sortOrder,
"needImg": needImg, "needImg": needImg,
"isDelete": isDelete, "isDelete": isDelete,
"attrCode": attrCode, "attrCode": attrCode,
"id": id, "id": id,
"attrValueList": attrValueList, "attrValueList": attrValueList,
}; };
} }
/// id : "1434076666832879616" /// id : "1434076666832879616"
@ -865,14 +924,14 @@ class AttrValueListBean {
} }
Map toJson() => { Map toJson() => {
"id": id, "id": id,
"attrId": attrId, "attrId": attrId,
"attrValue": attrValue, "attrValue": attrValue,
"attrValueImg": attrValueImg, "attrValueImg": attrValueImg,
"sortOrder": sortOrder, "sortOrder": sortOrder,
"isDelete": isDelete, "isDelete": isDelete,
"attrValueCode": attrValueCode, "attrValueCode": attrValueCode,
}; };
} }
/// id : "1333246101343436800" /// id : "1333246101343436800"
@ -903,11 +962,103 @@ class StoreDTOBean {
} }
Map toJson() => { Map toJson() => {
"id": id, "id": id,
"storeName": storeName, "storeName": storeName,
"nickName": nickName, "nickName": nickName,
"logo": logo, "logo": logo,
"productCount": productCount, "productCount": productCount,
"soldNum": soldNum, "soldNum": soldNum,
}; };
} }
/// isEnableSubscribe : true
/// dayOrDate : 3
/// startAfterDays : null
/// daysValidate : null
/// subscribeStartTime : "2023-04-20 00:00:00"
/// subscribeEndTime : "2023-04-30 00:00:00"
/// stores : ["海峡姐妹","前进麦味","百年川椒","小吃街"]
class SubscribeParam {
SubscribeParam({
bool isEnableSubscribe,
num dayOrDate,
dynamic startAfterDays,
dynamic daysValidate,
String subscribeStartTime,
String subscribeEndTime,
List<String> stores,}) {
_isEnableSubscribe = isEnableSubscribe;
_dayOrDate = dayOrDate;
_startAfterDays = startAfterDays;
_daysValidate = daysValidate;
_subscribeStartTime = subscribeStartTime;
_subscribeEndTime = subscribeEndTime;
_stores = stores;
}
SubscribeParam.fromJson(dynamic json) {
if(json == null)
return;
_isEnableSubscribe = json['isEnableSubscribe'];
_dayOrDate = json['dayOrDate'];
_startAfterDays = json['startAfterDays'];
_daysValidate = json['daysValidate'];
_subscribeStartTime = json['subscribeStartTime'];
_subscribeEndTime = json['subscribeEndTime'];
_stores = json['stores'] != null ? json['stores'].cast<String>() : [];
}
bool _isEnableSubscribe;
num _dayOrDate;
dynamic _startAfterDays;
dynamic _daysValidate;
String _subscribeStartTime;
String _subscribeEndTime;
List<String> _stores;
SubscribeParam copyWith({ bool isEnableSubscribe,
num dayOrDate,
dynamic startAfterDays,
dynamic daysValidate,
String subscribeStartTime,
String subscribeEndTime,
List<String> stores,
}) =>
SubscribeParam(
isEnableSubscribe: isEnableSubscribe ?? _isEnableSubscribe,
dayOrDate: dayOrDate ?? _dayOrDate,
startAfterDays: startAfterDays ?? _startAfterDays,
daysValidate: daysValidate ?? _daysValidate,
subscribeStartTime: subscribeStartTime ?? _subscribeStartTime,
subscribeEndTime: subscribeEndTime ?? _subscribeEndTime,
stores: stores ?? _stores,
);
bool get isEnableSubscribe => _isEnableSubscribe;
num get dayOrDate => _dayOrDate;
dynamic get startAfterDays => _startAfterDays;
dynamic get daysValidate => _daysValidate;
String get subscribeStartTime => _subscribeStartTime;
String get subscribeEndTime => _subscribeEndTime;
List<String> get stores => _stores;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['isEnableSubscribe'] = _isEnableSubscribe;
map['dayOrDate'] = _dayOrDate;
map['startAfterDays'] = _startAfterDays;
map['daysValidate'] = _daysValidate;
map['subscribeStartTime'] = _subscribeStartTime;
map['subscribeEndTime'] = _subscribeEndTime;
map['stores'] = _stores;
return map;
}
}

5
lib/retrofit/data/placeOrderFirst.dart

@ -119,6 +119,7 @@ class PromotionInfoDTOBean {
String couponId; String couponId;
String promotionId; String promotionId;
bool useVipPrice; bool useVipPrice;
bool useBenefit;
PromotionInfoDTOBean({this.couponId, this.promotionId,this.useVipPrice}); PromotionInfoDTOBean({this.couponId, this.promotionId,this.useVipPrice});
@ -128,12 +129,14 @@ class PromotionInfoDTOBean {
promotionInfoDTOBean.couponId = json['couponId']; promotionInfoDTOBean.couponId = json['couponId'];
promotionInfoDTOBean.promotionId = json['promotionId']; promotionInfoDTOBean.promotionId = json['promotionId'];
promotionInfoDTOBean.useVipPrice = json['useVipPrice']; promotionInfoDTOBean.useVipPrice = json['useVipPrice'];
promotionInfoDTOBean.useBenefit = json['useBenefit'];
return promotionInfoDTOBean; return promotionInfoDTOBean;
} }
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"couponId": couponId, "couponId": couponId,
"promotionId": promotionId, "promotionId": promotionId,
"useVipPrice":useVipPrice "useVipPrice":useVipPrice,
"useBenefit": useBenefit,
}; };
} }

593
lib/settlement/settlement.dart

@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart'; import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart';
import 'package:flutter_baidu_mapapi_utils/flutter_baidu_mapapi_utils.dart'; import 'package:flutter_baidu_mapapi_utils/flutter_baidu_mapapi_utils.dart';
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:fluwx/fluwx.dart'; import 'package:fluwx/fluwx.dart';
@ -33,9 +34,11 @@ import 'package:huixiang/utils/font_weight.dart';
import 'package:huixiang/utils/min.dart'; import 'package:huixiang/utils/min.dart';
import 'package:huixiang/view_widget/my_appbar.dart'; import 'package:huixiang/view_widget/my_appbar.dart';
import 'package:huixiang/view_widget/round_button.dart'; import 'package:huixiang/view_widget/round_button.dart';
import 'package:intl/intl.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../retrofit/data/miNiDetail.dart';
import '../retrofit/data/shoppingCart.dart'; import '../retrofit/data/shoppingCart.dart';
import '../view_widget/settlement_tips_dialog.dart'; import '../view_widget/settlement_tips_dialog.dart';
@ -85,6 +88,11 @@ class _Settlement extends State<Settlement> {
bool showVipTips = false; bool showVipTips = false;
bool isRaiseChannel = false; bool isRaiseChannel = false;
ShoppingCart shopCarGoods; ShoppingCart shopCarGoods;
SubscribeParam subscribeParam;
String reservationTime;
String subscribeStoresName;
String subTime;
int storesIndex = 0;
@override @override
void initState() { void initState() {
@ -108,7 +116,7 @@ class _Settlement extends State<Settlement> {
count1 = widget.arguments["buyNum"]; count1 = widget.arguments["buyNum"];
productId = widget.arguments["productId"]; productId = widget.arguments["productId"];
shopCarGoods = widget.arguments["shoppingCart"]; shopCarGoods = widget.arguments["shoppingCart"];
subscribeParam = widget?.arguments["subscribeParam"] ?? null;
if (tableId == 0) { if (tableId == 0) {
placeOrder = true; placeOrder = true;
} }
@ -122,8 +130,7 @@ class _Settlement extends State<Settlement> {
token: minToken, token: minToken,
tenant: tenant, tenant: tenant,
storeId: storeId, storeId: storeId,
showLoading: false showLoading: false);
);
queryMemberInfo(); queryMemberInfo();
if (promotions != null && promotions != "" && tableId <= 0) { if (promotions != null && promotions != "" && tableId <= 0) {
queryOrderInfo( queryOrderInfo(
@ -192,68 +199,68 @@ class _Settlement extends State<Settlement> {
try { try {
EasyLoading.show(status: S.current.zhengzaijiazai); EasyLoading.show(status: S.current.zhengzaijiazai);
BaseData<SettleOrderInfo> baseData = await minService.getOrderInfo({ BaseData<SettleOrderInfo> baseData = await minService.getOrderInfo({
"addressId": addressId, "addressId": addressId,
"isTake": isTake, "isTake": isTake,
"memberCouponId": memberCouponId, "memberCouponId": memberCouponId,
"orderId": orderId, "orderId": orderId,
"promotionId": promotionId, "promotionId": promotionId,
"productSkuId": productSkuId, "productSkuId": productSkuId,
"actProductId": actProductId, "actProductId": actProductId,
"actProductSkuId": actProductSkuId, "actProductSkuId": actProductSkuId,
"useVipPrice":useVipPriceSelect, "useVipPrice": useVipPriceSelect,
"buyNum": buyNum, "buyNum": buyNum,
"payChannel":payChannel, "payChannel": payChannel,
"tableId": tableId "tableId": tableId
}).catchError((error) {}); }).catchError((error) {});
this.promotion = null; this.promotion = null;
promotions = ""; promotions = "";
this.couponListBean = null; this.couponListBean = null;
coupons = ""; coupons = "";
if (baseData != null && baseData.isSuccess) { if (baseData != null && baseData.isSuccess) {
settleOrderInfo = baseData.data; settleOrderInfo = baseData.data;
if ((settleOrderInfo?.promotionId ?? "") != "") { if ((settleOrderInfo?.promotionId ?? "") != "") {
settleOrderInfo.promotionInfoList.forEach((element) { settleOrderInfo.promotionInfoList.forEach((element) {
if (element.id == settleOrderInfo.promotionId) { if (element.id == settleOrderInfo.promotionId) {
this.promotion = element; this.promotion = element;
promotions = promotion?.name ?? ""; promotions = promotion?.name ?? "";
} }
}); });
} }
if ((settleOrderInfo?.memberCouponId ?? "") != "") { if ((settleOrderInfo?.memberCouponId ?? "") != "") {
settleOrderInfo.couponList.forEach((element) { settleOrderInfo.couponList.forEach((element) {
if (element.id == settleOrderInfo.memberCouponId) { if (element.id == settleOrderInfo.memberCouponId) {
this.couponListBean = element; this.couponListBean = element;
coupons = couponListBean?.promotionName ?? ""; coupons = couponListBean?.promotionName ?? "";
} }
}); });
} }
if (settleOrderInfo.orderProductList == null || if (settleOrderInfo.orderProductList == null ||
settleOrderInfo.orderProductList.length == 0) { settleOrderInfo.orderProductList.length == 0) {
placeOrder = true; placeOrder = true;
queryOrderDetails( queryOrderDetails(
pageType != null ? widget.arguments["orderId"] : parentId); pageType != null ? widget.arguments["orderId"] : parentId);
} }
if(!isRaiseChannel && settleOrderInfo.isRaise){ if (!isRaiseChannel && settleOrderInfo.isRaise) {
isRaiseChannel = true; isRaiseChannel = true;
queryOrderInfo( queryOrderInfo(
address?.id, address?.id,
selectedBtn, selectedBtn,
couponListBean?.id, couponListBean?.id,
0, 0,
promotion?.id ?? productId, promotion?.id ?? productId,
productSkuId ?? "", productSkuId ?? "",
actProductId ?? "", actProductId ?? "",
actProductSkuId ?? "", actProductSkuId ?? "",
useVipPriceSelect, useVipPriceSelect,
count1, count1,
settleOrderInfo.isRaise ? 7 :payChannel, settleOrderInfo.isRaise ? 7 : payChannel,
tableId); tableId);
}
} else {
SmartDialog.showToast(baseData?.msg ?? "", alignment: Alignment.center);
} }
} else { } finally {
SmartDialog.showToast(baseData?.msg ?? "", alignment: Alignment.center);
}
}finally{
setState(() {}); setState(() {});
EasyLoading.dismiss(); EasyLoading.dismiss();
} }
@ -266,7 +273,7 @@ class _Settlement extends State<Settlement> {
}); });
if (baseData != null && baseData.isSuccess) { if (baseData != null && baseData.isSuccess) {
SharedPreferences.getInstance().then( SharedPreferences.getInstance().then(
(value) => { (value) => {
value.setString('minMember', jsonEncode(baseData.data)), value.setString('minMember', jsonEncode(baseData.data)),
}, },
); );
@ -315,76 +322,76 @@ class _Settlement extends State<Settlement> {
} }
queryAddress(int selectedBtn) async { queryAddress(int selectedBtn) async {
setState(() {
this.selectedBtn = selectedBtn;
});
if (address != null) {
queryOrderInfo(
address.id,
selectedBtn,
null,
0,
productId ?? null,
productSkuId ?? "",
actProductId ?? "",
actProductSkuId ?? "",
useVipPriceSelect,
count1,
payChannel,
tableId);
return;
}
BaseData<List<Address>> baseDate =
await minService.queryAddress().catchError((error) {});
BMFCoordinate bmfCoordinate = BMFCoordinate(
double.tryParse(storeInfo.latitude),
double.tryParse(storeInfo.longitude),
);
if (baseDate != null && baseDate.isSuccess) {
setState(() { setState(() {
this.selectedBtn = selectedBtn; address = baseDate.data[0];
}); });
if (address != null) { for (int i = 1; i < baseDate.data.length; i++) {
queryOrderInfo( Address address1 = baseDate.data[i];
address.id,
selectedBtn,
null,
0,
productId ?? null,
productSkuId ?? "",
actProductId ?? "",
actProductSkuId ?? "",
useVipPriceSelect,
count1,
payChannel,
tableId);
return;
}
BaseData<List<Address>> baseDate =
await minService.queryAddress().catchError((error) {});
BMFCoordinate bmfCoordinate = BMFCoordinate(
double.tryParse(storeInfo.latitude),
double.tryParse(storeInfo.longitude),
);
if (baseDate != null && baseDate.isSuccess) {
setState(() {
address = baseDate.data[0];
});
for (int i = 1; i < baseDate.data.length; i++) {
Address address1 = baseDate.data[i];
BMFCoordinate coordinate = await BMFCalculateUtils.coordConvert( BMFCoordinate coordinate = await BMFCalculateUtils.coordConvert(
coordinate: BMFCoordinate( coordinate: BMFCoordinate(
double.tryParse(address.longitude), double.tryParse(address.longitude),
double.tryParse(address.latitude), double.tryParse(address.latitude),
), ),
fromType: BMF_COORD_TYPE.COMMON, fromType: BMF_COORD_TYPE.COMMON,
toType: BMF_COORD_TYPE.BD09LL); toType: BMF_COORD_TYPE.BD09LL);
BMFCoordinate coordinate1 = await BMFCalculateUtils.coordConvert( BMFCoordinate coordinate1 = await BMFCalculateUtils.coordConvert(
coordinate: BMFCoordinate( coordinate: BMFCoordinate(
double.tryParse(address1.longitude), double.tryParse(address1.longitude),
double.tryParse(address1.latitude), double.tryParse(address1.latitude),
), ),
fromType: BMF_COORD_TYPE.COMMON, fromType: BMF_COORD_TYPE.COMMON,
toType: BMF_COORD_TYPE.BD09LL); toType: BMF_COORD_TYPE.BD09LL);
double mi = await BMFCalculateUtils.getLocationDistance( double mi = await BMFCalculateUtils.getLocationDistance(
bmfCoordinate, coordinate); bmfCoordinate, coordinate);
double mi1 = await BMFCalculateUtils.getLocationDistance( double mi1 = await BMFCalculateUtils.getLocationDistance(
bmfCoordinate, coordinate1); bmfCoordinate, coordinate1);
if (mi1 < mi) { if (mi1 < mi) {
address = address1; address = address1;
}
} }
await queryOrderInfo(
address.id,
selectedBtn,
null,
0,
productId ?? null,
productSkuId ?? "",
actProductId ?? "",
actProductSkuId ?? "",
useVipPriceSelect,
count1,
payChannel,
tableId);
} }
await queryOrderInfo(
address.id,
selectedBtn,
null,
0,
productId ?? null,
productSkuId ?? "",
actProductId ?? "",
actProductSkuId ?? "",
useVipPriceSelect,
count1,
payChannel,
tableId);
}
} }
/// ///
@ -492,16 +499,25 @@ class _Settlement extends State<Settlement> {
placeOrderFirst.cartNum = settleOrderInfo.orderNum; placeOrderFirst.cartNum = settleOrderInfo.orderNum;
placeOrderFirst.cartSum = settleOrderInfo.price; placeOrderFirst.cartSum = settleOrderInfo.price;
placeOrderFirst.addressId = address == null ? null : address.id; placeOrderFirst.addressId = address == null ? null : address.id;
placeOrderFirst.isSubscribe = false; placeOrderFirst.isSubscribe =
((subscribeParam?.isEnableSubscribe ?? false) == true)
? true
: false; //
placeOrderFirst.isTakeOut = selectedBtn; placeOrderFirst.isTakeOut = selectedBtn;
placeOrderFirst.notes = remakers; placeOrderFirst.notes = remakers +
(reservationTime ?? "") +
(subscribeParam == null
? ""
: "预约门店:${((subscribeParam?.stores?.length ?? 0) == 1 ? (subscribeParam.stores[0]) : (subscribeStoresName ?? ""))}");
placeOrderFirst.numberOfPeople = "$numberOfPeople"; placeOrderFirst.numberOfPeople = "$numberOfPeople";
placeOrderFirst.orderSource = 2; placeOrderFirst.orderSource = 2;
placeOrderFirst.orderType = "0"; placeOrderFirst.orderType = "0";
placeOrderFirst.orderTypeId = 0; placeOrderFirst.orderTypeId = 0;
placeOrderFirst.parentCode = parentCode; // placeOrderFirst.parentCode = parentCode; //
placeOrderFirst.parentId = parentId; // placeOrderFirst.parentId = parentId; //
placeOrderFirst.payChannel = ((placeOrderFirst.cartSum == "0.00") ? payChannel = 0 : (settleOrderInfo.isRaise ? 7:payChannel)); placeOrderFirst.payChannel = ((placeOrderFirst.cartSum == "0.00")
? payChannel = 0
: (settleOrderInfo.isRaise ? 7 : payChannel));
placeOrderFirst.promotionInfoDTO = PromotionInfoDTOBean(); placeOrderFirst.promotionInfoDTO = PromotionInfoDTOBean();
placeOrderFirst.promotionInfoDTO.promotionId = placeOrderFirst.promotionInfoDTO.promotionId =
(promotion != null && tableId <= 0) ? promotion.id : ""; (promotion != null && tableId <= 0) ? promotion.id : "";
@ -510,16 +526,18 @@ class _Settlement extends State<Settlement> {
(couponListBean != null && tableId <= 0) ? couponListBean.id : ""; (couponListBean != null && tableId <= 0) ? couponListBean.id : "";
// : widget.arguments["cid"] ?? ""; // : widget.arguments["cid"] ?? "";
placeOrderFirst.promotionInfoDTO.useVipPrice = useVipPriceSelect; placeOrderFirst.promotionInfoDTO.useVipPrice = useVipPriceSelect;
// placeOrderFirst.promotionInfoDTO.useBenefit = false;
placeOrderFirst.recMobile = placeOrderFirst.recMobile =
(mobile == null || mobile == "") ? mobile : storeInfo.headMobile; (mobile == null || mobile == "") ? mobile : storeInfo.headMobile;
placeOrderFirst.shoppingCartSkuItemList = settleOrderInfo.orderProductList; placeOrderFirst.shoppingCartSkuItemList = settleOrderInfo.orderProductList;
placeOrderFirst.skuItemDTOList = []; placeOrderFirst.skuItemDTOList = [];
placeOrderFirst.source = 1; placeOrderFirst.source = 1;
placeOrderFirst.storeId = storeInfo.id; placeOrderFirst.storeId = storeInfo.id;
placeOrderFirst.subcribeTime = null; placeOrderFirst.subcribeTime = subTime ?? ""; //
placeOrderFirst.tableId = "$tableId"; placeOrderFirst.tableId = "$tableId";
for(int i = 0;i<shopCarGoods.shoppingCartSkuItemList.length;i++){ for (int i = 0; i < shopCarGoods.shoppingCartSkuItemList.length; i++) {
placeOrderFirst.shoppingCartSkuItemList[i].setMealDataList = shopCarGoods.shoppingCartSkuItemList[i].setMealDataList; placeOrderFirst.shoppingCartSkuItemList[i].setMealDataList =
shopCarGoods.shoppingCartSkuItemList[i].setMealDataList;
} }
if (tableId == 0) { if (tableId == 0) {
@ -627,13 +645,13 @@ class _Settlement extends State<Settlement> {
toOrderDetails(placeOrderFirst.id); toOrderDetails(placeOrderFirst.id);
} else { } else {
SmartDialog.show( SmartDialog.show(
clickBgDismissTemp: false, clickBgDismissTemp: false,
widget: SettlementTips( widget: SettlementTips(
() { () {
toOrderDetails(placeOrderFirst.id); toOrderDetails(placeOrderFirst.id);
}, },
text: "${baseData?.msg}", text: "${baseData?.msg}",
)); ));
} }
} }
} }
@ -704,7 +722,7 @@ class _Settlement extends State<Settlement> {
'/router/order_details', '/router/order_details',
arguments: { arguments: {
"id": orderId, "id": orderId,
"jumpState":1, "jumpState": 1,
}, },
); );
// Navigator.of(context).pop(); // Navigator.of(context).pop();
@ -759,8 +777,8 @@ class _Settlement extends State<Settlement> {
child: Container( child: Container(
child: Column( child: Column(
children: [ children: [
DistributionMode((addressId, isTake, memberCouponId, DistributionMode((addressId, isTake,
orderId, promotionId) { memberCouponId, orderId, promotionId) {
setState(() { setState(() {
this.selectedBtn = 0; this.selectedBtn = 0;
}); });
@ -777,8 +795,13 @@ class _Settlement extends State<Settlement> {
count1, count1,
payChannel, payChannel,
tableId ?? 0); tableId ?? 0);
}, queryAddress, storeInfo, address, },
selectedAddress, pageType,widget.arguments["distance"]), queryAddress,
storeInfo,
address,
selectedAddress,
pageType,
widget.arguments["distance"]),
SizedBox( SizedBox(
height: 16, height: 16,
@ -791,50 +814,64 @@ class _Settlement extends State<Settlement> {
// ), // ),
/// ///
if(settleOrderInfo != null || minOrderInfo != null) if (settleOrderInfo != null ||
SettlementOrderCommodity( minOrderInfo != null)
selectedBtn, SettlementOrderCommodity(
settleOrderInfo, selectedBtn,
minOrderInfo, settleOrderInfo,
tableId, minOrderInfo,
pageType, tableId,
(coupons != "" || promotions!="") ? false :useVipPriceSelect, pageType,
this.showVipTips (coupons != "" || promotions != "")
), ? false
: useVipPriceSelect,
this.showVipTips),
///// /////
if(settleOrderInfo != null || minOrderInfo != null) if (settleOrderInfo != null ||
ActivityCouponRemarks( minOrderInfo != null)
couponCart, ActivityCouponRemarks(
activityCart, couponCart,
settleOrderInfo, activityCart,
minOrderInfo, settleOrderInfo,
coupons, minOrderInfo,
promotions, coupons,
couponCount(), promotions,
placeOrder, couponCount(),
remakers, placeOrder,
() { remakers,
Navigator.of(context).pushNamed( () {
'/router/edit_remarks_page', Navigator.of(context).pushNamed(
arguments: {"remake":remakers} '/router/edit_remarks_page',
).then((value) => { arguments: {
setState(() { "remake": remakers
if (value != null) remakers = value; }).then((value) => {
}) setState(() {
});}, if (value != null) remakers = value;
tableId, })
vipPriceSelect, });
(){ },
tableId,
vipPriceSelect,
() {
setState(() { setState(() {
this.showVipTips = true; this.showVipTips = true;
}); });
} },
), subscribeParam,
showDateSelector,
reservationTime,
showAlertDialog,
subscribeStoresName,
),
if (settleOrderInfo != null &&
placeOrder &&
joinA != JoinActivity.BargainBug)
if (settleOrderInfo != null && placeOrder && joinA != JoinActivity.BargainBug) ///
/// PayMethod(payChannelCheck, coupons, promotions,
PayMethod(payChannelCheck,coupons,promotions,useVipPriceSelect,settleOrderInfo), useVipPriceSelect, settleOrderInfo),
], ],
), ),
), ),
@ -902,12 +939,23 @@ class _Settlement extends State<Settlement> {
// return; // return;
// } else // } else
// orderButton = true; // orderButton = true;
if (subscribeParam != null && ((subscribeParam.isEnableSubscribe ?? false) ==
true) &&
(reservationTime == null ||
subscribeStoresName == null)) {
SmartDialog.showToast(
(reservationTime == null)
? "请选择预约时间"
: "请选择预约门店",
alignment: Alignment.center);
return;
}
pageType != null pageType != null
? bargainOrderId != null ? bargainOrderId != null
? activityPay() ? activityPay()
: joinA == JoinActivity.GoJoin : joinA == JoinActivity.GoJoin
? queryJoinAct() ? queryJoinAct()
: queryLaunchAct() : queryLaunchAct()
: queryPlaceOrderFirst(); : queryPlaceOrderFirst();
}, },
), ),
@ -928,23 +976,23 @@ class _Settlement extends State<Settlement> {
payChannelCheck(int payChannel) { payChannelCheck(int payChannel) {
this.payChannel = payChannel; this.payChannel = payChannel;
if (tableId > 0) { if (tableId > 0) {
queryOrderDetails(parentId); queryOrderDetails(parentId);
} else { } else {
queryOrderInfo( queryOrderInfo(
address?.id, address?.id,
selectedBtn, selectedBtn,
couponListBean?.id, couponListBean?.id,
0, 0,
promotion?.id ?? productId, promotion?.id ?? productId,
productSkuId ?? "", productSkuId ?? "",
actProductId ?? "", actProductId ?? "",
actProductSkuId ?? "", actProductSkuId ?? "",
useVipPriceSelect, useVipPriceSelect,
count1, count1,
payChannel, payChannel,
tableId);} tableId);
}
} }
vipPriceSelect(bool useVipPriceSelect) { vipPriceSelect(bool useVipPriceSelect) {
@ -964,7 +1012,8 @@ class _Settlement extends State<Settlement> {
useVipPriceSelect, useVipPriceSelect,
count1, count1,
payChannel, payChannel,
tableId);} tableId);
}
} }
mobileChange(String mobile) { mobileChange(String mobile) {
@ -1004,10 +1053,8 @@ class _Settlement extends State<Settlement> {
// promotions = ""; // promotions = "";
// this.promotion = null; // this.promotion = null;
if (tableId > 0) { if (tableId > 0) {
if(couponBean == null) if (couponBean == null) queryCancelMemberCoupon(parentId);
queryCancelMemberCoupon(parentId); if (couponBean.id != null) queryUseMemberCoupon(couponBean.id);
if (couponBean.id != null)
queryUseMemberCoupon(couponBean.id);
} else { } else {
queryOrderInfo( queryOrderInfo(
address?.id, address?.id,
@ -1047,7 +1094,7 @@ class _Settlement extends State<Settlement> {
selectedBtn, selectedBtn,
null, null,
0, 0,
(pro.id??"")??productId, (pro.id ?? "") ?? productId,
productSkuId ?? "", productSkuId ?? "",
actProductId ?? "", actProductId ?? "",
actProductSkuId ?? "", actProductSkuId ?? "",
@ -1056,5 +1103,127 @@ class _Settlement extends State<Settlement> {
payChannel, payChannel,
tableId); tableId);
} }
// }
///
showDateSelector() {
var minTime = DateTime.now().isAfter(
DateTime.tryParse(subscribeParam?.subscribeStartTime ?? ""))
? DateTime.now()
: DateTime.tryParse(subscribeParam?.subscribeStartTime ?? "");
DatePicker.showDateTimePicker(context,
showTitleActions: true,
minTime: minTime,
maxTime: DateTime.tryParse(subscribeParam?.subscribeEndTime ?? ""),
theme: DatePickerTheme(
headerColor: Colors.white,
backgroundColor: Colors.white,
itemStyle: TextStyle(
color: Colors.black,
fontWeight: MyFontWeight.bold,
fontSize: 18),
doneStyle: TextStyle(color: Color(0xFF32A060), fontSize: 16.sp)),
onChanged: (date) {
print('change $date in time zone ' +
date.timeZoneOffset.inHours.toString());
}, onConfirm: (date) {
reservationTime = date.toString().substring(0, 16);
subTime = date.toString().substring(0, 19);
setState(() {});
}, currentTime: minTime, locale: LocaleType.zh);
}
///
showAlertDialog() {
showModalBottomSheet(
builder: (BuildContext context) {
return StatefulBuilder(builder: (
context,
state,
) {
return Container(
width: double.infinity,
height: 270.h,
padding: EdgeInsets.symmetric(horizontal: 14.w, vertical: 16.h),
decoration: new BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(8),
topRight: Radius.circular(8),
),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding:
EdgeInsets.symmetric(vertical: 10.h, horizontal: 14.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
GestureDetector(
onTap: () {
Navigator.of(context).pop();
},
child: Text(
S.of(context).quxiao,
style:
TextStyle(fontSize: 18.sp, color: Colors.black),
),
),
GestureDetector(
onTap: () {
setState(() {
subscribeStoresName =
subscribeParam.stores[storesIndex];
});
Navigator.of(context).pop();
},
child: Text(
S.of(context).queding,
style: TextStyle(
fontSize: 18.sp, color: Color(0xFF32A060)),
),
)
],
),
),
Expanded(
child: ListView.builder(
itemCount: subscribeParam.stores.length ?? 0,
itemBuilder: (context, position) {
return GestureDetector(
onTap: () {
state(() {
storesIndex = position;
});
},
child: storesNameItem(position),
);
}),
),
],
),
);
});
},
backgroundColor: Colors.transparent,
context: context);
}
Widget storesNameItem(index) {
return Container(
width: double.infinity,
padding: EdgeInsets.symmetric(vertical: 10.h),
alignment: Alignment.center,
child: Text(
subscribeParam.stores[index],
style: TextStyle(
fontWeight: MyFontWeight.medium,
fontSize: 16.sp,
color: storesIndex == index ? Color(0xFF32A060) : Colors.black,
),
),
);
}
} }

274
lib/settlement/settlement_view/activity_coupon_remarks.dart

@ -2,15 +2,13 @@ import 'dart:io';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/generated/l10n.dart';
import 'package:huixiang/retrofit/data/min_order_info.dart'; import 'package:huixiang/retrofit/data/min_order_info.dart';
import 'package:huixiang/retrofit/data/settleOrderInfo.dart'; import 'package:huixiang/retrofit/data/settleOrderInfo.dart';
import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/utils/font_weight.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:intl/intl.dart';
import '../../view_widget/cupertino_date_picker.dart'; import '../../retrofit/data/miNiDetail.dart';
class ActivityCouponRemarks extends StatefulWidget { class ActivityCouponRemarks extends StatefulWidget {
final Function() couponCart; final Function() couponCart;
@ -27,6 +25,11 @@ class ActivityCouponRemarks extends StatefulWidget {
final int tableId; final int tableId;
final Function(bool useVipPriceSelect) vipPriceSelect; final Function(bool useVipPriceSelect) vipPriceSelect;
final Function showVipTips; final Function showVipTips;
final SubscribeParam subscribeParam;
final Function() showDateSelector;
final String reservationTime;
final Function() showAlertDialog;
final String subscribeStoresName;
ActivityCouponRemarks( ActivityCouponRemarks(
this.couponCart, this.couponCart,
@ -41,7 +44,12 @@ class ActivityCouponRemarks extends StatefulWidget {
this.editRemark, this.editRemark,
this.tableId, this.tableId,
this.vipPriceSelect, this.vipPriceSelect,
this.showVipTips); this.showVipTips,
this.subscribeParam,
this.showDateSelector,
this.reservationTime,
this.showAlertDialog,
this.subscribeStoresName);
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {
@ -79,65 +87,78 @@ class _ActivityCouponRemarks extends State<ActivityCouponRemarks> {
mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
if( !(widget?.settleOrderInfo?.isRaise ?? false) && (widget?.settleOrderInfo?.memberVO?.isVip ?? false) && widget.placeOrder) if (!(widget?.settleOrderInfo?.isRaise ?? false) &&
Row( (widget?.settleOrderInfo?.memberVO?.isVip ?? false) &&
mainAxisAlignment: MainAxisAlignment.center, widget.placeOrder)
crossAxisAlignment: CrossAxisAlignment.center, Row(
children: [ mainAxisAlignment: MainAxisAlignment.center,
Expanded( crossAxisAlignment: CrossAxisAlignment.center,
flex: 1, children: [
child: Text( Expanded(
"VIP权益", flex: 1,
style: TextStyle( child: Text(
fontWeight: MyFontWeight.regular, "VIP权益",
fontSize: 14.sp, style: TextStyle(
color: Color(0xFF353535), fontWeight: MyFontWeight.regular,
), fontSize: 14.sp,
), color: Color(0xFF353535),
), ),
Platform.isAndroid ?
Switch.adaptive(
value: (widget.coupons != null && widget.coupons != ""||widget.promotions != null && widget.promotions != "") ? false:vipSelect,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
activeColor: Color(0xff32A060),
onChanged: (bool value) {
setState(() {
if((widget?.settleOrderInfo?.memberVO?.isVip ?? false)){
vipSelect = !vipSelect;
widget.vipPriceSelect(vipSelect);
}else{
widget.showVipTips();
return;
}
});
},
):
GestureDetector(
onTap: () {
setState(() {
if ((widget?.settleOrderInfo?.memberVO?.isVip ?? false)) {
vipSelect = !vipSelect;
widget.vipPriceSelect(vipSelect);
} else {
widget.showVipTips();
return;
}
});
},
child: Container(
padding: EdgeInsets.only(bottom: 18.w),
alignment: Alignment.center,
child: Image.asset(
((widget.coupons != null && widget.coupons != ""||widget.promotions != null && widget.promotions != "") ? false:vipSelect)
? "assets/image/vip_price.webp"
: "assets/image/vip_unprice.webp",
width: 38.w,
height: 20.h,
), ),
), ),
) Platform.isAndroid
], ? Switch.adaptive(
), value:
(widget.coupons != null && widget.coupons != "" ||
widget.promotions != null &&
widget.promotions != "")
? false
: vipSelect,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
activeColor: Color(0xff32A060),
onChanged: (bool value) {
setState(() {
if ((widget?.settleOrderInfo?.memberVO?.isVip ??
false)) {
vipSelect = !vipSelect;
widget.vipPriceSelect(vipSelect);
} else {
widget.showVipTips();
return;
}
});
},
)
: GestureDetector(
onTap: () {
setState(() {
if ((widget?.settleOrderInfo?.memberVO?.isVip ??
false)) {
vipSelect = !vipSelect;
widget.vipPriceSelect(vipSelect);
} else {
widget.showVipTips();
return;
}
});
},
child: Container(
padding: EdgeInsets.only(bottom: 18.w),
alignment: Alignment.center,
child: Image.asset(
((widget.coupons != null && widget.coupons != "" ||
widget.promotions != null &&
widget.promotions != "")
? false
: vipSelect)
? "assets/image/vip_price.webp"
: "assets/image/vip_unprice.webp",
width: 38.w,
height: 20.h,
),
),
)
],
),
if (widget.placeOrder && if (widget.placeOrder &&
widget?.settleOrderInfo?.benefitDiscountAmount != null && widget?.settleOrderInfo?.benefitDiscountAmount != null &&
widget?.settleOrderInfo?.benefitDiscountAmount != "0") widget?.settleOrderInfo?.benefitDiscountAmount != "0")
@ -170,7 +191,9 @@ class _ActivityCouponRemarks extends State<ActivityCouponRemarks> {
], ],
), ),
), ),
if (widget.placeOrder && widget.tableId <= 0 && !(widget?.settleOrderInfo?.isRaise ?? false)) if (widget.placeOrder &&
widget.tableId <= 0 &&
!(widget?.settleOrderInfo?.isRaise ?? false))
InkWell( InkWell(
onTap: () { onTap: () {
widget.activityCart(); widget.activityCart();
@ -287,66 +310,99 @@ class _ActivityCouponRemarks extends State<ActivityCouponRemarks> {
], ],
), ),
), ),
if ((widget.subscribeParam?.isEnableSubscribe ?? false) == true)
SizedBox( SizedBox(
height: 13, height: 13,
), ),
InkWell( if ((widget.subscribeParam?.isEnableSubscribe ?? false) == true)
onTap: () { InkWell(
showDateSelector(); onTap: () {
}, widget.showDateSelector();
child: Row( },
mainAxisAlignment: MainAxisAlignment.center, child: Row(
crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ crossAxisAlignment: CrossAxisAlignment.center,
Expanded( children: [
flex: 1, Expanded(
child: Text( flex: 1,
"预约时间", child: Text(
style: TextStyle( "预约时间",
fontWeight: MyFontWeight.regular, style: TextStyle(
fontSize: 14.sp, fontWeight: MyFontWeight.regular,
color: Color(0xFF353535), fontSize: 14.sp,
color: Color(0xFF353535),
),
), ),
), ),
), Expanded(
Expanded( child: Text(
child: Text( widget.reservationTime ?? "请选择时间",
"请选择时间", textAlign: TextAlign.end,
textAlign: TextAlign.end, style: TextStyle(
style: TextStyle( fontSize: 14.sp,
fontSize: 14.sp, color: Color(0xFF858585),
color: Color(0xFF858585), fontWeight: MyFontWeight.medium,
fontWeight: MyFontWeight.medium, ),
), ),
), ),
), Icon(
Icon( Icons.keyboard_arrow_right,
Icons.keyboard_arrow_right, size: 16,
size: 16, ),
), ],
], ),
),
if ((widget.subscribeParam?.isEnableSubscribe ?? false) == true)
SizedBox(
height: 13,
),
if ((widget.subscribeParam?.isEnableSubscribe ?? false) == true)
InkWell(
onTap: () {
if (widget.subscribeParam.stores.length > 1)
widget.showAlertDialog();
},
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
flex: 1,
child: Text(
"预约店铺",
style: TextStyle(
fontWeight: MyFontWeight.regular,
fontSize: 14.sp,
color: Color(0xFF353535),
),
),
),
Expanded(
child: Text(
((widget.subscribeParam.stores.length == 1)
? widget?.subscribeParam?.stores[0]
: widget.subscribeStoresName) ??
"请选择店铺",
textAlign: TextAlign.end,
style: TextStyle(
fontSize: 14.sp,
color: Color(0xFF858585),
fontWeight: MyFontWeight.medium,
),
),
),
Icon(
Icons.keyboard_arrow_right,
size: 16,
),
],
),
), ),
),
], ],
), ),
); );
} }
///
showDateSelector() async {
DateTime dateTime = await showModalBottomSheet(
backgroundColor: Colors.transparent,
context: context,
builder: (_) {
return CupertinoDatePickerWidget();
});
if (dateTime != null) {
String time = DateFormat("yyyy-MM-dd").format(dateTime) ;
setState(() {});
}
}
String activityText() { String activityText() {
String promotion = ""; String promotion = "";
if (widget.promotions == null || widget.promotions == "") { if (widget.promotions == null || widget.promotions == "") {

118
lib/store/shop_details_page.dart

@ -102,7 +102,7 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
token: value.getString("token"), token: value.getString("token"),
); );
BaseData baseData = BaseData baseData =
await apiService.queryStoreInfo(storeId).catchError((error) { await apiService.queryStoreInfo(storeId).catchError((error) {
debugPrint(error); debugPrint(error);
}); });
if (baseData != null && baseData.isSuccess) { if (baseData != null && baseData.isSuccess) {
@ -129,7 +129,7 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
String tenant = storeInfo.tenantCode; String tenant = storeInfo.tenantCode;
String storeId = storeInfo.id; String storeId = storeInfo.id;
SharedPreferences.getInstance().then( SharedPreferences.getInstance().then(
(value) => { (value) => {
value.setString('minToken', minToken), value.setString('minToken', minToken),
value.setString('tenant', tenant), value.setString('tenant', tenant),
value.setString('storeId', storeId), value.setString('storeId', storeId),
@ -246,7 +246,7 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
if (parentId == null || parentId == "") { if (parentId == null || parentId == "") {
if (num == 0) { if (num == 0) {
SmartDialog.showToast("请先选择您要购买的商品!~",alignment: Alignment.center); SmartDialog.showToast("请先选择您要购买的商品!~", alignment: Alignment.center);
return; return;
} }
} }
@ -264,8 +264,16 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
"cid": cid, "cid": cid,
"shoppingCart": shopCarGoods, "shoppingCart": shopCarGoods,
"numberOfPeople": numberOfPeople, "numberOfPeople": numberOfPeople,
"distance": widget.arguments["distance"],
"subscribeParam": miNiDetail?.subscribeParam,
}, },
); );
if ((miNiDetail?.subscribeParam?.isEnableSubscribe ?? false) == true) {
clearShopCar();
this.shopCarGoods = await queryShopCar();
}
if (tableId > 0) { if (tableId > 0) {
getParentInfo(); getParentInfo();
} }
@ -365,6 +373,10 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
.replaceAll("]", "") .replaceAll("]", "")
.replaceAll(",", ""); .replaceAll(",", "");
if ((miNiDetail.subscribeParam.isEnableSubscribe ?? false) == true) {
clearShopCar();
}
if (miNiDetail != null) { if (miNiDetail != null) {
BaseData<List<ShoppingCart>> baseDate = await minService.addShoppingCart({ BaseData<List<ShoppingCart>> baseDate = await minService.addShoppingCart({
"storeId": storeInfo.id, "storeId": storeInfo.id,
@ -391,6 +403,8 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
if (baseDate != null && baseDate.isSuccess) { if (baseDate != null && baseDate.isSuccess) {
queryShopCar().then((value) { queryShopCar().then((value) {
this.shopCarGoods = value; this.shopCarGoods = value;
if ((miNiDetail.subscribeParam.isEnableSubscribe ?? false) == true)
toDownOrder();
setState(() {}); setState(() {});
}); });
} else { } else {
@ -630,7 +644,7 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: EdgeInsets.only(left: 14.w,top: 16.h), padding: EdgeInsets.only(left: 14.w, top: 16.h),
child: Text( child: Text(
"商品详情", "商品详情",
style: TextStyle( style: TextStyle(
@ -831,9 +845,10 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
)), )),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
if(storeInfo.posType.code == "NORMALSTORE" && tableId == 0){ if (storeInfo.posType.code == "NORMALSTORE" &&
tableId == 0) {
showDeleteDialog(); showDeleteDialog();
}else{ } else {
_queryMiNiDetail(id, counts); _queryMiNiDetail(id, counts);
} }
}, },
@ -859,7 +874,11 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
width: 2, width: 2,
), ),
Text( Text(
"加入购物车", ((miNiDetail?.subscribeParam?.isEnableSubscribe ??
false) ==
true)
? "立即预约"
: "加入购物车",
style: TextStyle( style: TextStyle(
fontSize: 12.sp, fontSize: 12.sp,
fontWeight: MyFontWeight.regular, fontWeight: MyFontWeight.regular,
@ -953,12 +972,12 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
showModalBottomSheet( showModalBottomSheet(
builder: (BuildContext context) { builder: (BuildContext context) {
return StatefulBuilder(builder: ( return StatefulBuilder(builder: (
context, context,
state, state,
) { ) {
return Container( return Container(
alignment: Alignment.topCenter, alignment: Alignment.topCenter,
padding: EdgeInsets.symmetric(horizontal: 14.w,vertical: 16), padding: EdgeInsets.symmetric(horizontal: 14.w, vertical: 16),
height: MediaQuery.of(context).size.height / 3 * 2, height: MediaQuery.of(context).size.height / 3 * 2,
width: double.infinity, width: double.infinity,
decoration: BoxDecoration( decoration: BoxDecoration(
@ -992,47 +1011,47 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
), ),
Expanded( Expanded(
child: Container( child: Container(
height: 70, height: 70,
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
miNiDetail?.productName ?? "",
style: TextStyle(
fontSize: 13.sp,
fontWeight: FontWeight.bold,
color: Color(0xFF000000),
),
),
GestureDetector(
onTap: () {
Navigator.of(context).pop();
},
child: Image.asset(
"assets/image/cancel.webp",
fit: BoxFit.cover,
height: 24,
width: 24,
),
),
],
),
Text( Text(
"${miNiDetail?.price ?? ""}", miNiDetail?.productName ?? "",
style: TextStyle( style: TextStyle(
fontSize: 12.sp, fontSize: 13.sp,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Color(0xFFF65720), color: Color(0xFF000000),
),
),
GestureDetector(
onTap: () {
Navigator.of(context).pop();
},
child: Image.asset(
"assets/image/cancel.webp",
fit: BoxFit.cover,
height: 24,
width: 24,
), ),
), ),
], ],
), ),
)), Text(
"${miNiDetail?.price ?? ""}",
style: TextStyle(
fontSize: 12.sp,
fontWeight: FontWeight.bold,
color: Color(0xFFF65720),
),
),
],
),
)),
], ],
), ),
if (miNiDetail.attrList != null && if (miNiDetail.attrList != null &&
@ -1050,7 +1069,7 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
itemBuilder: (context, position) { itemBuilder: (context, position) {
return attrItem( return attrItem(
(attrValue) { (attrValue) {
state(() { state(() {
// if(selectSkus.length > position) // if(selectSkus.length > position)
selectSkus[position] = attrValue; selectSkus[position] = attrValue;
@ -1097,8 +1116,7 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
Icons.remove, Icons.remove,
color: Color(0xFF32A060), color: Color(0xFF32A060),
size: 24, size: 24,
) )),
),
Padding( Padding(
padding: EdgeInsets.only(left: 8, right: 8), padding: EdgeInsets.only(left: 8, right: 8),
child: Text( child: Text(
@ -1132,7 +1150,11 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
RoundButton( RoundButton(
width: double.infinity, width: double.infinity,
height: 54.h, height: 54.h,
text: "加入购物车", text: ((miNiDetail?.subscribeParam?.isEnableSubscribe ??
false) ==
true)
? "立即预约"
: "加入购物车",
textColor: Colors.white, textColor: Colors.white,
fontWeight: MyFontWeight.semi_bold, fontWeight: MyFontWeight.semi_bold,
radius: 27, radius: 27,
@ -1310,7 +1332,7 @@ class _ShopDetailsPage extends State<ShopDetailsPage> {
S.of(context).ninxiangjiquanxianweikaiqi, S.of(context).ninxiangjiquanxianweikaiqi,
S.of(context).weilekaipaizhaoxuanzhetouxiang, S.of(context).weilekaipaizhaoxuanzhetouxiang,
S.of(context).kaiqiquanxian, S.of(context).kaiqiquanxian,
(result) async { (result) async {
if (result) { if (result) {
await openAppSettings(); await openAppSettings();
} }

42
lib/store/store_order.dart

@ -34,6 +34,7 @@ import 'package:permission_handler/permission_handler.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import '../settlement/settlement.dart';
import '../view_widget/border_text.dart'; import '../view_widget/border_text.dart';
import '../view_widget/request_permission.dart'; import '../view_widget/request_permission.dart';
@ -66,6 +67,7 @@ class _StoreOrderPage extends State<StoreOrderPage>
String tenant = ""; String tenant = "";
String storeId = ""; String storeId = "";
int numberOfPeople = 0; int numberOfPeople = 0;
MiNiDetail miNiDetail;
///token ///token
String minToken; String minToken;
@ -426,6 +428,7 @@ class _StoreOrderPage extends State<StoreOrderPage>
]; ];
}, },
body: body:
/// ///
TabBarView( TabBarView(
physics: NeverScrollableScrollPhysics(), physics: NeverScrollableScrollPhysics(),
@ -515,12 +518,19 @@ class _StoreOrderPage extends State<StoreOrderPage>
Spacer(), Spacer(),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
if(AppUtils.compareTime(storeInfo.openStartTime,DateFormat('HH:mm:ss').format(DateTime.now())) if (AppUtils.compareTime(
&&(!AppUtils.compareTime(storeInfo.openEndTime,DateFormat('HH:mm:ss').format(DateTime.now())))){ storeInfo.openStartTime,
toDownOrder(); DateFormat('HH:mm:ss')
} .format(DateTime.now())) &&
else (!AppUtils.compareTime(
SmartDialog.showToast("营业时间:${storeInfo.openStartTime}-${storeInfo.openEndTime}", alignment: Alignment.center); storeInfo.openEndTime,
DateFormat('HH:mm:ss')
.format(DateTime.now())))) {
toDownOrder();
} else
SmartDialog.showToast(
"营业时间:${storeInfo.openStartTime}-${storeInfo.openEndTime}",
alignment: Alignment.center);
}, },
child: RoundButton( child: RoundButton(
width: 103.w, width: 103.w,
@ -631,7 +641,7 @@ class _StoreOrderPage extends State<StoreOrderPage>
if (parentId == null || parentId == "") { if (parentId == null || parentId == "") {
if (num == 0) { if (num == 0) {
SmartDialog.showToast("请先选择您要购买的商品!~",alignment: Alignment.center); SmartDialog.showToast("请先选择您要购买的商品!~", alignment: Alignment.center);
return; return;
} }
} }
@ -649,9 +659,16 @@ class _StoreOrderPage extends State<StoreOrderPage>
"cid": cid, "cid": cid,
"shoppingCart": shopCarGoods, "shoppingCart": shopCarGoods,
"numberOfPeople": numberOfPeople, "numberOfPeople": numberOfPeople,
"distance":widget.arguments["distance"], "distance": widget.arguments["distance"],
"subscribeParam": miNiDetail?.subscribeParam,
}, },
); );
if ((miNiDetail?.subscribeParam?.isEnableSubscribe ?? false) == true) {
clearShopCar();
this.shopCarGoods = await queryShopCar();
}
if (tableId > 0) { if (tableId > 0) {
getParentInfo(); getParentInfo();
} }
@ -741,7 +758,7 @@ class _StoreOrderPage extends State<StoreOrderPage>
_queryMiNiDetail(String id, int count) async { _queryMiNiDetail(String id, int count) async {
EasyLoading.show(status: S.current.zhengzaijiazai); EasyLoading.show(status: S.current.zhengzaijiazai);
if (count < 0) { if (count < 0) {
shopCarGoods.shoppingCartSkuItemList.forEach((element) async{ shopCarGoods.shoppingCartSkuItemList.forEach((element) async {
if (element.productId == id) { if (element.productId == id) {
await shopCartReduce(element); await shopCartReduce(element);
setState(() {}); setState(() {});
@ -752,6 +769,7 @@ class _StoreOrderPage extends State<StoreOrderPage>
BaseData<MiNiDetail> baseData = await minService.miNiDetail(id); BaseData<MiNiDetail> baseData = await minService.miNiDetail(id);
EasyLoading.dismiss(); EasyLoading.dismiss();
if (baseData != null && baseData.isSuccess) { if (baseData != null && baseData.isSuccess) {
miNiDetail = baseData.data;
showStoreSelector(baseData.data, id, count); showStoreSelector(baseData.data, id, count);
} }
} }
@ -804,6 +822,10 @@ class _StoreOrderPage extends State<StoreOrderPage>
.replaceAll("]", "") .replaceAll("]", "")
.replaceAll(",", ""); .replaceAll(",", "");
if ((miNiDetail.subscribeParam.isEnableSubscribe ?? false) == true) {
clearShopCar();
}
if (miNiDetail != null) { if (miNiDetail != null) {
BaseData<List<ShoppingCart>> baseDate = await minService.addShoppingCart({ BaseData<List<ShoppingCart>> baseDate = await minService.addShoppingCart({
"storeId": storeInfo.id, "storeId": storeInfo.id,
@ -829,6 +851,8 @@ class _StoreOrderPage extends State<StoreOrderPage>
// EasyLoading.dismiss(); // EasyLoading.dismiss();
if (baseDate != null && baseDate.isSuccess) { if (baseDate != null && baseDate.isSuccess) {
this.shopCarGoods = await queryShopCar(); this.shopCarGoods = await queryShopCar();
if ((miNiDetail.subscribeParam.isEnableSubscribe ?? false) == true)
toDownOrder();
setState(() {}); setState(() {});
} else { } else {
SmartDialog.showToast(baseDate?.msg, alignment: Alignment.center); SmartDialog.showToast(baseDate?.msg, alignment: Alignment.center);

2
lib/store/store_view/product_sku.dart

@ -292,7 +292,7 @@ class _ProductSku extends State<ProductSku> {
RoundButton( RoundButton(
width: double.infinity, width: double.infinity,
height: 54.h, height: 54.h,
text: "加入购物车", text: (widget?.miNiDetail?.subscribeParam?.isEnableSubscribe ?? false) == true ? "立即预约":"加入购物车",
textColor: Colors.white, textColor: Colors.white,
fontWeight: MyFontWeight.semi_bold, fontWeight: MyFontWeight.semi_bold,
radius: 27, radius: 27,

417
lib/store/store_view/shop_goods.dart

@ -42,7 +42,7 @@ class ShopGoods extends StatefulWidget {
this.queryShoppingCart, this.queryShoppingCart,
this.queryMiNiDetail, this.queryMiNiDetail,
this.shoppingCartSkuItemListBean, this.shoppingCartSkuItemListBean,
this.storeInfo this.storeInfo,
}); });
@override @override
@ -51,9 +51,9 @@ class ShopGoods extends StatefulWidget {
} }
} }
class _ShopGoods extends State<ShopGoods> { class _ShopGoods extends State<ShopGoods> {
int _jumpType = -1; int _jumpType = -1;
MiNiDetail miNiDetail;
/// ///
queryMiNiDetail(id) async { queryMiNiDetail(id) async {
@ -62,26 +62,28 @@ class _ShopGoods extends State<ShopGoods> {
String minToken = value.getString("minToken"); String minToken = value.getString("minToken");
String tenant = value.getString("tenant"); String tenant = value.getString("tenant");
String storeId = value.getString("storeId"); String storeId = value.getString("storeId");
minService = MinApiService(Dio(), minService = MinApiService(
Dio(),
context: context, context: context,
token: minToken, token: minToken,
tenant: tenant, tenant: tenant,
storeId: storeId,); storeId: storeId,
);
}); });
BaseData<MiNiDetail> baseData = BaseData<MiNiDetail> baseData =
await minService.miNiDetail(id).catchError((error) { await minService.miNiDetail(id).catchError((error) {});
});
if (baseData != null && baseData.isSuccess) { if (baseData != null && baseData.isSuccess) {
if(baseData.data.productSkuVOList[0].productSetMeals.length == 0){ miNiDetail = baseData.data;
if (baseData.data.productSkuVOList[0].productSetMeals.length == 0) {
_jumpType = 0; _jumpType = 0;
widget.add(widget.shoppingCartSkuItemListBean); widget.add(widget.shoppingCartSkuItemListBean);
}else{ } else {
_jumpType = 1; _jumpType = 1;
await Navigator.of(context) await Navigator.of(context)
.pushNamed('/router/product_meals_sku', arguments: { .pushNamed('/router/product_meals_sku', arguments: {
"id":widget.productListBean.id, "id": widget.productListBean.id,
"storeId":widget.productListBean.storeId, "storeId": widget.productListBean.storeId,
"tableId":widget.tableId "tableId": widget.tableId
}); });
widget.queryShoppingCart(); widget.queryShoppingCart();
} }
@ -90,7 +92,7 @@ class _ShopGoods extends State<ShopGoods> {
} }
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
color: Colors.white, color: Colors.white,
@ -99,7 +101,7 @@ class _ShopGoods extends State<ShopGoods> {
// // bottom: 20.h, // // bottom: 20.h,
// ), // ),
height: 123.h, height: 123.h,
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
@ -109,8 +111,8 @@ class _ShopGoods extends State<ShopGoods> {
widget.productListBean != null widget.productListBean != null
? widget.productListBean.imgPath ? widget.productListBean.imgPath
: (widget.shoppingCartSkuItemListBean != null : (widget.shoppingCartSkuItemListBean != null
? widget.shoppingCartSkuItemListBean.skuImg ? widget.shoppingCartSkuItemListBean.skuImg
: ""), : ""),
width: 70.h, width: 70.h,
height: 70.h, height: 70.h,
radius: BorderRadius.circular(4), radius: BorderRadius.circular(4),
@ -125,64 +127,68 @@ class _ShopGoods extends State<ShopGoods> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding(padding: EdgeInsets.only(right: 16.w), Padding(
child: Row( padding: EdgeInsets.only(right: 16.w),
children: [ child: Row(
Expanded( children: [
child: Text( Expanded(
widget.productListBean != null child: Text(
? widget.productListBean.productName widget.productListBean != null
: widget.shoppingCartSkuItemListBean.productName, ? widget.productListBean.productName
overflow: TextOverflow.ellipsis, : widget.shoppingCartSkuItemListBean.productName,
maxLines: 2, overflow: TextOverflow.ellipsis,
style: TextStyle( maxLines: 2,
color: Colors.black, style: TextStyle(
fontSize: 13.sp, color: Colors.black,
fontWeight: MyFontWeight.medium, fontSize: 13.sp,
fontWeight: MyFontWeight.medium,
),
), ),
), ),
), // Image.asset(
// Image.asset( // "assets/image/green_leaf.webp",
// "assets/image/green_leaf.webp", // fit: BoxFit.cover,
// fit: BoxFit.cover, // width: 12,
// width: 12, // height: 12,
// height: 12, // ),
// ), // Text(
// Text( // "X300",
// "X300", // style: TextStyle(
// style: TextStyle( // color: Color(0xFF55BC51),
// color: Color(0xFF55BC51), // fontSize: 10.sp,
// fontSize: 10.sp, // fontWeight: MyFontWeight.semi_bold,
// fontWeight: MyFontWeight.semi_bold, // ),
// ), // ),
// ), ],
], ),
),), ),
SizedBox( SizedBox(
height: 2.h, height: 2.h,
), ),
Padding(padding: EdgeInsets.only(right: 16.w), Padding(
padding: EdgeInsets.only(right: 16.w),
child: Row( child: Row(
children: [ children: [
Expanded( Expanded(
child: Text( child: Text(
(widget.productListBean != null (widget.productListBean != null
? widget.productListBean.shortName ? widget.productListBean.shortName
: widget.shoppingCartSkuItemListBean.skuName ?? ""), : widget.shoppingCartSkuItemListBean.skuName ??
overflow: TextOverflow.ellipsis, ""),
maxLines: 2, overflow: TextOverflow.ellipsis,
style: TextStyle( maxLines: 2,
color: Color(0xFF4C4C4C), style: TextStyle(
fontSize: 10.sp, color: Color(0xFF4C4C4C),
fontWeight: MyFontWeight.regular, fontSize: 10.sp,
fontWeight: MyFontWeight.regular,
),
),
), ),
), SizedBox(
), width: 10,
SizedBox( ),
width: 10, ],
), )),
],
)),
SizedBox( SizedBox(
height: 7.h, height: 7.h,
), ),
@ -223,71 +229,90 @@ class _ShopGoods extends State<ShopGoods> {
], ],
), ),
if (!widget.isShopCart && if (!widget.isShopCart &&
(widget.productListBean?.attrStyle ?? 0) == 1) (widget.productListBean?.attrStyle ?? 0) == 1 &&
!(widget?.productListBean?.subscribeParam
?.isEnableSubscribe ??
false))
GestureDetector( GestureDetector(
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
onTap: () async{ onTap: () async {
if(widget.storeInfo.posType.code == "NORMALSTORE"&& widget.tableId == 0){ if (widget.storeInfo.posType.code ==
"NORMALSTORE" &&
widget.tableId == 0) {
showDeleteDialog(); showDeleteDialog();
}else{ } else {
widget.queryMiNiDetail( widget.queryMiNiDetail(
widget.productListBean != null widget.productListBean != null
? widget.productListBean.id ? widget.productListBean.id
: widget.shoppingCartSkuItemListBean : widget.shoppingCartSkuItemListBean
.productId, .productId,
0); 0);
} }
}, },
child:Container( child: Container(
padding: EdgeInsets.only(right: 16.w), padding: EdgeInsets.only(right: 16.w),
child: Stack( child: Stack(
children: [ children: [
Container( Container(
padding: EdgeInsets.only(left:35.w,top: 4.h,bottom: 4.h,), padding: EdgeInsets.only(
margin: EdgeInsets.only(right: 8, top: 4), left: 35.w,
child: RoundButton( top: 4.h,
text: S.of(context).xuanguige, bottom: 4.h,
textColor: Colors.white, ),
fontWeight: MyFontWeight.medium, margin: EdgeInsets.only(right: 8, top: 4),
radius: 3, child: RoundButton(
backgroup: Color(0xFF32A060), text: S.of(context).xuanguige,
fontSize: 11.sp, textColor: Colors.white,
padding: EdgeInsets.symmetric(vertical: 5.h,horizontal: 3.w), fontWeight: MyFontWeight.medium,
), radius: 3,
), backgroup: Color(0xFF32A060),
Positioned( fontSize: 11.sp,
right: 0, padding: EdgeInsets.symmetric(
child: Visibility( vertical: 5.h, horizontal: 3.w),
visible: widget.count > 0, ),
child: RoundButton( ),
width: 17, Positioned(
height: 17.h, right: 0,
text: "${widget.count}", child: Visibility(
textColor: Color(0xFF32A060), visible: widget.count > 0,
fontWeight: MyFontWeight.regular, child: RoundButton(
backgroup: Colors.white, width: 17,
fontSize: 12.sp, height: 17.h,
radius: 100, text: "${widget.count}",
), textColor: Color(0xFF32A060),
fontWeight: MyFontWeight.regular,
backgroup: Colors.white,
fontSize: 12.sp,
radius: 100,
),
),
),
],
), ),
), )),
],
),)),
if (widget.isShopCart || if (widget.isShopCart ||
(widget.productListBean?.attrStyle ?? 0) == 0) (widget.productListBean?.attrStyle ?? 0) == 0 &&
Spacer(), !(widget?.productListBean?.subscribeParam
?.isEnableSubscribe ??
false))
Spacer(),
if (widget.isShopCart || if (widget.isShopCart ||
(widget.productListBean?.attrStyle ?? 0) == 0) (widget.productListBean?.attrStyle ?? 0) == 0 &&
!(widget?.productListBean?.subscribeParam
?.isEnableSubscribe ??
false))
GestureDetector( GestureDetector(
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
onTap: () async{ onTap: () async {
if(widget.storeInfo.posType.code == "NORMALSTORE" && widget.tableId == 0){ if (widget.storeInfo.posType.code == "NORMALSTORE" &&
showDeleteDialog(); widget.tableId == 0) {
}else{ showDeleteDialog();
widget.reduce(widget.shoppingCartSkuItemListBean);} } else {
}, widget.reduce(widget.shoppingCartSkuItemListBean);
}
},
child: Container( child: Container(
padding: EdgeInsets.only(left: 15.w,right: 6.w), padding: EdgeInsets.only(left: 15.w, right: 6.w),
child: Image.asset( child: Image.asset(
"assets/image/reduce.webp", "assets/image/reduce.webp",
width: 22, width: 22,
@ -296,7 +321,10 @@ class _ShopGoods extends State<ShopGoods> {
), ),
), ),
if (widget.isShopCart || if (widget.isShopCart ||
(widget.productListBean?.attrStyle ?? 0) == 0) (widget.productListBean?.attrStyle ?? 0) == 0 &&
!(widget?.productListBean?.subscribeParam
?.isEnableSubscribe ??
false))
Container( Container(
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: Text(
@ -309,71 +337,117 @@ class _ShopGoods extends State<ShopGoods> {
), ),
), ),
if (widget.isShopCart || if (widget.isShopCart ||
(widget.productListBean?.attrStyle ?? 0) == 0) (widget.productListBean?.attrStyle ?? 0) == 0 &&
GestureDetector( !(widget?.productListBean?.subscribeParam
behavior: HitTestBehavior.opaque, ?.isEnableSubscribe ??
onTap: () async{ false))
if(widget.storeInfo.posType.code == "NORMALSTORE" && widget.tableId == 0){ GestureDetector(
showDeleteDialog(); behavior: HitTestBehavior.opaque,
}else{ onTap: () async {
if(_jumpType == -1) if (widget.storeInfo.posType.code == "NORMALSTORE" &&
queryMiNiDetail(widget.productListBean.id); widget.tableId == 0) {
else if(_jumpType == 0) showDeleteDialog();
widget.add(widget.shoppingCartSkuItemListBean); } else {
else if(_jumpType == 1) if (_jumpType == -1)
await Navigator.of(context) queryMiNiDetail(widget.productListBean.id);
.pushNamed('/router/product_meals_sku', arguments: { else if (_jumpType == 0)
"id":widget.productListBean.id, widget.add(widget.shoppingCartSkuItemListBean);
"storeId":widget.productListBean.storeId, else if (_jumpType == 1)
"tableId":widget.tableId await Navigator.of(context).pushNamed(
}); '/router/product_meals_sku',
widget.queryShoppingCart(); arguments: {
} "id": widget.productListBean.id,
}, "storeId": widget.productListBean.storeId,
child: Container( "tableId": widget.tableId
padding: EdgeInsets.only(left: 6.w,right:16.w), });
child: Image.asset( widget.queryShoppingCart();
"assets/image/add.webp", }
width: 22, },
height: 22.h, child: Container(
padding: EdgeInsets.only(left: 6.w, right: 16.w),
child: Image.asset(
"assets/image/add.webp",
width: 22,
height: 22.h,
),
), ),
), ),
), if ((widget.productListBean.subscribeParam
.isEnableSubscribe ??
false) ==
true)
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () async {
if (widget.storeInfo.posType.code ==
"NORMALSTORE" &&
widget.tableId == 0) {
showDeleteDialog();
} else if (widget.isShopCart ||
(widget.productListBean?.attrStyle ?? 0) == 0) {
queryMiNiDetail(widget.productListBean.id);
} else {
widget.queryMiNiDetail(
widget.productListBean != null
? widget.productListBean.id
: widget.shoppingCartSkuItemListBean
.productId,
0);
}
},
child: Container(
padding: EdgeInsets.only(
left: 35.w,
top: 4.h,
bottom: 4.h,
),
margin: EdgeInsets.only(right: 8, top: 4),
child: RoundButton(
text: "立即预约",
textColor: Colors.white,
fontWeight: MyFontWeight.medium,
radius: 3,
backgroup: Color(0xFF32A060),
fontSize: 11.sp,
padding: EdgeInsets.symmetric(
vertical: 5.h, horizontal: 3.w),
),
)),
], ],
), ),
SizedBox( SizedBox(
height: 4.h, height: 4.h,
), ),
if(widget.productListBean.vipPrice != null ) if (widget.productListBean.vipPrice != null)
Row( Row(
children: [ children: [
Container( Container(
alignment: Alignment.center, alignment: Alignment.center,
padding: EdgeInsets.symmetric(horizontal:2.w), padding: EdgeInsets.symmetric(horizontal: 2.w),
margin: EdgeInsets.only(right: 4.w), margin: EdgeInsets.only(right: 4.w),
decoration: new BoxDecoration( decoration: new BoxDecoration(
color: Color(0xff32A060), color: Color(0xff32A060),
borderRadius: BorderRadius.circular(4)), borderRadius: BorderRadius.circular(4)),
child: Text( child: Text(
"VIP", "VIP",
style: TextStyle(
fontSize: 12.sp,
fontWeight: MyFontWeight.medium,
color: Color(0xFFFFFFFF),
),
),
),
Text(
"${AppUtils.calculateDouble(double.tryParse(widget.productListBean.vipPrice ?? "0") ?? 0)}",
style: TextStyle( style: TextStyle(
fontSize: 12.sp, fontSize: 14.sp,
fontWeight: MyFontWeight.medium, fontWeight: MyFontWeight.medium,
color: Color(0xFFFFFFFF), fontFamily: 'JDZhengHT',
color: Color(0xff32A060),
), ),
), ),
), ],
Text( ),
"${AppUtils.calculateDouble(double.tryParse(widget.productListBean.vipPrice ?? "0") ?? 0)}",
style: TextStyle(
fontSize: 14.sp,
fontWeight: MyFontWeight.medium,
fontFamily: 'JDZhengHT',
color: Color(0xff32A060),
),
),
],
),
// Text( // Text(
// "${AppUtils.calculateDouble(double.tryParse(widget.isShopCart ? widget.shoppingCartSkuItemListBean.skuPrice : widget.productListBean.applyPrice) ?? 0)}", // "${AppUtils.calculateDouble(double.tryParse(widget.isShopCart ? widget.shoppingCartSkuItemListBean.skuPrice : widget.productListBean.applyPrice) ?? 0)}",
// style: TextStyle( // style: TextStyle(
@ -477,7 +551,7 @@ class _ShopGoods extends State<ShopGoods> {
S.of(context).ninxiangjiquanxianweikaiqi, S.of(context).ninxiangjiquanxianweikaiqi,
S.of(context).weilekaipaizhaoxuanzhetouxiang, S.of(context).weilekaipaizhaoxuanzhetouxiang,
S.of(context).kaiqiquanxian, S.of(context).kaiqiquanxian,
(result) async { (result) async {
if (result) { if (result) {
await openAppSettings(); await openAppSettings();
} }
@ -512,5 +586,4 @@ class _ShopGoods extends State<ShopGoods> {
await Permission.camera.request(); await Permission.camera.request();
} }
} }
} }

82
lib/store/store_view/store_order_list.dart

@ -29,18 +29,17 @@ class StoreOrderListPage extends StatefulWidget {
ShoppingCart shopCarGoods; ShoppingCart shopCarGoods;
StoreOrderListPage( StoreOrderListPage(
this.arguments, this.arguments,
this.activitys, this.activitys,
this.storeInfo, this.storeInfo,
this.shopCarGoods, this.shopCarGoods,
this.controller, this.controller,
this.minToken, this.minToken,
this.tenant, this.tenant,
this.tableId, this.tableId,
this.queryMiNiDetail, this.queryMiNiDetail,
this.queryShoppingCart, this.queryShoppingCart,
this.scrollPhysics this.scrollPhysics);
);
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {
@ -88,14 +87,14 @@ class _StoreOrderListPage extends State<StoreOrderListPage> {
token: widget.minToken, token: widget.minToken,
tenant: widget.tenant, tenant: widget.tenant,
storeId: widget.arguments["id"], storeId: widget.arguments["id"],
showLoading: true showLoading: true);
);
BaseData<List<FindMiNiGroupList>> baseData = BaseData<List<FindMiNiGroupList>> baseData =
await minService.findMiNiGroupList({ await minService.findMiNiGroupList({
"id": widget.arguments["id"], "id": widget.arguments["id"],
}).catchError((error) { }).catchError((error) {
// refreshController.refreshFailed(); // refreshController.refreshFailed();
debugPrint(error);
}); });
if (baseData != null && baseData.isSuccess) { if (baseData != null && baseData.isSuccess) {
// refreshController.refreshCompleted(); // refreshController.refreshCompleted();
@ -139,8 +138,7 @@ class _StoreOrderListPage extends State<StoreOrderListPage> {
padding: EdgeInsets.only(top: 0, bottom: 25.h), padding: EdgeInsets.only(top: 0, bottom: 25.h),
itemBuilder: (context, position) { itemBuilder: (context, position) {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {},
},
child: orderItem(position), child: orderItem(position),
); );
}, },
@ -225,9 +223,10 @@ class _StoreOrderListPage extends State<StoreOrderListPage> {
width: 2, width: 2,
height: 17.h, height: 17.h,
color: Color(0xFF32A060), color: Color(0xFF32A060),
margin: EdgeInsets.only(right:10.w), margin: EdgeInsets.only(right: 10.w),
), ),
Expanded(child:Text( Expanded(
child: Text(
appletProducts[index].groupName, appletProducts[index].groupName,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
@ -236,7 +235,8 @@ class _StoreOrderListPage extends State<StoreOrderListPage> {
: Color(0xFF000000), : Color(0xFF000000),
fontSize: 12.sp, fontSize: 12.sp,
fontWeight: currentIndex != index fontWeight: currentIndex != index
? MyFontWeight.medium : MyFontWeight.semi_bold , ? MyFontWeight.medium
: MyFontWeight.semi_bold,
), ),
)), )),
], ],
@ -267,7 +267,12 @@ class _StoreOrderListPage extends State<StoreOrderListPage> {
Widget rightOrderItem(int rightIndex) { Widget rightOrderItem(int rightIndex) {
return Container( return Container(
color: Colors.white, color: Colors.white,
margin: EdgeInsets.only(bottom: (rightIndex == appletProducts.length -1)?(_viewportDimension > appletProducts[rightIndex].height?_viewportDimension-appletProducts[rightIndex].height:30.h):0), margin: EdgeInsets.only(
bottom: (rightIndex == appletProducts.length - 1)
? (_viewportDimension > appletProducts[rightIndex].height
? _viewportDimension - appletProducts[rightIndex].height
: 30.h)
: 0),
padding: EdgeInsets.only( padding: EdgeInsets.only(
right: 16.w, right: 16.w,
), ),
@ -275,30 +280,31 @@ class _StoreOrderListPage extends State<StoreOrderListPage> {
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
SizedBox(height: 50.h,child: SizedBox(
Padding( height: 50.h,
padding: EdgeInsets.only(left: 16.w,top: 10.h), child: Padding(
child: Text( padding: EdgeInsets.only(left: 16.w, top: 10.h),
appletProducts[rightIndex].groupName, child: Text(
textAlign: TextAlign.center, appletProducts[rightIndex].groupName,
style: TextStyle( textAlign: TextAlign.center,
color: Color(0xFF000000), style: TextStyle(
fontSize: 12.sp, color: Color(0xFF000000),
fontWeight: MyFontWeight.semi_bold, fontSize: 12.sp,
fontWeight: MyFontWeight.semi_bold,
),
), ),
), ),
),), ),
Column( Column(
children: appletProducts[rightIndex].productList.map((e) { children: appletProducts[rightIndex].productList.map((e) {
return GestureDetector( return GestureDetector(
onTap: (){ onTap: () {
if (widget.storeInfo.posType.code == if (widget.storeInfo.posType.code == "NORMALSTORE")
"NORMALSTORE")
return; return;
else else
goShopDetailsPage(e); goShopDetailsPage(e);
}, },
child:goodsItem(e), child: goodsItem(e),
); );
}).toList() ?? }).toList() ??
[], [],
@ -346,11 +352,11 @@ class _StoreOrderListPage extends State<StoreOrderListPage> {
productListBean: e, productListBean: e,
count: count, count: count,
isShopCart: false, isShopCart: false,
tableId:widget.tableId, tableId: widget.tableId,
queryShoppingCart:widget.queryShoppingCart, queryShoppingCart: widget.queryShoppingCart,
queryMiNiDetail: widget.queryMiNiDetail, queryMiNiDetail: widget.queryMiNiDetail,
shoppingCartSkuItemListBean: shoppingCartSkuItemListBean, shoppingCartSkuItemListBean: shoppingCartSkuItemListBean,
storeInfo:widget.storeInfo storeInfo: widget.storeInfo,
); );
} }
} }

8
lib/view_widget/cupertino_date_picker.dart

@ -5,7 +5,9 @@ import 'package:huixiang/generated/l10n.dart';
import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/utils/font_weight.dart';
class CupertinoDatePickerWidget extends StatelessWidget { class CupertinoDatePickerWidget extends StatelessWidget {
final DateTime minimumDate;
final DateTime maximumDate;
CupertinoDatePickerWidget({this.minimumDate,this.maximumDate});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -72,8 +74,8 @@ class CupertinoDatePickerWidget extends StatelessWidget {
mode: CupertinoDatePickerMode.date, mode: CupertinoDatePickerMode.date,
backgroundColor: Colors.white, backgroundColor: Colors.white,
initialDateTime: DateTime.now(), initialDateTime: DateTime.now(),
minimumDate: DateTime(1900), minimumDate: minimumDate ?? DateTime(1900),
maximumDate: DateTime.now(), maximumDate: maximumDate ?? DateTime.now(),
onDateTimeChanged: (data) { onDateTimeChanged: (data) {
dateTime = data; dateTime = data;
}, },

7
pubspec.lock

@ -202,6 +202,13 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "3.2.1" version: "3.2.1"
flutter_datetime_picker:
dependency: "direct main"
description:
name: flutter_datetime_picker
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.5.1"
flutter_easyloading: flutter_easyloading:
dependency: "direct main" dependency: "direct main"
description: description:

3
pubspec.yaml

@ -105,6 +105,9 @@ dependencies:
mqtt_client: ^9.6.8 mqtt_client: ^9.6.8
# 时间选择器
flutter_datetime_picker: ^1.5.1
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter

Loading…
Cancel
Save