diff --git a/assets/image/2x/login_channel.webp b/assets/image/2x/login_channel.webp new file mode 100644 index 00000000..0bfda89d Binary files /dev/null and b/assets/image/2x/login_channel.webp differ diff --git a/assets/image/2x/login_store.webp b/assets/image/2x/login_store.webp new file mode 100644 index 00000000..e9e2b7da Binary files /dev/null and b/assets/image/2x/login_store.webp differ diff --git a/assets/image/2x/recharge_z.webp b/assets/image/2x/recharge_z.webp new file mode 100644 index 00000000..36306282 Binary files /dev/null and b/assets/image/2x/recharge_z.webp differ diff --git a/assets/image/3x/login_channel.webp b/assets/image/3x/login_channel.webp new file mode 100644 index 00000000..0b663902 Binary files /dev/null and b/assets/image/3x/login_channel.webp differ diff --git a/assets/image/3x/login_store.webp b/assets/image/3x/login_store.webp new file mode 100644 index 00000000..9ac6d0ec Binary files /dev/null and b/assets/image/3x/login_store.webp differ diff --git a/assets/image/3x/recharge_z.webp b/assets/image/3x/recharge_z.webp new file mode 100644 index 00000000..4d1e9033 Binary files /dev/null and b/assets/image/3x/recharge_z.webp differ diff --git a/assets/image/login_channel.webp b/assets/image/login_channel.webp new file mode 100644 index 00000000..745dd82b Binary files /dev/null and b/assets/image/login_channel.webp differ diff --git a/assets/image/login_store.webp b/assets/image/login_store.webp new file mode 100644 index 00000000..aba2ba5e Binary files /dev/null and b/assets/image/login_store.webp differ diff --git a/assets/image/recharge_z.webp b/assets/image/recharge_z.webp new file mode 100644 index 00000000..307da899 Binary files /dev/null and b/assets/image/recharge_z.webp differ diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 34ee85c0..954f305e 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -667,7 +667,7 @@ "$(PROJECT_DIR)/baidu", "$(PROJECT_DIR)/Runner/baidu", ); - MARKETING_VERSION = 3.2.10; + MARKETING_VERSION = 3.2.11; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "$(inherited)", @@ -869,7 +869,7 @@ "$(PROJECT_DIR)/baidu", "$(PROJECT_DIR)/Runner/baidu", ); - MARKETING_VERSION = 3.2.10; + MARKETING_VERSION = 3.2.11; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "$(inherited)", @@ -962,7 +962,7 @@ "$(PROJECT_DIR)/baidu", "$(PROJECT_DIR)/Runner/baidu", ); - MARKETING_VERSION = 3.2.10; + MARKETING_VERSION = 3.2.11; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "$(inherited)", diff --git a/lib/login/login_store_select.dart b/lib/login/login_store_select.dart new file mode 100644 index 00000000..a16a33ca --- /dev/null +++ b/lib/login/login_store_select.dart @@ -0,0 +1,174 @@ +import 'package:dio/dio.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:huixiang/utils/font_weight.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:huixiang/view_widget/my_appbar.dart'; + +import '../generated/l10n.dart'; +import '../retrofit/data/base_data.dart'; +import '../retrofit/data/channels_list.dart'; +import '../retrofit/retrofit_api.dart'; +import '../utils/flutter_utils.dart'; + +class LoginStoreSelect extends StatefulWidget { + + @override + State createState() { + return _LoginStoreSelect(); + } +} + +class _LoginStoreSelect extends State { + ApiService apiService; + ChannelsList channelsList; + int channelIndex = 0; + + @override + void initState() { + super.initState(); + EasyLoading.show(status: S.current.zhengzaijiazai); + queryChannels(); + } + + queryChannels() async{ + apiService = ApiService(Dio(), context: context); + BaseData baseData = await apiService.appChannels().catchError((error) { + print(error.message); + SmartDialog.showToast(AppUtils.dioErrorTypeToString(error.type), + alignment: Alignment.center); + }); + if (baseData != null && baseData.isSuccess) { + channelsList = baseData.data; + setState((){}); + EasyLoading.dismiss(); + } else { + if (baseData?.msg != null) + SmartDialog.showToast(baseData.msg, alignment: Alignment.center); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: MyAppBar( + title: "渠道来源", + titleColor: Colors.black, + titleSize: 18.sp, + background: Color(0xFFFFFFFF), + leadingColor: Colors.black, + ), + body: Container( + color: Color(0xFFFFFFFF), + height: double.infinity, + child: Column( + children: [ + Padding(padding:EdgeInsets.only(top:18.h,bottom:20.h,left:18.w), + child: Row( + children: [ + Image.asset( + "assets/image/login_channel.webp", + fit: BoxFit.fill, + width:24, + height:24, + ), + SizedBox(width:12.w), + Text( + "Hi,您是通过什么途径了解到这款APP的?", + style: TextStyle( + fontWeight: MyFontWeight.bold, + fontSize: 15.sp, + color: Color(0xFF181818), + ), + ), + ], + )), + Expanded(child: ListView.builder( + physics: BouncingScrollPhysics(), + shrinkWrap: true, + itemBuilder: (context, position) { + return GestureDetector( + onTap: () { + setState(() { + channelIndex = position; + }); + }, + child: channelItem(position), + ); + }, + itemCount:(channelsList != null && (channelsList?.channels?.length ?? 0) > 0) ? channelsList.channels.length : 0, + )), + if(channelsList != null && (channelsList.channels.length) > 0) + GestureDetector( + onTap: () { + Navigator.pop(context,channelsList.channels[channelIndex]); + }, + child: Container( + width: double.infinity, + alignment: Alignment.center, + decoration: BoxDecoration( + color: Color(0xFF32A060), + borderRadius: BorderRadius.circular(27), + ), + margin: EdgeInsets.only( + left: 16, right: 16, bottom: 21), + padding: EdgeInsets.symmetric(vertical:18.h), + child: Text( + S.of(context).queren, + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.medium, + color: Colors.white, + ), + ), + ), + ) + ], + ), + ), + ); + } + + Widget channelItem(index){ + return Container( + height:52 , + margin: EdgeInsets.only(bottom: 12,left: 14,right: 14), + child: Stack( + alignment: Alignment.bottomRight, + children: [ + Container( + height: 52.h, + width: double.infinity, + decoration: BoxDecoration( + borderRadius: new BorderRadius.circular(6), + border: Border.all( + color: channelIndex == index ? Color(0xFF32A060) : Color(0xFFF7F7F7), + width: channelIndex == index ? 1 : 0, + ), + color:channelIndex == index ? Color(0xFFF0FAF4) : Color(0xFFF7F7F7), + ), + alignment: Alignment.centerLeft, + padding: EdgeInsets.only(left: 12,), + child: Text( + channelsList.channels[index], + style: TextStyle( + fontWeight: MyFontWeight.bold, + fontSize: 14.sp, + color: channelIndex == index ? Color(0xFF32A060) : Colors.black, + ), + ), + ), + if (index == channelIndex) + Image.asset( + "assets/image/recharge.webp", + width: 20, + height: 20, + fit: BoxFit.fill, + ), + ], + ), + ); + } +} diff --git a/lib/login/new_login_page.dart b/lib/login/new_login_page.dart index 163a8296..ad4eef5b 100644 --- a/lib/login/new_login_page.dart +++ b/lib/login/new_login_page.dart @@ -53,6 +53,7 @@ class _NewLoginPage extends State { Timer _timer; bool isShowLogin = false; String area = "+86"; + String channelName; @override void initState() { @@ -211,7 +212,8 @@ class _NewLoginPage extends State { "capcha": code, "mobile": mobile, "invite": invite, - "areaCode": area + "areaCode": area, + "regChannel":channelName ?? "" }; EasyLoading.show(status: S.of(context).zhengzaijiazai); BaseData value = await apiService.memberLogin(param).catchError((error) { @@ -284,7 +286,7 @@ class _NewLoginPage extends State { @override Widget build(BuildContext context) { return Scaffold( - resizeToAvoidBottomInset:false, + resizeToAvoidBottomInset: false, body: GestureDetector( behavior: HitTestBehavior.translucent, onTap: () { @@ -417,7 +419,7 @@ class _NewLoginPage extends State { Container( height: 30.h, width: MediaQuery.of(context).size.width - 100.w, - margin: EdgeInsets.only(bottom: Platform.isIOS ? 10.h : 5.h), + margin: EdgeInsets.only(bottom:10.h), child: TextField( style: TextStyle( height: 1.h, @@ -592,7 +594,47 @@ class _NewLoginPage extends State { ), ), SizedBox( - height: 51.h, + height: 30.h, + ), + GestureDetector( + onTap: (){ + Navigator.of(context).pushNamed('/router/login_store_select').then((value) => { + setState(() { + if (value != null) channelName = value; + }) + }); + }, + child:Container( + padding: EdgeInsets.only(left:12.w,right:12.w,top:16.h,bottom:16.h), + margin: EdgeInsets.only(bottom:30.h), + decoration: BoxDecoration( + color: Color(0xFFF1F1F1), + borderRadius: BorderRadius.circular(4), + ), + child: Row( + children: [ + Image.asset( + "assets/image/login_store.webp", + fit: BoxFit.fill, + width:14, + height:14, + ), + SizedBox(width: 3.w,), + Expanded(child:Text( + channelName ?? "邀请来源(选填)", + style: TextStyle( + fontWeight: MyFontWeight.regular, + fontSize: 12.sp, + color: Color(0xFF868686), + ), + )), + Icon( + Icons.arrow_forward_ios, + size: 16, + ), + ], + ), + ), ), Row( mainAxisAlignment: MainAxisAlignment.start, diff --git a/lib/main.dart b/lib/main.dart index 7412841c..74f6fd54 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -95,6 +95,7 @@ import 'home/help_farmers/help_farmers_page.dart'; import 'home/home_view/activity_list.dart'; import 'home/welfare_exchange.dart'; import 'home/welfare_page.dart'; +import 'login/login_store_select.dart'; import 'login/new_login_page.dart'; import 'login/phone_address_page.dart'; import 'main_page.dart'; @@ -429,4 +430,6 @@ Map routers = { SystemNotice(), '/router/store_html': (context, {arguments}) => StoreHtml(arguments:arguments), + '/router/login_store_select': (context, {arguments}) => + LoginStoreSelect(), }; diff --git a/lib/mine/personal_page.dart b/lib/mine/personal_page.dart index 4d07ff91..da9760f0 100644 --- a/lib/mine/personal_page.dart +++ b/lib/mine/personal_page.dart @@ -85,6 +85,7 @@ class _PersonalPage extends State with WidgetsBindingObserver { BaseData baseData = await apiService.memberDetail(id).catchError((error) { refreshController.refreshFailed(); + debugPrint(error); }); if (baseData != null && baseData.isSuccess) { setState(() { @@ -126,6 +127,7 @@ class _PersonalPage extends State with WidgetsBindingObserver { "pageSize": 10, "searchKey": searchKey ?? "" }).catchError((error) { + debugPrint(error); if (searchKey == null) { refreshController.refreshFailed(); refreshController.loadFailed(); diff --git a/lib/mine/recharge_page.dart b/lib/mine/recharge_page.dart index 50219753..6ec69bfb 100644 --- a/lib/mine/recharge_page.dart +++ b/lib/mine/recharge_page.dart @@ -10,6 +10,7 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:fluwx/fluwx.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; +import 'package:huixiang/retrofit/data/rechargeActLists.dart'; import 'package:huixiang/retrofit/data/recharge_list.dart'; import 'package:huixiang/retrofit/data/user_info.dart'; import 'package:huixiang/retrofit/data/vip_benefit_list.dart'; @@ -42,12 +43,14 @@ class _RechargePage extends State { List vipBenefitList = []; Color color = Colors.black; double discount = 100; - List rechargeA; + // List rechargeA; int selectIndex = 0; UserInfo userInfo; String mBalance = "0"; dynamic payListen; - + RechargeActLists rechargeActLists; + int selectStoreIndex = 0; + String recommendName; @override void initState() { @@ -58,7 +61,7 @@ class _RechargePage extends State { context: context, token: value.getString("token"), pay: true); queryBenefitList(); queryRuleDetails(); - queryRechargeList(); + queryRechargeActList(); queryUserBalance(); }); payListen = weChatResponseEventHandler.listen((event) async { @@ -67,8 +70,7 @@ class _RechargePage extends State { queryUserBalance(); Navigator.of(context).pop(); SmartDialog.showToast("充值成功", alignment: Alignment.center); - } - else{ + } else { SmartDialog.showToast("充值失败", alignment: Alignment.center); return; } @@ -78,8 +80,7 @@ class _RechargePage extends State { @override void dispose() { super.dispose(); - if(payListen!=null) - payListen.cancel(); + if (payListen != null) payListen.cancel(); } ///会员权益列表 @@ -125,7 +126,7 @@ class _RechargePage extends State { } ///充值列表 - queryRechargeList() async { + queryRechargeActList() async { if (apiService == null) { SharedPreferences value = await SharedPreferences.getInstance(); apiService = ApiService( @@ -134,11 +135,11 @@ class _RechargePage extends State { token: value.getString("token"), ); } - BaseData> baseData = - await apiService.rechargeAct().catchError((onError) {}); + BaseData baseData = + await apiService.rechargeActList().catchError((onError) {}); if (baseData != null && baseData.isSuccess) { setState(() { - rechargeA = baseData.data; + rechargeActLists = baseData.data; }); } EasyLoading.dismiss(); @@ -215,7 +216,8 @@ class _RechargePage extends State { fontSize: 15.sp, color: Color(0xFF181818), fontFamily: 'JDZhengHT', - fontWeight: MyFontWeight.semi_bold), + fontWeight: + MyFontWeight.semi_bold), )), Text.rich( TextSpan(children: [ @@ -269,11 +271,10 @@ class _RechargePage extends State { )), Container( width: double.infinity, - margin: EdgeInsets.only( - bottom: 22.h, left: 16, right: 16), + margin: EdgeInsets.only(left: 16, right: 16), padding: EdgeInsets.only( top: 20.h, - bottom: 20.h, + bottom: 24.h, ), // decoration: BoxDecoration( // color: Colors.white, @@ -327,7 +328,7 @@ class _RechargePage extends State { ], ), ), - SizedBox(height:10.h), + SizedBox(height: 10.h), GestureDetector( behavior: HitTestBehavior.opaque, onTap: () { @@ -337,9 +338,9 @@ class _RechargePage extends State { }, child: Row( mainAxisAlignment: - MainAxisAlignment.start, + MainAxisAlignment.start, crossAxisAlignment: - CrossAxisAlignment.start, + CrossAxisAlignment.start, children: [ Image.asset( "assets/image/icon_alipay.webp"), @@ -363,6 +364,48 @@ class _RechargePage extends State { ], ), ), + if((rechargeActLists?.isOpen ?? false) == true) + GestureDetector( + onTap: () { + showRecommendStore(); + }, + child: Container( + padding: EdgeInsets.only( + left: 14.w, + right: 16.w, + top: 14.h, + bottom: 14.h), + margin: EdgeInsets.only( + bottom: 22.h, left: 14.w, right: 14.w), + decoration: BoxDecoration( + color: Color(0xFFFAFAFA), + borderRadius: BorderRadius.circular(4), + ), + child: Row( + children: [ + Image.asset( + "assets/image/recharge_z.webp", + width: 16.w, + height: 17.h, + fit: BoxFit.fill, + ), + SizedBox(width: 8.w), + Expanded( + child: Text( + recommendName ??"为喜爱门店打call!(可选)", + style: TextStyle( + fontWeight: MyFontWeight.regular, + fontSize: 12.sp, + color: (recommendName != null) ?Color(0xFF32A060):Color(0xFF868686), + ), + )), + Icon( + Icons.arrow_forward_ios, + size: 16, + ), + ], + )), + ), Align( alignment: Alignment.bottomCenter, child: GestureDetector( @@ -508,7 +551,7 @@ class _RechargePage extends State { Widget rechargeList() { return ListView.builder( padding: EdgeInsets.zero, - itemCount: rechargeA == null ? 0 : rechargeA.length, + itemCount: (rechargeActLists != null && (rechargeActLists?.preferentialList?.length ?? 0) > 0) ? rechargeActLists.preferentialList.length : 0, scrollDirection: Axis.vertical, shrinkWrap: true, physics: BouncingScrollPhysics(), @@ -519,22 +562,24 @@ class _RechargePage extends State { selectIndex = position; }); }, - child: rechargeItem(rechargeA[position], position)); + child: rechargeItem(rechargeActLists.preferentialList[position], position)); }, ); } - Widget rechargeItem(RechargeList rechargeA, index) { + Widget rechargeItem(PreferentialList preferentialList, index) { return Container( width: double.infinity, height: 69.h, decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), border: Border.all( - color: selectIndex == index ? Color(0xFF32A060) :Color(0xFFFAFAFA), - width: selectIndex == index ? 1 :0, + color: + selectIndex == index ? Color(0xFF32A060) : Color(0xFFFAFAFA), + width: selectIndex == index ? 1 : 0, ), - color: selectIndex == index ? Color(0XFFF0FAF4) :Color(0xFFFAFAFA)), + color: + selectIndex == index ? Color(0XFFF0FAF4) : Color(0xFFFAFAFA)), margin: EdgeInsets.only(bottom: 14.w), padding: EdgeInsets.only(left: 16), child: Flex( @@ -549,16 +594,20 @@ class _RechargePage extends State { text: "储值 ", style: TextStyle( fontSize: 12.sp, - color:selectIndex == index ? Color(0xFF4D4D4D):Color(0xFF868686), + color: selectIndex == index + ? Color(0xFF4D4D4D) + : Color(0xFF868686), fontWeight: MyFontWeight.regular), ), TextSpan( text: - "${AppUtils.calculateDouble(double.tryParse(rechargeA.rechargeMoney) ?? 0)}元", + "${AppUtils.calculateDouble(double.tryParse(preferentialList.rechargeMoney) ?? 0)}元", style: TextStyle( fontSize: 18.sp, fontFamily: 'JDZhengHT', - color: selectIndex == index ? Color(0xFF353535) : Color(0xFF868686), + color: selectIndex == index + ? Color(0xFF353535) + : Color(0xFF868686), fontWeight: MyFontWeight.semi_bold), ), ]), @@ -567,74 +616,81 @@ class _RechargePage extends State { Container( width: 1.w, height: 37.h, - color: selectIndex == index ? Color(0xFF32A060):Color(0xFF979797), + color: + selectIndex == index ? Color(0xFF32A060) : Color(0xFF979797), margin: EdgeInsets.only(right: 16.w, left: 12), ), - Expanded( - flex: 2, - child:Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text.rich( - TextSpan(children: [ - TextSpan( - text: "实际到账 ", - style: TextStyle( - fontSize: 12.sp, - color: selectIndex == index ? Color(0xFF353535) : Color(0xFF868686), - fontWeight: MyFontWeight.regular), + Expanded( + flex: 2, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text.rich( + TextSpan(children: [ + TextSpan( + text: "实际到账 ", + style: TextStyle( + fontSize: 12.sp, + color: selectIndex == index + ? Color(0xFF353535) + : Color(0xFF868686), + fontWeight: MyFontWeight.regular), + ), + TextSpan( + text: + "${AppUtils.calculateDouble((double.tryParse(preferentialList.rechargeMoney) ?? 0) + (double.tryParse(preferentialList.giftdMoney) ?? 0) + ((double.tryParse(preferentialList.rechargeMoney) ?? 0) - ((double.tryParse(preferentialList.rechargeMoney) ?? 0) * (discount / 100))))}元", + style: TextStyle( + fontSize: 18.sp, + fontFamily: 'JDZhengHT', + color: selectIndex == index + ? Color(0xFF353535) + : Color(0xFF868686), + fontWeight: MyFontWeight.semi_bold), + ), + ]), ), - TextSpan( - text: - "${AppUtils.calculateDouble((double.tryParse(rechargeA.rechargeMoney) ?? 0) + (double.tryParse(rechargeA.giftdMoney) ?? 0) + ((double.tryParse(rechargeA.rechargeMoney) ?? 0) - ((double.tryParse(rechargeA.rechargeMoney) ?? 0) * (discount / 100))))}元", - style: TextStyle( - fontSize: 18.sp, - fontFamily: 'JDZhengHT', - color: selectIndex == index ? Color(0xFF353535) : Color(0xFF868686), - fontWeight: MyFontWeight.semi_bold), + SizedBox( + height: 4.h, ), - ]), - ), - SizedBox( - height: 4.h, - ), - GestureDetector( - onTap: (){ - setState(() { - if(selectIndex == index) - showRecharge(index); - }); - }, - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - "充值说明", - style: TextStyle( - color: selectIndex == index ?Color(0xFF4D4D4D) : Color(0xFF868686), - fontSize: 12.sp, - fontWeight: MyFontWeight.regular, - ), - ), - Icon( - Icons.chevron_right, - size: 20, - color: selectIndex == index ? Color(0xFF353535) : Color(0xFF868686), - ), - ], - ) - ), - ], - )) + GestureDetector( + onTap: () { + setState(() { + if (selectIndex == index) showRecharge(index); + }); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + "充值说明", + style: TextStyle( + color: selectIndex == index + ? Color(0xFF4D4D4D) + : Color(0xFF868686), + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + ), + ), + Icon( + Icons.chevron_right, + size: 20, + color: selectIndex == index + ? Color(0xFF353535) + : Color(0xFF868686), + ), + ], + )), + ], + )) ], )); } Widget checkView(var index) { return Container( - padding: EdgeInsets.only(right: 16.w,left: 46.w), + padding: EdgeInsets.only(right: 16.w, left: 46.w), alignment: Alignment.center, child: Image.asset( checkIndex != index @@ -648,15 +704,153 @@ class _RechargePage extends State { ///充值说明底部弹窗 showRecharge(index) { - showModalBottomSheet( - context: context, - backgroundColor: Colors.transparent, - builder: (context) { - return RechargeWidget(rechargeA[index]); - }); - } + showModalBottomSheet( + context: context, + backgroundColor: Colors.transparent, + builder: (context) { + return RechargeWidget(rechargeActLists.preferentialList[index]); + }); + } + + ///选择推荐门店 + showRecommendStore() { + showModalBottomSheet( + context: context, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return StatefulBuilder(builder: ( + context, + state, + ) { + return Container( + height: 321.h, + decoration: BoxDecoration( + color: Color(0xFFFAFAFA), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(6), + topRight: Radius.circular(6), + ), + ), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Container( + alignment: Alignment.center, + margin: EdgeInsets.symmetric(vertical: 12), + child: Text( + "选择推荐门店", + style: TextStyle( + fontWeight: MyFontWeight.bold, + fontSize: 15.sp, + color: Color(0xFF353535), + ), + ), + )), + GestureDetector( + onTap: () { + setState(() { + Navigator.of(context).pop(); + }); + }, + child: Icon( + Icons.clear, + color: Colors.black, + size: 18, + ), + ), + SizedBox(width: 14), + ], + ), + Container( + height: 1, + color: Color(0xFFF2F2F2), + margin: EdgeInsets.only(bottom: 13.h), + ), + Expanded( + child: ListView.builder( + physics: BouncingScrollPhysics(), + itemBuilder: (context, position) { + return GestureDetector( + onTap: () { + state(() { + selectStoreIndex = position; + }); + }, + child: recommendStoreItem(position), + ); + }, + itemCount: rechargeActLists.channels.length ?? 0, + )), + GestureDetector( + onTap: () { + setState(() { + recommendName = + rechargeActLists.channels[selectStoreIndex]; + Navigator.of(context).pop(); + }); + }, + child: Container( + width: double.infinity, + height: 40.h, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100), + color: Color(0xFF32A060), + ), + alignment: Alignment.center, + margin: EdgeInsets.only( + top: 14.h, bottom: 30.h, left: 16.w, right: 16.w), + child: Text( + S.of(context).queding, + style: TextStyle( + fontWeight: MyFontWeight.bold, + fontSize: 16.sp, + color: Color(0xFFFFFFFF), + ), + ), + ), + ), + ], + ), + ); + }); + },); + } + Widget recommendStoreItem(index) { + return Container( + height: 52, + margin: EdgeInsets.only(bottom: 12, left: 14, right: 14), + width: double.infinity, + decoration: BoxDecoration( + borderRadius: new BorderRadius.circular(6), + border: Border.all( + color: + selectStoreIndex == index ? Color(0xFF32A060) : Color(0xFFF7F7F7), + width: selectStoreIndex == index ? 1 : 0, + ), + color: + selectStoreIndex == index ? Color(0xFFF0FAF4) : Color(0xFFF7F7F7), + ), + alignment: Alignment.centerLeft, + padding: EdgeInsets.only( + left: 12, + ), + child: Text( + rechargeActLists?.channels[index] ?? "", + style: TextStyle( + fontWeight: MyFontWeight.bold, + fontSize: 14.sp, + color: selectStoreIndex == index ? Color(0xFF32A060) : Colors.black, + ), + ), + ); + } + ///充值 recharge() async { // String money = controller.text; // if (money == null || money == "") { @@ -673,11 +867,12 @@ class _RechargePage extends State { // } BaseData baseData = await apiService.recharge({ "amount": 0, - "rechargeActId": rechargeA[selectIndex].id, - "rechargeType": checkIndex + "rechargeActId": rechargeActLists.preferentialList[selectIndex].id, + "rechargeType": checkIndex, + "channel": recommendName, }).catchError((error) {}); if (baseData != null && baseData.isSuccess) { - if(checkIndex==2){ + if (checkIndex == 2) { if (Platform.isAndroid) { if (!(await Min.isInitialize())) { // 小程序的微信支付和app的充值支付使用同一个WXPayEntryActivity回调, @@ -701,22 +896,26 @@ class _RechargePage extends State { timeStamp: int.tryParse(wxPay.timeStamp), sign: wxPay.sign, ); - }else{ - tobias.isAliPayInstalled().then((value) => { // 判断是否安装了支付宝 - if (!value) { - SmartDialog.showToast("请安装支付宝", alignment: Alignment.center) - }else{ - tobias.aliPay(baseData.data["body"]).then((payRes) { - if (payRes['resultStatus'] == 9000 || - payRes['resultStatus'] == '9000') { - SmartDialog.showToast("充值成功", alignment: Alignment.center); - Navigator.of(context).pop(); - } else { - SmartDialog.showToast(payRes['memo'], alignment: Alignment.center); - } - }) - } - }); + } else { + tobias.isAliPayInstalled().then((value) => { + // 判断是否安装了支付宝 + if (!value) + {SmartDialog.showToast("请安装支付宝", alignment: Alignment.center)} + else + { + tobias.aliPay(baseData.data["body"]).then((payRes) { + if (payRes['resultStatus'] == 9000 || + payRes['resultStatus'] == '9000') { + SmartDialog.showToast("充值成功", + alignment: Alignment.center); + Navigator.of(context).pop(); + } else { + SmartDialog.showToast(payRes['memo'], + alignment: Alignment.center); + } + }) + } + }); } } else { SmartDialog.showToast(baseData.msg, alignment: Alignment.center); 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/channels_list.dart b/lib/retrofit/data/channels_list.dart new file mode 100644 index 00000000..bf58e35b --- /dev/null +++ b/lib/retrofit/data/channels_list.dart @@ -0,0 +1,155 @@ +/// channels : ["海峡","回乡","boom"] +/// isOpen : true +/// preferentialList : [{"createTime":"2023-04-21 16:15:42","giftdMoney":"0.00","gitfdCouponId":null,"id":"1506553893994102784","isDeleted":0,"rechargeMoney":"0.01","rechargeType":0,"remark":"

充值说明:
平台充值根据用户在平台的会员等级享有不同的充值权益。
银卡用户享1.1倍充值会员权益,即充值100元账户110元。
金卡用户享1.2倍充值会员权益,即充值100元账户120元。
共创用户享1.3倍充值会员权益,即充值100元账户130元。
平台充值金可在平台上所有品牌和门店使用,包含:农场火锅、海峡姐妹、前进麦味、百年川椒、农场煮意、一心回乡生态农场等。
储值活动不与其他活动同享

","sortValue":1,"tenantCode":"admin"}] + +class ChannelsList { + ChannelsList({ + List channels, + bool isOpen, + List preferentialList,}){ + _channels = channels; + _isOpen = isOpen; + _preferentialList = preferentialList; +} + + ChannelsList.fromJson(dynamic json) { + _channels = json['channels'] != null ? json['channels'].cast() : []; + _isOpen = json['isOpen']; + if (json['preferentialList'] != null) { + _preferentialList = []; + json['preferentialList'].forEach((v) { + _preferentialList.add(PreferentialList.fromJson(v)); + }); + } + } + List _channels; + bool _isOpen; + List _preferentialList; +ChannelsList copyWith({ List channels, + bool isOpen, + List preferentialList, +}) => ChannelsList( channels: channels ?? _channels, + isOpen: isOpen ?? _isOpen, + preferentialList: preferentialList ?? _preferentialList, +); + List get channels => _channels; + bool get isOpen => _isOpen; + List get preferentialList => _preferentialList; + + Map toJson() { + final map = {}; + map['channels'] = _channels; + map['isOpen'] = _isOpen; + if (_preferentialList != null) { + map['preferentialList'] = _preferentialList.map((v) => v.toJson()).toList(); + } + return map; + } + +} + +/// createTime : "2023-04-21 16:15:42" +/// giftdMoney : "0.00" +/// gitfdCouponId : null +/// id : "1506553893994102784" +/// isDeleted : 0 +/// rechargeMoney : "0.01" +/// rechargeType : 0 +/// remark : "

充值说明:
平台充值根据用户在平台的会员等级享有不同的充值权益。
银卡用户享1.1倍充值会员权益,即充值100元账户110元。
金卡用户享1.2倍充值会员权益,即充值100元账户120元。
共创用户享1.3倍充值会员权益,即充值100元账户130元。
平台充值金可在平台上所有品牌和门店使用,包含:农场火锅、海峡姐妹、前进麦味、百年川椒、农场煮意、一心回乡生态农场等。
储值活动不与其他活动同享

" +/// sortValue : 1 +/// tenantCode : "admin" + +class PreferentialList { + PreferentialList({ + String createTime, + String giftdMoney, + dynamic gitfdCouponId, + String id, + num isDeleted, + String rechargeMoney, + num rechargeType, + String remark, + num sortValue, + String tenantCode,}){ + _createTime = createTime; + _giftdMoney = giftdMoney; + _gitfdCouponId = gitfdCouponId; + _id = id; + _isDeleted = isDeleted; + _rechargeMoney = rechargeMoney; + _rechargeType = rechargeType; + _remark = remark; + _sortValue = sortValue; + _tenantCode = tenantCode; +} + + PreferentialList.fromJson(dynamic json) { + _createTime = json['createTime']; + _giftdMoney = json['giftdMoney']; + _gitfdCouponId = json['gitfdCouponId']; + _id = json['id']; + _isDeleted = json['isDeleted']; + _rechargeMoney = json['rechargeMoney']; + _rechargeType = json['rechargeType']; + _remark = json['remark']; + _sortValue = json['sortValue']; + _tenantCode = json['tenantCode']; + } + String _createTime; + String _giftdMoney; + dynamic _gitfdCouponId; + String _id; + num _isDeleted; + String _rechargeMoney; + num _rechargeType; + String _remark; + num _sortValue; + String _tenantCode; +PreferentialList copyWith({ String createTime, + String giftdMoney, + dynamic gitfdCouponId, + String id, + num isDeleted, + String rechargeMoney, + num rechargeType, + String remark, + num sortValue, + String tenantCode, +}) => PreferentialList( createTime: createTime ?? _createTime, + giftdMoney: giftdMoney ?? _giftdMoney, + gitfdCouponId: gitfdCouponId ?? _gitfdCouponId, + id: id ?? _id, + isDeleted: isDeleted ?? _isDeleted, + rechargeMoney: rechargeMoney ?? _rechargeMoney, + rechargeType: rechargeType ?? _rechargeType, + remark: remark ?? _remark, + sortValue: sortValue ?? _sortValue, + tenantCode: tenantCode ?? _tenantCode, +); + String get createTime => _createTime; + String get giftdMoney => _giftdMoney; + dynamic get gitfdCouponId => _gitfdCouponId; + String get id => _id; + num get isDeleted => _isDeleted; + String get rechargeMoney => _rechargeMoney; + num get rechargeType => _rechargeType; + String get remark => _remark; + num get sortValue => _sortValue; + String get tenantCode => _tenantCode; + + Map toJson() { + final map = {}; + map['createTime'] = _createTime; + map['giftdMoney'] = _giftdMoney; + map['gitfdCouponId'] = _gitfdCouponId; + map['id'] = _id; + map['isDeleted'] = _isDeleted; + map['rechargeMoney'] = _rechargeMoney; + map['rechargeType'] = _rechargeType; + map['remark'] = _remark; + map['sortValue'] = _sortValue; + map['tenantCode'] = _tenantCode; + return map; + } + +} \ No newline at end of file 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/member_Infor.dart b/lib/retrofit/data/member_Infor.dart index c9daf168..130ea3f2 100644 --- a/lib/retrofit/data/member_Infor.dart +++ b/lib/retrofit/data/member_Infor.dart @@ -31,10 +31,10 @@ class MemberInfor { int age, String signature, String background, - int follow, - int fans, - int trendTotal, - int gainLikeTotal,}){ + String follow, + String fans, + String trendTotal, + String gainLikeTotal,}){ _id = id; _nickname = nickname; _headimg = headimg; @@ -86,10 +86,10 @@ class MemberInfor { int _age; String _signature; String _background; - int _follow; - int _fans; - int _trendTotal; - int _gainLikeTotal; + String _follow; + String _fans; + String _trendTotal; + String _gainLikeTotal; String get id => _id; String get nickname => _nickname; @@ -104,10 +104,10 @@ class MemberInfor { int get age => _age; String get signature => _signature; String get background => _background; - int get follow => _follow; - int get fans => _fans; - int get trendTotal => _trendTotal; - int get gainLikeTotal => _gainLikeTotal; + String get follow => _follow; + String get fans => _fans; + String get trendTotal => _trendTotal; + String get gainLikeTotal => _gainLikeTotal; Map toJson() { final map = {}; diff --git a/lib/retrofit/data/miNiDetail.dart b/lib/retrofit/data/miNiDetail.dart index 6f5fb06e..8b116c3e 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" @@ -887,8 +946,8 @@ class StoreDTOBean { String storeName; String nickName; String logo; - int productCount; - int soldNum; + dynamic productCount; + dynamic soldNum; static StoreDTOBean fromJson(Map map) { if (map == null) return null; @@ -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 e8b83162..c2510ea3 100644 --- a/lib/retrofit/data/placeOrderFirst.dart +++ b/lib/retrofit/data/placeOrderFirst.dart @@ -137,6 +137,6 @@ class PromotionInfoDTOBean { "couponId": couponId, "promotionId": promotionId, "useVipPrice":useVipPrice, - "useBenefit":useBenefit + "useBenefit": useBenefit, }; } diff --git a/lib/retrofit/data/rechargeActLists.dart b/lib/retrofit/data/rechargeActLists.dart new file mode 100644 index 00000000..4ad31b30 --- /dev/null +++ b/lib/retrofit/data/rechargeActLists.dart @@ -0,0 +1,155 @@ +/// preferentialList : [{"id":"1506553893994102784","rechargeMoney":"100.00","giftdMoney":"0.00","gitfdCouponId":null,"tenantCode":"admin","createTime":"2022-11-11 10:10:31","isDeleted":0,"rechargeType":0,"remark":"

充值说明:
平台充值根据用户在平台的会员等级享有不同的充值权益。
银卡用户享1.1倍充值会员权益,即充值100元账户110元。
金卡用户享1.2倍充值会员权益,即充值100元账户120元。
共创用户享1.3倍充值会员权益,即充值100元账户130元。
平台充值金可在平台上所有品牌和门店使用,包含:农场火锅、海峡姐妹、前进麦味、百年川椒、农场煮意、一心回乡生态农场等。
储值活动不与其他活动同享

","sortValue":1},{"id":"1506553858271215616","rechargeMoney":"300.00","giftdMoney":"0.00","gitfdCouponId":null,"tenantCode":"admin","createTime":"2022-11-21 19:56:39","isDeleted":0,"rechargeType":0,"remark":"

平台充值根据用户在平台的会员等级享有不同的充值权益。
银卡用户享1.1倍充值会员权益,即充值100元账户110元。
金卡用户享1.2倍充值会员权益,即充值100元账户120元。
共创用户享1.3倍充值会员权益,即充值100元账户130元。
平台充值金可在平台上所有品牌和门店使用,包含:农场火锅、海峡姐妹、前进麦味、百年川椒、农场煮意、一心回乡生态农场等。

","sortValue":2},{"id":"1506553832157478912","rechargeMoney":"500.00","giftdMoney":"0.00","gitfdCouponId":null,"tenantCode":"admin","createTime":"2022-11-21 19:56:48","isDeleted":0,"rechargeType":0,"remark":"

平台充值根据用户在平台的会员等级享有不同的充值权益。
银卡用户享1.1倍充值会员权益,即充值100元账户110元。
金卡用户享1.2倍充值会员权益,即充值100元账户120元。
共创用户享1.3倍充值会员权益,即充值100元账户130元。
平台充值金可在平台上所有品牌和门店使用,包含:农场火锅、海峡姐妹、前进麦味、百年川椒、农场煮意、一心回乡生态农场等。

","sortValue":3},{"id":"1506553759084314624","rechargeMoney":"800.00","giftdMoney":"0.00","gitfdCouponId":null,"tenantCode":"admin","createTime":"2022-06-10 11:14:39","isDeleted":0,"rechargeType":0,"remark":"

平台充值根据用户在平台的会员等级享有不同的充值权益。
银卡用户享1.1倍充值会员权益,即充值100元账户110元。
金卡用户享1.2倍充值会员权益,即充值100元账户120元。
共创用户享1.3倍充值会员权益,即充值100元账户130元。
平台充值金可在平台上所有品牌和门店使用,包含:农场火锅、海峡姐妹、前进麦味、百年川椒、农场煮意、一心回乡生态农场等。

","sortValue":4},{"id":"1506553705988620288","rechargeMoney":"1000.00","giftdMoney":"0.00","gitfdCouponId":null,"tenantCode":"admin","createTime":"2022-11-21 19:56:55","isDeleted":0,"rechargeType":0,"remark":"

充值说明:
平台充值根据用户在平台的会员等级享有不同的充值权益。
银卡用户享1.1倍充值会员权益,即充值100元账户110元。
金卡用户享1.2倍充值会员权益,即充值100元账户120元。
共创用户享1.3倍充值会员权益,即充值100元账户130元。
平台充值金可在平台上所有品牌和门店使用,包含:农场火锅、海峡姐妹、前进麦味、百年川椒、农场煮意、一心回乡生态农场等。

","sortValue":5},{"id":"1506553668529291264","rechargeMoney":"1500.00","giftdMoney":"0.00","gitfdCouponId":null,"tenantCode":"admin","createTime":"2022-06-10 11:14:52","isDeleted":0,"rechargeType":0,"remark":"

充值说明:
平台充值根据用户在平台的会员等级享有不同的充值权益。
银卡用户享1.1倍充值会员权益,即充值100元账户110元。
金卡用户享1.2倍充值会员权益,即充值100元账户120元。
共创用户享1.3倍充值会员权益,即充值100元账户130元。
平台充值金可在平台上所有品牌和门店使用,包含:农场火锅、海峡姐妹、前进麦味、百年川椒、农场煮意、一心回乡生态农场等。

","sortValue":6}] +/// channels : ["海峡","回乡","boom"] +/// isOpen : false + +class RechargeActLists { + RechargeActLists({ + List preferentialList, + List channels, + bool isOpen,}){ + _preferentialList = preferentialList; + _channels = channels; + _isOpen = isOpen; +} + + RechargeActLists.fromJson(dynamic json) { + if (json['preferentialList'] != null) { + _preferentialList = []; + json['preferentialList'].forEach((v) { + _preferentialList.add(PreferentialList.fromJson(v)); + }); + } + _channels = json['channels'] != null ? json['channels'].cast() : []; + _isOpen = json['isOpen']; + } + List _preferentialList; + List _channels; + bool _isOpen; +RechargeActLists copyWith({ List preferentialList, + List channels, + bool isOpen, +}) => RechargeActLists( preferentialList: preferentialList ?? _preferentialList, + channels: channels ?? _channels, + isOpen: isOpen ?? _isOpen, +); + List get preferentialList => _preferentialList; + List get channels => _channels; + bool get isOpen => _isOpen; + + Map toJson() { + final map = {}; + if (_preferentialList != null) { + map['preferentialList'] = _preferentialList.map((v) => v.toJson()).toList(); + } + map['channels'] = _channels; + map['isOpen'] = _isOpen; + return map; + } + +} + +/// id : "1506553893994102784" +/// rechargeMoney : "100.00" +/// giftdMoney : "0.00" +/// gitfdCouponId : null +/// tenantCode : "admin" +/// createTime : "2022-11-11 10:10:31" +/// isDeleted : 0 +/// rechargeType : 0 +/// remark : "

充值说明:
平台充值根据用户在平台的会员等级享有不同的充值权益。
银卡用户享1.1倍充值会员权益,即充值100元账户110元。
金卡用户享1.2倍充值会员权益,即充值100元账户120元。
共创用户享1.3倍充值会员权益,即充值100元账户130元。
平台充值金可在平台上所有品牌和门店使用,包含:农场火锅、海峡姐妹、前进麦味、百年川椒、农场煮意、一心回乡生态农场等。
储值活动不与其他活动同享

" +/// sortValue : 1 + +class PreferentialList { + PreferentialList({ + String id, + String rechargeMoney, + String giftdMoney, + dynamic gitfdCouponId, + String tenantCode, + String createTime, + num isDeleted, + num rechargeType, + String remark, + num sortValue,}){ + _id = id; + _rechargeMoney = rechargeMoney; + _giftdMoney = giftdMoney; + _gitfdCouponId = gitfdCouponId; + _tenantCode = tenantCode; + _createTime = createTime; + _isDeleted = isDeleted; + _rechargeType = rechargeType; + _remark = remark; + _sortValue = sortValue; +} + + PreferentialList.fromJson(dynamic json) { + _id = json['id']; + _rechargeMoney = json['rechargeMoney']; + _giftdMoney = json['giftdMoney']; + _gitfdCouponId = json['gitfdCouponId']; + _tenantCode = json['tenantCode']; + _createTime = json['createTime']; + _isDeleted = json['isDeleted']; + _rechargeType = json['rechargeType']; + _remark = json['remark']; + _sortValue = json['sortValue']; + } + String _id; + String _rechargeMoney; + String _giftdMoney; + dynamic _gitfdCouponId; + String _tenantCode; + String _createTime; + num _isDeleted; + num _rechargeType; + String _remark; + num _sortValue; +PreferentialList copyWith({ String id, + String rechargeMoney, + String giftdMoney, + dynamic gitfdCouponId, + String tenantCode, + String createTime, + num isDeleted, + num rechargeType, + String remark, + num sortValue, +}) => PreferentialList( id: id ?? _id, + rechargeMoney: rechargeMoney ?? _rechargeMoney, + giftdMoney: giftdMoney ?? _giftdMoney, + gitfdCouponId: gitfdCouponId ?? _gitfdCouponId, + tenantCode: tenantCode ?? _tenantCode, + createTime: createTime ?? _createTime, + isDeleted: isDeleted ?? _isDeleted, + rechargeType: rechargeType ?? _rechargeType, + remark: remark ?? _remark, + sortValue: sortValue ?? _sortValue, +); + String get id => _id; + String get rechargeMoney => _rechargeMoney; + String get giftdMoney => _giftdMoney; + dynamic get gitfdCouponId => _gitfdCouponId; + String get tenantCode => _tenantCode; + String get createTime => _createTime; + num get isDeleted => _isDeleted; + num get rechargeType => _rechargeType; + String get remark => _remark; + num get sortValue => _sortValue; + + Map toJson() { + final map = {}; + map['id'] = _id; + map['rechargeMoney'] = _rechargeMoney; + map['giftdMoney'] = _giftdMoney; + map['gitfdCouponId'] = _gitfdCouponId; + map['tenantCode'] = _tenantCode; + map['createTime'] = _createTime; + map['isDeleted'] = _isDeleted; + map['rechargeType'] = _rechargeType; + map['remark'] = _remark; + map['sortValue'] = _sortValue; + return map; + } + +} \ No newline at end of file diff --git a/lib/retrofit/data/settleOrderInfo.dart b/lib/retrofit/data/settleOrderInfo.dart index 678d794e..1176849f 100644 --- a/lib/retrofit/data/settleOrderInfo.dart +++ b/lib/retrofit/data/settleOrderInfo.dart @@ -22,6 +22,8 @@ class SettleOrderInfo { bool isRaise; int selectDiscount; bool useVipPriceSelect = false; + String vipDiscountAmount; + static SettleOrderInfo fromJson(Map map) { if (map == null) return null; @@ -51,6 +53,7 @@ class SettleOrderInfo { settleOrderInfoBean.usePlateMoney = map['usePlateMoney']; settleOrderInfoBean.isRaise = map['isRaise']; settleOrderInfoBean.selectDiscount = map['selectDiscount']; + settleOrderInfoBean.vipDiscountAmount = map['vipDiscountAmount']; return settleOrderInfoBean; } @@ -73,7 +76,8 @@ class SettleOrderInfo { "memberCouponId": memberCouponId, "usePlateMoney":usePlateMoney, "isRaise":isRaise, - "selectDiscount":selectDiscount + "selectDiscount":selectDiscount, + "vipDiscountAmount":vipDiscountAmount }; diff --git a/lib/retrofit/data/social_info.dart b/lib/retrofit/data/social_info.dart index 252dec8a..cffbc3d4 100644 --- a/lib/retrofit/data/social_info.dart +++ b/lib/retrofit/data/social_info.dart @@ -3,9 +3,9 @@ class SocialInfo { SocialInfo({ - int fans, - int follow, - int achievementNumber}){ + dynamic fans, + dynamic follow, + dynamic achievementNumber}){ _fans = fans; _follow = follow; _achievementNumber = achievementNumber; @@ -16,13 +16,13 @@ class SocialInfo { _follow = json['follow']; _achievementNumber = json['achievementNumber']; } - int _fans; - int _follow; - int _achievementNumber; + dynamic _fans; + dynamic _follow; + dynamic _achievementNumber; - int get fans => _fans; - int get follow => _follow; - int get achievementNumber => _achievementNumber; + dynamic get fans => _fans; + dynamic get follow => _follow; + dynamic get achievementNumber => _achievementNumber; set fans(int value) { diff --git a/lib/retrofit/data/user_info.dart b/lib/retrofit/data/user_info.dart index b3015f2b..1c1c03ad 100644 --- a/lib/retrofit/data/user_info.dart +++ b/lib/retrofit/data/user_info.dart @@ -41,8 +41,8 @@ class UserInfo { String raiseExpireTime; bool isBind; String masterId; - int inviteNumber; - int todayInviteNumber; + dynamic inviteNumber; + dynamic todayInviteNumber; String masterCardRankName; MemberRank memberRankVo; String inviteCode; @@ -76,8 +76,8 @@ class UserInfo { ..raiseExpireTime = json['raiseExpireTime'] as String ..isBind = json['isBind'] as bool ..masterId = json['masterId'] as String - ..inviteNumber = json['inviteNumber'] as int - ..todayInviteNumber = json['todayInviteNumber'] as int + ..inviteNumber = json['inviteNumber'] as dynamic + ..todayInviteNumber = json['todayInviteNumber'] as dynamic ..masterCardRankName = json['masterCardRankName'] as String ..inviteCode = json['inviteCode'] as String ..signature = json['signature'] as String diff --git a/lib/retrofit/retrofit_api.dart b/lib/retrofit/retrofit_api.dart index 7b1581b7..f03753ed 100644 --- a/lib/retrofit/retrofit_api.dart +++ b/lib/retrofit/retrofit_api.dart @@ -27,6 +27,7 @@ import 'data/app_update.dart'; import 'data/banner.dart'; import 'data/brand_data.dart'; import 'data/category_select_list.dart'; +import 'data/channels_list.dart'; import 'data/chapter.dart'; import 'data/collect_class_list.dart'; import 'data/coupon_detail.dart'; @@ -47,6 +48,7 @@ import 'data/message.dart'; import 'data/msg_stats.dart'; import 'data/page.dart'; import 'data/rank.dart'; +import 'data/rechargeActLists.dart'; import 'data/recharge_list.dart'; import 'data/second_card_list.dart'; import 'data/sign_info.dart'; @@ -176,6 +178,10 @@ abstract class ApiService { @POST("/auth/platform/memberLogin") Future memberLogin(@Body() Map param); + ///获取APP门店推广渠道 + @GET("/auth/appChannels") + Future> appChannels(); + ///发送验证码 @GET("/auth/sendVerify/{areaCode}/{mobile}") Future sendVerify(@Path("areaCode") String areaCode, @Path("mobile") String mobile); @@ -215,8 +221,8 @@ abstract class ApiService { Future> recharge(@Body() Map param); ///充值活动列表 - @GET("/wallet/rechargeAct") - Future>> rechargeAct(); + @GET("/wallet/rechargeActList") + Future> rechargeActList(); ///领取优惠券 @GET("/coupon/receive?couponId={couponId}") diff --git a/lib/retrofit/retrofit_api.g.dart b/lib/retrofit/retrofit_api.g.dart index 49509dc2..19fb1bdf 100644 --- a/lib/retrofit/retrofit_api.g.dart +++ b/lib/retrofit/retrofit_api.g.dart @@ -98,6 +98,27 @@ class _ApiService implements ApiService { return value; } + @override + Future> appChannels() async { + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/auth/appChannels', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson( + _result.data, + (json) => ChannelsList.fromJson(json), + ); + return value; + } + @override Future> sendVerify(areaCode,mobile) async { ArgumentError.checkNotNull(mobile, 'mobile'); @@ -301,12 +322,12 @@ class _ApiService implements ApiService { } @override - Future>> rechargeAct() async { + Future> rechargeActList() async { const _extra = {}; final queryParameters = {}; final _data = {}; final _result = await _dio.request>( - '/wallet/rechargeAct', + '/wallet/rechargeActList', queryParameters: queryParameters, options: RequestOptions( method: 'GET', @@ -314,12 +335,10 @@ class _ApiService implements ApiService { extra: _extra, baseUrl: baseUrl), data: _data); - final value = BaseData>.fromJson( - _result.data, - (json) => (json as List) - .map( - (i) => RechargeList.fromJson(i as Map)) - .toList()); + final value = BaseData.fromJson( + _result.data, + (json) => RechargeActLists.fromJson(json), + ); return value; } diff --git a/lib/settlement/settlement.dart b/lib/settlement/settlement.dart index 354d86a5..06745f38 100644 --- a/lib/settlement/settlement.dart +++ b/lib/settlement/settlement.dart @@ -88,6 +88,11 @@ class _Settlement extends State { ShoppingCart shopCarGoods; String vipLevelName; bool isVips = false; + SubscribeParam subscribeParam; + String reservationTime; + String subscribeStoresName; + String subTime; + int storesIndex = 0; @override void initState() { @@ -114,6 +119,7 @@ class _Settlement extends State { vipLevelName = widget.arguments["vipLevelName"]; isVips = widget.arguments["isVips"]; + subscribeParam = widget?.arguments["subscribeParam"] ?? null; if (tableId == 0) { placeOrder = true; } @@ -127,16 +133,15 @@ class _Settlement extends State { token: minToken, tenant: tenant, storeId: storeId, - showLoading: false - ); + showLoading: false); queryMemberInfo(); if (promotions != null && promotions != "" && tableId <= 0) { queryOrderInfo( address != null ? address.id : null, selectedBtn, - null, 0, - widget.arguments["pid"] ?? (productId ?? ""), + 0, + widget.arguments["pid"] ?? (productId ?? 0), productSkuId ?? "", actProductId ?? "", actProductSkuId ?? "", @@ -151,7 +156,7 @@ class _Settlement extends State { selectedBtn, widget.arguments["cid"], 0, - productId ?? null, + productId ?? 0, productSkuId ?? "", actProductId ?? "", actProductSkuId ?? "", @@ -164,9 +169,9 @@ class _Settlement extends State { queryOrderInfo( null, selectedBtn, - null, 0, - productId ?? null, + 0, + productId ?? 0, productSkuId ?? "", actProductId ?? "", actProductSkuId ?? "", @@ -277,7 +282,7 @@ class _Settlement extends State { }); if (baseData != null && baseData.isSuccess) { SharedPreferences.getInstance().then( - (value) => { + (value) => { value.setString('minMember', jsonEncode(baseData.data)), }, ); @@ -352,31 +357,31 @@ class _Settlement extends State { 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]; + 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( - 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); @@ -418,9 +423,9 @@ class _Settlement extends State { queryOrderInfo( address.id, selectedBtn, - null, 0, - productId ?? null, + 0, + productId ?? 0, productSkuId ?? "", actProductId ?? "", actProductSkuId ?? "", @@ -509,9 +514,16 @@ 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?.isEnableSubscribe ?? false) == true + ? "预约门店:${((subscribeParam?.stores?.length ?? 0) == 1 ? (subscribeParam.stores[0]) : (subscribeStoresName ?? ""))}" + : ""); placeOrderFirst.numberOfPeople = "$numberOfPeople"; placeOrderFirst.orderSource = 2; placeOrderFirst.orderType = "0"; @@ -534,10 +546,11 @@ class _Settlement extends State { placeOrderFirst.skuItemDTOList = []; placeOrderFirst.source = 1; placeOrderFirst.storeId = storeInfo.id; - placeOrderFirst.subcribeTime = null; + placeOrderFirst.subcribeTime = subTime ?? ""; //预约时间 placeOrderFirst.tableId = "$tableId"; - for(int i = 0;i { }); } } - orderButton = false; + // orderButton = false; if (baseData != null && baseData.isSuccess) { placeOrder = true; this.downOrder = DownOrder.fromJson(baseData.data); @@ -588,7 +601,7 @@ class _Settlement extends State { queryOrderDetails(parentId); setState(() {}); } else { - orderButton = false; + // orderButton = false; SmartDialog.showToast(baseData?.msg, alignment: Alignment.center); } } @@ -645,13 +658,13 @@ class _Settlement extends State { toOrderDetails(placeOrderFirst.id); } else { SmartDialog.show( - clickBgDismissTemp: false, + clickBgDismissTemp: false, widget: SettlementTips( - () { - toOrderDetails(placeOrderFirst.id); - }, - text: "${baseData?.msg}", - )); + () { + toOrderDetails(placeOrderFirst.id); + }, + text: "${baseData?.msg}", + )); } } } @@ -722,7 +735,7 @@ class _Settlement extends State { '/router/order_details', arguments: { "id": orderId, - "jumpState":1, + "jumpState": 1, }, ); // Navigator.of(context).pop(); @@ -777,8 +790,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; }); @@ -787,7 +800,7 @@ class _Settlement extends State { isTake, memberCouponId, orderId, - promotionId ?? (productId ?? ""), + promotionId ?? (productId ?? 0), productSkuId ?? "", actProductId ?? "", actProductSkuId ?? "", @@ -796,8 +809,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, @@ -810,43 +828,46 @@ class _Settlement extends State { // ), ///订单商品 - if(settleOrderInfo != null || minOrderInfo != null) - SettlementOrderCommodity( - selectedBtn, - settleOrderInfo, - minOrderInfo, - tableId, - pageType, - (coupons != "" || promotions!="") ? false : useVipPriceSelect, - this.showVipTips, - (coupons != "" || promotions!="") ? false : useBenefitSelect, - placeOrder - ), + 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; }); @@ -855,6 +876,13 @@ class _Settlement extends State { payChannel, vipLevelName, ), + }, + subscribeParam, + showDateSelector, + reservationTime, + showAlertDialog, + subscribeStoresName, + ), if (settleOrderInfo != null && placeOrder && joinA != JoinActivity.BargainBug) ///支付方式 @@ -920,14 +948,30 @@ class _Settlement extends State { vertical: 5.h, ), callback: () { - pageType != null - ? bargainOrderId != null - ? activityPay() - : joinA == JoinActivity.GoJoin - ? queryJoinAct() - : queryLaunchAct() - : queryPlaceOrderFirst(); - // } + // if (orderButton) { + // SmartDialog.showToast("订单正在提交中...", + // alignment: Alignment.center); + // return; + // } else + // orderButton = true; + if (subscribeParam != null && ((subscribeParam.isEnableSubscribe ?? false) == + true) && + (reservationTime == null || + ((subscribeParam.stores.length ==1 ? subscribeParam.stores[0] : subscribeStoresName) == null))) { + SmartDialog.showToast( + (reservationTime == null) + ? "请选择预约时间" + : "请选择预约门店", + alignment: Alignment.center); + return; + } + pageType != null + ? bargainOrderId != null + ? activityPay() + : joinA == JoinActivity.GoJoin + ? queryJoinAct() + : queryLaunchAct() + : queryPlaceOrderFirst(); }, ), SizedBox( @@ -975,9 +1019,9 @@ class _Settlement extends State { queryOrderInfo( address?.id, selectedBtn, - null, 0, - productId ?? null, + 0, + productId ?? 0, productSkuId ?? "", actProductId ?? "", actProductSkuId ?? "", @@ -1006,7 +1050,8 @@ class _Settlement extends State { useBenefitSelect, count1, payChannel, - tableId);} + tableId); + } } mobileChange(String mobile) { @@ -1046,17 +1091,15 @@ 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, selectedBtn, couponBean?.id, 0, - productId ?? null, + productId ?? 0, productSkuId ?? "", actProductId ?? "", actProductSkuId ?? "", @@ -1088,9 +1131,9 @@ class _Settlement extends State { queryOrderInfo( address?.id, selectedBtn, - null, 0, - (pro.id??"")??productId, + 0, + (pro.id ?? "") ?? productId, productSkuId ?? "", actProductId ?? "", actProductSkuId ?? "", @@ -1100,5 +1143,193 @@ 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.toUtc().toIso8601String().toString(); + setState(() {}); + }, currentTime: minTime, locale: LocaleType.zh); + } + + ///预约店铺 + showAlertDialog() { + showModalBottomSheet( + builder: (BuildContext context) { + return StatefulBuilder(builder: ( + context, + state, + ) { + return Container( + width: double.infinity, + height: 280.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)), + // ), + // ), + // ], + // ), + // ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Container( + alignment: Alignment.center, + margin: EdgeInsets.symmetric(vertical:5.h), + child: Text( + "请选择预约门店", + style: TextStyle( + fontWeight: MyFontWeight.bold, + fontSize: 15.sp, + color: Color(0xFF353535), + ), + ), + )), + GestureDetector( + onTap: () { + setState(() { + Navigator.of(context).pop(); + }); + }, + child: Icon( + Icons.clear, + color: Colors.black, + size: 18, + ), + ), + // SizedBox(width:4.w), + ], + ), + Expanded( + child: ListView.builder( + itemCount: subscribeParam.stores.length ?? 0, + itemBuilder: (context, position) { + return GestureDetector( + onTap: () { + state(() { + storesIndex = position; + }); + }, + child: storesNameItem(position), + ); + }), + ), + GestureDetector( + onTap: (){ + setState(() { + subscribeStoresName = subscribeParam.stores[storesIndex]; + }); + Navigator.of(context).pop(); + }, + child: Container( + width: double.infinity, + height: 40.h, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100), + color:Color(0xFF32A060), + ), + alignment: Alignment.center, + margin: EdgeInsets.only(bottom: 10.h,), + child: Text( + S.of(context).queding, + style: TextStyle( + fontWeight: MyFontWeight.bold, + fontSize: 16.sp, + color: Color(0xFFFFFFFF), + ), + ), + ), + ), + ], + ), + ); + }); + }, + backgroundColor: Colors.transparent, + context: context); + } + + Widget storesNameItem(index) { + return Container( + width: double.infinity, + margin: EdgeInsets.symmetric(vertical:8.h), + padding: EdgeInsets.symmetric(vertical: 10.h), + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius:BorderRadius.circular(6), + border: Border.all( + color: storesIndex == index ? Color(0xFF32A060):Color(0xFFF7F7F7), + width: storesIndex == index ? 1 :0, + ), + color: storesIndex == index ? Color(0xFFF0FAF4) :Color(0xFFF7F7F7), + ), + 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 1a2c3922..cf10200b 100644 --- a/lib/settlement/settlement_view/activity_coupon_remarks.dart +++ b/lib/settlement/settlement_view/activity_coupon_remarks.dart @@ -9,6 +9,8 @@ import 'package:huixiang/retrofit/data/settleOrderInfo.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import '../../retrofit/data/miNiDetail.dart'; + import '../../view_widget/settlement_tips_dialog.dart'; class ActivityCouponRemarks extends StatefulWidget { @@ -29,6 +31,11 @@ class ActivityCouponRemarks extends StatefulWidget { final Function(bool useBenefitSelect) vipBenefitSelect; final int payChannell; final String vipLevelName; + final SubscribeParam subscribeParam; + final Function() showDateSelector; + final String reservationTime; + final Function() showAlertDialog; + final String subscribeStoresName; ActivityCouponRemarks( this.couponCart, @@ -47,6 +54,12 @@ class ActivityCouponRemarks extends StatefulWidget { this.vipBenefitSelect, this.payChannell, this.vipLevelName); + this.showVipTips, + this.subscribeParam, + this.showDateSelector, + this.reservationTime, + this.showAlertDialog, + this.subscribeStoresName); @override State createState() { @@ -257,8 +270,38 @@ class _ActivityCouponRemarks extends State { // ), // ), if (widget.placeOrder && - widget.tableId <= 0 && - !(widget?.settleOrderInfo?.isRaise ?? false)) + widget?.settleOrderInfo?.benefitDiscountAmount != null && + widget?.settleOrderInfo?.benefitDiscountAmount != "0") + Container( + margin: EdgeInsets.only(bottom: 13), + 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), + ), + ), + ), + Text( + widget.settleOrderInfo.benefitDiscountAmount, + textAlign: TextAlign.end, + style: TextStyle( + fontSize: 14.sp, + color: Color(0xFF32A060), + fontWeight: MyFontWeight.semi_bold, + ), + ), + ], + ), + ), + if (widget.placeOrder && widget.tableId <= 0 && !(widget?.settleOrderInfo?.isRaise ?? false)) InkWell( onTap: () { if(widget.payChannell == 5){ @@ -393,6 +436,94 @@ class _ActivityCouponRemarks extends State { ], ), ), + if ((widget.subscribeParam?.isEnableSubscribe ?? false) == true) + SizedBox( + height: 13, + ), + 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( + widget.reservationTime ?? "请选择时间", + textAlign: TextAlign.end, + style: TextStyle( + fontSize: 14.sp, + color: Color(0xFF858585), + fontWeight: MyFontWeight.medium, + ), + ), + ), + 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, + ), + ], + ), + ), ], ), ); 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 8e53c303..11a657d9 100644 --- a/lib/store/store_order.dart +++ b/lib/store/store_order.dart @@ -35,6 +35,7 @@ import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../retrofit/data/settleOrderInfo.dart'; +import '../settlement/settlement.dart'; import '../view_widget/border_text.dart'; import '../view_widget/request_permission.dart'; @@ -69,6 +70,7 @@ class _StoreOrderPage extends State int numberOfPeople = 0; String vipLevelName; MemberVo memberVo; + MiNiDetail miNiDetail; ///小程序token String minToken; @@ -430,6 +432,7 @@ class _StoreOrderPage extends State ]; }, body: + ///点餐 TabBarView( physics: NeverScrollableScrollPhysics(), @@ -519,12 +522,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, @@ -635,7 +645,7 @@ class _StoreOrderPage extends State if (parentId == null || parentId == "") { if (num == 0) { - SmartDialog.showToast("请先选择您要购买的商品!~",alignment: Alignment.center); + SmartDialog.showToast("请先选择您要购买的商品!~", alignment: Alignment.center); return; } } @@ -656,8 +666,16 @@ class _StoreOrderPage extends State "distance":widget.arguments["distance"], "vipLevelName":memberVo.memberRankVo.rankName, "isVips":memberVo.isVip, + "distance": widget.arguments["distance"], + "subscribeParam": miNiDetail?.subscribeParam, }, ); + + if ((miNiDetail?.subscribeParam?.isEnableSubscribe ?? false) == true) { + clearShopCar(); + this.shopCarGoods = await queryShopCar(); + } + if (tableId > 0) { getParentInfo(); } @@ -747,7 +765,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(() {}); @@ -758,6 +776,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); } } @@ -810,6 +829,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, @@ -835,6 +858,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/lib/view_widget/recharge_details_dialog.dart b/lib/view_widget/recharge_details_dialog.dart index 92b880b3..5d180df4 100644 --- a/lib/view_widget/recharge_details_dialog.dart +++ b/lib/view_widget/recharge_details_dialog.dart @@ -11,9 +11,11 @@ import 'package:huixiang/view_widget/border_text.dart'; import 'package:huixiang/view_widget/custom_image.dart'; import 'package:huixiang/view_widget/round_button.dart'; +import '../retrofit/data/rechargeActLists.dart'; + class RechargeWidget extends StatefulWidget { - final RechargeList rechargeA; - RechargeWidget(this.rechargeA); + final PreferentialList preferentialList; + RechargeWidget(this.preferentialList); @override State createState() { return _RechargeWidget(); @@ -87,7 +89,7 @@ class _RechargeWidget extends State { child: Container( color: Colors.white, child: Html( - data: widget.rechargeA.remark ?? "", + data: widget.preferentialList.remark ?? "", customImageRenders: { networkSourceMatcher(): networkImageRender( loadingWidget: () { diff --git a/lib/view_widget/selector_store_dialog.dart b/lib/view_widget/selector_store_dialog.dart index bd7fa585..be5eec08 100644 --- a/lib/view_widget/selector_store_dialog.dart +++ b/lib/view_widget/selector_store_dialog.dart @@ -244,8 +244,9 @@ class _SelectorStoreWidget extends State { if (position == selectIndex) Image.asset( "assets/image/recharge.webp", - width: 20.w, - height: 20.h, + width: 20, + height: 20, + fit: BoxFit.fill, ), // MImage( // store.logo, 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