|
...
|
...
|
@@ -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();
|
|
...
|
...
|
@@ -40,6 +43,8 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { |
|
|
|
|
|
|
|
String smsSelectValue = '';
|
|
|
|
|
|
|
|
int _cursorPosition = 0;
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
// TODO: implement initState
|
|
...
|
...
|
@@ -51,6 +56,9 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { |
|
|
|
contentChangeStart =
|
|
|
|
'尊敬的贵宾,您好!\n诚挚感谢您选择${Provider.of<UserModel>(context, listen: false).user.sellername}用餐!\n';
|
|
|
|
_getSaiYouYunList();
|
|
|
|
// _getSaiYouYunChangeList();
|
|
|
|
// _getSmsChangeField();
|
|
|
|
_getData();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
...
|
...
|
@@ -69,6 +77,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.startsWith('\n') ? text : '\n' + 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,46 +187,95 @@ 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: () {
|
|
|
|
// setState(() {
|
|
|
|
// contentChangeStart += temData[i] + '\n';
|
|
|
|
// });
|
|
|
|
data.add(btnItem(temData[i].temp, temData[i].select, onTap: () {
|
|
|
|
if (!canChange) {
|
|
|
|
//从固定模版变更过来的,清空文本框内容
|
|
|
|
controller.text = '';
|
|
|
|
}
|
|
|
|
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 = 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);
|
|
|
|
|
|
|
|
// 获取当前光标位置
|
|
|
|
int cursorPosition = _cursorPosition;
|
|
|
|
|
|
|
|
// 插入文本
|
|
|
|
controller.text = controller.text.substring(0, cursorPosition) +
|
|
|
|
marketingCenterProvider.smsChangeFieldData[i].show +
|
|
|
|
controller.text.substring(cursorPosition);
|
|
|
|
|
|
|
|
print(controller.text);
|
|
|
|
|
|
|
|
// 设置新的光标位置
|
|
|
|
controller.selection = TextSelection.fromPosition(TextPosition(
|
|
|
|
offset: cursorPosition +
|
|
|
|
marketingCenterProvider.smsChangeFieldData[i].show.length,
|
|
|
|
affinity: TextAffinity.downstream));
|
|
|
|
setState(() {
|
|
|
|
_cursorPosition = controller.selection.baseOffset;
|
|
|
|
// cursorPosition = _cursorPosition;
|
|
|
|
});
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
return data;
|
|
...
|
...
|
@@ -174,11 +316,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 +333,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 +342,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { |
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
children: [
|
|
|
|
_templeteWidget('固定模版'),
|
|
|
|
// _templeteWidget('可变模版'),
|
|
|
|
_templeteWidget('可变模版'),
|
|
|
|
VEmptyView(10),
|
|
|
|
Container(
|
|
|
|
width: double.infinity,
|
|
...
|
...
|
@@ -255,7 +397,19 @@ 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,
|
|
|
|
// )));
|
|
|
|
setState(() {
|
|
|
|
_cursorPosition = controller.selection.baseOffset;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
onEditingComplete: () {
|
|
|
|
FocusScope.of(context)
|
|
|
|
.requestFocus(FocusNode()); //点击空白处隐藏键盘
|
|
...
|
...
|
@@ -273,7 +427,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { |
|
|
|
crossAxisAlignment: WrapCrossAlignment.start,
|
|
|
|
spacing: w(10),
|
|
|
|
runSpacing: w(10),
|
|
|
|
children: btnWidgets(btnData),
|
|
|
|
children: btnWidgets(),
|
|
|
|
))
|
|
|
|
],
|
|
|
|
),
|
|
...
|
...
|
@@ -336,7 +490,45 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> { |
|
|
|
Utils.showToast('请选择模版类型');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
_setTempleteSMS();
|
|
|
|
if (canChange) {
|
|
|
|
if (controller.text.trim().length == 0) {
|
|
|
|
Utils.showToast('请输入内容后保存');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool canRequest = marketingCenterProvider
|
|
|
|
.smsChangeFieldData
|
|
|
|
.every((element) {
|
|
|
|
if (element.times > 0) {
|
|
|
|
int count =
|
|
|
|
controller.text.split(element.show).length -
|
|
|
|
1;
|
|
|
|
|
|
|
|
if (count != element.times) {
|
|
|
|
Utils.showToast('${element.show}不符合规范,请检查');
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
});
|
|
|
|
|
|
|
|
if (canRequest) {
|
|
|
|
String tempStr = controller.text;
|
|
|
|
marketingCenterProvider.smsChangeFieldData
|
|
|
|
.forEach((element) {
|
|
|
|
if (tempStr.contains(element.show)) {
|
|
|
|
tempStr = tempStr.replaceAll(
|
|
|
|
element.show, element.code);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
_saveSaiYouYunChange(tempStr);
|
|
|
|
}
|
|
|
|
print('fffff');
|
|
|
|
} else {
|
|
|
|
_setTempleteSMS();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
),
|
|
|
|
)
|
...
|
...
|
|