Commit 47cf8fddc30446d8f0d41a9bb038e3f17dbebd71

Authored by wdn127929
1 parent 00480c7c

一个订单2分钟只能发送一次短信

... ... @@ -518,7 +518,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5100;
CURRENT_PROJECT_VERSION = 5101;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_MODE = release;
... ... @@ -664,7 +664,7 @@
CODE_SIGN_ENTITLEMENTS = "Runner/一键订Debug.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5100;
CURRENT_PROJECT_VERSION = 5101;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_MODE = release;
... ... @@ -700,7 +700,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5100;
CURRENT_PROJECT_VERSION = 5101;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_MODE = release;
... ...
... ... @@ -104,6 +104,8 @@ class NotebookDetail {
String gid;
String place_order_name; //下单人
String get statuImgAssets {
switch (status) {
case "0":
... ...
import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';
import 'dart:ui';
... ... @@ -265,10 +266,11 @@ class InvicationPageState extends State<InvicationPage>
affinity: TextAffinity.downstream,
offset: value.toString().length)));
});
couponProvider.sendSMS = 0;
// await _couponNetworkData(isShowLoading: false);
await _getCustomerActivityBaseinfo();
_getSmsInfo(context);
_timerShow();
await _getReserveDetail(showCicle: false);
await _getTablesPhoto();
... ... @@ -309,8 +311,61 @@ class InvicationPageState extends State<InvicationPage>
});
}
_timerShow() {
Map<String, dynamic> dataSp = {};
if (App.sp.containsKey('notebook_timer')) {
dataSp = json.decode(App.sp.getString('notebook_timer'));
}
if (dataSp.containsKey(widget.rid)) {
Map<String, dynamic> mapRid = dataSp[widget.rid];
int cacheSeconds = mapRid['cache_seconds']; //剩余时间
int nowMilli = mapRid['now_milli']; //缓存当前时间戳
DateTime startDate = DateTime.fromMillisecondsSinceEpoch(nowMilli);
//获取当前时间戳
int seconds =
DateTime.now().difference(startDate).inSeconds; // 924878906 秒
if (seconds < cacheSeconds) {
//开始倒计时
setState(() {
canSendSms = false;
showErroInfo = true;
erroInfo = '2分钟内只能发送一条短信';
couponProvider.sendSMS = 1;
smsTitle = '已发${couponProvider.sendSMS}次';
});
startCountdown(cacheSeconds - seconds);
} else {
couponProvider.sendSMS = 0;
setState(() {});
}
}
}
@override
void dispose() {
// App.sp.remove('notebook_timer');
if (countdownTime >= 1) {
//缓存当前订单的剩余倒计时时间
// App.sp.remove('notebook_timer');
Map<String, dynamic> dataSp = {};
if (App.sp.containsKey('notebook_timer')) {
dataSp = json.decode(App.sp.getString('notebook_timer'));
}
// if(dataSp.containsKey(widget.rid)){
// //当前rid 有缓存
// }
Map<String, dynamic> mapRid = {
'cache_seconds': countdownTime, //剩余时间
'now_milli': DateTime.now().millisecondsSinceEpoch //当前时间戳
};
dataSp[widget.rid] = mapRid;
App.sp.setString('notebook_timer', json.encode(dataSp));
}
removeOverlay();
Utils.changeStatusColor();
couponProvider.clearSelect();
... ... @@ -366,20 +421,37 @@ class InvicationPageState extends State<InvicationPage>
}
///倒计时方法
startCountdown() {
countdownTime = 60;
startCountdown(int countdownTimeTemp) {
final call = (timer) {
// setState(() {
if (countdownTime < 1) {
if (countdownTimeTemp < 1) {
countdownTime = countdownTimeTemp;
canSendSms = true;
if (erroInfo == '1分钟内只能发送一条短信') {
Map<String, dynamic> dataSp = {};
if (App.sp.containsKey('notebook_timer')) {
dataSp = json.decode(App.sp.getString('notebook_timer'));
}
if (dataSp.containsKey(widget.rid)) {
//当前rid 有缓存
dataSp.remove(widget.rid);
if (dataSp.length == 0) {
App.sp.remove('notebook_timer');
} else {
App.sp.setString('notebook_timer', json.encode(dataSp));
}
}
if (erroInfo == '2分钟内只能发送一条短信') {
setState(() {
showErroInfo = false;
couponProvider.sendSMS = 0;
smsTitle = '发短信';
});
}
_timer.cancel();
} else {
countdownTime -= 1;
countdownTimeTemp -= 1;
countdownTime = countdownTimeTemp;
}
// });
};
... ... @@ -2333,14 +2405,14 @@ class InvicationPageState extends State<InvicationPage>
mainAxisSize: MainAxisSize.min,
children: [
Image.asset(
Utils.getImgPath(erroInfo == '1分钟内只能发送一条短信'
Utils.getImgPath(erroInfo == '2分钟内只能发送一条短信'
? 'error_circle_yellow'
: 'error_circle_red'),
width: ScreenUtil().setWidth(40)),
HEmptyView(10),
Text(erroInfo,
style: TextStyle(
color: erroInfo == '1分钟内只能发送一条短信'
color: erroInfo == '2分钟内只能发送一条短信'
? MyColours.color_ED7B2F
: MyColours.color_E34D59,
fontSize: ScreenUtil().setSp(28))),
... ... @@ -4056,7 +4128,7 @@ class InvicationPageState extends State<InvicationPage>
smsTitle = '已发${couponProvider.sendSMS}次';
});
canSendSms = false;
startCountdown();
startCountdown(120);
} else {
if (couponProvider.errorSMS != '') {
setState(() {
... ... @@ -4073,10 +4145,10 @@ class InvicationPageState extends State<InvicationPage>
}
} else {
//显示1分钟只能发1次短信
//显示2分钟只能发1次短信
setState(() {
showErroInfo = true;
erroInfo = '1分钟内只能发送一条短信';
erroInfo = '2分钟内只能发送一条短信';
});
return;
}
... ... @@ -4133,7 +4205,7 @@ class InvicationPageState extends State<InvicationPage>
smsTitle = '已发${couponProvider.sendSMS}次';
});
canSendSms = false;
startCountdown();
startCountdown(120);
} else {
if (couponProvider.errorSMS != '') {
setState(() {
... ... @@ -4144,10 +4216,10 @@ class InvicationPageState extends State<InvicationPage>
}
}
} else {
//显示1分钟只能发1次短信
//显示2分钟只能发1次短信
setState(() {
showErroInfo = true;
erroInfo = '1分钟内只能发送一条短信';
erroInfo = '2分钟内只能发送一条短信';
});
return;
}
... ...
... ... @@ -91,6 +91,10 @@ class _CompleteCreateStorePageState extends State<CompleteCreateStorePage> {
//退出清空模块过期数据缓存
App.sp.remove('sellerEdateModule');
}
if (App.sp.containsKey('notebook_timer')) {
//退出清空订单发短信2分钟限制数据缓存
App.sp.remove('notebook_timer');
}
... ...
... ... @@ -160,6 +160,10 @@ class _IfNeedCreateStoreState extends State<IfNeedCreateStore>
//退出清空模块过期数据缓存
App.sp.remove('sellerEdateModule');
}
if (App.sp.containsKey('notebook_timer')) {
//退出清空订单发短信2分钟限制数据缓存
App.sp.remove('notebook_timer');
}
bus.emit('refresh_token');
Map<String, dynamic> seller = sunModel.toJson();
Map<String, dynamic> userMap = {
... ... @@ -200,7 +204,6 @@ class _IfNeedCreateStoreState extends State<IfNeedCreateStore>
// leftTitle: '上一步',
rightImgName: 'add_check_store.png', onTapRight: () async {
NavigatorUtil.goCollectStoreInfoPage(context);
}
// rightImgName: 'add_check_store.png', onTapRight: () {
... ...
... ... @@ -17,6 +17,8 @@ import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import '../../../../provider/collect_store_provider.dart';
class MyMarketingRecordsDetailPage extends StatefulWidget {
final String uid;
final String idstr;
... ... @@ -33,6 +35,7 @@ class _MyMarketingRecordsDetailPageState
extends State<MyMarketingRecordsDetailPage> {
CustomerProvider customerProvider;
String aidStr = '';
CollectStoreProvider collectStoreProvider;
@override
void initState() {
super.initState();
... ... @@ -42,6 +45,7 @@ class _MyMarketingRecordsDetailPageState
// }
// _getMarketingById();
_couponNetworkData();
getSellerVersion();
});
}
... ... @@ -50,6 +54,12 @@ class _MyMarketingRecordsDetailPageState
super.dispose();
}
getSellerVersion() async {
await collectStoreProvider.getSellerVersion(context);
setState(() {});
}
// _getMarketingById() async {
// Map<String, String> params = {"id": widget.idstr};
// await customerProvider.getMarketingById(context, params);
... ... @@ -83,6 +93,8 @@ class _MyMarketingRecordsDetailPageState
@override
Widget build(BuildContext context) {
customerProvider = Provider.of<CustomerProvider>(context, listen: true);
collectStoreProvider =
Provider.of<CollectStoreProvider>(context, listen: true);
return Scaffold(
backgroundColor: Color.fromRGBO(246, 248, 250, 1),
appBar: SystemAppBar(
... ... @@ -206,6 +218,14 @@ class _MyMarketingRecordsDetailPageState
horizontal: ScreenUtil().setWidth(200)),
isBold: false,
onPressed: () {
if (!collectStoreProvider.sellerMarketing) {
//没有购买客情营销模块
//提示购买
DialogUtil.showSellerVersionBuyDialog(
context, '客情营销', (v) {});
return;
}
NavigatorUtil.goMyMakeMarkingPage(context, widget.uid,
selfList: widget.selfList,
fromPage: FromPage.FromPageMakeRecordDetail);
... ...
... ... @@ -19,6 +19,8 @@ import 'package:provider/provider.dart';
import 'package:one_key/models/store_customer_home_model.dart'
as storeCustomerHomeModel;
import '../../../../provider/collect_store_provider.dart';
class MarketingRecordsDetailPage extends StatefulWidget {
final String idstr;
final List<storeCustomerHomeModel.SellerUser> sellerUser;
... ... @@ -33,6 +35,7 @@ class MarketingRecordsDetailPage extends StatefulWidget {
class _MarketingRecordsDetailPageState
extends State<MarketingRecordsDetailPage> {
CustomerProvider customerProvider;
CollectStoreProvider collectStoreProvider;
@override
void initState() {
super.initState();
... ... @@ -41,6 +44,7 @@ class _MarketingRecordsDetailPageState
// _getMarketingBySeller();
// }
_getMarketingById();
getSellerVersion();
});
}
... ... @@ -49,6 +53,12 @@ class _MarketingRecordsDetailPageState
super.dispose();
}
getSellerVersion() async {
await collectStoreProvider.getSellerVersion(context);
setState(() {});
}
_getMarketingById() async {
Map<String, String> params = {"id": widget.idstr};
await customerProvider.getMarketingById(context, params);
... ... @@ -145,6 +155,8 @@ class _MarketingRecordsDetailPageState
@override
Widget build(BuildContext context) {
customerProvider = Provider.of<CustomerProvider>(context, listen: true);
collectStoreProvider =
Provider.of<CollectStoreProvider>(context, listen: true);
return Scaffold(
backgroundColor: Color.fromRGBO(246, 248, 250, 1),
appBar: SystemAppBar(
... ... @@ -379,6 +391,14 @@ class _MarketingRecordsDetailPageState
horizontal: ScreenUtil().setWidth(200)),
isBold: false,
onPressed: () {
if (!collectStoreProvider.sellerMarketing) {
//没有购买客情营销模块
//提示购买
DialogUtil.showSellerVersionBuyDialog(
context, '客情营销', (v) {});
return;
}
// NavigatorUtil.goMyMakeMarkingPage(context,
// selfList: widget.selfList,
// fromPage: FromPage.FromPageMakeRecordDetail);
... ...
... ... @@ -17,6 +17,7 @@ import '../../../utils/screen_util.dart';
import '../../../widgets/round_button.dart';
import '../../constant/state.dart';
import '../../models/cookbook_model.dart';
import '../../models/guest_info_model.dart';
import '../../models/notebook_detail.dart';
import '../../models/plan_cook_list_model.dart';
import '../../provider/customer_provider.dart';
... ... @@ -69,6 +70,31 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
bus.off("refresh_order_advance_home");
}
_getGuestInfo() async {
if (widget.detailEntity.gid != null &&
widget.detailEntity.phone != null &&
widget.detailEntity.phone != '') {
Map<String, String> params = {
"uid": Provider.of<UserModel>(context, listen: false).user.openid,
"id": widget.detailEntity.gid,
'phone': widget.detailEntity.phone
};
CustomerProvider customerProvider =
Provider.of<CustomerProvider>(context, listen: false);
bool success = await customerProvider.getGuestInfo(context, params);
if (success) {
Guest guest = customerProvider.guestInfoSunModel.guest;
likeController.text = guest.like ?? '';
noFoodController.text = guest.taboos ?? '';
serviceController.text = guest.serve ?? '';
setState(() {});
}
}
// await customerProvider.searchData(customerProvider.controller.text);
}
_setGuestInfo() async {
Map<String, String> params = {
"id": widget.detailEntity.gid,
... ... @@ -112,8 +138,10 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
serviceController.text =
_planDishProvider.planCookByRidSunModel.serve ?? '';
name = _planDishProvider.planCookByRidSunModel.planName ?? "";
setState(() {});
} else {
_getGuestInfo();
}
setState(() {});
}
_getPageMenuData() async {
... ... @@ -729,22 +757,22 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
)),
InkWell(
onTap: () async {
Map object =
await NavigatorUtil.goOrderCustomerDetailEditPage(
context, widget.detailEntity);
if (object != null) {
if (object.containsKey('taboos')) {
noFoodController.text = object['taboos'];
}
if (object.containsKey('like')) {
likeController.text = object['like'];
}
if (object.containsKey('serve')) {
serviceController.text = object['serve'];
}
// Map object =
// await NavigatorUtil.goOrderCustomerDetailEditPage(
// context, widget.detailEntity);
// if (object != null) {
// if (object.containsKey('taboos')) {
// noFoodController.text = object['taboos'];
// }
// if (object.containsKey('like')) {
// likeController.text = object['like'];
// }
// if (object.containsKey('serve')) {
// serviceController.text = object['serve'];
// }
setState(() {});
}
// setState(() {});
// }
},
child: Container(
padding: EdgeInsets.only(
... ... @@ -753,15 +781,15 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'客户偏好参考',
'客户偏好',
style: TextStyle(
fontSize: font(16),
color: MyColours.color_515151),
),
Image.asset(
Utils.getImgPath('merge_arrow'),
width: w(20),
)
// Image.asset(
// Utils.getImgPath('merge_arrow'),
// width: w(20),
// )
],
),
)),
... ...
... ... @@ -380,6 +380,10 @@ class UserModel with ChangeNotifier {
//退出清空模块过期数据缓存
App.sp.remove('sellerEdateModule');
}
if (App.sp.containsKey('notebook_timer')) {
//退出清空订单发短信2分钟限制数据缓存
App.sp.remove('notebook_timer');
}
App.sp.setBool("isLogin", false);
// XgFlutterPlugin().stopXg();
... ...
... ... @@ -1225,7 +1225,10 @@ var marketingRecordsDetailPageHandle = new Handler(
}
return ChangeNotifierProvider<CustomerProvider>(
create: (_) => CustomerProvider(),
child: MarketingRecordsDetailPage(idstr: idstr, sellerUser: sellerUser));
child: ChangeNotifierProvider<CollectStoreProvider>(
create: (_) => CollectStoreProvider(),
child: MarketingRecordsDetailPage(
idstr: idstr, sellerUser: sellerUser)));
});
///我的营销记录详情 ---- 个人任务
... ... @@ -1238,8 +1241,10 @@ var myMarketingRecordsDetailPageHandle = new Handler(
return ChangeNotifierProvider<CustomerProvider>(
create: (_) => CustomerProvider(),
child: MyMarketingRecordsDetailPage(
idstr: idstr, selfList: selfList, uid: uid));
child: ChangeNotifierProvider<CollectStoreProvider>(
create: (_) => CollectStoreProvider(),
child: MyMarketingRecordsDetailPage(
idstr: idstr, selfList: selfList, uid: uid)));
});
///我的营销记录详情 ---- 全店任务
... ...