Commit 7197d1c89fccc64f5fa00be89f5145659e0dca9b

Authored by wdn127929
1 parent db8ce2a1

可变模版

... ... @@ -52,6 +52,7 @@ class GetDzSellerConfSunModel {
String isMarketing;
String saiyouyun;
Bookinginfo bookinginfo;
GetDzSellerConfSunModel(
{this.id,
... ... @@ -75,7 +76,8 @@ class GetDzSellerConfSunModel {
this.isOpenCancel,
this.isNotice,
this.isMarketing,
this.saiyouyun});
this.saiyouyun,
this.bookinginfo});
GetDzSellerConfSunModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
... ... @@ -102,6 +104,9 @@ class GetDzSellerConfSunModel {
isNotice = json['is_seller_notice'];
isMarketing = json['is_seller_marketing'];
saiyouyun = json['saiyouyun'];
bookinginfo = json['bookinginfo'] != null
? new Bookinginfo.fromJson(json['bookinginfo'])
: null;
}
Map<String, dynamic> toJson() {
... ... @@ -128,7 +133,35 @@ class GetDzSellerConfSunModel {
data['is_seller_notice'] = this.isNotice;
data['is_seller_marketing'] = this.isMarketing;
data['saiyouyun'] = this.saiyouyun;
if (this.bookinginfo != null) {
data['bookinginfo'] = this.bookinginfo.toJson();
}
return data;
}
}
class Bookinginfo {
String id;
String sid;
String smsCode;
String content;
Bookinginfo({this.id, this.sid, this.smsCode, this.content});
Bookinginfo.fromJson(Map<String, dynamic> json) {
id = json['id'];
sid = json['sid'];
smsCode = json['sms_code'];
content = json['content'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['sid'] = this.sid;
data['sms_code'] = this.smsCode;
data['content'] = this.content;
return data;
}
}
... ...
class SaiYouYunChangeModel {
int ret;
List<SaiYouYunChangeSunModel> data;
String msg;
SaiYouYunChangeModel({this.ret, this.data, this.msg});
SaiYouYunChangeModel.fromJson(Map<String, dynamic> json) {
ret = json['ret'];
if (json['data'] != null) {
data = new List<SaiYouYunChangeSunModel>();
json['data'].forEach((v) {
data.add(new SaiYouYunChangeSunModel.fromJson(v));
});
}
msg = json['msg'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ret'] = this.ret;
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
data['msg'] = this.msg;
return data;
}
}
class SaiYouYunChangeSunModel {
String temp;
Content content;
bool select = false;
SaiYouYunChangeSunModel({this.temp, this.content});
SaiYouYunChangeSunModel.fromJson(Map<String, dynamic> json) {
temp = json['temp'];
content =
json['content'] != null ? new Content.fromJson(json['content']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['temp'] = this.temp;
if (this.content != null) {
data['content'] = this.content.toJson();
}
return data;
}
}
class Content {
String id;
String templateCode;
String templateParam;
String templateDemo;
String type;
Content(
{this.id,
this.templateCode,
this.templateParam,
this.templateDemo,
this.type});
Content.fromJson(Map<String, dynamic> json) {
id = json['id'];
templateCode = json['template_code'];
templateParam = json['template_param'];
templateDemo = json['template_demo'];
type = json['type'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['template_code'] = this.templateCode;
data['template_param'] = this.templateParam;
data['template_demo'] = this.templateDemo;
data['type'] = this.type;
return data;
}
}
... ...
class SmsChangeFieldModel {
int ret;
List<SmsChangeFieldSunModel> data;
String msg;
SmsChangeFieldModel({this.ret, this.data, this.msg});
SmsChangeFieldModel.fromJson(Map<String, dynamic> json) {
ret = json['ret'];
if (json['data'] != null) {
data = new List<SmsChangeFieldSunModel>();
json['data'].forEach((v) {
data.add(new SmsChangeFieldSunModel.fromJson(v));
});
}
msg = json['msg'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ret'] = this.ret;
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
data['msg'] = this.msg;
return data;
}
}
class SmsChangeFieldSunModel {
String code;
String name;
String show;
int times = 0;
SmsChangeFieldSunModel({this.code, this.name, this.show});
SmsChangeFieldSunModel.fromJson(Map<String, dynamic> json) {
code = json['code'];
name = json['name'];
show = json['show'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['code'] = this.code;
data['name'] = this.name;
data['show'] = this.show;
return data;
}
}
... ...
... ... @@ -515,4 +515,15 @@ class HttpUrl {
static const String send_intention =
"?service=App.SaiYouYun.SendIntention"; // 发送意向店铺通知短信
static const String get_sai_you_yun_change_list =
"?service=App.SaiYouYun.GetSaiYouYunChangeList"; // 获取赛邮云短信可变模板列表
static const String get_sms_change_field =
"?service=App.SaiYouYun.GetSmsChangeField"; // 获取可变模板允许配置字段
static const String save_sai_you_yun_change =
"?service=App.SaiYouYun.SaveSaiYouYunChange"; // 配置可变模板内容
}
... ...
... ... @@ -38,6 +38,7 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> {
String themeName = '';
String previewUrl = ''; //效果预览的图片链接
String smsTemplate = ''; //短信模版
String bookinginfo = ''; //可变模版内容
@override
void initState() {
... ... @@ -62,7 +63,7 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> {
@override
void dispose() {
bus.off('theme_color_type_name');
bus.off('getDzSellerConf');
bus.off('getDzSellerConf');
super.dispose();
}
... ... @@ -85,6 +86,10 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> {
: false;
smsTemplate = marketingCenterProvider.dzSellerConfModel.saiyouyun ?? '';
bookinginfo =
marketingCenterProvider.dzSellerConfModel.bookinginfo == null
? ''
: marketingCenterProvider.dzSellerConfModel.bookinginfo?.content;
marketingCenterProvider.pageStateSetting = PageState.Success;
} else {
marketingCenterProvider.pageStateSetting = PageState.ConnectivityError;
... ... @@ -447,7 +452,7 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> {
InkWell(
onTap: () {
NavigatorUtil.goSmsTemplateSettingPage(
context, smsTemplate);
context, smsTemplate, bookinginfo);
},
child: Padding(
padding: EdgeInsets.only(
... ... @@ -460,7 +465,7 @@ class _CustomerNoticeSettingPageState extends State<CustomerNoticeSettingPage> {
MainAxisAlignment.spaceBetween,
children: [
Text(
'预订通知短信模板选择',
'预订通知短信模版选择',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(14)),
... ...
... ... @@ -9,6 +9,7 @@ import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import '../../../models/sai_you_yun_change_model.dart';
import '../../../models/sai_you_yun_model.dart';
import '../../../provider/marketing_center_provider.dart';
import '../../../utils/event_bus.dart';
... ... @@ -21,7 +22,9 @@ import '../../../widgets/round_button.dart';
class SmsTemplateSettingPage extends StatefulWidget {
final String smsTemplate;
SmsTemplateSettingPage({Key key, this.smsTemplate}) : super(key: key);
final String bookinginfo;
SmsTemplateSettingPage({Key key, this.smsTemplate, this.bookinginfo})
: super(key: key);
@override
_SmsTemplateSettingPageState createState() => _SmsTemplateSettingPageState();
... ... @@ -51,6 +54,9 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
contentChangeStart =
'尊敬的贵宾,您好!\n诚挚感谢您选择${Provider.of<UserModel>(context, listen: false).user.sellername}用餐!\n';
_getSaiYouYunList();
// _getSaiYouYunChangeList();
// _getSmsChangeField();
_getData();
});
}
... ... @@ -69,6 +75,91 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
marketingCenterProvider.notifyListeners();
}
Future<bool> _getSaiYouYunChangeList() async {
bool sucess = await marketingCenterProvider.getSaiYouYunChangeList(context);
if (sucess) {
if (widget.smsTemplate != null && widget.smsTemplate.length > 0) {
//默认选中
marketingCenterProvider.saiYouYunchangedData.forEach((element) {
if (element.temp == widget.smsTemplate) {
canChange = true;
element.select = true;
contentChangeStart = element.content.templateParam;
// controller.text = element.content;
}
});
}
setState(() {});
return true;
} else {
return false;
}
// marketingCenterProvider.notifyListeners();
}
_getData() async {
Future.wait<bool>([_getSmsChangeField(), _getSaiYouYunChangeList()])
.then((results) async {
print(results[0]);
if (results[0] && results[1]) {
//成功
String temp = widget.bookinginfo;
marketingCenterProvider.smsChangeFieldData.forEach((element) {
int count = widget.bookinginfo.split(element.code).length - 1;
element.times = count;
if (temp.contains(element.code)) {
temp = temp.replaceAll(element.code, element.show);
}
});
controller.text = temp;
setState(() {});
} else {
// if (!results[0]) {
// //没有优惠券
// } else {}
// if (!results[1]) {
// //没有营销中心数据
// } else {}
setState(() {});
}
}).catchError((e) {
print(e);
});
}
/// 获取可变模板允许配置字段
Future<bool> _getSmsChangeField() async {
bool suceess = await marketingCenterProvider.getSmsChangeField(context);
if (suceess) {
return true;
} else {
return false;
}
}
///设置店铺短信可变模版
Future<bool> _saveSaiYouYunChange(String text,
{bool isShowLoading = true}) async {
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
'sms_code': smsSelectValue,
'bookinginfo': text,
};
bool success = await marketingCenterProvider
.saveSaiYouYunChange(context, params, showLoading: isShowLoading);
// await _setTempleteSMS();
if (success) {
await _setTempleteSMS();
} else {
return false;
}
}
///设置店铺短信固定模版
Future<bool> _setTempleteSMS({bool isShowLoading = true}) async {
Map<String, String> params = {
... ... @@ -94,43 +185,75 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
List<Widget> data = [];
for (var i = 0; i < temData.length; i++) {
data.add(btnItem(temData[i].temp, temData[i].select, onTap: () {
if (title == '固定模版') {
canChange = false;
marketingCenterProvider.saiYouYunFixedData.forEach((element) {
element.select = false;
});
// i 的select = true;
temData[i].select = true;
smsSelectValue = temData[i].temp;
controller.text = temData[i].content;
marketingCenterProvider.saiYouYunchangedData.forEach((element) {
element.select = false;
});
} else {
canChange = true;
marketingCenterProvider.saiYouYunchangedData.forEach((element) {
element.select = false;
});
// i 的select = true;
temData[i].select = true;
smsSelectValue = temData[i].temp;
controller.text = temData[i].content;
marketingCenterProvider.saiYouYunFixedData.forEach((element) {
element.select = false;
});
}
// if (title == '固定模版') {
canChange = false;
marketingCenterProvider.saiYouYunFixedData.forEach((element) {
element.select = false;
});
// i 的select = true;
temData[i].select = true;
smsSelectValue = temData[i].temp;
controller.text = temData[i].content;
marketingCenterProvider.saiYouYunchangedData.forEach((element) {
element.select = false;
});
// } else {
// canChange = true;
// marketingCenterProvider.saiYouYunchangedData.forEach((element) {
// element.select = false;
// });
// // i 的select = true;
// temData[i].select = true;
// smsSelectValue = temData[i].temp;
// controller.text = temData[i].content;
// marketingCenterProvider.saiYouYunFixedData.forEach((element) {
// element.select = false;
// });
// }
setState(() {});
}));
}
return data;
}
List<Widget> btnWidgets(List<String> temData) {
List<Widget> templateChangesWidgets(
String title, List<SaiYouYunChangeSunModel> temData) {
List<Widget> data = [];
for (var i = 0; i < temData.length; i++) {
data.add(btnItem(temData[i], true, onTap: () {
data.add(btnItem(temData[i].temp, temData[i].select, onTap: () {
canChange = true;
marketingCenterProvider.saiYouYunchangedData.forEach((element) {
element.select = false;
});
// i 的select = true;
contentChangeStart = temData[i].content.templateParam;
temData[i].select = true;
smsSelectValue = temData[i].temp;
controller.text = '';
// controller.text = temData[i].content.templateCode;
marketingCenterProvider.saiYouYunFixedData.forEach((element) {
element.select = false;
});
setState(() {});
}));
}
return data;
}
List<Widget> btnWidgets() {
List<Widget> data = [];
for (var i = 0;
i < marketingCenterProvider.smsChangeFieldData.length;
i++) {
data.add(btnItem(marketingCenterProvider.smsChangeFieldData[i].name, true,
onTap: () {
marketingCenterProvider.smsChangeFieldData[i].times++;
print(controller.text);
controller.text += marketingCenterProvider.smsChangeFieldData[i].show;
// setState(() {
// contentChangeStart += temData[i] + '\n';
// contentChangeStart +=
// marketingCenterProvider.smsChangeFieldData[i].name + '\n';
// });
// 在光标出插入内容
... ... @@ -174,11 +297,11 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
child: Wrap(
spacing: w(5),
runSpacing: w(5),
children: templateWidgets(
title,
title == '固定模版'
? marketingCenterProvider.saiYouYunFixedData
: marketingCenterProvider.saiYouYunchangedData),
children: title == '固定模版'
? templateWidgets(
title, marketingCenterProvider.saiYouYunFixedData)
: templateChangesWidgets(
title, marketingCenterProvider.saiYouYunchangedData),
))
],
),
... ... @@ -191,7 +314,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
Provider.of<MarketingCenterProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar('预订通知短信模板选择'),
appBar: SystemAppBar('预订通知短信模版选择'),
body: Column(
children: [
Expanded(
... ... @@ -200,7 +323,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_templeteWidget('固定模版'),
// _templeteWidget('可变模版'),
_templeteWidget('可变模版'),
VEmptyView(10),
Container(
width: double.infinity,
... ... @@ -255,7 +378,16 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
),
contentPadding: EdgeInsets.zero,
),
onChanged: (value) {},
onChanged: (value) {
//添加的代码:光标一直在文本框后面
controller.value = TextEditingValue(
text: controller.text,
selection:
TextSelection.fromPosition(TextPosition(
affinity: TextAffinity.downstream,
offset: controller.text.length,
)));
},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
... ... @@ -273,7 +405,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
crossAxisAlignment: WrapCrossAlignment.start,
spacing: w(10),
runSpacing: w(10),
children: btnWidgets(btnData),
children: btnWidgets(),
))
],
),
... ... @@ -336,7 +468,46 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
Utils.showToast('请选择模版类型');
return;
}
_setTempleteSMS();
if (canChange) {
if (controller.text.trim().length == 0) {
Utils.showToast('请输入内容后保存');
return;
}
bool canRequest = true;
outerloop:
marketingCenterProvider.smsChangeFieldData
.forEach((element) {
innerloop:
if (element.times > 0) {
int count =
controller.text.split(element.show).length -
1;
if (count != element.times) {
Utils.showToast('${element.show}不符合规范,请检查');
canRequest = false;
break innerloop;
}
}
});
print(controller.text);
String str = controller.text;
marketingCenterProvider.smsChangeFieldData
.forEach((element) {
if (str.contains(element.show)) {
str = str.replaceAll(element.show, element.code);
}
});
if (canRequest) {
print(controller.text);
//
_saveSaiYouYunChange(str);
}
print('fffff');
} else {
_setTempleteSMS();
}
},
),
)
... ...
... ... @@ -9,8 +9,10 @@ import '../constant/error.dart';
import '../models/GetDzSellerConfModel.dart';
import '../models/mark_data_model.dart';
import '../models/recharge_notice_model.dart';
import '../models/sai_you_yun_change_model.dart';
import '../models/sai_you_yun_model.dart';
import '../models/seller_template_color_list_model.dart';
import '../models/sms_change_field_model.dart';
import '../models/tableOuter.dart';
import '../net/base_resp.dart';
import '../net/dio_util.dart';
... ... @@ -44,7 +46,9 @@ class MarketingCenterProvider extends ChangeNotifier {
List<SellerTemplateColorListSunModel> templeteDatas = []; //后台配置的模版数据
List<SaiYouYunSunModel> saiYouYunFixedData = []; //塞邮云固定模版数据
List<SaiYouYunSunModel> saiYouYunchangedData = []; //塞邮云固定模版数据
List<SaiYouYunChangeSunModel> saiYouYunchangedData = []; //塞邮云可变模版数据
List<SmsChangeFieldSunModel> smsChangeFieldData = []; // 获取可变模板允许配置字段
// 获取赛邮云短信模板列表 (固定模版)
... ... @@ -74,6 +78,65 @@ class MarketingCenterProvider extends ChangeNotifier {
return false;
}
// 获取赛邮云短信模板列表 (可变模版)
Future<bool> getSaiYouYunChangeList(BuildContext context,
{bool showLoading = true}) async {
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false).user.sellerid
};
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(
context, Method.get, HttpUrl.get_sai_you_yun_change_list,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
Utils.showToast('请求失败,请重试');
return false;
});
if (baseResp.code == Constant.status_success) {
saiYouYunchangedData =
SaiYouYunChangeModel.fromJson(baseResp.responseData).data;
// if (saiYouYunFixedData.length > 0) {
// saiYouYunFixedData[0].select = true;
// }
// notifyListeners();
return true;
} else {
Utils.showToast(baseResp.msg ?? '请求失败,请重试');
}
return false;
}
// 获取可变模板允许配置字段
Future<bool> getSmsChangeField(BuildContext context,
{bool showLoading = true}) async {
// Map<String, String> params = {
// 'sid': Provider.of<UserModel>(context, listen: false).user.sellerid
// };
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.get_sms_change_field,
showLoading: showLoading)
.catchError((error) {
print(error.toString());
Utils.showToast('请求失败,请重试');
return false;
});
if (baseResp.code == Constant.status_success) {
smsChangeFieldData =
SmsChangeFieldModel.fromJson(baseResp.responseData).data;
// if (saiYouYunFixedData.length > 0) {
// saiYouYunFixedData[0].select = true;
// }
// notifyListeners();
return true;
} else {
Utils.showToast(baseResp.msg ?? '请求失败,请重试');
}
return false;
}
//获取桌位列表
getTableList(context, {needLoading = true}) async {
UserModel userModel = Provider.of<UserModel>(context, listen: false);
... ... @@ -160,6 +223,30 @@ class MarketingCenterProvider extends ChangeNotifier {
return false;
}
// 配置可变模板内容
Future<bool> saveSaiYouYunChange(
BuildContext context, Map<String, String> params,
{bool showLoading = true}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.save_sai_you_yun_change,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
Utils.showToast('配置可变模板内容失败,请重试');
return false;
});
if (baseResp.code == Constant.status_success) {
// if (baseResp.data == 0 || baseResp.data == 1) {
return true;
// } else {
// Utils.showToast('配置可变模板内容失败,请重试');
// }
} else {
Utils.showToast(baseResp.msg ?? '商配置可变模板内容失败,请重试');
}
return false;
}
// 设置订座商家配置信息
Future<bool> setConfing(BuildContext context, Map<String, String> params,
{bool showLoading = true, bool needToast = true}) async {
... ...
... ... @@ -1893,14 +1893,15 @@ class NavigatorUtil {
replace: replace);
}
///预订通知短信模板选择
///预订通知短信模版选择
static Future<dynamic> goSmsTemplateSettingPage(
BuildContext context,
String smsTemplate, {
String smsTemplate,
String bookinginfo, {
replace = false,
}) {
return _navigateTo(context,
"${Routes.sms_template_setting_page}?smsTemplate=${Uri.encodeComponent(smsTemplate)}",
"${Routes.sms_template_setting_page}?smsTemplate=${Uri.encodeComponent(smsTemplate)}&bookinginfo=${Uri.encodeComponent(bookinginfo)}",
replace: replace);
}
... ...
... ... @@ -3228,15 +3228,16 @@ var exportBookDataPageHandle = new Handler(
create: (_) => CustomerProvider(), child: ExportBookDataPage());
});
//预订通知短信模板选择
//预订通知短信模版选择
var smsTemplateSettingPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<String, List<Object>> params) {
// String rid = params["rid"].first;
String smsTemplate = params["smsTemplate"].first;
String bookinginfo = params["bookinginfo"].first;
return ChangeNotifierProvider<MarketingCenterProvider>(
create: (_) => MarketingCenterProvider(),
child: SmsTemplateSettingPage(smsTemplate: smsTemplate));
child: SmsTemplateSettingPage(smsTemplate: smsTemplate,bookinginfo:bookinginfo));
});
//优惠券海报
... ...