Commit a361475050f998e6217f73fe2a2aee50e7a42653

Authored by wdn127929
1 parent 2dac9af2

优惠券----销售价、券用途、使用限制

  1 +import 'dart:convert';
  2 +
1 import 'package:json_annotation/json_annotation.dart'; 3 import 'package:json_annotation/json_annotation.dart';
  4 +import 'package:one_key/models/filter_btn_model.dart';
2 5
3 part 'coupon_model.g.dart'; 6 part 'coupon_model.g.dart';
4 7
@@ -76,6 +79,15 @@ class CouponSunModel extends Object { @@ -76,6 +79,15 @@ class CouponSunModel extends Object {
76 @JsonKey(name: 'is_open') 79 @JsonKey(name: 'is_open')
77 bool isOpenBool = false; 80 bool isOpenBool = false;
78 81
  82 + @JsonKey(name: 'price')
  83 + dynamic price;
  84 +
  85 + @JsonKey(name: 'use')
  86 + CouponUse use;
  87 +
  88 + @JsonKey(name: 'exp_date')
  89 + ExpDate expDate;
  90 +
79 bool isCheck = false; 91 bool isCheck = false;
80 bool showText = false; 92 bool showText = false;
81 93
@@ -96,10 +108,68 @@ class CouponSunModel extends Object { @@ -96,10 +108,68 @@ class CouponSunModel extends Object {
96 this.isExamine, 108 this.isExamine,
97 this.isType, 109 this.isType,
98 this.isOpen, 110 this.isOpen,
99 - this.isOpenBool); 111 + this.isOpenBool,
  112 + this.price,
  113 + this.use,
  114 + this.expDate);
100 115
101 factory CouponSunModel.fromJson(Map<String, dynamic> srcJson) => 116 factory CouponSunModel.fromJson(Map<String, dynamic> srcJson) =>
102 _$CouponSunModelFromJson(srcJson); 117 _$CouponSunModelFromJson(srcJson);
103 118
104 Map<String, dynamic> toJson() => _$CouponSunModelToJson(this); 119 Map<String, dynamic> toJson() => _$CouponSunModelToJson(this);
105 } 120 }
  121 +
  122 +@JsonSerializable()
  123 +class CouponUse extends Object {
  124 + @JsonKey(name: 'is_cash')
  125 + bool isCash;
  126 +
  127 + @JsonKey(name: 'is_discount')
  128 + bool isDiscount;
  129 +
  130 + @JsonKey(name: 'is_dish')
  131 + bool isDish;
  132 +
  133 + @JsonKey(name: 'cash')
  134 + String cash;
  135 +
  136 + @JsonKey(name: 'discount')
  137 + String discount;
  138 +
  139 + @JsonKey(name: 'dish')
  140 + String dish;
  141 +
  142 + CouponUse(this.isCash, this.isDiscount, this.isDish, this.cash, this.discount,
  143 + this.dish);
  144 +
  145 + factory CouponUse.fromJson(Map<String, dynamic> srcJson) =>
  146 + _$CouponUseFromJson(srcJson);
  147 +
  148 + Map<String, dynamic> toJson() => _$CouponUseToJson(this);
  149 +}
  150 +
  151 +@JsonSerializable()
  152 +class ExpDate extends Object {
  153 + @JsonKey(name: 'is_none')
  154 + bool isNone;
  155 +
  156 + @JsonKey(name: 'is_week')
  157 + bool isWeek;
  158 +
  159 + @JsonKey(name: 'is_birthday')
  160 + bool isBirthday;
  161 +
  162 + @JsonKey(name: 'week_show')
  163 + String weekShow;
  164 +
  165 + @JsonKey(name: 'week_data')
  166 + List<FilterBtnModel> weekData;
  167 +
  168 + ExpDate(
  169 + this.isNone, this.isWeek, this.isBirthday, this.weekShow, this.weekData);
  170 +
  171 + factory ExpDate.fromJson(Map<String, dynamic> srcJson) =>
  172 + _$ExpDateFromJson(srcJson);
  173 +
  174 + Map<String, dynamic> toJson() => _$ExpDateToJson(this);
  175 +}
