Commit 7197d1c89fccc64f5fa00be89f5145659e0dca9b

Authored by wdn127929
1 parent db8ce2a1

可变模版

@@ -52,6 +52,7 @@ class GetDzSellerConfSunModel { @@ -52,6 +52,7 @@ class GetDzSellerConfSunModel {
52 String isMarketing; 52 String isMarketing;
53 53
54 String saiyouyun; 54 String saiyouyun;
  55 + Bookinginfo bookinginfo;
55 56
56 GetDzSellerConfSunModel( 57 GetDzSellerConfSunModel(
57 {this.id, 58 {this.id,
@@ -75,7 +76,8 @@ class GetDzSellerConfSunModel { @@ -75,7 +76,8 @@ class GetDzSellerConfSunModel {
75 this.isOpenCancel, 76 this.isOpenCancel,
76 this.isNotice, 77 this.isNotice,
77 this.isMarketing, 78 this.isMarketing,
78 - this.saiyouyun}); 79 + this.saiyouyun,
  80 + this.bookinginfo});
79 81
80 GetDzSellerConfSunModel.fromJson(Map<String, dynamic> json) { 82 GetDzSellerConfSunModel.fromJson(Map<String, dynamic> json) {
81 id = json['id']; 83 id = json['id'];
@@ -102,6 +104,9 @@ class GetDzSellerConfSunModel { @@ -102,6 +104,9 @@ class GetDzSellerConfSunModel {
102 isNotice = json['is_seller_notice']; 104 isNotice = json['is_seller_notice'];
103 isMarketing = json['is_seller_marketing']; 105 isMarketing = json['is_seller_marketing'];
104 saiyouyun = json['saiyouyun']; 106 saiyouyun = json['saiyouyun'];
  107 + bookinginfo = json['bookinginfo'] != null
  108 + ? new Bookinginfo.fromJson(json['bookinginfo'])
  109 + : null;
105 } 110 }
106 111
107 Map<String, dynamic> toJson() { 112 Map<String, dynamic> toJson() {
@@ -128,7 +133,35 @@ class GetDzSellerConfSunModel { @@ -128,7 +133,35 @@ class GetDzSellerConfSunModel {
128 data['is_seller_notice'] = this.isNotice; 133 data['is_seller_notice'] = this.isNotice;
129 data['is_seller_marketing'] = this.isMarketing; 134 data['is_seller_marketing'] = this.isMarketing;
130 data['saiyouyun'] = this.saiyouyun; 135 data['saiyouyun'] = this.saiyouyun;
  136 + if (this.bookinginfo != null) {
  137 + data['bookinginfo'] = this.bookinginfo.toJson();
  138 + }
  139 +
  140 + return data;
  141 + }
  142 +}
  143 +
  144 +class Bookinginfo {
  145 + String id;
  146 + String sid;
  147 + String smsCode;
  148 + String content;
131 149
  150 + Bookinginfo({this.id, this.sid, this.smsCode, this.content});
  151 +
  152 + Bookinginfo.fromJson(Map<String, dynamic> json) {
  153 + id = json['id'];
  154 + sid = json['sid'];
  155 + smsCode = json['sms_code'];
  156 + content = json['content'];
  157 + }
  158 +
  159 + Map<String, dynamic> toJson() {
  160 + final Map<String, dynamic> data = new Map<String, dynamic>();
  161 + data['id'] = this.id;
  162 + data['sid'] = this.sid;
  163 + data['sms_code'] = this.smsCode;
  164 + data['content'] = this.content;
132 return data; 165 return data;
133 } 166 }
134 } 167 }
  1 +class SaiYouYunChangeModel {
  2 + int ret;
  3 + List<SaiYouYunChangeSunModel> data;
  4 + String msg;
  5 +
  6 + SaiYouYunChangeModel({this.ret, this.data, this.msg});
  7 +
  8 + SaiYouYunChangeModel.fromJson(Map<String, dynamic> json) {
  9 + ret = json['ret'];
  10 + if (json['data'] != null) {
  11 + data = new List<SaiYouYunChangeSunModel>();
  12 + json['data'].forEach((v) {
  13 + data.add(new SaiYouYunChangeSunModel.fromJson(v));
  14 + });
  15 + }
  16 + msg = json['msg'];
  17 + }
  18 +
  19 + Map<String, dynamic> toJson() {
  20 + final Map<String, dynamic> data = new Map<String, dynamic>();
  21 + data['ret'] = this.ret;
  22 + if (this.data != null) {
  23 + data['data'] = this.data.map((v) => v.toJson()).toList();
  24 + }
  25 + data['msg'] = this.msg;
  26 + return data;
  27 + }
  28 +}
  29 +
  30 +class SaiYouYunChangeSunModel {
  31 + String temp;
  32 + Content content;
  33 + bool select = false;
  34 +
  35 + SaiYouYunChangeSunModel({this.temp, this.content});
  36 +
  37 + SaiYouYunChangeSunModel.fromJson(Map<String, dynamic> json) {
  38 + temp = json['temp'];
  39 + content =
  40 + json['content'] != null ? new Content.fromJson(json['content']) : null;
  41 + }
  42 +
  43 + Map<String, dynamic> toJson() {
  44 + final Map<String, dynamic> data = new Map<String, dynamic>();
  45 + data['temp'] = this.temp;
  46 + if (this.content != null) {
  47 + data['content'] = this.content.toJson();
  48 + }
  49 + return data;
  50 + }
  51 +}
  52 +
  53 +class Content {
  54 + String id;
  55 + String templateCode;
  56 + String templateParam;
  57 + String templateDemo;
  58 + String type;
  59 +
  60 + Content(
  61 + {this.id,
  62 + this.templateCode,
  63 + this.templateParam,
  64 + this.templateDemo,
  65 + this.type});
  66 +
  67 + Content.fromJson(Map<String, dynamic> json) {
  68 + id = json['id'];
  69 + templateCode = json['template_code'];
  70 + templateParam = json['template_param'];
  71 + templateDemo = json['template_demo'];
  72 + type = json['type'];
  73 + }
  74 +
  75 + Map<String, dynamic> toJson() {
  76 + final Map<String, dynamic> data = new Map<String, dynamic>();
  77 + data['id'] = this.id;
  78 + data['template_code'] = this.templateCode;
  79 + data['template_param'] = this.templateParam;
  80 + data['template_demo'] = this.templateDemo;
  81 + data['type'] = this.type;
  82 + return data;
  83 + }
  84 +}
  1 +class SmsChangeFieldModel {
  2 + int ret;
  3 + List<SmsChangeFieldSunModel> data;
  4 + String msg;
  5 +
  6 + SmsChangeFieldModel({this.ret, this.data, this.msg});
  7 +
  8 + SmsChangeFieldModel.fromJson(Map<String, dynamic> json) {
  9 + ret = json['ret'];
  10 + if (json['data'] != null) {
  11 + data = new List<SmsChangeFieldSunModel>();
  12 + json['data'].forEach((v) {
  13 + data.add(new SmsChangeFieldSunModel.fromJson(v));
  14 + });
  15 + }
  16 + msg = json['msg'];
  17 + }
  18 +
  19 + Map<String, dynamic> toJson() {
  20 + final Map<String, dynamic> data = new Map<String, dynamic>();
  21 + data['ret'] = this.ret;
  22 + if (this.data != null) {
  23 + data['data'] = this.data.map((v) => v.toJson()).toList();
  24 + }
  25 + data['msg'] = this.msg;
  26 + return data;
  27 + }
  28 +}
  29 +
  30 +class SmsChangeFieldSunModel {
  31 + String code;
  32 + String name;
  33 + String show;
  34 + int times = 0;
  35 +
  36 + SmsChangeFieldSunModel({this.code, this.name, this.show});
  37 +
  38 + SmsChangeFieldSunModel.fromJson(Map<String, dynamic> json) {
  39 + code = json['code'];
  40 + name = json['name'];
  41 + show = json['show'];
  42 + }
  43 +
  44 + Map<String, dynamic> toJson() {
  45 + final Map<String, dynamic> data = new Map<String, dynamic>();
  46 + data['code'] = this.code;
  47 + data['name'] = this.name;
  48 + data['show'] = this.show;
  49 + return data;
  50 + }
  51 +}
@@ -515,4 +515,15 @@ class HttpUrl { @@ -515,4 +515,15 @@ class HttpUrl {
515 static const String send_intention = 515 static const String send_intention =
516 "?service=App.SaiYouYun.SendIntention"; // 发送意向店铺通知短信 516 "?service=App.SaiYouYun.SendIntention"; // 发送意向店铺通知短信
517 517
  518 + static const String get_sai_you_yun_change_list =
  519 + "?service=App.SaiYouYun.GetSaiYouYunChangeList"; // 获取赛邮云短信可变模板列表
  520 +
  521 + static const String get_sms_change_field =
  522 + "?service=App.SaiYouYun.GetSmsChangeField"; // 获取可变模板允许配置字段
  523 +
  524 +
  525 +
  526 + static const String save_sai_you_yun_change =
  527 + "?service=App.SaiYouYun.SaveSaiYouYunChange"; // 配置可变模板内容
  528 +
518 } 529 }
@@ -38,6 +38,7 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> { @@ -38,6 +38,7 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> {
38 String themeName = ''; 38 String themeName = '';
39 String previewUrl = ''; //效果预览的图片链接 39 String previewUrl = ''; //效果预览的图片链接
40 String smsTemplate = ''; //短信模版 40 String smsTemplate = ''; //短信模版
  41 + String bookinginfo = ''; //可变模版内容
41 42
42 @override 43 @override
43 void initState() { 44 void initState() {
@@ -62,7 +63,7 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> { @@ -62,7 +63,7 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> {
62 @override 63 @override
63 void dispose() { 64 void dispose() {
64 bus.off('theme_color_type_name'); 65 bus.off('theme_color_type_name');
65 - bus.off('getDzSellerConf'); 66 + bus.off('getDzSellerConf');
66 super.dispose(); 67 super.dispose();
67 } 68 }
68 69
@@ -85,6 +86,10 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> { @@ -85,6 +86,10 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> {
85 : false; 86 : false;
86 87
87 smsTemplate = marketingCenterProvider.dzSellerConfModel.saiyouyun ?? ''; 88 smsTemplate = marketingCenterProvider.dzSellerConfModel.saiyouyun ?? '';
  89 + bookinginfo =
  90 + marketingCenterProvider.dzSellerConfModel.bookinginfo == null
  91 + ? ''
  92 + : marketingCenterProvider.dzSellerConfModel.bookinginfo?.content;
88 marketingCenterProvider.pageStateSetting = PageState.Success; 93 marketingCenterProvider.pageStateSetting = PageState.Success;
89 } else { 94 } else {
90 marketingCenterProvider.pageStateSetting = PageState.ConnectivityError; 95 marketingCenterProvider.pageStateSetting = PageState.ConnectivityError;
@@ -447,7 +452,7 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> { @@ -447,7 +452,7 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> {
447 InkWell( 452 InkWell(
448 onTap: () { 453 onTap: () {
449 NavigatorUtil.goSmsTemplateSettingPage( 454 NavigatorUtil.goSmsTemplateSettingPage(
450 - context, smsTemplate); 455 + context, smsTemplate, bookinginfo);
451 }, 456 },
452 child: Padding( 457 child: Padding(
453 padding: EdgeInsets.only( 458 padding: EdgeInsets.only(
@@ -460,7 +465,7 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> { @@ -460,7 +465,7 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> {
460 MainAxisAlignment.spaceBetween, 465 MainAxisAlignment.spaceBetween,
461 children: [ 466 children: [
462 Text( 467 Text(
463 - '预订通知短信模板选择', 468 + '预订通知短信模版选择',
464 style: TextStyle( 469 style: TextStyle(
465 color: MyColours.color_515151, 470 color: MyColours.color_515151,
466 fontSize: font(14)), 471 fontSize: font(14)),
@@ -9,6 +9,7 @@ import 'package:one_key/widgets/system_app_bar.dart'; @@ -9,6 +9,7 @@ import 'package:one_key/widgets/system_app_bar.dart';
9 import 'package:one_key/widgets/v_empty_view.dart'; 9 import 'package:one_key/widgets/v_empty_view.dart';
10 import 'package:provider/provider.dart'; 10 import 'package:provider/provider.dart';
11 11
  12 +import '../../../models/sai_you_yun_change_model.dart';
12 import '../../../models/sai_you_yun_model.dart'; 13 import '../../../models/sai_you_yun_model.dart';
13 import '../../../provider/marketing_center_provider.dart'; 14 import '../../../provider/marketing_center_provider.dart';
14 import '../../../utils/event_bus.dart'; 15 import '../../../utils/event_bus.dart';
@@ -21,7 +22,9 @@ import '../../../widgets/round_button.dart'; @@ -21,7 +22,9 @@ import '../../../widgets/round_button.dart';
21 22
22 class SmsTemplateSettingPage extends StatefulWidget { 23 class SmsTemplateSettingPage extends StatefulWidget {
23 final String smsTemplate; 24 final String smsTemplate;
24 - SmsTemplateSettingPage({Key key, this.smsTemplate}) : super(key: key); 25 + final String bookinginfo;
  26 + SmsTemplateSettingPage({Key key, this.smsTemplate, this.bookinginfo})
  27 + : super(key: key);
25 28
26 @override 29 @override
27 _SmsTemplateSettingPageState createState() => _SmsTemplateSettingPageState(); 30 _SmsTemplateSettingPageState createState() => _SmsTemplateSettingPageState();
@@ -51,6 +54,9 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { @@ -51,6 +54,9 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
51 contentChangeStart = 54 contentChangeStart =
52 '尊敬的贵宾,您好!\n诚挚感谢您选择${Provider.of<UserModel>(context, listen: false).user.sellername}用餐!\n'; 55 '尊敬的贵宾,您好!\n诚挚感谢您选择${Provider.of<UserModel>(context, listen: false).user.sellername}用餐!\n';
53 _getSaiYouYunList(); 56 _getSaiYouYunList();
  57 + // _getSaiYouYunChangeList();
  58 + // _getSmsChangeField();
  59 + _getData();
54 }); 60 });
55 } 61 }
56 62
@@ -69,6 +75,91 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { @@ -69,6 +75,91 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
69 marketingCenterProvider.notifyListeners(); 75 marketingCenterProvider.notifyListeners();
70 } 76 }
71 77
  78 + Future<bool> _getSaiYouYunChangeList() async {
  79 + bool sucess = await marketingCenterProvider.getSaiYouYunChangeList(context);
  80 + if (sucess) {
  81 + if (widget.smsTemplate != null && widget.smsTemplate.length > 0) {
  82 + //默认选中
  83 +
  84 + marketingCenterProvider.saiYouYunchangedData.forEach((element) {
  85 + if (element.temp == widget.smsTemplate) {
  86 + canChange = true;
  87 + element.select = true;
  88 + contentChangeStart = element.content.templateParam;
  89 + // controller.text = element.content;
  90 + }
  91 + });
  92 + }
  93 + setState(() {});
  94 + return true;
  95 + } else {
  96 + return false;
  97 + }
  98 +
  99 + // marketingCenterProvider.notifyListeners();
  100 + }
  101 +
  102 + _getData() async {
  103 + Future.wait<bool>([_getSmsChangeField(), _getSaiYouYunChangeList()])
  104 + .then((results) async {
  105 + print(results[0]);
  106 + if (results[0] && results[1]) {
  107 + //成功
  108 + String temp = widget.bookinginfo;
  109 + marketingCenterProvider.smsChangeFieldData.forEach((element) {
  110 + int count = widget.bookinginfo.split(element.code).length - 1;
  111 +
  112 + element.times = count;
  113 + if (temp.contains(element.code)) {
  114 + temp = temp.replaceAll(element.code, element.show);
  115 + }
  116 + });
  117 + controller.text = temp;
  118 + setState(() {});
  119 + } else {
  120 + // if (!results[0]) {
  121 + // //没有优惠券
  122 + // } else {}
  123 + // if (!results[1]) {
  124 + // //没有营销中心数据
  125 + // } else {}
  126 + setState(() {});
  127 + }
  128 + }).catchError((e) {
  129 + print(e);
  130 + });
  131 + }
  132 +
  133 + /// 获取可变模板允许配置字段
  134 + Future<bool> _getSmsChangeField() async {
  135 + bool suceess = await marketingCenterProvider.getSmsChangeField(context);
  136 + if (suceess) {
  137 + return true;
  138 + } else {
  139 + return false;
  140 + }
  141 + }
  142 +
  143 + ///设置店铺短信可变模版
  144 + Future<bool> _saveSaiYouYunChange(String text,
  145 + {bool isShowLoading = true}) async {
  146 + Map<String, String> params = {
  147 + 'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
  148 + 'sms_code': smsSelectValue,
  149 + 'bookinginfo': text,
  150 + };
  151 +
  152 + bool success = await marketingCenterProvider
  153 + .saveSaiYouYunChange(context, params, showLoading: isShowLoading);
  154 + // await _setTempleteSMS();
  155 +
  156 + if (success) {
  157 + await _setTempleteSMS();
  158 + } else {
  159 + return false;
  160 + }
  161 + }
  162 +
72 ///设置店铺短信固定模版 163 ///设置店铺短信固定模版
73 Future<bool> _setTempleteSMS({bool isShowLoading = true}) async { 164 Future<bool> _setTempleteSMS({bool isShowLoading = true}) async {
74 Map<String, String> params = { 165 Map<String, String> params = {
@@ -94,43 +185,75 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { @@ -94,43 +185,75 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
94 List<Widget> data = []; 185 List<Widget> data = [];
95 for (var i = 0; i < temData.length; i++) { 186 for (var i = 0; i < temData.length; i++) {
96 data.add(btnItem(temData[i].temp, temData[i].select, onTap: () { 187 data.add(btnItem(temData[i].temp, temData[i].select, onTap: () {
97 - if (title == '固定模版') {  
98 - canChange = false;  
99 - marketingCenterProvider.saiYouYunFixedData.forEach((element) {  
100 - element.select = false;  
101 - });  
102 - // i 的select = true;  
103 - temData[i].select = true;  
104 - smsSelectValue = temData[i].temp;  
105 - controller.text = temData[i].content;  
106 - marketingCenterProvider.saiYouYunchangedData.forEach((element) {  
107 - element.select = false;  
108 - });  
109 - } else {  
110 - canChange = true;  
111 - marketingCenterProvider.saiYouYunchangedData.forEach((element) {  
112 - element.select = false;  
113 - });  
114 - // i 的select = true;  
115 - temData[i].select = true;  
116 - smsSelectValue = temData[i].temp;  
117 - controller.text = temData[i].content;  
118 - marketingCenterProvider.saiYouYunFixedData.forEach((element) {  
119 - element.select = false;  
120 - });  
121 - } 188 + // if (title == '固定模版') {
  189 + canChange = false;
  190 + marketingCenterProvider.saiYouYunFixedData.forEach((element) {
  191 + element.select = false;
  192 + });
  193 + // i 的select = true;
  194 + temData[i].select = true;
  195 + smsSelectValue = temData[i].temp;
  196 + controller.text = temData[i].content;
  197 + marketingCenterProvider.saiYouYunchangedData.forEach((element) {
  198 + element.select = false;
  199 + });
  200 + // } else {
  201 + // canChange = true;
  202 + // marketingCenterProvider.saiYouYunchangedData.forEach((element) {
  203 + // element.select = false;
  204 + // });
  205 + // // i 的select = true;
  206 + // temData[i].select = true;
  207 + // smsSelectValue = temData[i].temp;
  208 + // controller.text = temData[i].content;
  209 + // marketingCenterProvider.saiYouYunFixedData.forEach((element) {
  210 + // element.select = false;
  211 + // });
  212 + // }
122 setState(() {}); 213 setState(() {});
123 })); 214 }));
124 } 215 }
125 return data; 216 return data;
126 } 217 }
127 218
128 - List<Widget> btnWidgets(List<String> temData) { 219 + List<Widget> templateChangesWidgets(
  220 + String title, List<SaiYouYunChangeSunModel> temData) {
129 List<Widget> data = []; 221 List<Widget> data = [];
130 for (var i = 0; i < temData.length; i++) { 222 for (var i = 0; i < temData.length; i++) {
131 - data.add(btnItem(temData[i], true, onTap: () { 223 + data.add(btnItem(temData[i].temp, temData[i].select, onTap: () {
  224 + canChange = true;
  225 + marketingCenterProvider.saiYouYunchangedData.forEach((element) {
  226 + element.select = false;
  227 + });
  228 + // i 的select = true;
  229 + contentChangeStart = temData[i].content.templateParam;
  230 + temData[i].select = true;
  231 + smsSelectValue = temData[i].temp;
  232 + controller.text = '';
  233 + // controller.text = temData[i].content.templateCode;
  234 + marketingCenterProvider.saiYouYunFixedData.forEach((element) {
  235 + element.select = false;
  236 + });
  237 +
  238 + setState(() {});
  239 + }));
  240 + }
  241 + return data;
  242 + }
  243 +
  244 + List<Widget> btnWidgets() {
  245 + List<Widget> data = [];
  246 + for (var i = 0;
  247 + i < marketingCenterProvider.smsChangeFieldData.length;
  248 + i++) {
  249 + data.add(btnItem(marketingCenterProvider.smsChangeFieldData[i].name, true,
  250 + onTap: () {
  251 + marketingCenterProvider.smsChangeFieldData[i].times++;
  252 + print(controller.text);
  253 + controller.text += marketingCenterProvider.smsChangeFieldData[i].show;
132 // setState(() { 254 // setState(() {
133 - // contentChangeStart += temData[i] + '\n'; 255 + // contentChangeStart +=
  256 + // marketingCenterProvider.smsChangeFieldData[i].name + '\n';
134 // }); 257 // });
135 258
136 // 在光标出插入内容 259 // 在光标出插入内容
@@ -174,11 +297,11 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { @@ -174,11 +297,11 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
174 child: Wrap( 297 child: Wrap(
175 spacing: w(5), 298 spacing: w(5),
176 runSpacing: w(5), 299 runSpacing: w(5),
177 - children: templateWidgets(  
178 - title,  
179 - title == '固定模版'  
180 - ? marketingCenterProvider.saiYouYunFixedData  
181 - : marketingCenterProvider.saiYouYunchangedData), 300 + children: title == '固定模版'
  301 + ? templateWidgets(
  302 + title, marketingCenterProvider.saiYouYunFixedData)
  303 + : templateChangesWidgets(
  304 + title, marketingCenterProvider.saiYouYunchangedData),
182 )) 305 ))
183 ], 306 ],
184 ), 307 ),
@@ -191,7 +314,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { @@ -191,7 +314,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
191 Provider.of<MarketingCenterProvider>(context, listen: true); 314 Provider.of<MarketingCenterProvider>(context, listen: true);
192 return Scaffold( 315 return Scaffold(
193 backgroundColor: MyColours.color_ffffff, 316 backgroundColor: MyColours.color_ffffff,
194 - appBar: SystemAppBar('预订通知短信模板选择'), 317 + appBar: SystemAppBar('预订通知短信模版选择'),
195 body: Column( 318 body: Column(
196 children: [ 319 children: [
197 Expanded( 320 Expanded(
@@ -200,7 +323,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { @@ -200,7 +323,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
200 crossAxisAlignment: CrossAxisAlignment.start, 323 crossAxisAlignment: CrossAxisAlignment.start,
201 children: [ 324 children: [
202 _templeteWidget('固定模版'), 325 _templeteWidget('固定模版'),
203 - // _templeteWidget('可变模版'), 326 + _templeteWidget('可变模版'),
204 VEmptyView(10), 327 VEmptyView(10),
205 Container( 328 Container(
206 width: double.infinity, 329 width: double.infinity,
@@ -255,7 +378,16 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { @@ -255,7 +378,16 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
255 ), 378 ),
256 contentPadding: EdgeInsets.zero, 379 contentPadding: EdgeInsets.zero,
257 ), 380 ),
258 - onChanged: (value) {}, 381 + onChanged: (value) {
  382 + //添加的代码:光标一直在文本框后面
  383 + controller.value = TextEditingValue(
  384 + text: controller.text,
  385 + selection:
  386 + TextSelection.fromPosition(TextPosition(
  387 + affinity: TextAffinity.downstream,
  388 + offset: controller.text.length,
  389 + )));
  390 + },
259 onEditingComplete: () { 391 onEditingComplete: () {
260 FocusScope.of(context) 392 FocusScope.of(context)
261 .requestFocus(FocusNode()); //点击空白处隐藏键盘 393 .requestFocus(FocusNode()); //点击空白处隐藏键盘
@@ -273,7 +405,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { @@ -273,7 +405,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
273 crossAxisAlignment: WrapCrossAlignment.start, 405 crossAxisAlignment: WrapCrossAlignment.start,
274 spacing: w(10), 406 spacing: w(10),
275 runSpacing: w(10), 407 runSpacing: w(10),
276 - children: btnWidgets(btnData), 408 + children: btnWidgets(),
277 )) 409 ))
278 ], 410 ],
279 ), 411 ),
@@ -336,7 +468,46 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { @@ -336,7 +468,46 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
336 Utils.showToast('请选择模版类型'); 468 Utils.showToast('请选择模版类型');
337 return; 469 return;
338 } 470 }
339 - _setTempleteSMS(); 471 + if (canChange) {
  472 + if (controller.text.trim().length == 0) {
  473 + Utils.showToast('请输入内容后保存');
  474 + return;
  475 + }
  476 +
  477 + bool canRequest = true;
  478 + outerloop:
  479 + marketingCenterProvider.smsChangeFieldData
  480 + .forEach((element) {
  481 + innerloop:
  482 + if (element.times > 0) {
  483 + int count =
  484 + controller.text.split(element.show).length -
  485 + 1;
  486 +
  487 + if (count != element.times) {
  488 + Utils.showToast('${element.show}不符合规范,请检查');
  489 + canRequest = false;
  490 + break innerloop;
  491 + }
  492 + }
  493 + });
  494 + print(controller.text);
  495 + String str = controller.text;
  496 + marketingCenterProvider.smsChangeFieldData
  497 + .forEach((element) {
  498 + if (str.contains(element.show)) {
  499 + str = str.replaceAll(element.show, element.code);
  500 + }
  501 + });
  502 + if (canRequest) {
  503 + print(controller.text);
  504 + //
  505 + _saveSaiYouYunChange(str);
  506 + }
  507 + print('fffff');
  508 + } else {
  509 + _setTempleteSMS();
  510 + }
340 }, 511 },
341 ), 512 ),
342 ) 513 )
@@ -9,8 +9,10 @@ import '../constant/error.dart'; @@ -9,8 +9,10 @@ import '../constant/error.dart';
9 import '../models/GetDzSellerConfModel.dart'; 9 import '../models/GetDzSellerConfModel.dart';
10 import '../models/mark_data_model.dart'; 10 import '../models/mark_data_model.dart';
11 import '../models/recharge_notice_model.dart'; 11 import '../models/recharge_notice_model.dart';
  12 +import '../models/sai_you_yun_change_model.dart';
12 import '../models/sai_you_yun_model.dart'; 13 import '../models/sai_you_yun_model.dart';
13 import '../models/seller_template_color_list_model.dart'; 14 import '../models/seller_template_color_list_model.dart';
  15 +import '../models/sms_change_field_model.dart';
14 import '../models/tableOuter.dart'; 16 import '../models/tableOuter.dart';
15 import '../net/base_resp.dart'; 17 import '../net/base_resp.dart';
16 import '../net/dio_util.dart'; 18 import '../net/dio_util.dart';
@@ -44,7 +46,9 @@ class MarketingCenterProvider extends ChangeNotifier { @@ -44,7 +46,9 @@ class MarketingCenterProvider extends ChangeNotifier {
44 List<SellerTemplateColorListSunModel> templeteDatas = []; //后台配置的模版数据 46 List<SellerTemplateColorListSunModel> templeteDatas = []; //后台配置的模版数据
45 47
46 List<SaiYouYunSunModel> saiYouYunFixedData = []; //塞邮云固定模版数据 48 List<SaiYouYunSunModel> saiYouYunFixedData = []; //塞邮云固定模版数据
47 - List<SaiYouYunSunModel> saiYouYunchangedData = []; //塞邮云固定模版数据 49 + List<SaiYouYunChangeSunModel> saiYouYunchangedData = []; //塞邮云可变模版数据
  50 +
  51 + List<SmsChangeFieldSunModel> smsChangeFieldData = []; // 获取可变模板允许配置字段
48 52
49 // 获取赛邮云短信模板列表 (固定模版) 53 // 获取赛邮云短信模板列表 (固定模版)
50 54
@@ -74,6 +78,65 @@ class MarketingCenterProvider extends ChangeNotifier { @@ -74,6 +78,65 @@ class MarketingCenterProvider extends ChangeNotifier {
74 return false; 78 return false;
75 } 79 }
76 80
  81 + // 获取赛邮云短信模板列表 (可变模版)
  82 +
  83 + Future<bool> getSaiYouYunChangeList(BuildContext context,
  84 + {bool showLoading = true}) async {
  85 + Map<String, String> params = {
  86 + 'sid': Provider.of<UserModel>(context, listen: false).user.sellerid
  87 + };
  88 + BaseResp<dynamic> baseResp = await DioUtil()
  89 + .request<dynamic>(
  90 + context, Method.get, HttpUrl.get_sai_you_yun_change_list,
  91 + data: params, showLoading: showLoading)
  92 + .catchError((error) {
  93 + print(error.toString());
  94 + Utils.showToast('请求失败,请重试');
  95 + return false;
  96 + });
  97 + if (baseResp.code == Constant.status_success) {
  98 + saiYouYunchangedData =
  99 + SaiYouYunChangeModel.fromJson(baseResp.responseData).data;
  100 + // if (saiYouYunFixedData.length > 0) {
  101 + // saiYouYunFixedData[0].select = true;
  102 + // }
  103 + // notifyListeners();
  104 + return true;
  105 + } else {
  106 + Utils.showToast(baseResp.msg ?? '请求失败,请重试');
  107 + }
  108 + return false;
  109 + }
  110 +
  111 + // 获取可变模板允许配置字段
  112 +
  113 + Future<bool> getSmsChangeField(BuildContext context,
  114 + {bool showLoading = true}) async {
  115 + // Map<String, String> params = {
  116 + // 'sid': Provider.of<UserModel>(context, listen: false).user.sellerid
  117 + // };
  118 + BaseResp<dynamic> baseResp = await DioUtil()
  119 + .request<dynamic>(context, Method.get, HttpUrl.get_sms_change_field,
  120 + showLoading: showLoading)
  121 + .catchError((error) {
  122 + print(error.toString());
  123 + Utils.showToast('请求失败,请重试');
  124 + return false;
  125 + });
  126 + if (baseResp.code == Constant.status_success) {
  127 + smsChangeFieldData =
  128 + SmsChangeFieldModel.fromJson(baseResp.responseData).data;
  129 + // if (saiYouYunFixedData.length > 0) {
  130 + // saiYouYunFixedData[0].select = true;
  131 + // }
  132 + // notifyListeners();
  133 + return true;
  134 + } else {
  135 + Utils.showToast(baseResp.msg ?? '请求失败,请重试');
  136 + }
  137 + return false;
  138 + }
  139 +
77 //获取桌位列表 140 //获取桌位列表
78 getTableList(context, {needLoading = true}) async { 141 getTableList(context, {needLoading = true}) async {
79 UserModel userModel = Provider.of<UserModel>(context, listen: false); 142 UserModel userModel = Provider.of<UserModel>(context, listen: false);
@@ -160,6 +223,30 @@ class MarketingCenterProvider extends ChangeNotifier { @@ -160,6 +223,30 @@ class MarketingCenterProvider extends ChangeNotifier {
160 return false; 223 return false;
161 } 224 }
162 225
  226 + // 配置可变模板内容
  227 + Future<bool> saveSaiYouYunChange(
  228 + BuildContext context, Map<String, String> params,
  229 + {bool showLoading = true}) async {
  230 + BaseResp<dynamic> baseResp = await DioUtil()
  231 + .request<dynamic>(context, Method.get, HttpUrl.save_sai_you_yun_change,
  232 + data: params, showLoading: showLoading)
  233 + .catchError((error) {
  234 + print(error.toString());
  235 + Utils.showToast('配置可变模板内容失败,请重试');
  236 + return false;
  237 + });
  238 + if (baseResp.code == Constant.status_success) {
  239 + // if (baseResp.data == 0 || baseResp.data == 1) {
  240 + return true;
  241 + // } else {
  242 + // Utils.showToast('配置可变模板内容失败,请重试');
  243 + // }
  244 + } else {
  245 + Utils.showToast(baseResp.msg ?? '商配置可变模板内容失败,请重试');
  246 + }
  247 + return false;
  248 + }
  249 +
163 // 设置订座商家配置信息 250 // 设置订座商家配置信息
164 Future<bool> setConfing(BuildContext context, Map<String, String> params, 251 Future<bool> setConfing(BuildContext context, Map<String, String> params,
165 {bool showLoading = true, bool needToast = true}) async { 252 {bool showLoading = true, bool needToast = true}) async {
@@ -1893,14 +1893,15 @@ class NavigatorUtil { @@ -1893,14 +1893,15 @@ class NavigatorUtil {
1893 replace: replace); 1893 replace: replace);
1894 } 1894 }
1895 1895
1896 - ///预订通知短信模板选择 1896 + ///预订通知短信模版选择
1897 static Future<dynamic> goSmsTemplateSettingPage( 1897 static Future<dynamic> goSmsTemplateSettingPage(
1898 BuildContext context, 1898 BuildContext context,
1899 - String smsTemplate, { 1899 + String smsTemplate,
  1900 + String bookinginfo, {
1900 replace = false, 1901 replace = false,
1901 }) { 1902 }) {
1902 return _navigateTo(context, 1903 return _navigateTo(context,
1903 - "${Routes.sms_template_setting_page}?smsTemplate=${Uri.encodeComponent(smsTemplate)}", 1904 + "${Routes.sms_template_setting_page}?smsTemplate=${Uri.encodeComponent(smsTemplate)}&bookinginfo=${Uri.encodeComponent(bookinginfo)}",
1904 replace: replace); 1905 replace: replace);
1905 } 1906 }
1906 1907
@@ -3228,15 +3228,16 @@ var exportBookDataPageHandle = new Handler( @@ -3228,15 +3228,16 @@ var exportBookDataPageHandle = new Handler(
3228 create: (_) => CustomerProvider(), child: ExportBookDataPage()); 3228 create: (_) => CustomerProvider(), child: ExportBookDataPage());
3229 }); 3229 });
3230 3230
3231 -//预订通知短信模板选择 3231 +//预订通知短信模版选择
3232 3232
3233 var smsTemplateSettingPageHandle = new Handler( 3233 var smsTemplateSettingPageHandle = new Handler(
3234 handlerFunc: (BuildContext context, Map<String, List<Object>> params) { 3234 handlerFunc: (BuildContext context, Map<String, List<Object>> params) {
3235 // String rid = params["rid"].first; 3235 // String rid = params["rid"].first;
3236 String smsTemplate = params["smsTemplate"].first; 3236 String smsTemplate = params["smsTemplate"].first;
  3237 + String bookinginfo = params["bookinginfo"].first;
3237 return ChangeNotifierProvider<MarketingCenterProvider>( 3238 return ChangeNotifierProvider<MarketingCenterProvider>(
3238 create: (_) => MarketingCenterProvider(), 3239 create: (_) => MarketingCenterProvider(),
3239 - child: SmsTemplateSettingPage(smsTemplate: smsTemplate)); 3240 + child: SmsTemplateSettingPage(smsTemplate: smsTemplate,bookinginfo:bookinginfo));
3240 }); 3241 });
3241 3242
3242 //优惠券海报 3243 //优惠券海报