Commit ee8fc2d8abb8aa6805f87d71ad2b09efb296399f

Authored by wdn127929
1 parent a19c84af

群发短信 sms

@@ -191,7 +191,7 @@ class DioUtil { @@ -191,7 +191,7 @@ class DioUtil {
191 queryParameters: data, 191 queryParameters: data,
192 options: _checkOptions(method, options, needHeader: needHeader), 192 options: _checkOptions(method, options, needHeader: needHeader),
193 cancelToken: cancelToken); 193 cancelToken: cancelToken);
194 - _printHttpLog(response); 194 + _printHttpLog(response);
195 String _status; 195 String _status;
196 int _code; 196 int _code;
197 String _msg; 197 String _msg;
@@ -182,5 +182,11 @@ class HttpUrl { @@ -182,5 +182,11 @@ class HttpUrl {
182 "?service=App.GuestManage.CreateMarketing"; // 创建营销 182 "?service=App.GuestManage.CreateMarketing"; // 创建营销
183 static const String set_guest_info = 183 static const String set_guest_info =
184 "?service=App.GuestManage.SetGuestInfo"; // 修改客户信息 184 "?service=App.GuestManage.SetGuestInfo"; // 修改客户信息
  185 + static const String seller_guest_set =
  186 + "?service=App.GuestManage.SellerGuestSet"; // 商家修改客情配置
  187 + static const String create_label_by_sellerid =
  188 + "?service=App.GuestManage.CreateLabelBySellerid"; // 商家创建商家标签
  189 + static const String create_marketing_by_seller =
  190 + "?service=App.GuestManage.CreateMarketingBySeller"; // 商家创建营销
185 191
186 } 192 }
@@ -496,7 +496,8 @@ class _CustomerDetailPageState extends State<CustomerDetailPage> { @@ -496,7 +496,8 @@ class _CustomerDetailPageState extends State<CustomerDetailPage> {
496 fontSize: 26, 496 fontSize: 26,
497 isBold: false, 497 isBold: false,
498 onPressed: () { 498 onPressed: () {
499 - NavigatorUtil.goFestivalEditPage(context); 499 + NavigatorUtil.goFestivalEditPage(context,
  500 + customerProvider.guestInfoSunModel.guest);
500 }, 501 },
501 ), 502 ),
502 ], 503 ],
@@ -134,15 +134,14 @@ class _CustomerListPageState extends State<CustomerListPage> @@ -134,15 +134,14 @@ class _CustomerListPageState extends State<CustomerListPage>
134 onTap: () { 134 onTap: () {
135 if (customerProvider.selectCustomer == null || 135 if (customerProvider.selectCustomer == null ||
136 customerProvider.selectCustomer.length == 0) { 136 customerProvider.selectCustomer.length == 0) {
137 - Utils.showToast('请选择顾客'); 137 + Utils.showToast('请至少选择1名顾客');
138 return; 138 return;
139 } 139 }
140 customerMakingProvider.labels = customerProvider.labels; 140 customerMakingProvider.labels = customerProvider.labels;
141 customerMakingProvider.selectCustomer = 141 customerMakingProvider.selectCustomer =
142 customerProvider.selectCustomer; 142 customerProvider.selectCustomer;
143 customerMakingProvider.fromPage = widget.fromPage; 143 customerMakingProvider.fromPage = widget.fromPage;
144 - NavigatorUtil.goMakeMarkingPage(context,  
145 - Utils.listToStringEnglish(customerProvider.selectCustomer)); 144 + NavigatorUtil.goMakeMarkingPage(context);
146 }, 145 },
147 child: Container( 146 child: Container(
148 alignment: Alignment.center, 147 alignment: Alignment.center,
1 import 'package:flutter/material.dart'; 1 import 'package:flutter/material.dart';
2 import 'package:flutter_screenutil/flutter_screenutil.dart'; 2 import 'package:flutter_screenutil/flutter_screenutil.dart';
  3 +import 'package:one_key/provider/customer_provider.dart';
  4 +import 'package:one_key/provider/user_model.dart';
3 import 'package:one_key/res/colors.dart'; 5 import 'package:one_key/res/colors.dart';
4 import 'package:one_key/utils/dialog_util.dart'; 6 import 'package:one_key/utils/dialog_util.dart';
5 import 'package:one_key/utils/utils.dart'; 7 import 'package:one_key/utils/utils.dart';
6 import 'package:one_key/widgets/system_app_bar.dart'; 8 import 'package:one_key/widgets/system_app_bar.dart';
7 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';
8 11
9 class CustomerSettingPage extends StatefulWidget { 12 class CustomerSettingPage extends StatefulWidget {
10 CustomerSettingPage({Key key}) : super(key: key); 13 CustomerSettingPage({Key key}) : super(key: key);
@@ -15,6 +18,42 @@ class CustomerSettingPage extends StatefulWidget { @@ -15,6 +18,42 @@ class CustomerSettingPage extends StatefulWidget {
15 18
16 class _CustomerSettingPageState extends State<CustomerSettingPage> { 19 class _CustomerSettingPageState extends State<CustomerSettingPage> {
17 bool swichState = true; 20 bool swichState = true;
  21 + CustomerProvider customerProvider;
  22 +
  23 + @override
  24 + void initState() {
  25 + WidgetsBinding.instance.addPostFrameCallback((_) async {
  26 + // _getContantData();
  27 + });
  28 + }
  29 +
  30 + ///修改客情配置
  31 + _sellerGuestSet() async {
  32 + Map<String, String> params = {
  33 + "sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
  34 + 'is_additional': swichState ? "1" : "0"
  35 + };
  36 + bool success = await customerProvider.setSellerGuest(context, params);
  37 + if (success) {
  38 +
  39 + }
  40 + }
  41 +
  42 + ///商家创建商家标签
  43 + _createLabelBySellerid(String name) async {
  44 + Map<String, String> params = {
  45 + "sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
  46 + 'label': name
  47 + };
  48 + bool success =
  49 + await customerProvider.createLabelBySellerid(context, params);
  50 + if (success) {
  51 + //刷新当前标签列表
  52 + Utils.showToast('标签添加成功');
  53 + //调用获取标签接口
  54 + // 。。。。。。
  55 + }
  56 + }
18 57
19 //构建标签 58 //构建标签
20 List<Widget> _buildLabelItem(List<String> data) { 59 List<Widget> _buildLabelItem(List<String> data) {
@@ -51,9 +90,11 @@ class _CustomerSettingPageState extends State<CustomerSettingPage> { @@ -51,9 +90,11 @@ class _CustomerSettingPageState extends State<CustomerSettingPage> {
51 hintText: '例:高频客户', 90 hintText: '例:高频客户',
52 text: '', 91 text: '',
53 lenghtLimit: false, 92 lenghtLimit: false,
54 - toast: '请输入标签名称', rCallback: (name) { 93 + toast: '请输入标签名称',
  94 + lCallback: () {}, rCallback: (name) {
55 print(name); 95 print(name);
56 // _addCookbookClass(name, showLoading: true); 96 // _addCookbookClass(name, showLoading: true);
  97 + _createLabelBySellerid(name);
57 }); 98 });
58 }, 99 },
59 child: Container( 100 child: Container(
@@ -74,6 +115,7 @@ class _CustomerSettingPageState extends State<CustomerSettingPage> { @@ -74,6 +115,7 @@ class _CustomerSettingPageState extends State<CustomerSettingPage> {
74 115
75 @override 116 @override
76 Widget build(BuildContext context) { 117 Widget build(BuildContext context) {
  118 + customerProvider = Provider.of<CustomerProvider>(context, listen: true);
77 return Scaffold( 119 return Scaffold(
78 backgroundColor: Color.fromRGBO(246, 248, 250, 1), 120 backgroundColor: Color.fromRGBO(246, 248, 250, 1),
79 appBar: SystemAppBar( 121 appBar: SystemAppBar(
@@ -95,6 +137,7 @@ class _CustomerSettingPageState extends State<CustomerSettingPage> { @@ -95,6 +137,7 @@ class _CustomerSettingPageState extends State<CustomerSettingPage> {
95 setState(() { 137 setState(() {
96 swichState = !swichState; 138 swichState = !swichState;
97 }); 139 });
  140 + _sellerGuestSet();
98 }, 141 },
99 child: Row( 142 child: Row(
100 mainAxisAlignment: MainAxisAlignment.spaceBetween, 143 mainAxisAlignment: MainAxisAlignment.spaceBetween,
1 import 'package:flutter/material.dart'; 1 import 'package:flutter/material.dart';
2 import 'package:flutter_screenutil/screenutil.dart'; 2 import 'package:flutter_screenutil/screenutil.dart';
  3 +import 'package:one_key/models/guest_info_model.dart';
  4 +import 'package:one_key/provider/customer_provider.dart';
3 import 'package:one_key/res/colors.dart'; 5 import 'package:one_key/res/colors.dart';
4 import 'package:one_key/utils/dialog_util.dart'; 6 import 'package:one_key/utils/dialog_util.dart';
  7 +import 'package:one_key/utils/event_bus.dart';
5 import 'package:one_key/utils/utils.dart'; 8 import 'package:one_key/utils/utils.dart';
6 import 'package:one_key/widgets/h_empty_view.dart'; 9 import 'package:one_key/widgets/h_empty_view.dart';
7 import 'package:one_key/widgets/round_button.dart'; 10 import 'package:one_key/widgets/round_button.dart';
8 import 'package:one_key/widgets/system_app_bar.dart'; 11 import 'package:one_key/widgets/system_app_bar.dart';
9 import 'package:one_key/widgets/v_empty_view.dart'; 12 import 'package:one_key/widgets/v_empty_view.dart';
  13 +import 'package:provider/provider.dart';
10 14
11 class FestivalEditPage extends StatefulWidget { 15 class FestivalEditPage extends StatefulWidget {
12 - FestivalEditPage({Key key}) : super(key: key); 16 + final Guest guest;
  17 + FestivalEditPage({Key key, this.guest}) : super(key: key);
13 18
14 @override 19 @override
15 _FestivalEditPageState createState() => _FestivalEditPageState(); 20 _FestivalEditPageState createState() => _FestivalEditPageState();
16 } 21 }
17 22
18 class _FestivalEditPageState extends State<FestivalEditPage> { 23 class _FestivalEditPageState extends State<FestivalEditPage> {
  24 + CustomerProvider customerProvider;
  25 +
  26 + _setGuestInfo(String cday) async {
  27 + Map<String, String> params = {"id": widget.guest.id, 'c_day': cday};
  28 +
  29 + bool sucess =
  30 + await customerProvider.setGuestInfo(context, params, showLoading: true);
  31 + if (sucess) {
  32 + Utils.showToast('保存成功');
  33 + // 刷新
  34 + bus.emit('refresh_guest_info');
  35 + bus.emit('refresh_guest_list');
  36 + // Navigator.pop(context);
  37 + //刷新当前页? 还没做???????
  38 +
  39 + }
  40 + }
  41 +
19 @override 42 @override
20 Widget build(BuildContext context) { 43 Widget build(BuildContext context) {
  44 + customerProvider = Provider.of<CustomerProvider>(context, listen: true);
21 return Scaffold( 45 return Scaffold(
22 backgroundColor: MyColours.color_ffffff, 46 backgroundColor: MyColours.color_ffffff,
23 appBar: SystemAppBar( 47 appBar: SystemAppBar(
@@ -77,7 +101,14 @@ class _FestivalEditPageState extends State<FestivalEditPage> { @@ -77,7 +101,14 @@ class _FestivalEditPageState extends State<FestivalEditPage> {
77 height: ScreenUtil().setWidth(80), 101 height: ScreenUtil().setWidth(80),
78 fontSize: 26, 102 fontSize: 26,
79 isBold: false, 103 isBold: false,
80 - onPressed: () {}, 104 + onPressed: () {
  105 + DialogUtil.festivalAlertDialog(context, '', 520,
  106 + rCallback: (name) {
  107 + print(name);
  108 + _setGuestInfo(name);
  109 + // _addCookbookClass(name, showLoading: true);
  110 + });
  111 + },
81 ), 112 ),
82 VEmptyView(30) 113 VEmptyView(30)
83 ]))); 114 ])));
  1 +import 'dart:io';
  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_screenutil/screenutil.dart'; 5 import 'package:flutter_screenutil/screenutil.dart';
  6 +import 'package:flutter_sms/flutter_sms.dart';
4 import 'package:one_key/constant/state.dart'; 7 import 'package:one_key/constant/state.dart';
  8 +import 'package:one_key/models/customer_list_model.dart';
5 import 'package:one_key/pages/coupon/coupon_page.dart'; 9 import 'package:one_key/pages/coupon/coupon_page.dart';
6 import 'package:one_key/provider/customer_making_provider.dart'; 10 import 'package:one_key/provider/customer_making_provider.dart';
7 import 'package:one_key/provider/customer_provider.dart'; 11 import 'package:one_key/provider/customer_provider.dart';
@@ -15,12 +19,12 @@ import 'package:one_key/widgets/round_button.dart'; @@ -15,12 +19,12 @@ import 'package:one_key/widgets/round_button.dart';
15 import 'package:one_key/widgets/system_app_bar.dart'; 19 import 'package:one_key/widgets/system_app_bar.dart';
16 import 'package:one_key/widgets/v_empty_view.dart'; 20 import 'package:one_key/widgets/v_empty_view.dart';
17 import 'package:provider/provider.dart'; 21 import 'package:provider/provider.dart';
  22 +import 'package:sendsms/sendsms.dart';
18 23
19 typedef ClickCallback = void Function(dynamic value); 24 typedef ClickCallback = void Function(dynamic value);
20 25
21 class MakeMarkingPage extends StatefulWidget { 26 class MakeMarkingPage extends StatefulWidget {
22 - final String gid;  
23 - MakeMarkingPage({Key key, this.gid}) : super(key: key); 27 + MakeMarkingPage({Key key}) : super(key: key);
24 28
25 @override 29 @override
26 _MakeMarkingPageState createState() => _MakeMarkingPageState(); 30 _MakeMarkingPageState createState() => _MakeMarkingPageState();
@@ -32,13 +36,18 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> { @@ -32,13 +36,18 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> {
32 final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>(); 36 final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
33 FocusNode _focusNode = FocusNode(); 37 FocusNode _focusNode = FocusNode();
34 bool showDateSelWidget = false; 38 bool showDateSelWidget = false;
35 - String limitDate = ''; 39 +
36 CustomerProvider customerProvider; 40 CustomerProvider customerProvider;
37 CustomerMakingProvider customerMakingProvider; 41 CustomerMakingProvider customerMakingProvider;
  42 + bool needClear = true;
  43 + String gid = '';
  44 + String andriodPhone = '';
  45 + List<String> iosPhone = [];
38 46
39 @override 47 @override
40 void initState() { 48 void initState() {
41 super.initState(); 49 super.initState();
  50 +
42 _focusNode.addListener(() { 51 _focusNode.addListener(() {
43 if (_focusNode.hasFocus) { 52 if (_focusNode.hasFocus) {
44 //有焦点 53 //有焦点
@@ -52,6 +61,20 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> { @@ -52,6 +61,20 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> {
52 } 61 }
53 }); 62 });
54 WidgetsBinding.instance.addPostFrameCallback((_) async { 63 WidgetsBinding.instance.addPostFrameCallback((_) async {
  64 + for (CustomerListSunModel item in customerMakingProvider.selectCustomer) {
  65 + gid += '${item.id},';
  66 + if (Platform.isIOS) {
  67 + iosPhone.add(item.phone);
  68 + } else {
  69 + andriodPhone += "${item.phone};";
  70 + }
  71 + }
  72 + if (gid.endsWith(',')) {
  73 + gid = gid.substring(0, gid.length - 1);
  74 + }
  75 + if (!Platform.isIOS && andriodPhone.endsWith(';')) {
  76 + andriodPhone = andriodPhone.substring(0, andriodPhone.length - 1);
  77 + }
55 _couponNetworkData(isShowLoading: false); 78 _couponNetworkData(isShowLoading: false);
56 }); 79 });
57 } 80 }
@@ -59,7 +82,10 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> { @@ -59,7 +82,10 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> {
59 @override 82 @override
60 void dispose() { 83 void dispose() {
61 super.dispose(); 84 super.dispose();
62 - customerMakingProvider.clearData(); 85 + if (needClear) {
  86 + customerMakingProvider.clearData();
  87 + }
  88 + //
63 } 89 }
64 90
65 ///消费券 91 ///消费券
@@ -91,7 +117,7 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> { @@ -91,7 +117,7 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> {
91 } 117 }
92 Map<String, String> params = { 118 Map<String, String> params = {
93 "uid": Provider.of<UserModel>(context, listen: false).user.openid, 119 "uid": Provider.of<UserModel>(context, listen: false).user.openid,
94 - "gid": widget.gid, 120 + "gid": gid,
95 "content": customerMakingProvider.controller.text 121 "content": customerMakingProvider.controller.text
96 }; 122 };
97 if (customerMakingProvider.youhui != '选择优惠' && 123 if (customerMakingProvider.youhui != '选择优惠' &&
@@ -99,7 +125,74 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> { @@ -99,7 +125,74 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> {
99 params['aid'] = 125 params['aid'] =
100 '${customerProvider.couponListSelect[customerMakingProvider.couponSelectIndex].id}'; 126 '${customerProvider.couponListSelect[customerMakingProvider.couponSelectIndex].id}';
101 } 127 }
102 - await customerProvider.createMarketing(context, params); 128 + await customerProvider.createMarketing(context, params, showLoading: true);
  129 + _goSms();
  130 + }
  131 +
  132 + /// 商家创建营销
  133 + _createMarketingBySeller() async {
  134 + if (customerMakingProvider.controller.text.trim().length == 0) {
  135 + Utils.showToast('请输入营销内容');
  136 + return;
  137 + }
  138 + Map<String, String> params = {
  139 + "uid": Provider.of<UserModel>(context, listen: false).user.openid,
  140 + "sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
  141 + "gid": gid,
  142 + "content": customerMakingProvider.controller.text,
  143 + 'is_update': customerMakingProvider.isUpdate ? '0' : '1'
  144 + };
  145 +
  146 + if (customerMakingProvider.youhui != '选择优惠' &&
  147 + customerMakingProvider.isUse) {
  148 + params['aid'] =
  149 + '${customerProvider.couponListSelect[customerMakingProvider.couponSelectIndex].id}';
  150 + }
  151 + if (customerMakingProvider.isDate) {
  152 + if (customerMakingProvider.edate == '' ||
  153 + customerMakingProvider.edate == null) {
  154 + Utils.showToast('请选择最晚完成期限');
  155 + return;
  156 + }
  157 + params['edate'] = customerMakingProvider.edate;
  158 + }
  159 +
  160 + await customerProvider.createMarketingBySeller(context, params,
  161 + showLoading: true);
  162 + _goSms();
  163 + }
  164 +
  165 + _goSms() async {
  166 + // DialogUtil.cupertinoAlertDialog(context,
  167 + // title: '确认发送', content: '是否确定为当前所选顾客发送该优惠券', lCallback: () {
  168 + // print('取消发送');
  169 + // }, rCallback: () async {
  170 + if (Platform.isIOS) {
  171 + // List<String> phoneNumber = ['18161963378', '18729572142', '18765432345'];
  172 + String message = "test";
  173 + try {
  174 + String _result = await sendSMS(message: message, recipients: iosPhone);
  175 + print(_result);
  176 + } catch (error) {
  177 + print(error.toString());
  178 + }
  179 + } else {
  180 + print('确定发送');
  181 + // String phoneNumber = "18161963378;18729572142";
  182 + String message = "test";
  183 +
  184 + // await Sendsms.onGetPermission();
  185 +
  186 + // if (await Sendsms.hasPermission()) {
  187 + await Sendsms.onSendSMS(andriodPhone, message);
  188 + }
  189 +
  190 + // }
  191 + // SmsModel smsModel = new SmsModel();
  192 + // // String sms = await smsModel.getSmsContent(context, params);
  193 + // String phoneNumber = "";
  194 + // await Sendsms.onSendSMS(phoneNumber, '短信内容');
  195 + // });
103 } 196 }
104 197
105 _buttonChoose(String title, ClickCallback callback) { 198 _buttonChoose(String title, ClickCallback callback) {
@@ -313,25 +406,39 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> { @@ -313,25 +406,39 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> {
313 : Column( 406 : Column(
314 children: [ 407 children: [
315 VEmptyView(30), 408 VEmptyView(30),
316 - Row(children: [  
317 - Image.asset(  
318 - Utils.getImgPath(  
319 - true ? 'c_mul_select' : 'c_mul_select_un'),  
320 - width: ScreenUtil().setWidth(30)),  
321 - HEmptyView(15),  
322 - Text(  
323 - '客户经理不可修改短信内容',  
324 - style: TextStyle(  
325 - fontSize: ScreenUtil().setSp(26),  
326 - color: MyColours.color_333333),  
327 - ),  
328 - ]), 409 + InkWell(
  410 + onTap: () {
  411 + customerMakingProvider.isUpdate =
  412 + !customerMakingProvider.isUpdate;
  413 + setState(() {});
  414 + },
  415 + child: Row(children: [
  416 + Image.asset(
  417 + Utils.getImgPath(customerMakingProvider.isUpdate
  418 + ? 'c_mul_select'
  419 + : 'c_mul_select_un'),
  420 + width: ScreenUtil().setWidth(30)),
  421 + HEmptyView(15),
  422 + Text(
  423 + '客户经理不可修改短信内容',
  424 + style: TextStyle(
  425 + fontSize: ScreenUtil().setSp(26),
  426 + color: MyColours.color_333333),
  427 + ),
  428 + ])),
329 VEmptyView(30), 429 VEmptyView(30),
330 Row(children: [ 430 Row(children: [
331 - Image.asset(  
332 - Utils.getImgPath(  
333 - true ? 'c_mul_select' : 'c_mul_select_un'),  
334 - width: ScreenUtil().setWidth(30)), 431 + InkWell(
  432 + onTap: () {
  433 + customerMakingProvider.isDate =
  434 + !customerMakingProvider.isDate;
  435 + setState(() {});
  436 + },
  437 + child: Image.asset(
  438 + Utils.getImgPath(customerMakingProvider.isDate
  439 + ? 'c_mul_select'
  440 + : 'c_mul_select_un'),
  441 + width: ScreenUtil().setWidth(30))),
335 HEmptyView(15), 442 HEmptyView(15),
336 Text( 443 Text(
337 '最晚完成期限', 444 '最晚完成期限',
@@ -355,13 +462,15 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> { @@ -355,13 +462,15 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> {
355 if (value != null) { 462 if (value != null) {
356 setState(() { 463 setState(() {
357 print(value); 464 print(value);
358 - limitDate = DateUtil.formatDateStr(value,  
359 - format: DateFormats.full); 465 + customerMakingProvider.edate =
  466 + DateUtil.formatDateStr(value,
  467 + format: DateFormats.full);
360 }); 468 });
361 } 469 }
362 showDateSelWidget = false; 470 showDateSelWidget = false;
363 }, 471 },
364 - dateTime: DateUtil.getDateTime(limitDate), 472 + dateTime: DateUtil.getDateTime(
  473 + customerMakingProvider.edate),
365 onCancel: () { 474 onCancel: () {
366 showDateSelWidget = false; 475 showDateSelWidget = false;
367 }); 476 });
@@ -380,12 +489,12 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> { @@ -380,12 +489,12 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> {
380 color: Color.fromRGBO( 489 color: Color.fromRGBO(
381 175, 176, 177, 1), 490 175, 176, 177, 1),
382 width: ScreenUtil().setWidth(2)))), 491 width: ScreenUtil().setWidth(2)))),
383 - child: Text(  
384 - limitDate,  
385 - style: TextStyle(  
386 - fontSize: ScreenUtil().setSp(26),  
387 - color: MyColours.color_333333),  
388 - )), 492 + child: Text(customerMakingProvider.edate,
  493 + style: TextStyle(
  494 + fontSize: ScreenUtil().setSp(26),
  495 + color: customerMakingProvider.isDate
  496 + ? MyColours.color_333333
  497 + : MyColours.color_999999))),
389 Image.asset( 498 Image.asset(
390 Utils.getImgPath('c_arrow_down'), 499 Utils.getImgPath('c_arrow_down'),
391 width: ScreenUtil().setWidth(30), 500 width: ScreenUtil().setWidth(30),
@@ -442,6 +551,7 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> { @@ -442,6 +551,7 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> {
442 HEmptyView(10), 551 HEmptyView(10),
443 InkWell( 552 InkWell(
444 onTap: () { 553 onTap: () {
  554 + needClear = false;
445 Navigator.pop(context); 555 Navigator.pop(context);
446 // NavigatorUtil.goMarketingRecordsDetailPage(context); 556 // NavigatorUtil.goMarketingRecordsDetailPage(context);
447 }, 557 },
@@ -483,6 +593,9 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> { @@ -483,6 +593,9 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> {
483 FromPage.FromPageMyCustomer) { 593 FromPage.FromPageMyCustomer) {
484 //群发短信 594 //群发短信
485 _createMarketing(); 595 _createMarketing();
  596 + } else {
  597 + //确认下发任务
  598 + _createMarketingBySeller();
486 } 599 }
487 }, 600 },
488 ), 601 ),
1 import 'package:flutter/material.dart'; 1 import 'package:flutter/material.dart';
2 import 'package:one_key/constant/state.dart'; 2 import 'package:one_key/constant/state.dart';
  3 +import 'package:one_key/models/customer_list_model.dart';
3 4
4 class CustomerMakingProvider extends ChangeNotifier { 5 class CustomerMakingProvider extends ChangeNotifier {
5 String labels; 6 String labels;
6 - List<String> selectCustomer = []; 7 + List<CustomerListSunModel> selectCustomer = [];
7 TextEditingController controller = TextEditingController(); 8 TextEditingController controller = TextEditingController();
8 FromPage fromPage; 9 FromPage fromPage;
9 int couponSelectIndex = 0; 10 int couponSelectIndex = 0;
10 String youhui = '选择优惠'; 11 String youhui = '选择优惠';
11 bool isUse = true; //营销加入优惠 12 bool isUse = true; //营销加入优惠
  13 + bool isUpdate = true; //客户经理不可修改短信内容
  14 + bool isDate = true; //最晚完成期限
  15 + String edate = '';
12 16
13 clearData() { 17 clearData() {
14 labels = ''; 18 labels = '';
@@ -18,5 +22,8 @@ class CustomerMakingProvider extends ChangeNotifier { @@ -18,5 +22,8 @@ class CustomerMakingProvider extends ChangeNotifier {
18 couponSelectIndex = 0; 22 couponSelectIndex = 0;
19 youhui = '选择优惠'; 23 youhui = '选择优惠';
20 isUse = true; //营销加入优惠 24 isUse = true; //营销加入优惠
  25 + isUpdate = true; //客户经理不可修改短信内容
  26 + isDate = true; //最晚完成期限
  27 + edate = '';
21 } 28 }
22 } 29 }
@@ -37,7 +37,7 @@ class CustomerProvider extends ChangeNotifier { @@ -37,7 +37,7 @@ class CustomerProvider extends ChangeNotifier {
37 PageState pageStateGuestReserve = PageState.Loading; //订单统计 37 PageState pageStateGuestReserve = PageState.Loading; //订单统计
38 GuestInfoSunModel guestInfoSunModel; 38 GuestInfoSunModel guestInfoSunModel;
39 GuestReserveSunModel guestReserveSunModel; 39 GuestReserveSunModel guestReserveSunModel;
40 - List<String> selectCustomer = []; 40 + List<CustomerListSunModel> selectCustomer = [];
41 int index = 0; 41 int index = 0;
42 bool checkValue = true; 42 bool checkValue = true;
43 String labels = ''; 43 String labels = '';
@@ -350,7 +350,7 @@ class CustomerProvider extends ChangeNotifier { @@ -350,7 +350,7 @@ class CustomerProvider extends ChangeNotifier {
350 selectCustomer = []; 350 selectCustomer = [];
351 for (var i = 0; i < temp.length; i++) { 351 for (var i = 0; i < temp.length; i++) {
352 temp[i].select = true; 352 temp[i].select = true;
353 - selectCustomer.add(temp[i].id); 353 + selectCustomer.add(temp[i]);
354 } 354 }
355 _giveValue(temp); 355 _giveValue(temp);
356 checkValue = true; 356 checkValue = true;
@@ -408,7 +408,7 @@ class CustomerProvider extends ChangeNotifier { @@ -408,7 +408,7 @@ class CustomerProvider extends ChangeNotifier {
408 List<CustomerListSunModel> temp = returnNowList(); 408 List<CustomerListSunModel> temp = returnNowList();
409 temp[index].select = true; 409 temp[index].select = true;
410 _giveValue(temp); 410 _giveValue(temp);
411 - selectCustomer.add(temp[index].id); 411 + selectCustomer.add(temp[index]);
412 labelsValue(); 412 labelsValue();
413 notifyListeners(); 413 notifyListeners();
414 } 414 }
@@ -619,4 +619,85 @@ class CustomerProvider extends ChangeNotifier { @@ -619,4 +619,85 @@ class CustomerProvider extends ChangeNotifier {
619 } 619 }
620 return guestSunmodel; 620 return guestSunmodel;
621 } 621 }
  622 +
  623 + /** 商家客情 */
  624 +
  625 + //商家修改客情配置
  626 + Future<bool> setSellerGuest(BuildContext context, Map<String, String> params,
  627 + {bool showLoading = false}) async {
  628 + BaseResp<dynamic> baseResp = await DioUtil()
  629 + .request<dynamic>(context, Method.get, HttpUrl.seller_guest_set,
  630 + data: params, showLoading: showLoading)
  631 + .catchError((error) {
  632 + print(error.toString());
  633 + if (error is MyError) {}
  634 + notifyListeners();
  635 + });
  636 + if (baseResp != null && baseResp.code == Constant.status_success) {
  637 + // guestReserveSunModel =
  638 + // GuestReserveModel.fromJson(baseResp.responseData).data;
  639 + if (baseResp.responseData['data'] == 1 ||
  640 + baseResp.responseData['data'] == 0) {
  641 + return true;
  642 + }
  643 + return false;
  644 + } else {
  645 + if (baseResp != null) {
  646 + Utils.showToast(baseResp.msg ?? "");
  647 + }
  648 + return false;
  649 + }
  650 + }
  651 +
  652 +// 商家创建商家标签
  653 + Future<bool> createLabelBySellerid(
  654 + BuildContext context, Map<String, String> params,
  655 + {bool showLoading = false}) async {
  656 + BaseResp<dynamic> baseResp = await DioUtil()
  657 + .request<dynamic>(context, Method.get, HttpUrl.create_label_by_sellerid,
  658 + data: params, showLoading: showLoading)
  659 + .catchError((error) {
  660 + print(error.toString());
  661 + if (error is MyError) {}
  662 + notifyListeners();
  663 + });
  664 + if (baseResp != null && baseResp.code == Constant.status_success) {
  665 + // guestReserveSunModel =
  666 + // GuestReserveModel.fromJson(baseResp.responseData).data;
  667 + if (baseResp.responseData['data'] != null &&
  668 + baseResp.responseData['data']['id'] != '') {
  669 + return true;
  670 + }
  671 + return false;
  672 + } else {
  673 + if (baseResp != null) {
  674 + Utils.showToast(baseResp.msg ?? "");
  675 + }
  676 + return false;
  677 + }
  678 + }
  679 +
  680 + // 商家创建营销
  681 + createMarketingBySeller(BuildContext context, Map<String, String> params,
  682 + {bool showLoading = false}) async {
  683 + BaseResp<dynamic> baseResp = await DioUtil()
  684 + .request<dynamic>(
  685 + context, Method.get, HttpUrl.create_marketing_by_seller,
  686 + data: params, showLoading: showLoading)
  687 + .catchError((error) {
  688 + print(error.toString());
  689 + if (error is MyError) {}
  690 + notifyListeners();
  691 + });
  692 + if (baseResp != null && baseResp.code == Constant.status_success) {
  693 + // guestReserveSunModel =
  694 + // GuestReserveModel.fromJson(baseResp.responseData).data;
  695 + notifyListeners();
  696 + } else {
  697 + if (baseResp != null) {
  698 + Utils.showToast(baseResp.msg ?? "");
  699 + }
  700 + }
  701 + notifyListeners();
  702 + }
622 } 703 }
@@ -567,9 +567,9 @@ class NavigatorUtil { @@ -567,9 +567,9 @@ class NavigatorUtil {
567 } 567 }
568 568
569 /// 创建营销 569 /// 创建营销
570 - static Future<dynamic> goMakeMarkingPage(BuildContext context, String gid, 570 + static Future<dynamic> goMakeMarkingPage(BuildContext context,
571 {replace = false}) { 571 {replace = false}) {
572 - return _navigateTo(context, "${Routes.make_marketing_page}?gid=$gid", 572 + return _navigateTo(context, "${Routes.make_marketing_page}",
573 replace: replace); 573 replace: replace);
574 } 574 }
575 575
@@ -599,10 +599,12 @@ class NavigatorUtil { @@ -599,10 +599,12 @@ class NavigatorUtil {
599 599
600 ///纪念日 600 ///纪念日
601 static Future<dynamic> goFestivalEditPage( 601 static Future<dynamic> goFestivalEditPage(
602 - BuildContext context, { 602 + BuildContext context,
  603 + Guest guest, {
603 replace = false, 604 replace = false,
604 }) { 605 }) {
605 - return _navigateTo(context, "${Routes.festival_edit_page}", 606 + return _navigateTo(context,
  607 + "${Routes.festival_edit_page}?guest=${FluroConvertUtils.object2string(guest)}",
606 replace: replace); 608 replace: replace);
607 } 609 }
608 610
@@ -891,10 +891,10 @@ var marketingRecordsDetailPageHandle = new Handler( @@ -891,10 +891,10 @@ var marketingRecordsDetailPageHandle = new Handler(
891 ///创建营销 891 ///创建营销
892 var makeMarkingPageHandle = new Handler( 892 var makeMarkingPageHandle = new Handler(
893 handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) { 893 handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) {
894 - String gid = params["gid"].first; 894 + // String gid = params["gid"].first;
895 895
896 return ChangeNotifierProvider<CustomerProvider>( 896 return ChangeNotifierProvider<CustomerProvider>(
897 - create: (_) => CustomerProvider(), child: MakeMarkingPage(gid: gid)); 897 + create: (_) => CustomerProvider(), child: MakeMarkingPage());
898 }); 898 });
899 899
900 ///客户详情 900 ///客户详情
@@ -938,8 +938,13 @@ var festivalEditPageHandle = new Handler( @@ -938,8 +938,13 @@ var festivalEditPageHandle = new Handler(
938 // UserHistoryEntity userHistoryEntity = UserHistoryEntity.fromJson(json.decode( 938 // UserHistoryEntity userHistoryEntity = UserHistoryEntity.fromJson(json.decode(
939 // FluroConvertUtils.fluroCnParamsDecode( 939 // FluroConvertUtils.fluroCnParamsDecode(
940 // params["userHistoryEntity"].first))); 940 // params["userHistoryEntity"].first)));
  941 + Guest guest = Guest.fromJson(json
  942 + .decode(FluroConvertUtils.fluroCnParamsDecode(params["guest"].first)));
941 return ChangeNotifierProvider<CustomerProvider>( 943 return ChangeNotifierProvider<CustomerProvider>(
942 - create: (_) => CustomerProvider(), child: FestivalEditPage()); 944 + create: (_) => CustomerProvider(),
  945 + child: FestivalEditPage(
  946 + guest: guest,
  947 + ));
943 }); 948 });
944 949
945 ///客户订单 950 ///客户订单
@@ -1944,8 +1944,9 @@ class DialogUtil { @@ -1944,8 +1944,9 @@ class DialogUtil {
1944 daySuffix: "日", 1944 daySuffix: "日",
1945 minHour: 00, 1945 minHour: 00,
1946 maxHour: 23, 1946 maxHour: 23,
1947 - yearBegin: 2021, 1947 + yearBegin: DateTime.now().year,
1948 yearEnd: 2030, 1948 yearEnd: 2030,
  1949 + minValue: DateTime.now(),
1949 value: dateTime), 1950 value: dateTime),
1950 title: new Text(""), 1951 title: new Text(""),
1951 height: ScreenUtil().setWidth(480), 1952 height: ScreenUtil().setWidth(480),
@@ -2476,25 +2477,23 @@ class DialogUtil { @@ -2476,25 +2477,23 @@ class DialogUtil {
2476 stateSetter(() { 2477 stateSetter(() {
2477 gongli = !gongli; 2478 gongli = !gongli;
2478 }); 2479 });
2479 - if (dayStr != '') {  
2480 - List dayList = updateDay(  
2481 - gongli,  
2482 - yearStr == '选填'  
2483 - ? DateTime.now()  
2484 - .year  
2485 - .toString()  
2486 - : yearStr,  
2487 - monthStr == ''  
2488 - ? DateTime.now()  
2489 - .month  
2490 - .toString()  
2491 - : monthStr);  
2492 - if (!dayList.contains(dayStr)) {  
2493 - stateSetter(() {  
2494 - dayStr = '';  
2495 - });  
2496 - } 2480 + if (dayStr != '') {
  2481 + List dayList = updateDay(
  2482 + gongli,
  2483 + yearStr == '选填'
  2484 + ? DateTime.now().year.toString()
  2485 + : yearStr,
  2486 + monthStr == ''
  2487 + ? DateTime.now()
  2488 + .month
  2489 + .toString()
  2490 + : monthStr);
  2491 + if (!dayList.contains(dayStr)) {
  2492 + stateSetter(() {
  2493 + dayStr = '';
  2494 + });
2497 } 2495 }
  2496 + }
2498 }, 2497 },
2499 child: Container( 2498 child: Container(
2500 padding: EdgeInsets.symmetric( 2499 padding: EdgeInsets.symmetric(
@@ -2781,8 +2780,26 @@ class DialogUtil { @@ -2781,8 +2780,26 @@ class DialogUtil {
2781 Utils.showToast('请输入纪念日名称'); 2780 Utils.showToast('请输入纪念日名称');
2782 return; 2781 return;
2783 } 2782 }
  2783 + if (monthStr == '' ||
  2784 + monthStr == null ||
  2785 + dayStr == '' ||
  2786 + dayStr == null) {
  2787 + Utils.showToast('请输入完整纪念日日期');
  2788 + return;
  2789 + }
  2790 +
2784 Navigator.of(context).pop(); 2791 Navigator.of(context).pop();
2785 - rCallback(name); 2792 + String str = '';
  2793 + str += '${name}:';
  2794 + if (yearStr != '' &&
  2795 + yearStr != null &&
  2796 + yearStr != '选填') {
  2797 + str += '${yearStr}年';
  2798 + }
  2799 + str += '${monthStr}月';
  2800 + str += '${dayStr}日';
  2801 + str += '(${gongli ? '公历' : '农历'})';
  2802 + rCallback(str);
2786 }, 2803 },
2787 ), 2804 ),
2788 ], 2805 ],