Commit 889a13b3ad6bb6be9558fbddbdf1d8dea523c340

Authored by wdn127929
1 parent b69ed69d

纪念日部分

... ... @@ -93,7 +93,7 @@ class Guest extends Object {
@JsonKey(name: 'serve')
String serve;
@JsonKey(name: 'c_day')
List cDay;
List<Cday> cDay;
@JsonKey(name: 'udate')
String udate;
... ... @@ -147,6 +147,33 @@ class Guest extends Object {
}
@JsonSerializable()
class Cday extends Object {
@JsonKey(name: 'id')
String id;
@JsonKey(name: 'gid')
String gid;
@JsonKey(name: 'content')
String content;
@JsonKey(name: 'cdate')
String cdate;
Cday(
this.id,
this.gid,
this.content,
this.cdate,
);
factory Cday.fromJson(Map<String, dynamic> srcJson) =>
_$CdayFromJson(srcJson);
Map<String, dynamic> toJson() => _$CdayToJson(this);
}
@JsonSerializable()
class Last extends Object {
@JsonKey(name: 'id')
String id;
... ...
... ... @@ -64,7 +64,10 @@ Guest _$GuestFromJson(Map<String, dynamic> json) {
json['taboos'] as String,
json['like'] as String,
json['serve'] as String,
json['c_day'] as List,
(json['c_day'] as List)
?.map(
(e) => e == null ? null : Cday.fromJson(e as Map<String, dynamic>))
?.toList(),
json['udate'] as String,
json['label'] as String,
);
... ... @@ -89,6 +92,22 @@ Map<String, dynamic> _$GuestToJson(Guest instance) => <String, dynamic>{
'label': instance.label,
};
Cday _$CdayFromJson(Map<String, dynamic> json) {
return Cday(
json['id'] as String,
json['gid'] as String,
json['content'] as String,
json['cdate'] as String,
);
}
Map<String, dynamic> _$CdayToJson(Cday instance) => <String, dynamic>{
'id': instance.id,
'gid': instance.gid,
'content': instance.content,
'cdate': instance.cdate,
};
Last _$LastFromJson(Map<String, dynamic> json) {
return Last(
json['id'] as String,
... ... @@ -118,8 +137,8 @@ Map<String, dynamic> _$LastToJson(Last instance) => <String, dynamic>{
Count _$CountFromJson(Map<String, dynamic> json) {
return Count(
json['leiji'] as String,
json['quxiao'] as dynamic,
json['create_time'] as dynamic,
json['quxiao'],
json['create_time'],
);
}
... ...
... ... @@ -67,6 +67,9 @@ class MarketingByIdSunModel extends Object {
@JsonKey(name: 'seller_user')
List<SellerUser> sellerUser;
@JsonKey(name: 'create_user')
String createUser;
String aidStr = '';
String get cdateStr {
... ... @@ -89,6 +92,7 @@ class MarketingByIdSunModel extends Object {
this.sellerUserCount,
this.notFinished,
this.sellerUser,
this.createUser
);
factory MarketingByIdSunModel.fromJson(Map<String, dynamic> srcJson) =>
... ...
... ... @@ -42,6 +42,7 @@ MarketingByIdSunModel _$MarketingByIdSunModelFromJson(
?.map((e) =>
e == null ? null : SellerUser.fromJson(e as Map<String, dynamic>))
?.toList(),
json['create_user'] as String,
);
}
... ... @@ -61,6 +62,7 @@ Map<String, dynamic> _$MarketingByIdSunModelToJson(
'seller_user_count': instance.sellerUserCount,
'not_finished': instance.notFinished,
'seller_user': instance.sellerUser,
'create_user': instance.createUser
};
SellerUser _$SellerUserFromJson(Map<String, dynamic> json) {
... ...
... ... @@ -61,6 +61,12 @@ class MarketingBySellerSunModel extends Object {
@JsonKey(name: 'remaining_time')
int remainingTime;
@JsonKey(name: 'finished_status')
String finishedStatus;
String get cdateStr {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(cdate.toString()) * 1000);
... ... @@ -79,6 +85,7 @@ class MarketingBySellerSunModel extends Object {
this.cdate,
this.notFinished,
this.remainingTime,
this.finishedStatus
);
factory MarketingBySellerSunModel.fromJson(Map<String, dynamic> srcJson) =>
... ...
... ... @@ -41,6 +41,7 @@ MarketingBySellerSunModel _$MarketingBySellerSunModelFromJson(
json['cdate'] as String,
json['not_finished'] as String,
json['remaining_time'] as int,
json['finished_status'] as String,
);
}
... ... @@ -58,4 +59,5 @@ Map<String, dynamic> _$MarketingBySellerSunModelToJson(
'cdate': instance.cdate,
'not_finished': instance.notFinished,
'remaining_time': instance.remainingTime,
'finished_status': instance.finishedStatus
};
... ...
... ... @@ -192,5 +192,7 @@ class HttpUrl {
"?service=App.GuestManage.GetMarketingBySeller"; // 商家营销列表
static const String get_marketing_by_id =
"?service=App.GuestManage.GetMarketingById"; // 商家营销详情
static const String set_guest_info_cday =
"?service=App.GuestManage.SetGuestCday"; // 设置客户纪念日
}
... ...
... ... @@ -496,8 +496,11 @@ class _CustomerDetailPageState extends State<CustomerDetailPage> {
fontSize: 26,
isBold: false,
onPressed: () {
NavigatorUtil.goFestivalEditPage(context,
customerProvider.guestInfoSunModel.guest);
NavigatorUtil.goFestivalEditPage(
context,
customerProvider.guestInfoSunModel.guest,
widget.userHistoryEntity.id,
widget.userHistoryEntity.phone);
},
),
],
... ... @@ -517,7 +520,8 @@ class _CustomerDetailPageState extends State<CustomerDetailPage> {
padding: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(10)),
child: Text(
'本人生日:12月18日(公历)',
customerProvider.guestInfoSunModel.guest
.cDay[index].content,
style: TextStyle(
fontSize: ScreenUtil().setSp(26),
color: MyColours.color_333333),
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/guest_info_model.dart';
import 'package:one_key/provider/customer_provider.dart';
import 'package:one_key/res/colors.dart';
... ... @@ -7,6 +8,7 @@ import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/event_bus.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:one_key/widgets/v_empty_view.dart';
... ... @@ -14,7 +16,10 @@ import 'package:provider/provider.dart';
class FestivalEditPage extends StatefulWidget {
final Guest guest;
FestivalEditPage({Key key, this.guest}) : super(key: key);
final String idstr;
final String phone;
FestivalEditPage({Key key, this.guest, this.idstr, this.phone})
: super(key: key);
@override
_FestivalEditPageState createState() => _FestivalEditPageState();
... ... @@ -23,18 +28,36 @@ class FestivalEditPage extends StatefulWidget {
class _FestivalEditPageState extends State<FestivalEditPage> {
CustomerProvider customerProvider;
_setGuestInfo(String cday) async {
Map<String, String> params = {"id": widget.guest.id, 'c_day': cday};
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
_getGuestInfoCday();
});
}
_getGuestInfoCday() async {
Map<String, String> params = {"id": widget.idstr, 'phone': widget.phone};
await customerProvider.getGuestInfoCday(context, params);
// await customerProvider.searchData(customerProvider.controller.text);
}
bool sucess =
await customerProvider.setGuestInfo(context, params, showLoading: true);
_setGuestInfocDay(String id, String cday) async {
Map<String, String> params = {"gid": widget.guest.id, 'content': cday};
if (id != '') {
params["id"] = id;
}
bool sucess = await customerProvider.setGuestInfocDay(context, params,
showLoading: true);
if (sucess) {
Utils.showToast('保存成功');
//刷新当前页
_getGuestInfoCday();
// 刷新
bus.emit('refresh_guest_info');
bus.emit('refresh_guest_list');
// Navigator.pop(context);
//刷新当前页? 还没做???????
}
}
... ... @@ -55,44 +78,102 @@ class _FestivalEditPageState extends State<FestivalEditPage> {
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(40)),
child: Column(children: [
Expanded(
child: ListView.builder(
shrinkWrap: true,
itemCount: 10,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {
DialogUtil.festivalAlertDialog(context, 'ggg', 520,
rCallback: (name) {
// _addCookbookClass(name, showLoading: true);
});
},
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(20),
vertical: ScreenUtil().setWidth(20)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Text(
'本人生日:12月18日(公历)',
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: ScreenUtil().setSp(26),
color: MyColours.color_333333),
)),
HEmptyView(10),
Image.asset(
Utils.getImgPath('c_edit'),
width: ScreenUtil().setWidth(40),
// height: ScreenUtil().setWidth(10),
)
],
),
));
},
)),
Expanded(child:
Consumer<CustomerProvider>(builder: (context, model, _) {
if (model.pageStateGuestInfoCday != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateGuestInfoCday,
callback: () {
model.pageStateGuestInfoCday = PageState.Loading;
model.notifyListeners();
_getGuestInfoCday();
},
emptyMsg: "暂时没有纪念日哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return ListView.builder(
shrinkWrap: true,
itemCount: model.cday.length,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {
String str = model.cday[index].content;
// str += '${name}:';
// if (yearStr != '' &&
// yearStr != null &&
// yearStr != '选填') {
// str += '${yearStr}年';
// }
// str += '${monthStr}月';
// str += '${dayStr}日';
// str += '(${gongli ? '公历' : '农历'})';
String yearStr = '选填';
String monthStr = '';
String dayStr = '';
bool gongli = true;
String content = str.substring(0, str.indexOf(':'));
if (str.contains('年')) {
yearStr = str.substring(
str.indexOf(':') + 1, str.indexOf('年'));
}
if (str.contains('月')) {
if (str.contains('年')) {
monthStr = str.substring(
str.indexOf('年') + 1, str.indexOf('月'));
} else {
monthStr = str.substring(
str.indexOf(':') + 1, str.indexOf('月'));
}
}
if (str.contains('日')) {
dayStr = str.substring(
str.indexOf('月') + 1, str.indexOf('日'));
}
if (str.contains('农历')) {
gongli = false;
}
DialogUtil.festivalAlertDialog(
context, content, 520, rCallback: (name) {
print(name);
_setGuestInfocDay(model.cday[index].id, name);
// _addCookbookClass(name, showLoading: true);
},
yearStr: yearStr,
monthStr: monthStr,
dayStr: dayStr,
gongli: gongli);
},
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(20),
vertical: ScreenUtil().setWidth(20)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Text(
model.cday[index].content,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: ScreenUtil().setSp(26),
color: MyColours.color_333333),
)),
HEmptyView(10),
Image.asset(
Utils.getImgPath('c_edit'),
width: ScreenUtil().setWidth(40),
// height: ScreenUtil().setWidth(10),
)
],
),
));
},
);
}
})),
RoundButton(
text: '新增',
radius: ScreenUtil().setWidth(10),
... ... @@ -105,12 +186,14 @@ class _FestivalEditPageState extends State<FestivalEditPage> {
DialogUtil.festivalAlertDialog(context, '', 520,
rCallback: (name) {
print(name);
_setGuestInfo(name);
_setGuestInfocDay('', name);
// _addCookbookClass(name, showLoading: true);
});
},
),
VEmptyView(30)
])));
// }
// }));
}
}
... ...
... ... @@ -140,7 +140,9 @@ class _MakeMarkingPageState extends State<MakeMarkingPage> {
"sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
"gid": gid,
"content": customerMakingProvider.controller.text,
'is_update': customerMakingProvider.isUpdate ? '0' : '1'
'is_update': customerMakingProvider.isUpdate ? '0' : '1',
'create_user':
Provider.of<UserModel>(context, listen: false).user.role_name
};
if (customerMakingProvider.youhui != '选择优惠' &&
... ...
... ... @@ -158,7 +158,7 @@ class _MarketingRecordsDetailPageState
),
RowMultiText(
'创建人',
'管理员(未返回)',
model.marketingByIdSunModel.createUser,
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
... ... @@ -173,7 +173,9 @@ class _MarketingRecordsDetailPageState
),
RowMultiText(
'完成期限',
model.marketingByIdSunModel.edate,
model.marketingByIdSunModel.edate == null
? '无限制'
: model.marketingByIdSunModel.edate,
textColor: MyColours.color_333333,
bgColor: Color.fromRGBO(246, 248, 250, 1),
),
... ...
... ... @@ -117,11 +117,13 @@ class _MarketingRecordsPageState extends State<MarketingRecordsPage> {
HEmptyView(10),
Expanded(
child: Text(
data.notFinished != '' &&
data.notFinished != null &&
data.notFinished != '0'
data.finishedStatus == '0'
? '${data.notFinished}位未完成'
: '全部完成/取消任务',
: data.finishedStatus == '1'
? '全部完成'
: data.finishedStatus == '2'
? '取消任务'
: '',
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: data.notFinished != '' &&
... ... @@ -132,7 +134,10 @@ class _MarketingRecordsPageState extends State<MarketingRecordsPage> {
fontSize: ScreenUtil().setSp(26)))),
HEmptyView(10),
Expanded(
child: Text('剩余${data.remainingTime}天',
child: Text(
data.remainingTime == null
? '无限制'
: '剩余${data.remainingTime}天',
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_333333,
... ...
... ... @@ -39,6 +39,8 @@ class CustomerProvider extends ChangeNotifier {
PageState pageStateGuestReserve = PageState.Loading; //订单统计
PageState pageStateMarketingRecord = PageState.Loading; //营销记录
PageState pageStateMarketingRecordDetail = PageState.Loading; //营销记录详情
PageState pageStateGuestInfoCday = PageState.Loading; //客户详情纪念日
List<Cday> cday; //纪念日列表
GuestInfoSunModel guestInfoSunModel;
GuestReserveSunModel guestReserveSunModel;
... ... @@ -202,6 +204,44 @@ class CustomerProvider extends ChangeNotifier {
notifyListeners();
}
// 获取客户纪念日列表
getGuestInfoCday(BuildContext context, Map<String, String> params) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.get_guest_info,
data: params, showLoading: false)
.catchError((error) {
print(error.toString());
if (error is MyError) {
switch (error.type) {
case 1:
pageStateGuestInfoCday = PageState.ConnectivityError;
break;
case 2:
pageStateGuestInfoCday = PageState.ConnectivityTimeOut;
break;
default:
pageStateGuestInfoCday = PageState.ConnectivityError;
break;
}
}
notifyListeners();
});
if (baseResp != null && baseResp.code == Constant.status_success) {
cday = GuestInfoModel.fromJson(baseResp.responseData).data.guest.cDay;
if (cday.length > 0) {
pageStateGuestInfoCday = PageState.Success;
} else {
pageStateGuestInfoCday = PageState.Empty;
}
notifyListeners();
} else {
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
pageStateGuestInfoCday = PageState.ConnectivityTimeOut;
}
notifyListeners();
}
// //获取历史录入
// getUserHistorys(BuildContext context, Map<String, String> params) async {
// BaseResp<List> baseResp = await DioUtil()
... ... @@ -351,6 +391,41 @@ class CustomerProvider extends ChangeNotifier {
}
}
//修改客户信息纪念日
Future<bool> setGuestInfocDay(
BuildContext context, Map<String, String> params,
{bool showLoading = false}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.set_guest_info_cday,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
if (error is MyError) {}
notifyListeners();
});
if (baseResp != null && baseResp.code == Constant.status_success) {
// guestReserveSunModel =
// GuestReserveModel.fromJson(baseResp.responseData).data;
if (params.containsKey('id')) {
if (baseResp.responseData['data'] == 1) {
return true;
}
return false;
} else {
if (baseResp.responseData['data'] != null &&
baseResp.responseData['data']['id'] != '') {
return true;
}
return false;
}
} else {
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
return false;
}
}
//全选按钮执行“全选”
addAll() async {
List<CustomerListSunModel> temp = returnNowList();
... ...
... ... @@ -604,11 +604,13 @@ class NavigatorUtil {
///纪念日
static Future<dynamic> goFestivalEditPage(
BuildContext context,
Guest guest, {
Guest guest,
String id,
String phone, {
replace = false,
}) {
return _navigateTo(context,
"${Routes.festival_edit_page}?guest=${FluroConvertUtils.object2string(guest)}",
"${Routes.festival_edit_page}?guest=${FluroConvertUtils.object2string(guest)}&idstr=${id}&phone=${phone}",
replace: replace);
}
... ...
... ... @@ -889,7 +889,8 @@ var marketingRecordsDetailPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) {
String idstr = params["idstr"].first;
return ChangeNotifierProvider<CustomerProvider>(
create: (_) => CustomerProvider(), child: MarketingRecordsDetailPage(idstr:idstr));
create: (_) => CustomerProvider(),
child: MarketingRecordsDetailPage(idstr: idstr));
});
///创建营销
... ... @@ -938,7 +939,9 @@ var customerDetailEditPageHandle = new Handler(
///纪念日
var festivalEditPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) {
// String idstr = params["idstr"].first;
String idstr = params["idstr"].first;
String phone = params["phone"].first;
// UserHistoryEntity userHistoryEntity = UserHistoryEntity.fromJson(json.decode(
// FluroConvertUtils.fluroCnParamsDecode(
// params["userHistoryEntity"].first)));
... ... @@ -946,9 +949,7 @@ var festivalEditPageHandle = new Handler(
.decode(FluroConvertUtils.fluroCnParamsDecode(params["guest"].first)));
return ChangeNotifierProvider<CustomerProvider>(
create: (_) => CustomerProvider(),
child: FestivalEditPage(
guest: guest,
));
child: FestivalEditPage(guest: guest, idstr: idstr, phone: phone));
});
///客户订单
... ...
... ... @@ -2345,11 +2345,12 @@ class DialogUtil {
static Future festivalAlertDialog(
BuildContext context, String name, double height,
{CustomCallBack rCallback, double fontSize = 28}) async {
String yearStr = '选填';
String monthStr = '';
String dayStr = '';
bool gongli = true;
{CustomCallBack rCallback,
double fontSize = 28,
String yearStr = '选填',
String monthStr = '',
String dayStr = '',
bool gongli = true}) async {
final action = await showDialog(
context: context,
barrierDismissible: true,
... ...