@@ -42,7 +42,22 @@ CouponSunModel _$CouponSunModelFromJson(Map<String, dynamic> json) { @@ -42,7 +42,22 @@ CouponSunModel _$CouponSunModelFromJson(Map<String, dynamic> json) {
42 json['is_examine'] as String, 42 json['is_examine'] as String,
43 json['is_type'] as String, 43 json['is_type'] as String,
44 json['is_open'] as String, 44 json['is_open'] as String,
45 - json['status'] == "1" ? true : false, 45 + json['is_open'] == "1" ? true : false,
  46 + json['price'] as String,
  47 + json['use'] == null
  48 + ? null
  49 + : (json['use'] is String)
  50 + ? CouponUse.fromJson(jsonDecode(json['use']))
  51 + : (json['use'] is Map)
  52 + ? CouponUse.fromJson(json['use'])
  53 + : null,
  54 + json['exp_date'] == null
  55 + ? null
  56 + : (json['exp_date'] is String)
  57 + ? ExpDate.fromJson(jsonDecode(json['exp_date']))
  58 + : (json['exp_date'] is Map)
  59 + ? ExpDate.fromJson(json['exp_date'])
  60 + : null,
46 ); 61 );
47 } 62 }
48 63
@@ -64,5 +79,88 @@ Map<String, dynamic> _$CouponSunModelToJson(CouponSunModel instance) => @@ -64,5 +79,88 @@ Map<String, dynamic> _$CouponSunModelToJson(CouponSunModel instance) =>
64 'is_examine': instance.isExamine, 79 'is_examine': instance.isExamine,
65 'is_type': instance.isType, 80 'is_type': instance.isType,
66 'isOpen': instance.isOpen, 81 'isOpen': instance.isOpen,
67 - 'isOpenBool': instance.isOpenBool 82 + 'isOpenBool': instance.isOpenBool,
  83 + 'price': instance.price,
  84 + 'use': instance.use,
  85 + 'exp_date': instance.expDate
  86 + };
  87 +
  88 +CouponUse _$CouponUseFromJson(Map<String, dynamic> json) {
  89 + bool iscash = false;
  90 + if (json['is_cash'] is String) {
  91 + iscash = json['is_cash'] == '1' ? true : false;
  92 + } else if (json['is_cash'] is bool) {
  93 + iscash = json['is_cash'] ? true : false;
  94 + }
  95 +
  96 + bool isdiscount = false;
  97 + if (json['is_discount'] is String) {
  98 + isdiscount = json['is_discount'] == '1' ? true : false;
  99 + } else if (json['is_discount'] is bool) {
  100 + isdiscount = json['is_discount'] ? true : false;
  101 + }
  102 +
  103 + bool isdish = false;
  104 + if (json['is_dish'] is String) {
  105 + isdish = json['is_dish'] == '1' ? true : false;
  106 + } else if (json['is_dish'] is bool) {
  107 + isdish = json['is_dish'] ? true : false;
  108 + }
  109 +
  110 + return CouponUse(
  111 + iscash,
  112 + isdiscount,
  113 + isdish,
  114 + json['cash'] as String,
  115 + json['discount'] as String,
  116 + json['dish'] as String,
  117 + );
  118 +}
  119 +
  120 +Map<String, dynamic> _$CouponUseToJson(CouponUse instance) => <String, dynamic>{
  121 + 'is_cash': instance.isCash,
  122 + 'is_discount': instance.isDiscount,
  123 + 'is_dish': instance.isDish,
  124 + 'cash': instance.cash,
  125 + 'discount': instance.discount,
  126 + 'dish': instance.dish,
  127 + };
  128 +
  129 +ExpDate _$ExpDateFromJson(Map<String, dynamic> json) {
  130 + List<FilterBtnModel> weekdata = [];
  131 + if (json['week_data'] != null) {
  132 + json['week_data'].forEach((v) {
  133 + weekdata.add(new FilterBtnModel.fromJson(v));
  134 + });
  135 + }
  136 +
  137 + bool isnone = false;
  138 + if (json['is_none'] is String) {
  139 + isnone = json['is_none'] == '1' ? true : false;
  140 + } else if (json['is_none'] is bool) {
  141 + isnone = json['is_none'] ? true : false;
  142 + }
  143 + bool isweek = false;
  144 + if (json['is_week'] is String) {
  145 + isweek = json['is_week'] == '1' ? true : false;
  146 + } else if (json['is_week'] is bool) {
  147 + isweek = json['is_week'] ? true : false;
  148 + }
  149 +
  150 + bool isbirthday = false;
  151 + if (json['is_birthday'] is String) {
  152 + isbirthday = json['is_birthday'] == '1' ? true : false;
  153 + } else if (json['is_birthday'] is bool) {
  154 + isbirthday = json['is_birthday'] ? true : false;
  155 + }
  156 + return ExpDate(
  157 + isnone, isweek, isbirthday, json['week_show'] as String, weekdata);
  158 +}
  159 +
  160 +Map<String, dynamic> _$ExpDateToJson(ExpDate instance) => <String, dynamic>{
  161 + 'is_none': instance.isNone,
  162 + 'is_week': instance.isWeek,
  163 + 'is_birthday': instance.isBirthday,
  164 + 'week_show': instance.weekShow,
  165 + 'week_data': instance.weekData,
68 }; 166 };
@@ -18,6 +18,7 @@ import 'package:one_key/widgets/system_app_bar.dart'; @@ -18,6 +18,7 @@ import 'package:one_key/widgets/system_app_bar.dart';
18 import 'package:one_key/widgets/v_empty_view.dart'; 18 import 'package:one_key/widgets/v_empty_view.dart';
19 import 'package:provider/provider.dart'; 19 import 'package:provider/provider.dart';
20 20
  21 +import '../../utils/screen_util.dart';
