diff --git a/lib/order/edit_remarks_page.dart b/lib/order/edit_remarks_page.dart index 638e2dba..6de9b46a 100644 --- a/lib/order/edit_remarks_page.dart +++ b/lib/order/edit_remarks_page.dart @@ -214,7 +214,7 @@ class _EditRemarksPage extends State { fontSize: 12.sp, ), ), - ),onTap: (){addRemarksCnt("点");},), + ),onTap: (){addRemarksCnt("软一点");},), ]; } } diff --git a/lib/order/order_view/order_info.dart b/lib/order/order_view/order_info.dart index 84d92782..77ee6780 100644 --- a/lib/order/order_view/order_info.dart +++ b/lib/order/order_view/order_info.dart @@ -48,6 +48,9 @@ class _OrderInfoView extends State { orderInfoItem(S.of(context).peisongfangshi, widget.isTakeOut == 0 ? S.of(context).ziqu :(widget.orderInfo != null && widget.orderInfo.logisticsName != "") ? widget.orderInfo.logisticsName : "美团配送"), // orderInfoItem(S.of(context).peisongfangshi,"美团配送"), + if(widget?.orderInfo?.subcribeTime != null && widget?.orderInfo?.subcribeTime != "") + orderInfoItem("预约时间", + widget.orderInfo != null ? widget.orderInfo.subcribeTime : ""), orderInfoItem( S.of(context).beizhuxinxi, widget.orderInfo != null @@ -88,7 +91,7 @@ class _OrderInfoView extends State { margin: EdgeInsets.only(top: 8.h, bottom: 8.h), child: Row( mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( leftText, diff --git a/lib/retrofit/data/findMiNiGroupList.dart b/lib/retrofit/data/findMiNiGroupList.dart index 63f453ce..de60e3cb 100644 --- a/lib/retrofit/data/findMiNiGroupList.dart +++ b/lib/retrofit/data/findMiNiGroupList.dart @@ -102,6 +102,7 @@ class ProductListBean { int setMeal; String printerFlag; dynamic markProductNone; + SubscribeParam subscribeParam; static ProductListBean fromJson(Map map) { if (map == null) return null; @@ -135,6 +136,7 @@ class ProductListBean { productListBean.setMeal = map['setMeal']; productListBean.printerFlag = map['printerFlag']; productListBean.markProductNone = map['markProductNone']; + productListBean.subscribeParam = SubscribeParam.fromJson(map['subscribeParam']); return productListBean; } @@ -168,5 +170,97 @@ class ProductListBean { "setMeal": setMeal, "printerFlag": printerFlag, "markProductNone": markProductNone, + "subscribeParam": subscribeParam, }; -} \ No newline at end of file +} + +/// 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 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() : []; + } + + bool _isEnableSubscribe; + num _dayOrDate; + dynamic _startAfterDays; + dynamic _daysValidate; + String _subscribeStartTime; + String _subscribeEndTime; + List _stores; + + SubscribeParam copyWith({ bool isEnableSubscribe, + num dayOrDate, + dynamic startAfterDays, + dynamic daysValidate, + String subscribeStartTime, + String subscribeEndTime, + List 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 get stores => _stores; + + Map toJson() { + final map = {}; + map['isEnableSubscribe'] = _isEnableSubscribe; + map['dayOrDate'] = _dayOrDate; + map['startAfterDays'] = _startAfterDays; + map['daysValidate'] = _daysValidate; + map['subscribeStartTime'] = _subscribeStartTime; + map['subscribeEndTime'] = _subscribeEndTime; + map['stores'] = _stores; + return map; + } +} diff --git a/lib/retrofit/data/miNiDetail.dart b/lib/retrofit/data/miNiDetail.dart index 6f5fb06e..2f5af8e3 100644 --- a/lib/retrofit/data/miNiDetail.dart +++ b/lib/retrofit/data/miNiDetail.dart @@ -86,6 +86,7 @@ class MiNiDetail { dynamic markProductNone; dynamic namePinyin; dynamic nameInitials; + SubscribeParam subscribeParam; static MiNiDetail fromJson(Map map) { if (map == null) return null; @@ -123,16 +124,14 @@ class MiNiDetail { miNiDetailBean.printerFlag = map['printerFlag']; miNiDetailBean.thumbnailImg = map['thumbnailImg']; miNiDetailBean.materialId = map['materialId']; - miNiDetailBean.imgs = []..addAll( - (map['imgs'] as List ?? []).map((o) => o.toString()) - ); + miNiDetailBean.imgs = [] + ..addAll((map['imgs'] as List ?? []).map((o) => o.toString())); miNiDetailBean.storeDTO = StoreDTOBean.fromJson(map['storeDTO']); miNiDetailBean.attrList = []..addAll( - (map['attrList'] as List ?? []).map((o) => AttrListBean.fromJson(o)) - ); + (map['attrList'] as List ?? []).map((o) => AttrListBean.fromJson(o))); 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.buyCount = map['buyCount']; miNiDetailBean.promotionShowVOList = map['promotionShowVOList']; @@ -141,56 +140,59 @@ class MiNiDetail { miNiDetailBean.markProductNone = map['markProductNone']; miNiDetailBean.namePinyin = map['namePinyin']; miNiDetailBean.nameInitials = map['nameInitials']; + miNiDetailBean.subscribeParam = + SubscribeParam.fromJson(map['subscribeParam']); return miNiDetailBean; } Map toJson() => { - "id": id, - "createTime": createTime, - "createUser": createUser, - "updateTime": updateTime, - "updateUser": updateUser, - "supplierName": supplierName, - "storeId": storeId, - "categoryId": categoryId, - "groupId": groupId, - "shortName": shortName, - "productName": productName, - "sellDesc": sellDesc, - "productCode": productCode, - "weight": weight, - "applyPrice": applyPrice, - "price": price, - "stock": stock, - "sellCount": sellCount, - "needLogistics": needLogistics, - "oversold": oversold, - "organic" : organic, - "status": status, - "posShow": posShow, - "productType": productType, - "productNumber": productNumber, - "setMeal": setMeal, - "attrStyle": attrStyle, - "detail" :detail, - "details" :details, - "isDelete": isDelete, - "printerFlag": printerFlag, - "thumbnailImg": thumbnailImg, - "materialId": materialId, - "imgs": imgs, - "storeDTO": storeDTO, - "attrList": attrList, - "productSkuVOList": productSkuVOList, - "shipAddress": shipAddress, - "buyCount": buyCount, - "promotionShowVOList": promotionShowVOList, - "buyNum": buyNum, - "productPlatterInfos": productPlatterInfos, - "markProductNone": markProductNone, - "namePinyin": namePinyin, - "nameInitials": nameInitials, - }; + "id": id, + "createTime": createTime, + "createUser": createUser, + "updateTime": updateTime, + "updateUser": updateUser, + "supplierName": supplierName, + "storeId": storeId, + "categoryId": categoryId, + "groupId": groupId, + "shortName": shortName, + "productName": productName, + "sellDesc": sellDesc, + "productCode": productCode, + "weight": weight, + "applyPrice": applyPrice, + "price": price, + "stock": stock, + "sellCount": sellCount, + "needLogistics": needLogistics, + "oversold": oversold, + "organic": organic, + "status": status, + "posShow": posShow, + "productType": productType, + "productNumber": productNumber, + "setMeal": setMeal, + "attrStyle": attrStyle, + "detail": detail, + "details": details, + "isDelete": isDelete, + "printerFlag": printerFlag, + "thumbnailImg": thumbnailImg, + "materialId": materialId, + "imgs": imgs, + "storeDTO": storeDTO, + "attrList": attrList, + "productSkuVOList": productSkuVOList, + "shipAddress": shipAddress, + "buyCount": buyCount, + "promotionShowVOList": promotionShowVOList, + "buyNum": buyNum, + "productPlatterInfos": productPlatterInfos, + "markProductNone": markProductNone, + "namePinyin": namePinyin, + "nameInitials": nameInitials, + "subscribeParam": subscribeParam, + }; } /// id : "1446382612795883520" @@ -271,41 +273,41 @@ class ProductSkuVOListBean { productSkuVOListBean.version = map['version']; productSkuVOListBean.skuAttrCodeDTOList = map['skuAttrCodeDTOList']; productSkuVOListBean.skuAttrList = []..addAll( - (map['skuAttrList'] as List ?? []).map((o) => SkuAttrListBean.fromJson(o)) - ); + (map['skuAttrList'] as List ?? []) + .map((o) => SkuAttrListBean.fromJson(o))); 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']; return productSkuVOListBean; } Map toJson() => { - "id": id, - "createTime": createTime, - "createUser": createUser, - "updateTime": updateTime, - "updateUser": updateUser, - "storeId": storeId, - "skuCode": skuCode, - "skuNameStr": skuNameStr, - "productId": productId, - "skuPrice": skuPrice, - "applyPrice": applyPrice, - "vipPrice": vipPrice, - "skuImg": skuImg, - "skuStock": skuStock, - "sort": sort, - "setMeal": setMeal, - "weight": weight, - "volume": volume, - "isDelete": isDelete, - "material": material, - "version": version, - "skuAttrCodeDTOList": skuAttrCodeDTOList, - "skuAttrList": skuAttrList, - "setMealDTOList": setMealDTOList, - }; + "id": id, + "createTime": createTime, + "createUser": createUser, + "updateTime": updateTime, + "updateUser": updateUser, + "storeId": storeId, + "skuCode": skuCode, + "skuNameStr": skuNameStr, + "productId": productId, + "skuPrice": skuPrice, + "applyPrice": applyPrice, + "vipPrice": vipPrice, + "skuImg": skuImg, + "skuStock": skuStock, + "sort": sort, + "setMeal": setMeal, + "weight": weight, + "volume": volume, + "isDelete": isDelete, + "material": material, + "version": version, + "skuAttrCodeDTOList": skuAttrCodeDTOList, + "skuAttrList": skuAttrList, + "setMealDTOList": setMealDTOList, + }; } /// id : "1446382613043347456" @@ -348,17 +350,17 @@ class SkuAttrListBean { } Map toJson() => { - "id": id, - "createTime": createTime, - "createUser": createUser, - "updateTime": updateTime, - "updateUser": updateUser, - "skuId": skuId, - "attrId": attrId, - "attrValueId": attrValueId, - "sortOrder": sortOrder, - "isDelete": isDelete, - }; + "id": id, + "createTime": createTime, + "createUser": createUser, + "updateTime": updateTime, + "updateUser": updateUser, + "skuId": skuId, + "attrId": attrId, + "attrValueId": attrValueId, + "sortOrder": sortOrder, + "isDelete": isDelete, + }; } /// groupName : "酒水选1" @@ -371,7 +373,8 @@ class ProductSetMeals { String groupName, int totalNumber, int optionalNumber, - List productInfoList,}){ + List productInfoList, + }) { _groupName = groupName; _totalNumber = totalNumber; _optionalNumber = optionalNumber; @@ -389,22 +392,31 @@ class ProductSetMeals { }); } } + String _groupName; int _totalNumber; int _optionalNumber; List _productInfoList; - ProductSetMeals copyWith({ String groupName, + + ProductSetMeals copyWith({ + String groupName, int totalNumber, int optionalNumber, List productInfoList, - }) => ProductSetMeals( groupName: groupName ?? _groupName, - totalNumber: totalNumber ?? _totalNumber, - optionalNumber: optionalNumber ?? _optionalNumber, - productInfoList: productInfoList ?? _productInfoList, - ); + }) => + ProductSetMeals( + groupName: groupName ?? _groupName, + totalNumber: totalNumber ?? _totalNumber, + optionalNumber: optionalNumber ?? _optionalNumber, + productInfoList: productInfoList ?? _productInfoList, + ); + String get groupName => _groupName; + int get totalNumber => _totalNumber; + int get optionalNumber => _optionalNumber; + List get productInfoList => _productInfoList; Map toJson() { @@ -417,7 +429,6 @@ class ProductSetMeals { } return map; } - } /// productId : "1372091668961951744" @@ -436,7 +447,8 @@ class ProductInfoList { bool allSku, List skuInfoList, List productAttrInfoList, - int number,}){ + int number, + }) { _productId = productId; _productName = productName; _productImg = productImg; @@ -465,6 +477,7 @@ class ProductInfoList { } _number = json['number']; } + String _productId; String _productName; String _productImg; @@ -473,26 +486,36 @@ class ProductInfoList { List _productAttrInfoList; int _number; int _count = 0; - ProductInfoList copyWith({ String productId, + + ProductInfoList copyWith({ + String productId, String productName, String productImg, bool allSku, List skuInfoList, List productAttrInfoList, int number, - }) => ProductInfoList( productId: productId ?? _productId, - productName: productName ?? _productName, - productImg: productImg ?? _productImg, - allSku: allSku ?? _allSku, - skuInfoList: skuInfoList ?? _skuInfoList, - productAttrInfoList: productAttrInfoList ?? _productAttrInfoList, - number: number ?? _number, - ); + }) => + ProductInfoList( + productId: productId ?? _productId, + productName: productName ?? _productName, + productImg: productImg ?? _productImg, + allSku: allSku ?? _allSku, + skuInfoList: skuInfoList ?? _skuInfoList, + productAttrInfoList: productAttrInfoList ?? _productAttrInfoList, + number: number ?? _number, + ); + String get productId => _productId; + String get productName => _productName; + String get productImg => _productImg; + bool get allSku => _allSku; + List get skuInfoList => _skuInfoList; + List get productAttrInfoList => _productAttrInfoList; int number; @@ -502,8 +525,6 @@ class ProductInfoList { _count = value; } - - Map toJson() { final map = {}; map['productId'] = _productId; @@ -514,12 +535,12 @@ class ProductInfoList { map['skuInfoList'] = _skuInfoList.map((v) => v.toJson()).toList(); } if (_productAttrInfoList != null) { - map['productAttrInfoList'] = _productAttrInfoList.map((v) => v.toJson()).toList(); + map['productAttrInfoList'] = + _productAttrInfoList.map((v) => v.toJson()).toList(); } map['number'] = _number; return map; } - } /// attrId : "1372091668978728960" @@ -530,7 +551,8 @@ class ProductAttrInfoList { ProductAttrInfoList({ String attrId, String attrName, - List attrValueList,}){ + List attrValueList, + }) { _attrId = attrId; _attrName = attrName; _attrValueList = attrValueList; @@ -546,21 +568,28 @@ class ProductAttrInfoList { }); } } + String _attrId; String _attrName; List _attrValueList; String _selectSku; - ProductAttrInfoList copyWith({ String attrId, + + ProductAttrInfoList copyWith({ + String attrId, String attrName, List attrValueList, - }) => ProductAttrInfoList( attrId: attrId ?? _attrId, - attrName: attrName ?? _attrName, - attrValueList: attrValueList ?? _attrValueList, - ); + }) => + ProductAttrInfoList( + attrId: attrId ?? _attrId, + attrName: attrName ?? _attrName, + attrValueList: attrValueList ?? _attrValueList, + ); + String get attrId => _attrId; + String get attrName => _attrName; - List get attrValueList => _attrValueList; + List get attrValueList => _attrValueList; String get selectSku => _selectSku; @@ -577,7 +606,6 @@ class ProductAttrInfoList { } return map; } - } /// attrId : "1372091668987117568" @@ -588,7 +616,8 @@ class AttrValueList { AttrValueList({ String attrId, String attrName, - dynamic attrValueList,}){ + dynamic attrValueList, + }) { _attrId = attrId; _attrName = attrName; _attrValueList = attrValueList; @@ -599,18 +628,26 @@ class AttrValueList { _attrName = json['attrName']; _attrValueList = json['attrValueList']; } + String _attrId; String _attrName; dynamic _attrValueList; - AttrValueList copyWith({ String attrId, + + AttrValueList copyWith({ + String attrId, String attrName, 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 attrName => _attrName; + dynamic get attrValueList => _attrValueList; Map toJson() { @@ -620,7 +657,6 @@ class AttrValueList { map['attrValueList'] = _attrValueList; return map; } - } /// id : "1372091669003894784" @@ -631,7 +667,8 @@ class SkuInfoList { SkuInfoList({ String id, String skuName, - List productSkuAttrList,}){ + List productSkuAttrList, + }) { _id = id; _skuName = skuName; _productSkuAttrList = productSkuAttrList; @@ -647,19 +684,27 @@ class SkuInfoList { }); } } + String _id; String _skuName; bool _isSelected = false; List _productSkuAttrList; - SkuInfoList copyWith({ String id, + + SkuInfoList copyWith({ + String id, String skuName, List productSkuAttrList, - }) => SkuInfoList( id: id ?? _id, - skuName: skuName ?? _skuName, - productSkuAttrList: productSkuAttrList ?? _productSkuAttrList, - ); + }) => + SkuInfoList( + id: id ?? _id, + skuName: skuName ?? _skuName, + productSkuAttrList: productSkuAttrList ?? _productSkuAttrList, + ); + String get id => _id; + String get skuName => _skuName; + List get productSkuAttrList => _productSkuAttrList; bool get isSelected => _isSelected; @@ -673,11 +718,11 @@ class SkuInfoList { map['id'] = _id; map['skuName'] = _skuName; if (_productSkuAttrList != null) { - map['productSkuAttrList'] = _productSkuAttrList.map((v) => v.toJson()).toList(); + map['productSkuAttrList'] = + _productSkuAttrList.map((v) => v.toJson()).toList(); } return map; } - } /// id : "1372091669012283392" @@ -702,7 +747,8 @@ class ProductSkuAttrList { String attrId, String attrValueId, dynamic sortOrder, - int isDelete,}){ + int isDelete, + }) { _id = id; _createTime = createTime; _createUser = createUser; @@ -727,6 +773,7 @@ class ProductSkuAttrList { _sortOrder = json['sortOrder']; _isDelete = json['isDelete']; } + String _id; String _createTime; String _createUser; @@ -737,7 +784,9 @@ class ProductSkuAttrList { String _attrValueId; dynamic _sortOrder; int _isDelete; - ProductSkuAttrList copyWith({ String id, + + ProductSkuAttrList copyWith({ + String id, String createTime, String createUser, String updateTime, @@ -747,26 +796,38 @@ class ProductSkuAttrList { String attrValueId, dynamic sortOrder, int isDelete, - }) => ProductSkuAttrList( id: id ?? _id, - createTime: createTime ?? _createTime, - createUser: createUser ?? _createUser, - updateTime: updateTime ?? _updateTime, - updateUser: updateUser ?? _updateUser, - skuId: skuId ?? _skuId, - attrId: attrId ?? _attrId, - attrValueId: attrValueId ?? _attrValueId, - sortOrder: sortOrder ?? _sortOrder, - isDelete: isDelete ?? _isDelete, - ); + }) => + ProductSkuAttrList( + id: id ?? _id, + createTime: createTime ?? _createTime, + createUser: createUser ?? _createUser, + updateTime: updateTime ?? _updateTime, + updateUser: updateUser ?? _updateUser, + skuId: skuId ?? _skuId, + attrId: attrId ?? _attrId, + attrValueId: attrValueId ?? _attrValueId, + sortOrder: sortOrder ?? _sortOrder, + isDelete: isDelete ?? _isDelete, + ); + String get id => _id; + String get createTime => _createTime; + String get createUser => _createUser; + String get updateTime => _updateTime; + String get updateUser => _updateUser; + String get skuId => _skuId; + String get attrId => _attrId; + String get attrValueId => _attrValueId; + dynamic get sortOrder => _sortOrder; + int get isDelete => _isDelete; Map toJson() { @@ -783,7 +844,6 @@ class ProductSkuAttrList { map['isDelete'] = _isDelete; return map; } - } /// productId : "1433994980233314304" @@ -815,22 +875,21 @@ class AttrListBean { attrListBean.isDelete = map['isDelete']; attrListBean.attrCode = map['attrCode']; attrListBean.id = map['id']; - attrListBean.attrValueList = []..addAll( - (map['attrValueList'] as List ?? []).map((o) => AttrValueListBean.fromJson(o)) - ); + attrListBean.attrValueList = []..addAll((map['attrValueList'] as List ?? []) + .map((o) => AttrValueListBean.fromJson(o))); return attrListBean; } Map toJson() => { - "productId": productId, - "attrName": attrName, - "sortOrder": sortOrder, - "needImg": needImg, - "isDelete": isDelete, - "attrCode": attrCode, - "id": id, - "attrValueList": attrValueList, - }; + "productId": productId, + "attrName": attrName, + "sortOrder": sortOrder, + "needImg": needImg, + "isDelete": isDelete, + "attrCode": attrCode, + "id": id, + "attrValueList": attrValueList, + }; } /// id : "1434076666832879616" @@ -865,14 +924,14 @@ class AttrValueListBean { } Map toJson() => { - "id": id, - "attrId": attrId, - "attrValue": attrValue, - "attrValueImg": attrValueImg, - "sortOrder": sortOrder, - "isDelete": isDelete, - "attrValueCode": attrValueCode, - }; + "id": id, + "attrId": attrId, + "attrValue": attrValue, + "attrValueImg": attrValueImg, + "sortOrder": sortOrder, + "isDelete": isDelete, + "attrValueCode": attrValueCode, + }; } /// id : "1333246101343436800" @@ -903,11 +962,103 @@ class StoreDTOBean { } Map toJson() => { - "id": id, - "storeName": storeName, - "nickName": nickName, - "logo": logo, - "productCount": productCount, - "soldNum": soldNum, - }; -} \ No newline at end of file + "id": id, + "storeName": storeName, + "nickName": nickName, + "logo": logo, + "productCount": productCount, + "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 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() : []; + } + + bool _isEnableSubscribe; + num _dayOrDate; + dynamic _startAfterDays; + dynamic _daysValidate; + String _subscribeStartTime; + String _subscribeEndTime; + List _stores; + + SubscribeParam copyWith({ bool isEnableSubscribe, + num dayOrDate, + dynamic startAfterDays, + dynamic daysValidate, + String subscribeStartTime, + String subscribeEndTime, + List 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 get stores => _stores; + + Map toJson() { + final map = {}; + map['isEnableSubscribe'] = _isEnableSubscribe; + map['dayOrDate'] = _dayOrDate; + map['startAfterDays'] = _startAfterDays; + map['daysValidate'] = _daysValidate; + map['subscribeStartTime'] = _subscribeStartTime; + map['subscribeEndTime'] = _subscribeEndTime; + map['stores'] = _stores; + return map; + } +} diff --git a/lib/retrofit/data/placeOrderFirst.dart b/lib/retrofit/data/placeOrderFirst.dart index d7cc0276..d6f3abdb 100644 --- a/lib/retrofit/data/placeOrderFirst.dart +++ b/lib/retrofit/data/placeOrderFirst.dart @@ -119,6 +119,7 @@ class PromotionInfoDTOBean { String couponId; String promotionId; bool useVipPrice; + bool useBenefit; PromotionInfoDTOBean({this.couponId, this.promotionId,this.useVipPrice}); @@ -128,12 +129,14 @@ class PromotionInfoDTOBean { promotionInfoDTOBean.couponId = json['couponId']; promotionInfoDTOBean.promotionId = json['promotionId']; promotionInfoDTOBean.useVipPrice = json['useVipPrice']; + promotionInfoDTOBean.useBenefit = json['useBenefit']; return promotionInfoDTOBean; } Map toJson() => { "couponId": couponId, "promotionId": promotionId, - "useVipPrice":useVipPrice + "useVipPrice":useVipPrice, + "useBenefit": useBenefit, }; } diff --git a/lib/settlement/settlement.dart b/lib/settlement/settlement.dart index 023e78aa..464de1c7 100644 --- a/lib/settlement/settlement.dart +++ b/lib/settlement/settlement.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.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_datetime_picker/flutter_datetime_picker.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.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/view_widget/my_appbar.dart'; import 'package:huixiang/view_widget/round_button.dart'; +import 'package:intl/intl.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import '../retrofit/data/miNiDetail.dart'; import '../retrofit/data/shoppingCart.dart'; import '../view_widget/settlement_tips_dialog.dart'; @@ -85,6 +88,11 @@ class _Settlement extends State { bool showVipTips = false; bool isRaiseChannel = false; ShoppingCart shopCarGoods; + SubscribeParam subscribeParam; + String reservationTime; + String subscribeStoresName; + String subTime; + int storesIndex = 0; @override void initState() { @@ -108,7 +116,7 @@ class _Settlement extends State { count1 = widget.arguments["buyNum"]; productId = widget.arguments["productId"]; shopCarGoods = widget.arguments["shoppingCart"]; - + subscribeParam = widget?.arguments["subscribeParam"] ?? null; if (tableId == 0) { placeOrder = true; } @@ -122,8 +130,7 @@ class _Settlement extends State { token: minToken, tenant: tenant, storeId: storeId, - showLoading: false - ); + showLoading: false); queryMemberInfo(); if (promotions != null && promotions != "" && tableId <= 0) { queryOrderInfo( @@ -192,68 +199,68 @@ class _Settlement extends State { try { EasyLoading.show(status: S.current.zhengzaijiazai); - BaseData baseData = await minService.getOrderInfo({ - "addressId": addressId, - "isTake": isTake, - "memberCouponId": memberCouponId, - "orderId": orderId, - "promotionId": promotionId, - "productSkuId": productSkuId, - "actProductId": actProductId, - "actProductSkuId": actProductSkuId, - "useVipPrice":useVipPriceSelect, - "buyNum": buyNum, - "payChannel":payChannel, - "tableId": tableId - }).catchError((error) {}); - this.promotion = null; - promotions = ""; - this.couponListBean = null; - coupons = ""; - if (baseData != null && baseData.isSuccess) { - settleOrderInfo = baseData.data; - if ((settleOrderInfo?.promotionId ?? "") != "") { - settleOrderInfo.promotionInfoList.forEach((element) { - if (element.id == settleOrderInfo.promotionId) { - this.promotion = element; - promotions = promotion?.name ?? ""; - } - }); - } - if ((settleOrderInfo?.memberCouponId ?? "") != "") { - settleOrderInfo.couponList.forEach((element) { - if (element.id == settleOrderInfo.memberCouponId) { - this.couponListBean = element; - coupons = couponListBean?.promotionName ?? ""; - } - }); - } - if (settleOrderInfo.orderProductList == null || - settleOrderInfo.orderProductList.length == 0) { - placeOrder = true; - queryOrderDetails( - pageType != null ? widget.arguments["orderId"] : parentId); - } - if(!isRaiseChannel && settleOrderInfo.isRaise){ - isRaiseChannel = true; - queryOrderInfo( - address?.id, - selectedBtn, - couponListBean?.id, - 0, - promotion?.id ?? productId, - productSkuId ?? "", - actProductId ?? "", - actProductSkuId ?? "", - useVipPriceSelect, - count1, - settleOrderInfo.isRaise ? 7 :payChannel, - tableId); + BaseData baseData = await minService.getOrderInfo({ + "addressId": addressId, + "isTake": isTake, + "memberCouponId": memberCouponId, + "orderId": orderId, + "promotionId": promotionId, + "productSkuId": productSkuId, + "actProductId": actProductId, + "actProductSkuId": actProductSkuId, + "useVipPrice": useVipPriceSelect, + "buyNum": buyNum, + "payChannel": payChannel, + "tableId": tableId + }).catchError((error) {}); + this.promotion = null; + promotions = ""; + this.couponListBean = null; + coupons = ""; + if (baseData != null && baseData.isSuccess) { + settleOrderInfo = baseData.data; + if ((settleOrderInfo?.promotionId ?? "") != "") { + settleOrderInfo.promotionInfoList.forEach((element) { + if (element.id == settleOrderInfo.promotionId) { + this.promotion = element; + promotions = promotion?.name ?? ""; + } + }); + } + if ((settleOrderInfo?.memberCouponId ?? "") != "") { + settleOrderInfo.couponList.forEach((element) { + if (element.id == settleOrderInfo.memberCouponId) { + this.couponListBean = element; + coupons = couponListBean?.promotionName ?? ""; + } + }); + } + if (settleOrderInfo.orderProductList == null || + settleOrderInfo.orderProductList.length == 0) { + placeOrder = true; + queryOrderDetails( + pageType != null ? widget.arguments["orderId"] : parentId); + } + if (!isRaiseChannel && settleOrderInfo.isRaise) { + isRaiseChannel = true; + queryOrderInfo( + address?.id, + selectedBtn, + couponListBean?.id, + 0, + promotion?.id ?? productId, + productSkuId ?? "", + actProductId ?? "", + actProductSkuId ?? "", + useVipPriceSelect, + count1, + settleOrderInfo.isRaise ? 7 : payChannel, + tableId); + } + } else { + SmartDialog.showToast(baseData?.msg ?? "", alignment: Alignment.center); } - } else { - SmartDialog.showToast(baseData?.msg ?? "", alignment: Alignment.center); - } - }finally{ + } finally { setState(() {}); EasyLoading.dismiss(); } @@ -266,7 +273,7 @@ class _Settlement extends State { }); if (baseData != null && baseData.isSuccess) { SharedPreferences.getInstance().then( - (value) => { + (value) => { value.setString('minMember', jsonEncode(baseData.data)), }, ); @@ -315,76 +322,76 @@ class _Settlement extends State { } 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> baseDate = + await minService.queryAddress().catchError((error) {}); + + BMFCoordinate bmfCoordinate = BMFCoordinate( + double.tryParse(storeInfo.latitude), + double.tryParse(storeInfo.longitude), + ); + if (baseDate != null && baseDate.isSuccess) { setState(() { - this.selectedBtn = selectedBtn; + address = baseDate.data[0]; }); - if (address != null) { - queryOrderInfo( - address.id, - selectedBtn, - null, - 0, - productId ?? null, - productSkuId ?? "", - actProductId ?? "", - actProductSkuId ?? "", - useVipPriceSelect, - count1, - payChannel, - tableId); - return; - } - BaseData> 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]; + for (int i = 1; i < baseDate.data.length; i++) { + Address address1 = baseDate.data[i]; - BMFCoordinate coordinate = await BMFCalculateUtils.coordConvert( - coordinate: BMFCoordinate( - double.tryParse(address.longitude), - double.tryParse(address.latitude), - ), - fromType: BMF_COORD_TYPE.COMMON, - toType: BMF_COORD_TYPE.BD09LL); - BMFCoordinate coordinate1 = await BMFCalculateUtils.coordConvert( - coordinate: BMFCoordinate( - double.tryParse(address1.longitude), - double.tryParse(address1.latitude), - ), - fromType: BMF_COORD_TYPE.COMMON, - toType: BMF_COORD_TYPE.BD09LL); + BMFCoordinate coordinate = await BMFCalculateUtils.coordConvert( + coordinate: BMFCoordinate( + double.tryParse(address.longitude), + double.tryParse(address.latitude), + ), + fromType: BMF_COORD_TYPE.COMMON, + toType: BMF_COORD_TYPE.BD09LL); + BMFCoordinate coordinate1 = await BMFCalculateUtils.coordConvert( + coordinate: BMFCoordinate( + double.tryParse(address1.longitude), + double.tryParse(address1.latitude), + ), + fromType: BMF_COORD_TYPE.COMMON, + toType: BMF_COORD_TYPE.BD09LL); - double mi = await BMFCalculateUtils.getLocationDistance( - bmfCoordinate, coordinate); - double mi1 = await BMFCalculateUtils.getLocationDistance( - bmfCoordinate, coordinate1); - if (mi1 < mi) { - address = address1; - } + double mi = await BMFCalculateUtils.getLocationDistance( + bmfCoordinate, coordinate); + double mi1 = await BMFCalculateUtils.getLocationDistance( + bmfCoordinate, coordinate1); + if (mi1 < mi) { + 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 { placeOrderFirst.cartNum = settleOrderInfo.orderNum; placeOrderFirst.cartSum = settleOrderInfo.price; placeOrderFirst.addressId = address == null ? null : address.id; - placeOrderFirst.isSubscribe = false; + placeOrderFirst.isSubscribe = + ((subscribeParam?.isEnableSubscribe ?? false) == true) + ? true + : false; //是否预约 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.orderSource = 2; placeOrderFirst.orderType = "0"; placeOrderFirst.orderTypeId = 0; placeOrderFirst.parentCode = parentCode; // 火锅加菜 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.promotionId = (promotion != null && tableId <= 0) ? promotion.id : ""; @@ -510,16 +526,18 @@ class _Settlement extends State { (couponListBean != null && tableId <= 0) ? couponListBean.id : ""; // : widget.arguments["cid"] ?? ""; placeOrderFirst.promotionInfoDTO.useVipPrice = useVipPriceSelect; + // placeOrderFirst.promotionInfoDTO.useBenefit = false; placeOrderFirst.recMobile = (mobile == null || mobile == "") ? mobile : storeInfo.headMobile; placeOrderFirst.shoppingCartSkuItemList = settleOrderInfo.orderProductList; placeOrderFirst.skuItemDTOList = []; placeOrderFirst.source = 1; placeOrderFirst.storeId = storeInfo.id; - placeOrderFirst.subcribeTime = null; + placeOrderFirst.subcribeTime = subTime ?? ""; //预约时间 placeOrderFirst.tableId = "$tableId"; - for(int i = 0;i { toOrderDetails(placeOrderFirst.id); } else { SmartDialog.show( - clickBgDismissTemp: false, + clickBgDismissTemp: false, widget: SettlementTips( - () { - toOrderDetails(placeOrderFirst.id); - }, - text: "${baseData?.msg}", - )); + () { + toOrderDetails(placeOrderFirst.id); + }, + text: "${baseData?.msg}", + )); } } } @@ -704,7 +722,7 @@ class _Settlement extends State { '/router/order_details', arguments: { "id": orderId, - "jumpState":1, + "jumpState": 1, }, ); // Navigator.of(context).pop(); @@ -759,8 +777,8 @@ class _Settlement extends State { child: Container( child: Column( children: [ - DistributionMode((addressId, isTake, memberCouponId, - orderId, promotionId) { + DistributionMode((addressId, isTake, + memberCouponId, orderId, promotionId) { setState(() { this.selectedBtn = 0; }); @@ -777,8 +795,13 @@ class _Settlement extends State { count1, payChannel, tableId ?? 0); - }, queryAddress, storeInfo, address, - selectedAddress, pageType,widget.arguments["distance"]), + }, + queryAddress, + storeInfo, + address, + selectedAddress, + pageType, + widget.arguments["distance"]), SizedBox( height: 16, @@ -791,50 +814,64 @@ class _Settlement extends State { // ), ///订单商品 - if(settleOrderInfo != null || minOrderInfo != null) - SettlementOrderCommodity( - selectedBtn, - settleOrderInfo, - minOrderInfo, - tableId, - pageType, - (coupons != "" || promotions!="") ? false :useVipPriceSelect, - this.showVipTips - ), + if (settleOrderInfo != null || + minOrderInfo != null) + SettlementOrderCommodity( + selectedBtn, + settleOrderInfo, + minOrderInfo, + tableId, + pageType, + (coupons != "" || promotions != "") + ? false + : useVipPriceSelect, + this.showVipTips), ///优惠券/备注/会员优惠金额 - if(settleOrderInfo != null || minOrderInfo != null) - ActivityCouponRemarks( - couponCart, - activityCart, - settleOrderInfo, - minOrderInfo, - coupons, - promotions, - couponCount(), - placeOrder, - remakers, - () { - Navigator.of(context).pushNamed( - '/router/edit_remarks_page', - arguments: {"remake":remakers} - ).then((value) => { - setState(() { - if (value != null) remakers = value; - }) - });}, - tableId, - vipPriceSelect, - (){ + if (settleOrderInfo != null || + minOrderInfo != null) + ActivityCouponRemarks( + couponCart, + activityCart, + settleOrderInfo, + minOrderInfo, + coupons, + promotions, + couponCount(), + placeOrder, + remakers, + () { + Navigator.of(context).pushNamed( + '/router/edit_remarks_page', + arguments: { + "remake": remakers + }).then((value) => { + setState(() { + if (value != null) remakers = value; + }) + }); + }, + tableId, + vipPriceSelect, + () { setState(() { 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,useVipPriceSelect,settleOrderInfo), + ///支付方式 + PayMethod(payChannelCheck, coupons, promotions, + useVipPriceSelect, settleOrderInfo), ], ), ), @@ -902,12 +939,23 @@ class _Settlement extends State { // return; // } else // orderButton = true; + if (subscribeParam != null && ((subscribeParam.isEnableSubscribe ?? false) == + true) && + (reservationTime == null || + subscribeStoresName == null)) { + SmartDialog.showToast( + (reservationTime == null) + ? "请选择预约时间" + : "请选择预约门店", + alignment: Alignment.center); + return; + } pageType != null ? bargainOrderId != null - ? activityPay() - : joinA == JoinActivity.GoJoin - ? queryJoinAct() - : queryLaunchAct() + ? activityPay() + : joinA == JoinActivity.GoJoin + ? queryJoinAct() + : queryLaunchAct() : queryPlaceOrderFirst(); }, ), @@ -928,23 +976,23 @@ class _Settlement extends State { payChannelCheck(int payChannel) { this.payChannel = payChannel; - if (tableId > 0) { - queryOrderDetails(parentId); - } else { - queryOrderInfo( - address?.id, - selectedBtn, - couponListBean?.id, - 0, - promotion?.id ?? productId, - productSkuId ?? "", - actProductId ?? "", - actProductSkuId ?? "", - useVipPriceSelect, - count1, - payChannel, - tableId);} - + if (tableId > 0) { + queryOrderDetails(parentId); + } else { + queryOrderInfo( + address?.id, + selectedBtn, + couponListBean?.id, + 0, + promotion?.id ?? productId, + productSkuId ?? "", + actProductId ?? "", + actProductSkuId ?? "", + useVipPriceSelect, + count1, + payChannel, + tableId); + } } vipPriceSelect(bool useVipPriceSelect) { @@ -964,7 +1012,8 @@ class _Settlement extends State { useVipPriceSelect, count1, payChannel, - tableId);} + tableId); + } } mobileChange(String mobile) { @@ -1004,10 +1053,8 @@ class _Settlement extends State { // promotions = ""; // this.promotion = null; if (tableId > 0) { - if(couponBean == null) - queryCancelMemberCoupon(parentId); - if (couponBean.id != null) - queryUseMemberCoupon(couponBean.id); + if (couponBean == null) queryCancelMemberCoupon(parentId); + if (couponBean.id != null) queryUseMemberCoupon(couponBean.id); } else { queryOrderInfo( address?.id, @@ -1047,7 +1094,7 @@ class _Settlement extends State { selectedBtn, null, 0, - (pro.id??"")??productId, + (pro.id ?? "") ?? productId, productSkuId ?? "", actProductId ?? "", actProductSkuId ?? "", @@ -1056,5 +1103,127 @@ class _Settlement extends State { payChannel, 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, + ), + ), + ); + } } diff --git a/lib/settlement/settlement_view/activity_coupon_remarks.dart b/lib/settlement/settlement_view/activity_coupon_remarks.dart index 1b4fe348..8118b156 100644 --- a/lib/settlement/settlement_view/activity_coupon_remarks.dart +++ b/lib/settlement/settlement_view/activity_coupon_remarks.dart @@ -2,15 +2,13 @@ import 'dart:io'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/min_order_info.dart'; import 'package:huixiang/retrofit/data/settleOrderInfo.dart'; import 'package:huixiang/utils/font_weight.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 { final Function() couponCart; @@ -27,6 +25,11 @@ class ActivityCouponRemarks extends StatefulWidget { final int tableId; final Function(bool useVipPriceSelect) vipPriceSelect; final Function showVipTips; + final SubscribeParam subscribeParam; + final Function() showDateSelector; + final String reservationTime; + final Function() showAlertDialog; + final String subscribeStoresName; ActivityCouponRemarks( this.couponCart, @@ -41,7 +44,12 @@ class ActivityCouponRemarks extends StatefulWidget { this.editRemark, this.tableId, this.vipPriceSelect, - this.showVipTips); + this.showVipTips, + this.subscribeParam, + this.showDateSelector, + this.reservationTime, + this.showAlertDialog, + this.subscribeStoresName); @override State createState() { @@ -79,65 +87,78 @@ class _ActivityCouponRemarks extends State { mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.center, children: [ - if( !(widget?.settleOrderInfo?.isRaise ?? false) && (widget?.settleOrderInfo?.memberVO?.isVip ?? false) && widget.placeOrder) - Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - flex: 1, - child: Text( - "VIP权益", - style: TextStyle( - 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, + if (!(widget?.settleOrderInfo?.isRaise ?? false) && + (widget?.settleOrderInfo?.memberVO?.isVip ?? false) && + widget.placeOrder) + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + flex: 1, + child: Text( + "VIP权益", + style: TextStyle( + 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, + ), + ), + ) + ], + ), if (widget.placeOrder && widget?.settleOrderInfo?.benefitDiscountAmount != null && widget?.settleOrderInfo?.benefitDiscountAmount != "0") @@ -170,7 +191,9 @@ class _ActivityCouponRemarks extends State { ], ), ), - if (widget.placeOrder && widget.tableId <= 0 && !(widget?.settleOrderInfo?.isRaise ?? false)) + if (widget.placeOrder && + widget.tableId <= 0 && + !(widget?.settleOrderInfo?.isRaise ?? false)) InkWell( onTap: () { widget.activityCart(); @@ -287,66 +310,99 @@ class _ActivityCouponRemarks extends State { ], ), ), - + if ((widget.subscribeParam?.isEnableSubscribe ?? false) == true) SizedBox( height: 13, ), - InkWell( - onTap: () { - showDateSelector(); - }, - 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), + if ((widget.subscribeParam?.isEnableSubscribe ?? false) == true) + InkWell( + onTap: () { + widget.showDateSelector(); + }, + 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( - "请选择时间", - textAlign: TextAlign.end, - style: TextStyle( - fontSize: 14.sp, - color: Color(0xFF858585), - fontWeight: MyFontWeight.medium, + Expanded( + child: Text( + widget.reservationTime ?? "请选择时间", + textAlign: TextAlign.end, + style: TextStyle( + fontSize: 14.sp, + color: Color(0xFF858585), + fontWeight: MyFontWeight.medium, + ), ), ), - ), - Icon( - Icons.keyboard_arrow_right, - size: 16, - ), - ], + Icon( + Icons.keyboard_arrow_right, + 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 promotion = ""; if (widget.promotions == null || widget.promotions == "") { diff --git a/lib/store/shop_details_page.dart b/lib/store/shop_details_page.dart index 5e9ae062..76e8d150 100644 --- a/lib/store/shop_details_page.dart +++ b/lib/store/shop_details_page.dart @@ -102,7 +102,7 @@ class _ShopDetailsPage extends State { token: value.getString("token"), ); BaseData baseData = - await apiService.queryStoreInfo(storeId).catchError((error) { + await apiService.queryStoreInfo(storeId).catchError((error) { debugPrint(error); }); if (baseData != null && baseData.isSuccess) { @@ -129,7 +129,7 @@ class _ShopDetailsPage extends State { String tenant = storeInfo.tenantCode; String storeId = storeInfo.id; SharedPreferences.getInstance().then( - (value) => { + (value) => { value.setString('minToken', minToken), value.setString('tenant', tenant), value.setString('storeId', storeId), @@ -246,7 +246,7 @@ class _ShopDetailsPage extends State { if (parentId == null || parentId == "") { if (num == 0) { - SmartDialog.showToast("请先选择您要购买的商品!~",alignment: Alignment.center); + SmartDialog.showToast("请先选择您要购买的商品!~", alignment: Alignment.center); return; } } @@ -264,8 +264,16 @@ class _ShopDetailsPage extends State { "cid": cid, "shoppingCart": shopCarGoods, "numberOfPeople": numberOfPeople, + "distance": widget.arguments["distance"], + "subscribeParam": miNiDetail?.subscribeParam, }, ); + + if ((miNiDetail?.subscribeParam?.isEnableSubscribe ?? false) == true) { + clearShopCar(); + this.shopCarGoods = await queryShopCar(); + } + if (tableId > 0) { getParentInfo(); } @@ -365,6 +373,10 @@ class _ShopDetailsPage extends State { .replaceAll("]", "") .replaceAll(",", ""); + if ((miNiDetail.subscribeParam.isEnableSubscribe ?? false) == true) { + clearShopCar(); + } + if (miNiDetail != null) { BaseData> baseDate = await minService.addShoppingCart({ "storeId": storeInfo.id, @@ -391,6 +403,8 @@ class _ShopDetailsPage extends State { if (baseDate != null && baseDate.isSuccess) { queryShopCar().then((value) { this.shopCarGoods = value; + if ((miNiDetail.subscribeParam.isEnableSubscribe ?? false) == true) + toDownOrder(); setState(() {}); }); } else { @@ -630,7 +644,7 @@ class _ShopDetailsPage extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only(left: 14.w,top: 16.h), + padding: EdgeInsets.only(left: 14.w, top: 16.h), child: Text( "商品详情", style: TextStyle( @@ -831,9 +845,10 @@ class _ShopDetailsPage extends State { )), GestureDetector( onTap: () { - if(storeInfo.posType.code == "NORMALSTORE" && tableId == 0){ + if (storeInfo.posType.code == "NORMALSTORE" && + tableId == 0) { showDeleteDialog(); - }else{ + } else { _queryMiNiDetail(id, counts); } }, @@ -859,7 +874,11 @@ class _ShopDetailsPage extends State { width: 2, ), Text( - "加入购物车", + ((miNiDetail?.subscribeParam?.isEnableSubscribe ?? + false) == + true) + ? "立即预约" + : "加入购物车", style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.regular, @@ -953,12 +972,12 @@ class _ShopDetailsPage extends State { showModalBottomSheet( builder: (BuildContext context) { return StatefulBuilder(builder: ( - context, - state, - ) { + context, + state, + ) { return Container( 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, width: double.infinity, decoration: BoxDecoration( @@ -992,47 +1011,47 @@ class _ShopDetailsPage extends State { ), Expanded( child: Container( - height: 70, - child: Column( + height: 70, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, 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( - "¥${miNiDetail?.price ?? ""}", + miNiDetail?.productName ?? "", style: TextStyle( - fontSize: 12.sp, + fontSize: 13.sp, 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 && @@ -1050,7 +1069,7 @@ class _ShopDetailsPage extends State { padding: EdgeInsets.zero, itemBuilder: (context, position) { return attrItem( - (attrValue) { + (attrValue) { state(() { // if(selectSkus.length > position) selectSkus[position] = attrValue; @@ -1097,8 +1116,7 @@ class _ShopDetailsPage extends State { Icons.remove, color: Color(0xFF32A060), size: 24, - ) - ), + )), Padding( padding: EdgeInsets.only(left: 8, right: 8), child: Text( @@ -1132,7 +1150,11 @@ class _ShopDetailsPage extends State { RoundButton( width: double.infinity, height: 54.h, - text: "加入购物车", + text: ((miNiDetail?.subscribeParam?.isEnableSubscribe ?? + false) == + true) + ? "立即预约" + : "加入购物车", textColor: Colors.white, fontWeight: MyFontWeight.semi_bold, radius: 27, @@ -1310,7 +1332,7 @@ class _ShopDetailsPage extends State { S.of(context).ninxiangjiquanxianweikaiqi, S.of(context).weilekaipaizhaoxuanzhetouxiang, S.of(context).kaiqiquanxian, - (result) async { + (result) async { if (result) { await openAppSettings(); } diff --git a/lib/store/store_order.dart b/lib/store/store_order.dart index d305b7a7..90c323de 100644 --- a/lib/store/store_order.dart +++ b/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:shared_preferences/shared_preferences.dart'; +import '../settlement/settlement.dart'; import '../view_widget/border_text.dart'; import '../view_widget/request_permission.dart'; @@ -66,6 +67,7 @@ class _StoreOrderPage extends State String tenant = ""; String storeId = ""; int numberOfPeople = 0; + MiNiDetail miNiDetail; ///小程序token String minToken; @@ -426,6 +428,7 @@ class _StoreOrderPage extends State ]; }, body: + ///点餐 TabBarView( physics: NeverScrollableScrollPhysics(), @@ -515,12 +518,19 @@ class _StoreOrderPage extends State Spacer(), GestureDetector( onTap: () { - if(AppUtils.compareTime(storeInfo.openStartTime,DateFormat('HH:mm:ss').format(DateTime.now())) - &&(!AppUtils.compareTime(storeInfo.openEndTime,DateFormat('HH:mm:ss').format(DateTime.now())))){ - toDownOrder(); - } - else - SmartDialog.showToast("营业时间:${storeInfo.openStartTime}-${storeInfo.openEndTime}", alignment: Alignment.center); + if (AppUtils.compareTime( + storeInfo.openStartTime, + DateFormat('HH:mm:ss') + .format(DateTime.now())) && + (!AppUtils.compareTime( + storeInfo.openEndTime, + DateFormat('HH:mm:ss') + .format(DateTime.now())))) { + toDownOrder(); + } else + SmartDialog.showToast( + "营业时间:${storeInfo.openStartTime}-${storeInfo.openEndTime}", + alignment: Alignment.center); }, child: RoundButton( width: 103.w, @@ -631,7 +641,7 @@ class _StoreOrderPage extends State if (parentId == null || parentId == "") { if (num == 0) { - SmartDialog.showToast("请先选择您要购买的商品!~",alignment: Alignment.center); + SmartDialog.showToast("请先选择您要购买的商品!~", alignment: Alignment.center); return; } } @@ -649,9 +659,16 @@ class _StoreOrderPage extends State "cid": cid, "shoppingCart": shopCarGoods, "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) { getParentInfo(); } @@ -741,7 +758,7 @@ class _StoreOrderPage extends State _queryMiNiDetail(String id, int count) async { EasyLoading.show(status: S.current.zhengzaijiazai); if (count < 0) { - shopCarGoods.shoppingCartSkuItemList.forEach((element) async{ + shopCarGoods.shoppingCartSkuItemList.forEach((element) async { if (element.productId == id) { await shopCartReduce(element); setState(() {}); @@ -752,6 +769,7 @@ class _StoreOrderPage extends State BaseData baseData = await minService.miNiDetail(id); EasyLoading.dismiss(); if (baseData != null && baseData.isSuccess) { + miNiDetail = baseData.data; showStoreSelector(baseData.data, id, count); } } @@ -804,6 +822,10 @@ class _StoreOrderPage extends State .replaceAll("]", "") .replaceAll(",", ""); + if ((miNiDetail.subscribeParam.isEnableSubscribe ?? false) == true) { + clearShopCar(); + } + if (miNiDetail != null) { BaseData> baseDate = await minService.addShoppingCart({ "storeId": storeInfo.id, @@ -829,6 +851,8 @@ class _StoreOrderPage extends State // EasyLoading.dismiss(); if (baseDate != null && baseDate.isSuccess) { this.shopCarGoods = await queryShopCar(); + if ((miNiDetail.subscribeParam.isEnableSubscribe ?? false) == true) + toDownOrder(); setState(() {}); } else { SmartDialog.showToast(baseDate?.msg, alignment: Alignment.center); diff --git a/lib/store/store_view/product_sku.dart b/lib/store/store_view/product_sku.dart index 525be6ce..80ca1561 100644 --- a/lib/store/store_view/product_sku.dart +++ b/lib/store/store_view/product_sku.dart @@ -292,7 +292,7 @@ class _ProductSku extends State { RoundButton( width: double.infinity, height: 54.h, - text: "加入购物车", + text: (widget?.miNiDetail?.subscribeParam?.isEnableSubscribe ?? false) == true ? "立即预约":"加入购物车", textColor: Colors.white, fontWeight: MyFontWeight.semi_bold, radius: 27, diff --git a/lib/store/store_view/shop_goods.dart b/lib/store/store_view/shop_goods.dart index 976dfa9b..008f32e1 100644 --- a/lib/store/store_view/shop_goods.dart +++ b/lib/store/store_view/shop_goods.dart @@ -42,7 +42,7 @@ class ShopGoods extends StatefulWidget { this.queryShoppingCart, this.queryMiNiDetail, this.shoppingCartSkuItemListBean, - this.storeInfo + this.storeInfo, }); @override @@ -51,9 +51,9 @@ class ShopGoods extends StatefulWidget { } } - class _ShopGoods extends State { int _jumpType = -1; + MiNiDetail miNiDetail; ///商品详情 queryMiNiDetail(id) async { @@ -62,26 +62,28 @@ class _ShopGoods extends State { String minToken = value.getString("minToken"); String tenant = value.getString("tenant"); String storeId = value.getString("storeId"); - minService = MinApiService(Dio(), + minService = MinApiService( + Dio(), context: context, token: minToken, tenant: tenant, - storeId: storeId,); + storeId: storeId, + ); }); BaseData baseData = - await minService.miNiDetail(id).catchError((error) { - }); + await minService.miNiDetail(id).catchError((error) {}); 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; widget.add(widget.shoppingCartSkuItemListBean); - }else{ + } else { _jumpType = 1; await Navigator.of(context) .pushNamed('/router/product_meals_sku', arguments: { - "id":widget.productListBean.id, - "storeId":widget.productListBean.storeId, - "tableId":widget.tableId + "id": widget.productListBean.id, + "storeId": widget.productListBean.storeId, + "tableId": widget.tableId }); widget.queryShoppingCart(); } @@ -90,7 +92,7 @@ class _ShopGoods extends State { } } - @override + @override Widget build(BuildContext context) { return Container( color: Colors.white, @@ -99,7 +101,7 @@ class _ShopGoods extends State { // // bottom: 20.h, // ), height: 123.h, - child: Row( + child: Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.max, @@ -109,8 +111,8 @@ class _ShopGoods extends State { widget.productListBean != null ? widget.productListBean.imgPath : (widget.shoppingCartSkuItemListBean != null - ? widget.shoppingCartSkuItemListBean.skuImg - : ""), + ? widget.shoppingCartSkuItemListBean.skuImg + : ""), width: 70.h, height: 70.h, radius: BorderRadius.circular(4), @@ -125,64 +127,68 @@ class _ShopGoods extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Padding(padding: EdgeInsets.only(right: 16.w), - child: Row( - children: [ - Expanded( - child: Text( - widget.productListBean != null - ? widget.productListBean.productName - : widget.shoppingCartSkuItemListBean.productName, - overflow: TextOverflow.ellipsis, - maxLines: 2, - style: TextStyle( - color: Colors.black, - fontSize: 13.sp, - fontWeight: MyFontWeight.medium, + Padding( + padding: EdgeInsets.only(right: 16.w), + child: Row( + children: [ + Expanded( + child: Text( + widget.productListBean != null + ? widget.productListBean.productName + : widget.shoppingCartSkuItemListBean.productName, + overflow: TextOverflow.ellipsis, + maxLines: 2, + style: TextStyle( + color: Colors.black, + fontSize: 13.sp, + fontWeight: MyFontWeight.medium, + ), ), ), - ), - // Image.asset( - // "assets/image/green_leaf.webp", - // fit: BoxFit.cover, - // width: 12, - // height: 12, - // ), - // Text( - // "X300", - // style: TextStyle( - // color: Color(0xFF55BC51), - // fontSize: 10.sp, - // fontWeight: MyFontWeight.semi_bold, - // ), - // ), - ], - ),), + // Image.asset( + // "assets/image/green_leaf.webp", + // fit: BoxFit.cover, + // width: 12, + // height: 12, + // ), + // Text( + // "X300", + // style: TextStyle( + // color: Color(0xFF55BC51), + // fontSize: 10.sp, + // fontWeight: MyFontWeight.semi_bold, + // ), + // ), + ], + ), + ), SizedBox( height: 2.h, ), - Padding(padding: EdgeInsets.only(right: 16.w), + Padding( + padding: EdgeInsets.only(right: 16.w), child: Row( - children: [ - Expanded( - child: Text( - (widget.productListBean != null - ? widget.productListBean.shortName - : widget.shoppingCartSkuItemListBean.skuName ?? ""), - overflow: TextOverflow.ellipsis, - maxLines: 2, - style: TextStyle( - color: Color(0xFF4C4C4C), - fontSize: 10.sp, - fontWeight: MyFontWeight.regular, + children: [ + Expanded( + child: Text( + (widget.productListBean != null + ? widget.productListBean.shortName + : widget.shoppingCartSkuItemListBean.skuName ?? + ""), + overflow: TextOverflow.ellipsis, + maxLines: 2, + style: TextStyle( + color: Color(0xFF4C4C4C), + fontSize: 10.sp, + fontWeight: MyFontWeight.regular, + ), + ), ), - ), - ), - SizedBox( - width: 10, - ), - ], - )), + SizedBox( + width: 10, + ), + ], + )), SizedBox( height: 7.h, ), @@ -223,71 +229,90 @@ class _ShopGoods extends State { ], ), if (!widget.isShopCart && - (widget.productListBean?.attrStyle ?? 0) == 1) + (widget.productListBean?.attrStyle ?? 0) == 1 && + !(widget?.productListBean?.subscribeParam + ?.isEnableSubscribe ?? + false)) GestureDetector( behavior: HitTestBehavior.opaque, - onTap: () async{ - if(widget.storeInfo.posType.code == "NORMALSTORE"&& widget.tableId == 0){ + onTap: () async { + if (widget.storeInfo.posType.code == + "NORMALSTORE" && + widget.tableId == 0) { showDeleteDialog(); - }else{ + } else { widget.queryMiNiDetail( widget.productListBean != null ? widget.productListBean.id : widget.shoppingCartSkuItemListBean - .productId, + .productId, 0); } }, - child:Container( - padding: EdgeInsets.only(right: 16.w), - child: Stack( - children: [ - Container( - padding: EdgeInsets.only(left:35.w,top: 4.h,bottom: 4.h,), - margin: EdgeInsets.only(right: 8, top: 4), - child: RoundButton( - text: S.of(context).xuanguige, - textColor: Colors.white, - fontWeight: MyFontWeight.medium, - radius: 3, - backgroup: Color(0xFF32A060), - fontSize: 11.sp, - padding: EdgeInsets.symmetric(vertical: 5.h,horizontal: 3.w), - ), - ), - Positioned( - right: 0, - child: Visibility( - visible: widget.count > 0, - child: RoundButton( - width: 17, - height: 17.h, - text: "${widget.count}", - textColor: Color(0xFF32A060), - fontWeight: MyFontWeight.regular, - backgroup: Colors.white, - fontSize: 12.sp, - radius: 100, - ), + child: Container( + padding: EdgeInsets.only(right: 16.w), + child: Stack( + children: [ + Container( + padding: EdgeInsets.only( + left: 35.w, + top: 4.h, + bottom: 4.h, + ), + margin: EdgeInsets.only(right: 8, top: 4), + child: RoundButton( + text: S.of(context).xuanguige, + textColor: Colors.white, + fontWeight: MyFontWeight.medium, + radius: 3, + backgroup: Color(0xFF32A060), + fontSize: 11.sp, + padding: EdgeInsets.symmetric( + vertical: 5.h, horizontal: 3.w), + ), + ), + Positioned( + right: 0, + child: Visibility( + visible: widget.count > 0, + child: RoundButton( + width: 17, + height: 17.h, + text: "${widget.count}", + textColor: Color(0xFF32A060), + fontWeight: MyFontWeight.regular, + backgroup: Colors.white, + fontSize: 12.sp, + radius: 100, + ), + ), + ), + ], ), - ), - ], - ),)), + )), if (widget.isShopCart || - (widget.productListBean?.attrStyle ?? 0) == 0) - Spacer(), + (widget.productListBean?.attrStyle ?? 0) == 0 && + !(widget?.productListBean?.subscribeParam + ?.isEnableSubscribe ?? + false)) + Spacer(), if (widget.isShopCart || - (widget.productListBean?.attrStyle ?? 0) == 0) + (widget.productListBean?.attrStyle ?? 0) == 0 && + !(widget?.productListBean?.subscribeParam + ?.isEnableSubscribe ?? + false)) GestureDetector( behavior: HitTestBehavior.opaque, - onTap: () async{ - if(widget.storeInfo.posType.code == "NORMALSTORE" && widget.tableId == 0){ - showDeleteDialog(); - }else{ - widget.reduce(widget.shoppingCartSkuItemListBean);} - }, + onTap: () async { + if (widget.storeInfo.posType.code == "NORMALSTORE" && + widget.tableId == 0) { + showDeleteDialog(); + } else { + widget.reduce(widget.shoppingCartSkuItemListBean); + } + }, child: Container( - padding: EdgeInsets.only(left: 15.w,right: 6.w), + padding: EdgeInsets.only(left: 15.w, right: 6.w), child: Image.asset( "assets/image/reduce.webp", width: 22, @@ -296,7 +321,10 @@ class _ShopGoods extends State { ), ), if (widget.isShopCart || - (widget.productListBean?.attrStyle ?? 0) == 0) + (widget.productListBean?.attrStyle ?? 0) == 0 && + !(widget?.productListBean?.subscribeParam + ?.isEnableSubscribe ?? + false)) Container( alignment: Alignment.center, child: Text( @@ -309,71 +337,117 @@ class _ShopGoods extends State { ), ), if (widget.isShopCart || - (widget.productListBean?.attrStyle ?? 0) == 0) - GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () async{ - if(widget.storeInfo.posType.code == "NORMALSTORE" && widget.tableId == 0){ - showDeleteDialog(); - }else{ - if(_jumpType == -1) - queryMiNiDetail(widget.productListBean.id); - else if(_jumpType == 0) - widget.add(widget.shoppingCartSkuItemListBean); - else if(_jumpType == 1) - await Navigator.of(context) - .pushNamed('/router/product_meals_sku', arguments: { - "id":widget.productListBean.id, - "storeId":widget.productListBean.storeId, - "tableId":widget.tableId - }); - widget.queryShoppingCart(); - } - }, - child: Container( - padding: EdgeInsets.only(left: 6.w,right:16.w), - child: Image.asset( - "assets/image/add.webp", - width: 22, - height: 22.h, + (widget.productListBean?.attrStyle ?? 0) == 0 && + !(widget?.productListBean?.subscribeParam + ?.isEnableSubscribe ?? + false)) + GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () async { + if (widget.storeInfo.posType.code == "NORMALSTORE" && + widget.tableId == 0) { + showDeleteDialog(); + } else { + if (_jumpType == -1) + queryMiNiDetail(widget.productListBean.id); + else if (_jumpType == 0) + widget.add(widget.shoppingCartSkuItemListBean); + else if (_jumpType == 1) + await Navigator.of(context).pushNamed( + '/router/product_meals_sku', + arguments: { + "id": widget.productListBean.id, + "storeId": widget.productListBean.storeId, + "tableId": widget.tableId + }); + widget.queryShoppingCart(); + } + }, + 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( height: 4.h, ), - if(widget.productListBean.vipPrice != null ) - Row( - children: [ - Container( - alignment: Alignment.center, - padding: EdgeInsets.symmetric(horizontal:2.w), - margin: EdgeInsets.only(right: 4.w), - decoration: new BoxDecoration( - color: Color(0xff32A060), - borderRadius: BorderRadius.circular(4)), - child: Text( - "VIP", + if (widget.productListBean.vipPrice != null) + Row( + children: [ + Container( + alignment: Alignment.center, + padding: EdgeInsets.symmetric(horizontal: 2.w), + margin: EdgeInsets.only(right: 4.w), + decoration: new BoxDecoration( + color: Color(0xff32A060), + borderRadius: BorderRadius.circular(4)), + child: Text( + "VIP", + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.medium, + color: Color(0xFFFFFFFF), + ), + ), + ), + Text( + "¥${AppUtils.calculateDouble(double.tryParse(widget.productListBean.vipPrice ?? "0") ?? 0)}", style: TextStyle( - fontSize: 12.sp, + fontSize: 14.sp, 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( // "¥${AppUtils.calculateDouble(double.tryParse(widget.isShopCart ? widget.shoppingCartSkuItemListBean.skuPrice : widget.productListBean.applyPrice) ?? 0)}", // style: TextStyle( @@ -477,7 +551,7 @@ class _ShopGoods extends State { S.of(context).ninxiangjiquanxianweikaiqi, S.of(context).weilekaipaizhaoxuanzhetouxiang, S.of(context).kaiqiquanxian, - (result) async { + (result) async { if (result) { await openAppSettings(); } @@ -512,5 +586,4 @@ class _ShopGoods extends State { await Permission.camera.request(); } } - } diff --git a/lib/store/store_view/store_order_list.dart b/lib/store/store_view/store_order_list.dart index 80878f7e..35a26cd7 100644 --- a/lib/store/store_view/store_order_list.dart +++ b/lib/store/store_view/store_order_list.dart @@ -29,18 +29,17 @@ class StoreOrderListPage extends StatefulWidget { ShoppingCart shopCarGoods; StoreOrderListPage( - this.arguments, - this.activitys, - this.storeInfo, - this.shopCarGoods, - this.controller, - this.minToken, - this.tenant, - this.tableId, - this.queryMiNiDetail, - this.queryShoppingCart, - this.scrollPhysics - ); + this.arguments, + this.activitys, + this.storeInfo, + this.shopCarGoods, + this.controller, + this.minToken, + this.tenant, + this.tableId, + this.queryMiNiDetail, + this.queryShoppingCart, + this.scrollPhysics); @override State createState() { @@ -88,14 +87,14 @@ class _StoreOrderListPage extends State { token: widget.minToken, tenant: widget.tenant, storeId: widget.arguments["id"], - showLoading: true - ); + showLoading: true); BaseData> baseData = await minService.findMiNiGroupList({ "id": widget.arguments["id"], }).catchError((error) { // refreshController.refreshFailed(); + debugPrint(error); }); if (baseData != null && baseData.isSuccess) { // refreshController.refreshCompleted(); @@ -139,8 +138,7 @@ class _StoreOrderListPage extends State { padding: EdgeInsets.only(top: 0, bottom: 25.h), itemBuilder: (context, position) { return GestureDetector( - onTap: () { - }, + onTap: () {}, child: orderItem(position), ); }, @@ -225,9 +223,10 @@ class _StoreOrderListPage extends State { width: 2, height: 17.h, color: Color(0xFF32A060), - margin: EdgeInsets.only(right:10.w), + margin: EdgeInsets.only(right: 10.w), ), - Expanded(child:Text( + Expanded( + child: Text( appletProducts[index].groupName, textAlign: TextAlign.center, style: TextStyle( @@ -236,7 +235,8 @@ class _StoreOrderListPage extends State { : Color(0xFF000000), fontSize: 12.sp, fontWeight: currentIndex != index - ? MyFontWeight.medium : MyFontWeight.semi_bold , + ? MyFontWeight.medium + : MyFontWeight.semi_bold, ), )), ], @@ -267,7 +267,12 @@ class _StoreOrderListPage extends State { Widget rightOrderItem(int rightIndex) { return Container( 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( right: 16.w, ), @@ -275,30 +280,31 @@ class _StoreOrderListPage extends State { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - SizedBox(height: 50.h,child: - Padding( - padding: EdgeInsets.only(left: 16.w,top: 10.h), - child: Text( - appletProducts[rightIndex].groupName, - textAlign: TextAlign.center, - style: TextStyle( - color: Color(0xFF000000), - fontSize: 12.sp, - fontWeight: MyFontWeight.semi_bold, + SizedBox( + height: 50.h, + child: Padding( + padding: EdgeInsets.only(left: 16.w, top: 10.h), + child: Text( + appletProducts[rightIndex].groupName, + textAlign: TextAlign.center, + style: TextStyle( + color: Color(0xFF000000), + fontSize: 12.sp, + fontWeight: MyFontWeight.semi_bold, + ), ), ), - ),), + ), Column( children: appletProducts[rightIndex].productList.map((e) { return GestureDetector( - onTap: (){ - if (widget.storeInfo.posType.code == - "NORMALSTORE") + onTap: () { + if (widget.storeInfo.posType.code == "NORMALSTORE") return; else goShopDetailsPage(e); }, - child:goodsItem(e), + child: goodsItem(e), ); }).toList() ?? [], @@ -346,11 +352,11 @@ class _StoreOrderListPage extends State { productListBean: e, count: count, isShopCart: false, - tableId:widget.tableId, - queryShoppingCart:widget.queryShoppingCart, + tableId: widget.tableId, + queryShoppingCart: widget.queryShoppingCart, queryMiNiDetail: widget.queryMiNiDetail, shoppingCartSkuItemListBean: shoppingCartSkuItemListBean, - storeInfo:widget.storeInfo + storeInfo: widget.storeInfo, ); } } diff --git a/lib/view_widget/cupertino_date_picker.dart b/lib/view_widget/cupertino_date_picker.dart index 104914d3..95897df3 100644 --- a/lib/view_widget/cupertino_date_picker.dart +++ b/lib/view_widget/cupertino_date_picker.dart @@ -5,7 +5,9 @@ import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/utils/font_weight.dart'; class CupertinoDatePickerWidget extends StatelessWidget { - + final DateTime minimumDate; + final DateTime maximumDate; + CupertinoDatePickerWidget({this.minimumDate,this.maximumDate}); @override Widget build(BuildContext context) { @@ -72,8 +74,8 @@ class CupertinoDatePickerWidget extends StatelessWidget { mode: CupertinoDatePickerMode.date, backgroundColor: Colors.white, initialDateTime: DateTime.now(), - minimumDate: DateTime(1900), - maximumDate: DateTime.now(), + minimumDate: minimumDate ?? DateTime(1900), + maximumDate: maximumDate ?? DateTime.now(), onDateTimeChanged: (data) { dateTime = data; }, diff --git a/pubspec.lock b/pubspec.lock index 1f4abaac..9962839b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -202,6 +202,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted 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: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index dcc602c9..d7dd025e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -105,6 +105,9 @@ dependencies: mqtt_client: ^9.6.8 +# 时间选择器 + flutter_datetime_picker: ^1.5.1 + dev_dependencies: flutter_test: sdk: flutter