Commit b69ed69d3987059ec65e76f0148050ead8ed383e

Authored by wdn127929
1 parent ee8fc2d8

接口 OK

import 'package:common_utils/common_utils.dart';
import 'package:json_annotation/json_annotation.dart';
part 'marketing_by_id_model.g.dart';
@JsonSerializable()
class MarketingByIdModel extends Object {
@JsonKey(name: 'ret')
int ret;
@JsonKey(name: 'data')
MarketingByIdSunModel data;
@JsonKey(name: 'msg')
String msg;
MarketingByIdModel(
this.ret,
this.data,
this.msg,
);
factory MarketingByIdModel.fromJson(Map<String, dynamic> srcJson) =>
_$MarketingByIdModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$MarketingByIdModelToJson(this);
}
@JsonSerializable()
class MarketingByIdSunModel extends Object {
@JsonKey(name: 'id')
String id;
@JsonKey(name: 'sellerid')
String sellerid;
@JsonKey(name: 'uid')
String uid;
@JsonKey(name: 'aid')
String aid;
@JsonKey(name: 'gid')
String gid;
@JsonKey(name: 'content')
String content;
@JsonKey(name: 'is_update')
String isUpdate;
@JsonKey(name: 'edate')
String edate;
@JsonKey(name: 'cdate')
String cdate;
@JsonKey(name: 'guest_count')
String guestCount;
@JsonKey(name: 'seller_user_count')
int sellerUserCount;
@JsonKey(name: 'not_finished')
int notFinished;
@JsonKey(name: 'seller_user')
List<SellerUser> sellerUser;
String aidStr = '';
String get cdateStr {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(cdate.toString()) * 1000);
return DateUtil.formatDate(dateTime, format: DateFormats.y_mo_d);
}
MarketingByIdSunModel(
this.id,
this.sellerid,
this.uid,
this.aid,
this.gid,
this.content,
this.isUpdate,
this.edate,
this.cdate,
this.guestCount,
this.sellerUserCount,
this.notFinished,
this.sellerUser,
);
factory MarketingByIdSunModel.fromJson(Map<String, dynamic> srcJson) =>
_$MarketingByIdSunModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$MarketingByIdSunModelToJson(this);
}
@JsonSerializable()
class SellerUser extends Object {
@JsonKey(name: 'id')
String id;
@JsonKey(name: 'finished_status')
int finishedStatus;
@JsonKey(name: 'nick_name')
String nickName;
SellerUser(
this.id,
this.finishedStatus,
this.nickName,
);
factory SellerUser.fromJson(Map<String, dynamic> srcJson) =>
_$SellerUserFromJson(srcJson);
Map<String, dynamic> toJson() => _$SellerUserToJson(this);
}
... ...
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'marketing_by_id_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
MarketingByIdModel _$MarketingByIdModelFromJson(Map<String, dynamic> json) {
return MarketingByIdModel(
json['ret'] as int,
json['data'] == null
? null
: MarketingByIdSunModel.fromJson(json['data'] as Map<String, dynamic>),
json['msg'] as String,
);
}
Map<String, dynamic> _$MarketingByIdModelToJson(MarketingByIdModel instance) =>
<String, dynamic>{
'ret': instance.ret,
'data': instance.data,
'msg': instance.msg,
};
MarketingByIdSunModel _$MarketingByIdSunModelFromJson(
Map<String, dynamic> json) {
return MarketingByIdSunModel(
json['id'] as String,
json['sellerid'] as String,
json['uid'] as String,
json['aid'] as String,
json['gid'] as String,
json['content'] as String,
json['is_update'] as String,
json['edate'] as String,
json['cdate'] as String,
json['guest_count'] as String,
json['seller_user_count'] as int,
json['not_finished'] as int,
(json['seller_user'] as List)
?.map((e) =>
e == null ? null : SellerUser.fromJson(e as Map<String, dynamic>))
?.toList(),
);
}
Map<String, dynamic> _$MarketingByIdSunModelToJson(
MarketingByIdSunModel instance) =>
<String, dynamic>{
'id': instance.id,
'sellerid': instance.sellerid,
'uid': instance.uid,
'aid': instance.aid,
'gid': instance.gid,
'content': instance.content,
'is_update': instance.isUpdate,
'edate': instance.edate,
'cdate': instance.cdate,
'guest_count': instance.guestCount,
'seller_user_count': instance.sellerUserCount,
'not_finished': instance.notFinished,
'seller_user': instance.sellerUser,
};
SellerUser _$SellerUserFromJson(Map<String, dynamic> json) {
return SellerUser(
json['id'] as String,
json['finished_status'] as int,
json['nick_name'] as String,
);
}
Map<String, dynamic> _$SellerUserToJson(SellerUser instance) =>
<String, dynamic>{
'id': instance.id,
'finished_status': instance.finishedStatus,
'nick_name': instance.nickName,
};
... ...
import 'package:common_utils/common_utils.dart';
import 'package:json_annotation/json_annotation.dart';
part 'marketing_by_seller_model.g.dart';
@JsonSerializable()
class MarketingBySellerModel extends Object {
@JsonKey(name: 'ret')
int ret;
@JsonKey(name: 'data')
List<MarketingBySellerSunModel> data;
@JsonKey(name: 'msg')
String msg;
MarketingBySellerModel(
this.ret,
this.data,
this.msg,
);
factory MarketingBySellerModel.fromJson(Map<String, dynamic> srcJson) =>
_$MarketingBySellerModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$MarketingBySellerModelToJson(this);
}
@JsonSerializable()
class MarketingBySellerSunModel extends Object {
@JsonKey(name: 'id')
String id;
@JsonKey(name: 'sellerid')
String sellerid;
@JsonKey(name: 'uid')
String uid;
@JsonKey(name: 'aid')
String aid;
@JsonKey(name: 'gid')
String gid;
@JsonKey(name: 'content')
String content;
@JsonKey(name: 'is_update')
String isUpdate;
@JsonKey(name: 'edate')
String edate;
@JsonKey(name: 'cdate')
String cdate;
@JsonKey(name: 'not_finished')
String notFinished;
@JsonKey(name: 'remaining_time')
int remainingTime;
String get cdateStr {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(cdate.toString()) * 1000);
return DateUtil.formatDate(dateTime, format: DateFormats.y_mo_d);
}
MarketingBySellerSunModel(
this.id,
this.sellerid,
this.uid,
this.aid,
this.gid,
this.content,
this.isUpdate,
this.edate,
this.cdate,
this.notFinished,
this.remainingTime,
);
factory MarketingBySellerSunModel.fromJson(Map<String, dynamic> srcJson) =>
_$MarketingBySellerSunModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$MarketingBySellerSunModelToJson(this);
}
... ...
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'marketing_by_seller_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
MarketingBySellerModel _$MarketingBySellerModelFromJson(
Map<String, dynamic> json) {
return MarketingBySellerModel(
json['ret'] as int,
(json['data'] as List)
?.map((e) => e == null
? null
: MarketingBySellerSunModel.fromJson(e as Map<String, dynamic>))
?.toList(),
json['msg'] as String,
);
}
Map<String, dynamic> _$MarketingBySellerModelToJson(
MarketingBySellerModel instance) =>
<String, dynamic>{
'ret': instance.ret,
'data': instance.data,
'msg': instance.msg,
};
MarketingBySellerSunModel _$MarketingBySellerSunModelFromJson(
Map<String, dynamic> json) {
return MarketingBySellerSunModel(
json['id'] as String,
json['sellerid'] as String,
json['uid'] as String,
json['aid'] as String,
json['gid'] as String,
json['content'] as String,
json['is_update'] as String,
json['edate'] as String,
json['cdate'] as String,
json['not_finished'] as String,
json['remaining_time'] as int,
);
}
Map<String, dynamic> _$MarketingBySellerSunModelToJson(
MarketingBySellerSunModel instance) =>
<String, dynamic>{
'id': instance.id,
'sellerid': instance.sellerid,
'uid': instance.uid,
'aid': instance.aid,
'gid': instance.gid,
'content': instance.content,
'is_update': instance.isUpdate,
'edate': instance.edate,
'cdate': instance.cdate,
'not_finished': instance.notFinished,
'remaining_time': instance.remainingTime,
};
... ...
... ... @@ -188,5 +188,9 @@ class HttpUrl {
"?service=App.GuestManage.CreateLabelBySellerid"; // 商家创建商家标签
static const String create_marketing_by_seller =
"?service=App.GuestManage.CreateMarketingBySeller"; // 商家创建营销
static const String get_marketing_by_seller =
"?service=App.GuestManage.GetMarketingBySeller"; // 商家营销列表
static const String get_marketing_by_id =
"?service=App.GuestManage.GetMarketingById"; // 商家营销详情
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/marketing_by_id_model.dart';
import 'package:one_key/provider/customer_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/page_exception.dart';
import 'package:one_key/widgets/round_button.dart';
import 'package:one_key/widgets/row_multi_text.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
class MarketingRecordsDetailPage extends StatefulWidget {
MarketingRecordsDetailPage({Key key}) : super(key: key);
final String idstr;
MarketingRecordsDetailPage({Key key, this.idstr}) : super(key: key);
@override
_MarketingRecordsDetailPageState createState() =>
... ... @@ -19,12 +26,63 @@ class MarketingRecordsDetailPage extends StatefulWidget {
class _MarketingRecordsDetailPageState
extends State<MarketingRecordsDetailPage> {
CustomerProvider customerProvider;
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) async {
// if (widget.fromPage == FromPage.FromPageStoreCustomer) {
// _getMarketingBySeller();
// }
_getMarketingById();
});
}
@override
void dispose() {
super.dispose();
}
_getMarketingById() async {
Map<String, String> params = {"id": widget.idstr};
await customerProvider.getMarketingById(context, params);
if (customerProvider.pageStateMarketingRecordDetail == PageState.Success) {
_couponNetworkData();
}
// await customerProvider.searchData(customerProvider.controller.text);
}
///消费券
_couponNetworkData({bool isShowLoading = true}) async {
// customerMakingProvider.couponSelectIndex = 0;
Map<String, String> params = {
"uid": Provider.of<UserModel>(context, listen: false).user.openid,
};
await customerProvider.getCustomerSelectActivityNew(context, params,
isShowLoading: isShowLoading);
//此人已经新建好券
if (customerProvider.couponListSelect.length > 0) {
for (int i = 0; i < customerProvider.couponListSelect.length; i++) {
if (customerProvider.marketingByIdSunModel.aid ==
customerProvider.couponListSelect[i].id) {
customerProvider.marketingByIdSunModel.aidStr =
customerProvider.couponListSelect[i].aname;
}
}
customerProvider.notifyListeners();
} else {
//没有新建的优惠券
}
}
//构建经理btn
List<Widget> _buildLabelItem(List<String> data,
List<Widget> _buildLabelItem(List<SellerUser> data,
{Color bgColor = MyColours.color_199095}) {
List<Widget> items = [];
for (String item in data) {
for (SellerUser item in data) {
String title = '${item.nickName}经理';
title += item.finishedStatus == 0 ? '(未完成)' : '(已完成)';
items.add(InkWell(
onTap: () {},
child: Container(
... ... @@ -33,12 +91,12 @@ class _MarketingRecordsDetailPageState
horizontal: ScreenUtil().setWidth(20),
vertical: ScreenUtil().setWidth(6)),
decoration: BoxDecoration(
color: item.contains('未完成')
color: title.contains('未完成')
? Color.fromRGBO(207, 29, 35, 1)
: MyColours.color_199095,
borderRadius: BorderRadius.circular(ScreenUtil().setWidth(10))),
child: Text(
item,
title,
style: TextStyle(
color: MyColours.color_ffffff,
fontSize: ScreenUtil().setSp(26),
... ... @@ -51,6 +109,7 @@ class _MarketingRecordsDetailPageState
@override
Widget build(BuildContext context) {
customerProvider = Provider.of<CustomerProvider>(context, listen: true);
return Scaffold(
backgroundColor: Color.fromRGBO(246, 248, 250, 1),
appBar: SystemAppBar(
... ... @@ -59,175 +118,215 @@ class _MarketingRecordsDetailPageState
Navigator.pop(context);
},
),
body: Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(30),
// vertical: ScreenUtil().setWidth(40)
),
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Stack(
alignment: Alignment.bottomCenter,
children: [
Column(
body: Consumer<CustomerProvider>(builder: (context, model, _) {
if (model.pageStateMarketingRecordDetail != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateMarketingRecordDetail,
callback: () {
model.pageStateMarketingRecordDetail = PageState.Loading;
model.notifyListeners();
// _getContantData();
_getMarketingById();
},
emptyMsg: "暂时没有营销详情哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(30),
// vertical: ScreenUtil().setWidth(40)
),
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Stack(
alignment: Alignment.bottomCenter,
children: [
RowMultiText(
'创建日期',
'2021-12-22',
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
RowMultiText(
'创建人',
'管理员',
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
Column(
children: [
RowMultiText(
'创建日期',
model.marketingByIdSunModel.cdateStr,
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
RowMultiText(
'创建人',
'管理员(未返回)',
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
],
),
Positioned(
child: Image.asset(
Utils.getImgPath('c_state_ing'),
width: ScreenUtil().setWidth(140),
))
],
),
Positioned(
child: Image.asset(
Utils.getImgPath('c_state_ing'),
width: ScreenUtil().setWidth(140),
))
],
),
RowMultiText(
'完成期限',
'2021-12-22 23:59:59',
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
RowMultiText(
'修改短信内容',
'可修改',
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
RowMultiText(
'优惠信息',
'98折(仅限菜品堂食)',
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
Padding(
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(25),
bottom: ScreenUtil().setWidth(20)),
child: Text(
'短信内容',
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(30)),
)),
Padding(
padding:
EdgeInsets.only(bottom: ScreenUtil().setWidth(25)),
child: Text(
'dfdsgdfgdksgsdkghjksdhgjskdhgjsdhgsjkhdgfjksdhgsdjfdgg\nhsdfgjgsjgdhsddhfghdgjsgjdg',
style: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(30)),
)),
Padding(
padding: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(25),
RowMultiText(
'完成期限',
model.marketingByIdSunModel.edate,
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
RowMultiText(
'修改短信内容',
model.marketingByIdSunModel.isUpdate == '1'
? '可修改'
: '不可修改',
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'总客户人数',
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(30)),
),
Spacer(),
Text('55人',
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(30))),
HEmptyView(10),
InkWell(
onTap: () {
// NavigatorUtil.goMarketingRecordsDetailPage(context);
},
child: Text('查看',
RowMultiText(
'优惠信息',
customerProvider.marketingByIdSunModel.aidStr,
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
Padding(
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(25),
bottom: ScreenUtil().setWidth(20)),
child: Text(
'短信内容',
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(30)),
)),
Padding(
padding: EdgeInsets.only(
bottom: ScreenUtil().setWidth(25)),
child: Text(
model.marketingByIdSunModel.content,
style: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(30)),
)),
Padding(
padding: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(25),
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'总客户人数',
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(30)),
),
Spacer(),
Text(
'${model.marketingByIdSunModel.guestCount}人',
style: TextStyle(
decoration: TextDecoration.underline,
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(30)))),
])),
RowMultiText(
'参与经理',
'5人',
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
Padding(
padding: EdgeInsets.only(
bottom: ScreenUtil().setWidth(25),
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(30))),
HEmptyView(10),
InkWell(
onTap: () {
// NavigatorUtil.goMarketingRecordsDetailPage(context);
},
child: Text('查看',
style: TextStyle(
decoration:
TextDecoration.underline,
color: MyColours.color_199095,
fontSize:
ScreenUtil().setSp(30)))),
])),
RowMultiText(
'参与经理',
'${model.marketingByIdSunModel.sellerUserCount}人',
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
child: Wrap(
spacing: ScreenUtil().setWidth(20),
runSpacing: ScreenUtil().setWidth(10),
children: _buildLabelItem([
'xx经理已完成',
'xx经理未完成',
'dfsdfsf',
'ff',
'ff',
'sfsuhfsuhfiuhfuaihuf'
]))),
]))),
RoundButton(
text: '催促未完成经理',
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: ScreenUtil().setWidth(10),
height: ScreenUtil().setWidth(80),
fontSize: 26,
margin: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(200)),
isBold: false,
onPressed: () {
// NavigatorUtil.goEnterStoreEnvironmentPage(context);
},
),
VEmptyView(10),
RoundButton(
text: '取消任务',
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
textColor: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: ScreenUtil().setWidth(10),
height: ScreenUtil().setWidth(80),
fontSize: 26,
margin: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(200)),
isBold: false,
onPressed: () {
DialogUtil.cupertinoAlertDialog(context,
title: "取消任务",
content: "点击确定立即取消任务,已完成的客户经理继续生效",
lTitle: "返回",
rTitle: "确定取消", lCallback: () {
print("返回");
}, rCallback: () {
print("确定取消任务");
});
},
),
VEmptyView(30),
],
)),
Padding(
padding: EdgeInsets.only(
bottom: ScreenUtil().setWidth(25),
),
child: Wrap(
spacing: ScreenUtil().setWidth(20),
runSpacing: ScreenUtil().setWidth(10),
children: _buildLabelItem(
model.marketingByIdSunModel.sellerUser))),
]))),
model.marketingByIdSunModel.notFinished == 0
? Column(
children: [
RoundButton(
text: '催促未完成经理',
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: ScreenUtil().setWidth(10),
height: ScreenUtil().setWidth(80),
fontSize: 26,
margin: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(200)),
isBold: false,
onPressed: () {
// NavigatorUtil.goEnterStoreEnvironmentPage(context);
},
),
VEmptyView(10),
RoundButton(
text: '取消任务',
gradientStart: Colors.transparent,
gradientEnd: Colors.transparent,
textColor: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: ScreenUtil().setWidth(10),
height: ScreenUtil().setWidth(80),
fontSize: 26,
margin: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(200)),
isBold: false,
onPressed: () {
DialogUtil.cupertinoAlertDialog(context,
title: "取消任务",
content: "点击确定立即取消任务,已完成的客户经理继续生效",
lTitle: "返回",
rTitle: "确定取消", lCallback: () {
print("返回");
}, rCallback: () {
print("确定取消任务");
});
},
),
VEmptyView(30),
],
)
: Column(
children: [
RoundButton(
text: '再次创建',
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
textColor: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: ScreenUtil().setWidth(10),
height: ScreenUtil().setWidth(80),
fontSize: 26,
margin: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(200)),
isBold: false,
onPressed: () {},
),
VEmptyView(30),
],
)
],
));
}
}),
);
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/marketing_by_seller_model.dart';
import 'package:one_key/provider/customer_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/page_exception.dart';
import 'package:one_key/widgets/round_button.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:provider/provider.dart';
class MarketingRecordsPage extends StatefulWidget {
MarketingRecordsPage({Key key}) : super(key: key);
final FromPage fromPage;
MarketingRecordsPage({Key key, this.fromPage}) : super(key: key);
@override
_MarketingRecordsPageState createState() => _MarketingRecordsPageState();
}
class _MarketingRecordsPageState extends State<MarketingRecordsPage> {
CustomerProvider customerProvider;
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) async {
if (widget.fromPage == FromPage.FromPageStoreCustomer) {
_getMarketingBySeller();
}
});
}
@override
void dispose() {
super.dispose();
}
_getMarketingBySeller() async {
Map<String, String> params = {
"sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid
};
await customerProvider.getMarketingBySeller(context, params);
// await customerProvider.searchData(customerProvider.controller.text);
}
@override
Widget build(BuildContext context) {
customerProvider = Provider.of<CustomerProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
'全店营销记录',
widget.fromPage == FromPage.FromPageMyCustomer ? '营销记录' : '全店营销记录',
onTap: () {
Navigator.pop(context);
},
),
body: ListView.builder(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(20),
// vertical: ScreenUtil().setWidth(40)
),
itemCount: 100,
itemBuilder: (BuildContext context, int index) {
return Padding(
padding:
EdgeInsets.symmetric(vertical: ScreenUtil().setWidth(20)),
child: Row(
children: [
Image.asset(Utils.getImgPath('warning'),
width: ScreenUtil().setWidth(30)),
HEmptyView(20),
Text('2021-12-22',
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(26))),
HEmptyView(10),
RoundButton(
text: '全店任务',
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: ScreenUtil().setWidth(10),
height: ScreenUtil().setWidth(50),
fontSize: 26,
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(10)),
isBold: false,
onPressed: () {
// NavigatorUtil.goEnterStoreEnvironmentPage(context);
},
),
HEmptyView(10),
Expanded(
child: Text('30位未完成',
overflow: TextOverflow.ellipsis,
body: Consumer<CustomerProvider>(builder: (context, model, _) {
if (model.pageStateMarketingRecord != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateMarketingRecord,
callback: () {
model.pageStateMarketingRecord = PageState.Loading;
model.notifyListeners();
// _getContantData();
_getMarketingBySeller();
},
emptyMsg: "暂时没有营销记录哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return ListView.builder(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(20),
// vertical: ScreenUtil().setWidth(40)
),
itemCount: model.marketingBySellerSunModel.length,
itemBuilder: (BuildContext context, int index) {
MarketingBySellerSunModel data =
model.marketingBySellerSunModel[index];
return Padding(
padding: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(20)),
child: Row(
children: [
data.notFinished != '' &&
data.notFinished != null &&
data.notFinished != '0'
? Image.asset(Utils.getImgPath('warning'),
width: ScreenUtil().setWidth(30))
: Container(
width: ScreenUtil().setWidth(30),
),
HEmptyView(10),
Text(data.cdateStr,
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(26)))),
HEmptyView(10),
Expanded(
child: Text('剩余1天',
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(26)))),
HEmptyView(10),
InkWell(
onTap: () {
NavigatorUtil.goMarketingRecordsDetailPage(context);
},
child: Text('查看详情',
style: TextStyle(
decoration: TextDecoration.underline,
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(26)))),
],
));
}),
fontSize: ScreenUtil().setSp(26))),
HEmptyView(10),
RoundButton(
text: '全店任务',
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: ScreenUtil().setWidth(10),
height: ScreenUtil().setWidth(50),
fontSize: 26,
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(10)),
isBold: false,
onPressed: () {
// NavigatorUtil.goEnterStoreEnvironmentPage(context);
},
),
HEmptyView(10),
Expanded(
child: Text(
data.notFinished != '' &&
data.notFinished != null &&
data.notFinished != '0'
? '${data.notFinished}位未完成'
: '全部完成/取消任务',
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: data.notFinished != '' &&
data.notFinished != null &&
data.notFinished != '0'
? Colors.red
: MyColours.color_333333,
fontSize: ScreenUtil().setSp(26)))),
HEmptyView(10),
Expanded(
child: Text('剩余${data.remainingTime}天',
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(26)))),
InkWell(
onTap: () {
NavigatorUtil.goMarketingRecordsDetailPage(
context, data.id);
},
child: Text('查看详情',
style: TextStyle(
decoration: TextDecoration.underline,
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(26)))),
],
));
});
}
}),
);
}
}
... ...
... ... @@ -150,7 +150,8 @@ class _MyCustomerPageState extends State<MyCustomerPage> {
VEmptyView(10),
RoundButton(
onPressed: () async {
NavigatorUtil.goCustomerListPage(context,FromPage.FromPageMyCustomer);
NavigatorUtil.goCustomerListPage(
context, FromPage.FromPageMyCustomer);
},
text: '我的客户',
fontSize: 24,
... ... @@ -419,7 +420,8 @@ class _MyCustomerPageState extends State<MyCustomerPage> {
padding: EdgeInsets.only(bottom: ScreenUtil().setWidth(30)),
child: RoundButton(
onPressed: () {
NavigatorUtil.goMarketingRecordsPage(context);
NavigatorUtil.goMarketingRecordsPage(
context, FromPage.FromPageMyCustomer);
},
text: '营销记录',
fontSize: 24,
... ...
... ... @@ -203,7 +203,8 @@ class _StoreCustomerPageState extends State<StoreCustomerPage> {
padding: EdgeInsets.only(bottom: ScreenUtil().setWidth(30)),
child: RoundButton(
onPressed: () {
NavigatorUtil.goMarketingRecordsPage(context);
NavigatorUtil.goMarketingRecordsPage(
context, FromPage.FromPageStoreCustomer);
},
text: '营销记录',
fontSize: 24,
... ...
... ... @@ -9,6 +9,8 @@ import 'package:one_key/models/customer_list_model.dart';
import 'package:one_key/models/guest_info_model.dart';
import 'package:one_key/models/guest_manage_model.dart';
import 'package:one_key/models/guest_reserve_model.dart';
import 'package:one_key/models/marketing_by_id_model.dart';
import 'package:one_key/models/marketing_by_seller_model.dart';
import 'package:one_key/models/user_history_entity.dart';
import 'package:one_key/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
... ... @@ -35,6 +37,9 @@ class CustomerProvider extends ChangeNotifier {
GuestManageSunModel guestSunmodel;
PageState pageStateGuestInfo = PageState.Loading; //客户详情
PageState pageStateGuestReserve = PageState.Loading; //订单统计
PageState pageStateMarketingRecord = PageState.Loading; //营销记录
PageState pageStateMarketingRecordDetail = PageState.Loading; //营销记录详情
GuestInfoSunModel guestInfoSunModel;
GuestReserveSunModel guestReserveSunModel;
List<CustomerListSunModel> selectCustomer = [];
... ... @@ -43,6 +48,9 @@ class CustomerProvider extends ChangeNotifier {
String labels = '';
List<CouponSunModel> couponListSelect = [];
int couponSelectIndex;
List<MarketingBySellerSunModel> marketingBySellerSunModel;
MarketingByIdSunModel marketingByIdSunModel;
///客户经理获取所创建活动列表(选择优惠券)
Future<List<CouponSunModel>> getCustomerSelectActivityNew(
... ... @@ -700,4 +708,78 @@ class CustomerProvider extends ChangeNotifier {
}
notifyListeners();
}
// 商家营销列表
getMarketingBySeller(BuildContext context, Map<String, String> params,
{bool showLoading = false}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.get_marketing_by_seller,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
if (error is MyError) {
switch (error.type) {
case 1:
pageStateMarketingRecord = PageState.ConnectivityError;
break;
case 2:
pageStateMarketingRecord = PageState.ConnectivityTimeOut;
break;
default:
pageStateMarketingRecord = PageState.ConnectivityError;
break;
}
}
notifyListeners();
});
if (baseResp != null && baseResp.code == Constant.status_success) {
pageStateMarketingRecord = PageState.Success;
marketingBySellerSunModel =
MarketingBySellerModel.fromJson(baseResp.responseData).data;
notifyListeners();
} else {
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
pageStateMarketingRecord = PageState.ConnectivityTimeOut;
}
notifyListeners();
}
// 商家营销详情
getMarketingById(BuildContext context, Map<String, String> params,
{bool showLoading = false}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.get_marketing_by_id,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
if (error is MyError) {
switch (error.type) {
case 1:
pageStateMarketingRecordDetail = PageState.ConnectivityError;
break;
case 2:
pageStateMarketingRecordDetail = PageState.ConnectivityTimeOut;
break;
default:
pageStateMarketingRecordDetail = PageState.ConnectivityError;
break;
}
}
notifyListeners();
});
if (baseResp != null && baseResp.code == Constant.status_success) {
pageStateMarketingRecordDetail = PageState.Success;
marketingByIdSunModel =
MarketingByIdModel.fromJson(baseResp.responseData).data;
notifyListeners();
} else {
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
pageStateMarketingRecordDetail = PageState.ConnectivityTimeOut;
}
notifyListeners();
}
}
... ...
... ... @@ -553,16 +553,20 @@ class NavigatorUtil {
}
/// 全店营销记录
static Future<dynamic> goMarketingRecordsPage(BuildContext context,
static Future<dynamic> goMarketingRecordsPage(
BuildContext context, FromPage fromPage,
{replace = false}) {
return _navigateTo(context, "${Routes.marketing_records_page}",
return _navigateTo(context,
"${Routes.marketing_records_page}?fromPage=${FluroConvertUtils.enumToString(fromPage)}",
replace: replace);
}
/// 全店营销记录详情
static Future<dynamic> goMarketingRecordsDetailPage(BuildContext context,
static Future<dynamic> goMarketingRecordsDetailPage(
BuildContext context, String idstr,
{replace = false}) {
return _navigateTo(context, "${Routes.marketing_records_detail_page}",
return _navigateTo(
context, "${Routes.marketing_records_detail_page}?idstr=${idstr}",
replace: replace);
}
... ...
... ... @@ -876,16 +876,20 @@ var customerSettingPageHandle = new Handler(
var marketingRecordsPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) {
// String idstr = params["idstr"].first;
FromPage fromPage = FluroConvertUtils.enumFromString<FromPage>(
FromPage.values, params["fromPage"].first);
print(fromPage);
return ChangeNotifierProvider<CustomerProvider>(
create: (_) => CustomerProvider(), child: MarketingRecordsPage());
create: (_) => CustomerProvider(),
child: MarketingRecordsPage(fromPage: fromPage));
});
///全店营销记录详情
var marketingRecordsDetailPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) {
// String idstr = params["idstr"].first;
String idstr = params["idstr"].first;
return ChangeNotifierProvider<CustomerProvider>(
create: (_) => CustomerProvider(), child: MarketingRecordsDetailPage());
create: (_) => CustomerProvider(), child: MarketingRecordsDetailPage(idstr:idstr));
});
///创建营销
... ...