Commit 0744959ed58465950435028081959d2f4f2fa5e9

Authored by wdn127929
1 parent a39bae06

设置配置项

... ... @@ -63,6 +63,13 @@ class GetDzSellerConfSunModel {
String storePushMeg;
String storePushSms;
String pcNotPhone;
String isCustomerCancel;
String isAddOver; //是否允许新建过去订单
String isSetOver; //是否允许修改过去订单
String isReserveOver; //是否允许变更订单到过去餐段
GetDzSellerConfSunModel(
{this.id,
this.sid,
... ... @@ -93,7 +100,12 @@ class GetDzSellerConfSunModel {
this.depositPrice,
this.liteStyle,
this.storePushMeg,
this.storePushSms});
this.storePushSms,
this.pcNotPhone,
this.isCustomerCancel,
this.isAddOver,
this.isSetOver,
this.isReserveOver});
GetDzSellerConfSunModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
... ... @@ -139,6 +151,12 @@ class GetDzSellerConfSunModel {
storePushMeg = json['store_push_meg'];
storePushSms = json['store_push_sms'];
pcNotPhone = json['pc_not_phone'];
isCustomerCancel = json['is_customer_cancel'];
isAddOver = json['is_add_over'];
isSetOver = json['is_set_over'];
isReserveOver = json['is_reserve_over'];
}
Map<String, dynamic> toJson() {
... ... @@ -175,6 +193,13 @@ class GetDzSellerConfSunModel {
data['lite_style'] = this.liteStyle;
data['store_push_meg'] = this.storePushMeg;
data['store_push_sms'] = this.storePushSms;
data['pc_not_phone'] = this.pcNotPhone;
data['is_customer_cancel'] = this.isCustomerCancel;
data['is_add_over'] = this.isAddOver;
data['is_set_over'] = this.isSetOver;
data['is_reserve_over'] = this.isReserveOver;
return data;
}
}
... ...
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
... ... @@ -12,6 +14,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 '../../../../provider/marketing_center_provider.dart';
import '../../../../utils/screen_util.dart';
import '../../../../widgets/h_empty_view.dart';
import '../../../../widgets/round_button.dart';
... ... @@ -30,17 +33,44 @@ class _CustomerSettingPageState extends State<CustomerSettingPage> {
String memberShow = '';
bool showLabel = false;
MarketingCenterProvider marketingCenterProvider;
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) async {
// _getContantData();
_sellerGuestGet();
_getLabelBySellerid();
getDzSellerConf();
});
}
getDzSellerConf() async {
bool success = await marketingCenterProvider.getDzSellerConf(context);
if (success && marketingCenterProvider.dzSellerConfModel != null) {
customerProvider.ispcphone =
marketingCenterProvider.dzSellerConfModel.pcNotPhone == '1'
? true
: false;
customerProvider.isAddOver =
marketingCenterProvider.dzSellerConfModel.isAddOver == '1'
? true
: false;
customerProvider.isSetOver =
marketingCenterProvider.dzSellerConfModel.isSetOver == '1'
? true
: false;
customerProvider.isReserveOver =
marketingCenterProvider.dzSellerConfModel.isReserveOver == '1'
? true
: false;
}
setState(() {});
}
///修改客情配置
_sellerGuestSet() async {
Future<bool> _sellerGuestSet() async {
Map<String, String> params = {
"sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
'is_additional': customerProvider.isrepair ? "1" : "0",
... ... @@ -48,12 +78,55 @@ class _CustomerSettingPageState extends State<CustomerSettingPage> {
};
bool success = await customerProvider.setSellerGuest(context, params,
showLoading: true);
if (success) {}
if (success) {
return true;
} else {
return false;
}
}
_saveData() async {
Future.wait<bool>([
_setConfings(),
_sellerGuestSet(),
]).then((results) async {
print(results[0]);
if (results[0] && results[1]) {
// 全部保存成功
Utils.showToast('保存成功!');
} else if (results[0]) {
Utils.showToast('保存失败,请重试');
} else if (results[1]) {
Utils.showToast('保存失败,请重试');
} else {
//都失败
Utils.showToast('保存失败,请重试');
}
});
}
Future<bool> _setConfings() async {
Map<String, dynamic> data = {
"pc_not_phone": customerProvider.ispcphone ? '1' : '0',
"is_add_over": customerProvider.isAddOver?'1':'0',
"is_set_over": customerProvider.isSetOver ? '1' : '0',
"is_reserve_over": customerProvider.isReserveOver ? '1' : '0'
};
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
'data': jsonEncode(data),
};
bool success = await marketingCenterProvider.setConfings(context, params,
needToast: false);
if (success) {
return true;
} else {
return false;
}
}
///获取客情配置
_sellerGuestGet() async {
bool success = await customerProvider.getSellerGuest(context);
// if (success) {
... ... @@ -215,6 +288,8 @@ class _CustomerSettingPageState extends State<CustomerSettingPage> {
@override
Widget build(BuildContext context) {
customerProvider = Provider.of<CustomerProvider>(context, listen: true);
marketingCenterProvider =
Provider.of<MarketingCenterProvider>(context, listen: true);
return KeyboardDismissOnTap(
child: Scaffold(
backgroundColor: MyColours.color_ffffff,
... ... @@ -318,6 +393,162 @@ class _CustomerSettingPageState extends State<CustomerSettingPage> {
w(1),
color: MyColours.color_E7E7E7,
)),
VEmptyView(24),
InkWell(
onTap: () {
setState(() {
customerProvider.ispcphone = !customerProvider.ispcphone;
});
},
child: Container(
padding: EdgeInsets.symmetric(
vertical: w(8), horizontal: w(14)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text('PC端预订允许不录入客户电话',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28))),
Image.asset(
customerProvider.ispcphone
? Utils.getImgPath('swich_on')
: Utils.getImgPath('swich_off'),
width: ScreenUtil().setWidth(88),
// height: ScreenUtil().setWidth(82),
),
],
),
)),
Padding(
padding: EdgeInsets.only(left: w(14), right: w(10)),
child: MyDivider(
double.infinity,
w(1),
color: MyColours.color_E7E7E7,
)),
VEmptyView(48),
Container(
padding: EdgeInsets.symmetric(vertical: w(8)),
child: Text('历史订单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(32)))),
VEmptyView(22),
MyDivider(
double.infinity,
w(1),
color: MyColours.color_E7E7E7,
),
VEmptyView(24),
InkWell(
onTap: () {
setState(() {
customerProvider.isAddOver = !customerProvider.isAddOver;
});
// _sellerGuestSet();
},
child: Container(
padding: EdgeInsets.symmetric(
vertical: w(8), horizontal: w(14)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text('允许新建过去餐段的订单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28))),
Image.asset(
customerProvider.isAddOver
? Utils.getImgPath('swich_on')
: Utils.getImgPath('swich_off'),
width: ScreenUtil().setWidth(88),
// height: ScreenUtil().setWidth(82),
),
],
)),
),
Padding(
padding: EdgeInsets.only(left: w(14), right: w(10)),
child: MyDivider(
double.infinity,
w(1),
color: MyColours.color_E7E7E7,
)),
VEmptyView(24),
InkWell(
onTap: () {
setState(() {
customerProvider.isSetOver =
!customerProvider.isSetOver;
});
},
child: Container(
padding: EdgeInsets.symmetric(
vertical: w(8), horizontal: w(14)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text('允许变更过去餐段订单的时间',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28))),
Image.asset(
customerProvider.isSetOver
? Utils.getImgPath('swich_on')
: Utils.getImgPath('swich_off'),
width: ScreenUtil().setWidth(88),
// height: ScreenUtil().setWidth(82),
),
],
),
)),
Padding(
padding: EdgeInsets.only(left: w(14), right: w(10)),
child: MyDivider(
double.infinity,
w(1),
color: MyColours.color_E7E7E7,
)),
VEmptyView(24),
InkWell(
onTap: () {
setState(() {
customerProvider.isReserveOver =
!customerProvider.isReserveOver;
});
},
child: Container(
padding: EdgeInsets.symmetric(
vertical: w(8), horizontal: w(14)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text('允许变更订单到过去餐段',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28))),
Image.asset(
customerProvider.isReserveOver
? Utils.getImgPath('swich_on')
: Utils.getImgPath('swich_off'),
width: ScreenUtil().setWidth(88),
// height: ScreenUtil().setWidth(82),
),
],
),
)),
Padding(
padding: EdgeInsets.only(left: w(14), right: w(10)),
child: MyDivider(
double.infinity,
w(1),
color: MyColours.color_E7E7E7,
)),
VEmptyView(48),
Text('店内自定义标签',
style: TextStyle(
... ... @@ -360,7 +591,7 @@ class _CustomerSettingPageState extends State<CustomerSettingPage> {
fontSize: 28,
textColor: MyColours.color_ffffff,
onPressed: () {
_sellerGuestSet();
_saveData();
},
),
)
... ...
... ... @@ -53,6 +53,7 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
bool isLink = false; //充值优惠活动链接
bool isCoupon = false; // 代金券
bool isRecharge = false; //充值券
bool isCustomerCancel = true; //向客人开放取消预订功能
RechargeListSunModel rechargeData;
String rechargeContent = '';
... ... @@ -71,6 +72,7 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
// _couponNetworkData();
_getNewRechargeList();
getSellerTemplateConf();
getDzSellerConf();
// bus.on('refresh_marketting_page', (arg) {
// _couponNetworkData();
// });
... ... @@ -129,6 +131,17 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
}
}
getDzSellerConf() async {
bool success = await marketingCenterProvider.getDzSellerConf(context);
if (success && marketingCenterProvider.dzSellerConfModel != null) {
isCustomerCancel =
marketingCenterProvider.dzSellerConfModel.isCustomerCancel == '1'
? true
: false;
}
setState(() {});
}
getSellerTemplateConf() async {
bool success = await marketingCenterProvider.getSellerTemplateConf(context);
if (success && marketingCenterProvider.markDataModel.marketing != null) {
... ... @@ -286,8 +299,8 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
if (need) {
file = File(compressedFile.absolute.path);
}
UploadImageUtil()
.startUploadOnly(context, file, 4, true, _uploadImageProvider,(){});
UploadImageUtil().startUploadOnly(
context, file, 4, true, _uploadImageProvider, () {});
}
}
}
... ... @@ -968,6 +981,103 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
// return couponsDesc;
// }
_saveData() async {
Future.wait<bool>([
_setConfings(),
_setIntavition(),
]).then((results) async {
print(results[0]);
if (results[0] && results[1]) {
// 全部保存成功
Utils.showToast('保存成功!');
Navigator.pop(context);
} else if (results[0]) {
Utils.showToast('保存失败,请重试');
} else if (results[1]) {
Utils.showToast('保存失败,请重试');
} else {
//都失败
Utils.showToast('保存失败,请重试');
}
});
}
Future<bool> _setConfings() async {
Map<String, dynamic> data = {
"is_customer_cancel": isCustomerCancel ? '1' : '0',
};
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
'data': jsonEncode(data),
};
bool success = await marketingCenterProvider.setConfings(context, params,
needToast: false);
if (success) {
return true;
} else {
return false;
}
}
Future<bool> _setIntavition() async {
// FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
// if (_uploadImageProvider.firstImage.qiniuUrl == null) {
// Utils.showToast('请上传餐厅logo!');
// return false;
// }
// if (_uploadImageProvider.firstImage.process < 1) {
// Utils.showToast('正在上传餐厅logo!,请稍等');
// return false;
// }
// if (welcomeTextC.text.trim().length == 0) {
// Utils.showToast('请输入输入餐厅欢迎语!');
// return false;
// }
Map marketing = {};
if (marketingCenterProvider.markDataModel != null &&
marketingCenterProvider.markDataModel.marketing != null) {
marketing = marketingCenterProvider.markDataModel.marketing.toJson();
}
print(marketing);
marketing['is_transpond'] = isTranspond ? '1' : '0'; //转发同行客人
marketing['is_online_book'] = isOnlineBook ? '1' : '0'; //在线预订
marketing['is_arrival'] = isArrival ? '1' : '0'; //确认到店
// //接口
// Map marketingData = {
// // 'isTranspond': isTranspond ? '1' : '0', //转发同行客人
// 'is_transpond': '1', //转发同行客人
// 'is_arrival': isArrival ? '1' : '0', //确认到店
// 'is_online_book': isOnlineBook ? '1' : '0', //在线预订
// 'is_order': isOrder ? '1' : '0', //去点餐
// 'is_coupon': isCoupon ? '1' : '0', //代金券暂时
// 'is_recharge': isRecharge ? '1' : '0', //充值券暂时
// 'is_link': isLink ? '1' : '0',
// // 'is_link': '0',
// 'wecomle': welcomeTextC.text ?? '',
// 'logo': _uploadImageProvider.firstImage.qiniuUrl,
// 'recharge_data': rechargeData,
// 'coupon_data': json.encode(couponDataList),
// 'is_comments': isComments ? '1' : '0',
// 'is_comments_coupon': isCommentsCoupon ? '1' : '0',
// 'coupon_data_comments': json.encode(couponDataListComments),
// };
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
'marketing': json.encode(marketing)
};
bool success = await marketingCenterProvider
.setSellerTemplateConf(context, params, showLoading: true);
if (success) {
return true;
} else {
return false;
}
}
@override
Widget build(BuildContext context) {
couponProvider = Provider.of<CouponProvider>(context, listen: true);
... ... @@ -999,6 +1109,13 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
isTranspond = !isTranspond;
});
}, select: isTranspond),
_storeItemWidget('向客人开放“取消预订”功能。',
'客人可以在预订安排小程序卡片中,通过“取消预订”按钮取消订单,无需通过电话跟商家联系。为了避免客人误操作,在正式取消前,系统会通过弹窗提醒客人确认。',
onTap: () {
setState(() {
isCustomerCancel = !isCustomerCancel;
});
}, select: isCustomerCancel),
// _storeItemWidget('向被邀请客人开放“确认到店”功能。',
// '被邀客人点击确认到店后,方便请客人了解被邀客人是否确认,同时,被邀客人的信息会加入到餐厅客户池中,方便餐厅维护客户。',
// onTap: () {
... ... @@ -1110,65 +1227,7 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
height: w(40),
isBold: true,
onPressed: () async {
// FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
// if (_uploadImageProvider.firstImage.qiniuUrl == null) {
// Utils.showToast('请上传餐厅logo!');
// return false;
// }
// if (_uploadImageProvider.firstImage.process < 1) {
// Utils.showToast('正在上传餐厅logo!,请稍等');
// return false;
// }
// if (welcomeTextC.text.trim().length == 0) {
// Utils.showToast('请输入输入餐厅欢迎语!');
// return false;
// }
Map marketing = {};
if (marketingCenterProvider.markDataModel != null &&
marketingCenterProvider.markDataModel.marketing != null) {
marketing = marketingCenterProvider.markDataModel.marketing
.toJson();
}
print(marketing);
marketing['is_transpond'] = isTranspond ? '1' : '0'; //转发同行客人
marketing['is_online_book'] = isOnlineBook ? '1' : '0'; //在线预订
marketing['is_arrival'] = isArrival ? '1' : '0'; //确认到店
// //接口
// Map marketingData = {
// // 'isTranspond': isTranspond ? '1' : '0', //转发同行客人
// 'is_transpond': '1', //转发同行客人
// 'is_arrival': isArrival ? '1' : '0', //确认到店
// 'is_online_book': isOnlineBook ? '1' : '0', //在线预订
// 'is_order': isOrder ? '1' : '0', //去点餐
// 'is_coupon': isCoupon ? '1' : '0', //代金券暂时
// 'is_recharge': isRecharge ? '1' : '0', //充值券暂时
// 'is_link': isLink ? '1' : '0',
// // 'is_link': '0',
// 'wecomle': welcomeTextC.text ?? '',
// 'logo': _uploadImageProvider.firstImage.qiniuUrl,
// 'recharge_data': rechargeData,
// 'coupon_data': json.encode(couponDataList),
// 'is_comments': isComments ? '1' : '0',
// 'is_comments_coupon': isCommentsCoupon ? '1' : '0',
// 'coupon_data_comments': json.encode(couponDataListComments),
// };
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false)
.user
.sellerid,
'marketing': json.encode(marketing)
};
bool success = await marketingCenterProvider
.setSellerTemplateConf(context, params,
showLoading: true);
if (success) {
Utils.showToast('保存成功');
Navigator.pop(context);
}
_saveData();
},
),
)
... ...
... ... @@ -124,6 +124,10 @@ class CustomerProvider extends ChangeNotifier {
bool isrepair = false;
bool isselfphone = false;
bool ispcphone = true;
bool isAddOver = true;
bool isSetOver = true;
bool isReserveOver = true;
List<MarketingSmsTemplateSunModel> marketingSmsData = [];
... ... @@ -897,10 +901,11 @@ class CustomerProvider extends ChangeNotifier {
}
// 获取客户详情
getGuestInfo(BuildContext context, Map<String, String> params,{bool selfDismiss = false }) async {
getGuestInfo(BuildContext context, Map<String, String> params,
{bool selfDismiss = false}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.post, HttpUrl.get_guest_info,
data: params, showLoading: false,selfDismiss: selfDismiss)
data: params, showLoading: false, selfDismiss: selfDismiss)
.catchError((error) {
print(error.toString());
if (error is MyError) {
... ... @@ -2007,8 +2012,8 @@ class CustomerProvider extends ChangeNotifier {
// guestReserveSunModel =
// GuestReserveModel.fromJson(baseResp.responseData).data;
if (baseResp.responseData['data'] is Map ||
baseResp.responseData['data'] == 1) {
Utils.showToast("设置成功!");
baseResp.responseData['data'] == 1 || baseResp.responseData['data'] == 0) {
// Utils.showToast("设置成功!");
return true;
}
return false;
... ... @@ -2068,13 +2073,13 @@ class CustomerProvider extends ChangeNotifier {
//获取商家客情设置
Future<bool> getSellerGuest(BuildContext context,
{bool showLoading = false,bool selfDismiss = false}) async {
{bool showLoading = false, bool selfDismiss = false}) async {
Map<String, String> params = {
"sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
};
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.post, HttpUrl.seller_guest_get,
data: params, showLoading: showLoading,selfDismiss:selfDismiss)
data: params, showLoading: showLoading, selfDismiss: selfDismiss)
.catchError((error) {
print(error.toString());
if (error is MyError) {}
... ...
... ... @@ -1534,8 +1534,11 @@ var myCustomerListPageSimHandle = new Handler(
var customerSettingPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) {
// String idstr = params["idstr"].first;
return ChangeNotifierProvider<CustomerProvider>(
create: (_) => CustomerProvider(), child: CustomerSettingPage());
create: (_) => CustomerProvider(), child: ChangeNotifierProvider<MarketingCenterProvider>(
create: (_) => MarketingCenterProvider(), child: CustomerSettingPage()));
});
///全店营销记录
... ...