21 import '../../widgets/page_exception.dart'; 22 import '../../widgets/page_exception.dart';
22 23
23 /** 24 /**
@@ -143,6 +144,38 @@ class _CouponDetailPageState extends State<CouponDetailPage> { @@ -143,6 +144,38 @@ class _CouponDetailPageState extends State<CouponDetailPage> {
143 ); 144 );
144 } 145 }
145 146
  147 + ///输入框
  148 + Widget _textShow(String title, String subtitle) {
  149 + return Container(
  150 + padding: EdgeInsets.only(
  151 + left: w(15),
  152 + ),
  153 + child: Row(
  154 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
  155 + children: [
  156 + Container(
  157 + child: Text(
  158 + title,
  159 + style: TextStyle(
  160 + color: Color.fromRGBO(0, 0, 0, 0.9),
  161 + fontSize: ScreenUtil().setSp(32)),
  162 + ),
  163 + ),
  164 + Spacer(),
  165 + Text(
  166 + subtitle,
  167 +
  168 + //输入文本的样式
  169 + style: TextStyle(
  170 + color: Color.fromRGBO(0, 0, 0, 0.4),
  171 + fontSize: ScreenUtil().setSp(32),
  172 + ),
  173 + ),
  174 + ],
  175 + ),
  176 + );
  177 + }
  178 +
146 @override 179 @override
147 Widget build(BuildContext context) { 180 Widget build(BuildContext context) {
148 couponProvider = Provider.of<CouponProvider>(context, listen: true); 181 couponProvider = Provider.of<CouponProvider>(context, listen: true);
@@ -196,6 +229,59 @@ class _CouponDetailPageState extends State<CouponDetailPage> { @@ -196,6 +229,59 @@ class _CouponDetailPageState extends State<CouponDetailPage> {
196 color: MyColours.color_E7E7E7, 229 color: MyColours.color_E7E7E7,
197 ), 230 ),
198 VEmptyView(24), 231 VEmptyView(24),
  232 + if (couponProvider.couponSunModel.isType == '1' &&
  233 + couponProvider.couponSunModel.use != null)
  234 + Column(
  235 + children: [
  236 + _item(
  237 + '销售价',
  238 + couponProvider.couponSunModel.price ??
  239 + ''),
  240 + Container(
  241 + height: ScreenUtil().setWidth(2),
  242 + color: MyColours.color_E7E7E7,
  243 + ),
  244 + VEmptyView(24),
  245 + _item(
  246 + '券用途',
  247 + couponProvider.couponSunModel.use.isCash
  248 + ? '代金券'
  249 + : couponProvider
  250 + .couponSunModel.use.isDiscount
  251 + ? '折扣券'
  252 + : couponProvider
  253 + .couponSunModel.use.isDish
  254 + ? '菜品券'
  255 + : ''),
  256 + VEmptyView(10),
  257 + _textShow(
  258 + couponProvider.couponSunModel.use.isCash
  259 + ? '金额:'
  260 + : couponProvider
  261 + .couponSunModel.use.isDiscount
  262 + ? '折扣率:'
  263 + : couponProvider
  264 + .couponSunModel.use.isDish
  265 + ? '菜品:'
  266 + : '',
  267 + couponProvider.couponSunModel.use.isCash
  268 + ? '${couponProvider.couponSunModel.use.cash}元'
  269 + : couponProvider
  270 + .couponSunModel.use.isDiscount
  271 + ? '${couponProvider.couponSunModel.use.discount}折'
  272 + : couponProvider
  273 + .couponSunModel.use.isDish
  274 + ? couponProvider
  275 + .couponSunModel.use.dish
  276 + : ''),
  277 + VEmptyView(24),
  278 + Container(
  279 + height: ScreenUtil().setWidth(2),
  280 + color: MyColours.color_E7E7E7,
  281 + ),
  282 + VEmptyView(24),
  283 + ],
  284 + ),
199 _item('券要求', couponProvider.couponSunModel.desc), 285 _item('券要求', couponProvider.couponSunModel.desc),
200 Container( 286 Container(
201 height: ScreenUtil().setWidth(2), 287 height: ScreenUtil().setWidth(2),
@@ -215,6 +301,27 @@ class _CouponDetailPageState extends State<CouponDetailPage> { @@ -215,6 +301,27 @@ class _CouponDetailPageState extends State<CouponDetailPage> {
215 '有效期至', 301 '有效期至',
216 Utils.getDateStrFromJiekou( 302 Utils.getDateStrFromJiekou(
217 couponProvider.couponSunModel.etime)), 303 couponProvider.couponSunModel.etime)),
  304 + if (couponProvider.couponSunModel.isType == '1' &&
  305 + couponProvider.couponSunModel.expDate != null)
  306 + Column(children: [
  307 + Container(
  308 + height: ScreenUtil().setWidth(2),
  309 + color: MyColours.color_E7E7E7,
  310 + ),
  311 + VEmptyView(24),
  312 + _item(
  313 + '使用限制',
  314 + couponProvider.couponSunModel.expDate.isNone
  315 + ? '无'
  316 + : couponProvider.couponSunModel.expDate
  317 + .isBirthday
  318 + ? '会员生日当天'
  319 + : couponProvider.couponSunModel
  320 + .expDate.isWeek
  321 + ? couponProvider.couponSunModel
  322 + .expDate.weekShow
  323 + : ''),
  324 + ]),
218 couponProvider.couponSunModel.isType == '1' 325 couponProvider.couponSunModel.isType == '1'
219 ? Column( 326 ? Column(
220 crossAxisAlignment: 327 crossAxisAlignment:
  1 +import 'dart:convert';
  2 +
1 import 'package:common_utils/common_utils.dart'; 3 import 'package:common_utils/common_utils.dart';
2 import 'package:flutter/material.dart'; 4 import 'package:flutter/material.dart';
3 import 'package:flutter_picker/flutter_picker.dart'; 5 import 'package:flutter_picker/flutter_picker.dart';
@@ -195,6 +197,25 @@ class _CouponEidtPageState extends State<CouponEidtPage> { @@ -195,6 +197,25 @@ class _CouponEidtPageState extends State<CouponEidtPage> {
195 //创建新券 客户经理创建活动 197 //创建新券 客户经理创建活动
196 _createNewCoupon() async { 198 _createNewCoupon() async {
197 FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘 199 FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
  200 + if (!widget.isMine) {
  201 + if (money && moneyControl.text.trim().length == 0) {
  202 + Utils.showToast('请输入代金券金额!');
  203 + return;
  204 + }
  205 + if (discount && discountControl.text.trim().length == 0) {
  206 + Utils.showToast('请输入折扣率!');
  207 + return;
  208 + }
  209 + if (dish && dishControl.text.trim().length == 0) {
  210 + Utils.showToast('请输入菜品!');
  211 + return;
  212 + }
  213 +
  214 + if (limitWeek && weekShow == '点击设置可用日期') {
  215 + Utils.showToast('请设置可用日期!');
  216 + return;
  217 + }
  218 + }
198 String from = fromDate + ' 00:00:00'; 219 String from = fromDate + ' 00:00:00';
199 String end = endDate + ' 23:59:59'; 220 String end = endDate + ' 23:59:59';
200 Map<String, String> params = { 221 Map<String, String> params = {
@@ -215,6 +236,27 @@ class _CouponEidtPageState extends State<CouponEidtPage> { @@ -215,6 +236,27 @@ class _CouponEidtPageState extends State<CouponEidtPage> {
215 if (!widget.isMine) { 236 if (!widget.isMine) {
216 params['is_examine'] = swichHexiao ? "1" : "0"; 237 params['is_examine'] = swichHexiao ? "1" : "0";
217 params['uid_list'] = uids; 238 params['uid_list'] = uids;
  239 + params['price'] =
  240 + _priceControl.text.trim().length == 0 ? '0' : _priceControl.text;
  241 +
  242 + Map use = {
  243 + 'is_cash': money ? '1' : '0',
  244 + 'is_discount': discount ? '1' : '0',
  245 + 'is_dish': dish ? '1' : '0',
  246 + 'cash': moneyControl.text,
  247 + 'discount': discountControl.text,
  248 + 'dish': dishControl.text
  249 + };
  250 + params['use'] = jsonEncode(use);
  251 +
  252 + Map expDate = {
  253 + 'is_none': limitNone ? '1' : '0',
  254 + 'is_week': limitWeek ? '1' : '0',
  255 + 'is_birthday': limitBirthday ? '1' : '0',
  256 + 'week_show': weekShow,
  257 + 'week_data': weekData
  258 + };
  259 + params['exp_date'] = jsonEncode(expDate);
218 } 260 }
219 bool isSuccess = 261 bool isSuccess =
220 await couponProvider.createCustomerActivity(context, params); 262 await couponProvider.createCustomerActivity(context, params);
@@ -749,16 +791,15 @@ class _CouponEidtPageState extends State<CouponEidtPage> { @@ -749,16 +791,15 @@ class _CouponEidtPageState extends State<CouponEidtPage> {
749 .numberWithOptions()), 791 .numberWithOptions()),
750 if (discount) 792 if (discount)
751 _textfieldSelect('折扣率:', '点击输入折扣,如9折', 793 _textfieldSelect('折扣率:', '点击输入折扣,如9折',
752 - moneyControl, moneyFocusNode, 794 + discountControl, dishFocusNode,
753 subtitle: '折', 795 subtitle: '折',
754 textInputType: TextInputType 796 textInputType: TextInputType
755 .numberWithOptions()), 797 .numberWithOptions()),
756 798
757 if (dish) 799 if (dish)
758 _textfieldSelect('菜品:', '点击输入赠送菜品名称', 800 _textfieldSelect('菜品:', '点击输入赠送菜品名称',
759 - moneyControl, moneyFocusNode,  
760 - textInputType: TextInputType  
761 - .numberWithOptions()), 801 + dishControl, dishFocusNode,
  802 + textInputType: TextInputType.text),
762 VEmptyView(48), 803 VEmptyView(48),
763 Container( 804 Container(
764 height: ScreenUtil().setWidth(2), 805 height: ScreenUtil().setWidth(2),