Commit 19bc57e5301b5760242681993707f43d48af2864

Authored by wdn127929
1 parent 70af9b8b

我的客情and全店客情首页UI OK

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../../res/colors.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/MyDivider.dart';
import '../../../widgets/h_empty_view.dart';
import '../../../widgets/v_empty_view.dart';
class MonthItem extends StatefulWidget {
MonthItem({Key key}) : super(key: key);
@override
_MonthItemState createState() => _MonthItemState();
}
class _MonthItemState extends State<MonthItem> {
Widget _space({Color color = MyColours.color_515151, num height = 19}) {
return Row(
children: [
HEmptyView(10),
MyDivider(
w(1),
w(height),
color: color,
),
HEmptyView(10),
],
);
}
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.only(bottom: w(10)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.circular(r(8))),
child: Column(
children: [
Container(
height: w(35),
padding: EdgeInsets.only(left: w(15), right: w(30)),
decoration: BoxDecoration(
color: MyColours.color_33438E93,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(r(8)),
topRight: Radius.circular(r(8)),
)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'4月',
style: TextStyle(
color: MyColours.color_515151, fontSize: font(18)),
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text(
'预订1089单',
style: TextStyle(
color: MyColours.color_515151, fontSize: font(14)),
),
_space(),
Text(
'1190桌',
style: TextStyle(
color: MyColours.color_515151, fontSize: font(14)),
),
],
),
],
),
),
Container(
padding: EdgeInsets.only(left: w(15), top: w(8), bottom: w(8)),
child: Row(
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Wrap(
runSpacing: w(6),
children: [
Text(
'到店 1059单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(12)),
),
HEmptyView(10),
MyDivider(
w(1),
w(17),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1160桌',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(12)),
),
HEmptyView(10),
MyDivider(
w(1),
w(17),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'8000人',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(12)),
),
HEmptyView(10),
MyDivider(
w(1),
w(17),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'30取消',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(12)),
),
HEmptyView(10),
MyDivider(
w(1),
w(17),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'到客97.2%',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(12)),
),
],
),
VEmptyView(12),
Wrap(
// crossAxisAlignment: WrapCrossAlignment.start,
// runAlignment: WrapAlignment.center,
// alignment: WrapAlignment.center,
runSpacing: w(6),
children: [
Text(
'有金额订单数 6000',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'总消费 9585800.00元',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(12),
Wrap(
// crossAxisAlignment: WrapCrossAlignment.start,
// runAlignment: WrapAlignment.center,
// alignment: WrapAlignment.center,
runSpacing: w(6),
children: [
Text(
'人均 8885.58元',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'桌均 95888.58元',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(12),
Wrap(
// crossAxisAlignment: WrapCrossAlignment.start,
// runAlignment: WrapAlignment.center,
// alignment: WrapAlignment.center,
runSpacing: w(6),
children: [
Text(
'存酒 8位',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'提前点餐 9位',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'安排菜 9位',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
],
),
],
)),
HEmptyView(12),
Container(
width: w(50),
child: Image.asset(
Utils.getImgPath('c_arrow_right'),
width: ScreenUtil().setWidth(24),
height: ScreenUtil().setWidth(24),
))
],
))
],
),
);
}
}
... ...
... ... @@ -21,6 +21,7 @@ import 'package:provider/provider.dart';
import '../../../../utils/screen_util.dart';
import '../../../../widgets/MyDivider.dart';
import '../month_item.dart';
import '../store_customer/bar_chart_page.dart';
/**
... ... @@ -193,20 +194,6 @@ class _MyCustomerHomePageState extends State<MyCustomerHomePage> {
);
}
Widget _space({Color color = MyColours.color_515151, num height = 19}) {
return Row(
children: [
HEmptyView(10),
MyDivider(
w(1),
w(height),
color: color,
),
HEmptyView(10),
],
);
}
///活跃客户、沉睡客户、流失客户
Widget _percentWidget(String pnum, String btnTitle, String percent) {
return InkWell(
... ... @@ -658,266 +645,7 @@ class _MyCustomerHomePageState extends State<MyCustomerHomePage> {
controller: _controller,
padding: EdgeInsets.symmetric(horizontal: w(10)),
itemBuilder: (context, index) {
return Container(
margin: EdgeInsets.only(bottom: w(10)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.circular(r(8))),
child: Column(
children: [
Container(
height: w(35),
padding: EdgeInsets.only(
left: w(15), right: w(30)),
decoration: BoxDecoration(
color: MyColours.color_33438E93,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(r(8)),
topRight: Radius.circular(r(8)),
)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'4月',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(18)),
),
Row(
mainAxisAlignment:
MainAxisAlignment.end,
children: [
Text(
'预订1089单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(14)),
),
_space(),
Text(
'1190桌',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(14)),
),
],
),
],
),
),
Container(
padding: EdgeInsets.only(
left: w(15), top: w(8), bottom: w(8)),
child: Row(
children: [
Expanded(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Wrap(
runSpacing: w(6),
children: [
Text(
'到店 1059单',
style: TextStyle(
color: MyColours
.color_515151,
fontSize: font(12)),
),
HEmptyView(10),
MyDivider(
w(1),
w(17),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1160桌',
style: TextStyle(
color: MyColours
.color_515151,
fontSize: font(12)),
),
HEmptyView(10),
MyDivider(
w(1),
w(17),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'8000人',
style: TextStyle(
color: MyColours
.color_515151,
fontSize: font(12)),
),
HEmptyView(10),
MyDivider(
w(1),
w(17),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'30取消',
style: TextStyle(
color: MyColours
.color_515151,
fontSize: font(12)),
),
HEmptyView(10),
MyDivider(
w(1),
w(17),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'到客97.2%',
style: TextStyle(
color: MyColours
.color_515151,
fontSize: font(12)),
),
],
),
VEmptyView(12),
Wrap(
// crossAxisAlignment: WrapCrossAlignment.start,
// runAlignment: WrapAlignment.center,
// alignment: WrapAlignment.center,
runSpacing: w(6),
children: [
Text(
'有金额订单数 6000',
style: TextStyle(
color: MyColours
.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'总消费 9585800.00元',
style: TextStyle(
color: MyColours
.color_999999,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(12),
Wrap(
// crossAxisAlignment: WrapCrossAlignment.start,
// runAlignment: WrapAlignment.center,
// alignment: WrapAlignment.center,
runSpacing: w(6),
children: [
Text(
'人均 8885.58元',
style: TextStyle(
color: MyColours
.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'桌均 95888.58元',
style: TextStyle(
color: MyColours
.color_999999,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(12),
Wrap(
// crossAxisAlignment: WrapCrossAlignment.start,
// runAlignment: WrapAlignment.center,
// alignment: WrapAlignment.center,
runSpacing: w(6),
children: [
Text(
'存酒 8位',
style: TextStyle(
color: MyColours
.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'提前点餐 9位',
style: TextStyle(
color: MyColours
.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'安排菜 9位',
style: TextStyle(
color: MyColours
.color_999999,
fontSize: font(
(10),
)),
),
],
),
],
)),
HEmptyView(12),
Container(
width: w(50),
child: Image.asset(
Utils.getImgPath('c_arrow_right'),
width: ScreenUtil().setWidth(24),
height: ScreenUtil().setWidth(24),
))
],
))
],
),
);
return MonthItem();
})
],
),
... ...
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/models/seller_info.dart';
import 'package:one_key/models/store_customer_home_model.dart';
import 'package:one_key/pages/my/customer_type/store_customer/bar_chart_page.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/event_bus.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/MyDivider.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';
import 'package:provider/provider.dart';
import '../../../../utils/screen_util.dart';
import '../month_item.dart';
class StoreCustomerHomeLeftPage extends StatefulWidget {
StoreCustomerHomeLeftPage({Key key}) : super(key: key);
@override
_StoreCustomerHomeLeftPageState createState() =>
_StoreCustomerHomeLeftPageState();
}
class _StoreCustomerHomeLeftPageState extends State<StoreCustomerHomeLeftPage> {
ScrollController _controller = ScrollController();
CustomerProvider customerProvider;
bool showWarning = false;
int year;
int month;
List<BarData> dataList = [
BarData(MyColours.color_8EBBBE, 200),
BarData(MyColours.color_8EBBBE, 8),
BarData(MyColours.color_8EBBBE, 15),
BarData(MyColours.color_8EBBBE, 5),
BarData(MyColours.color_8EBBBE, 2),
BarData(MyColours.color_8EBBBE, 2),
BarData(MyColours.color_8EBBBE, 18),
BarData(MyColours.color_8EBBBE, 168),
BarData(MyColours.color_8EBBBE, 15),
BarData(MyColours.color_8EBBBE, 5),
BarData(MyColours.color_8EBBBE, null ?? 0),
BarData(MyColours.color_8EBBBE, 0),
];
@override
void initState() {
super.initState();
year = DateTime.now().year;
month = DateTime.now().month;
WidgetsBinding.instance.addPostFrameCallback((_) {
_getSellerGuestManage();
_getMarketingBySeller();
});
bus.on("refresh_store_customer_home", (arg) {
_getMarketingBySeller();
_getSellerGuestManage();
});
}
@override
void dispose() {
bus.off('refresh_store_customer_home');
// bus.off("refresh_coupon_list");
super.dispose();
}
///全店客情首页
_getSellerGuestManage() async {
StoreCustomerHomeSunModel model =
await customerProvider.getSellerGuestManage(context);
// setState(() {});
}
_getMarketingBySeller() async {
Map<String, String> params = {
"sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid
};
List<MarketingBySellerSunModel> list =
await customerProvider.getMarketingBySeller(context, params);
if (list != null && list.length > 0) {
bool temp = list.any((value) {
return value.finishedStatus == '0';
});
setState(() {
showWarning = temp;
});
}
// await customerProvider.searchData(customerProvider.controller.text);
}
///活跃客户、沉睡客户、流失客户
Widget _percentWidget(String pnum, String btnTitle, String percent,
{String uid = ''}) {
return InkWell(
onTap: () async {
String index = '0';
if (btnTitle == '活跃') {
index = '1';
} else if (btnTitle == '60天未到店') {
index = '2';
} else if (btnTitle == '120天未到店') {
index = '3';
}
NavigatorUtil.goCustomerListPage(context, FromPage.FromPageHome, uid,
index: index);
},
child: Container(
color: MyColours.color_ffffff,
height: w(90),
width: (ScreenUtil().screenWidth - ScreenUtil().setWidth(20)) / 3,
// height: (ScreenUtil().screenWidth - ScreenUtil().setWidth(20)) / 3,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
VEmptyView(30),
Container(
height: w(24),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(pnum,
style: TextStyle(
color: btnTitle == '活跃'
? MyColours.color_199095
: btnTitle == '60天未到店'
? MyColours.color_E89243
: MyColours.color_E34D59,
fontSize: ScreenUtil().setSp(48),
fontWeight: FontWeight.bold)),
Text('位',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28),
))
],
)),
VEmptyView(20),
RoundButton(
onPressed: () async {
String index = '0';
if (btnTitle == '活跃') {
index = '1';
} else if (btnTitle == '60天未到店') {
index = '2';
} else if (btnTitle == '120天未到店') {
index = '3';
}
NavigatorUtil.goCustomerListPage(
context, FromPage.FromPageHome, uid,
index: index);
},
text: btnTitle,
fontSize: 24,
isBold: false,
textColor: MyColours.color_999999,
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
borderColor: MyColours.color_ffffff,
height: ScreenUtil().setWidth(48),
// width: ScreenUtil().setWidth(160),
radius: ScreenUtil().setWidth(30),
),
// VEmptyView(16),
// percent == null
// ? SizedBox()
// : Text('${percent}%',
// style: TextStyle(
// color: MyColours.color_199095,
// fontSize: ScreenUtil().setSp(24),
// )),
],
),
));
}
///活跃客户、沉睡客户、流失客户
// Widget _percentWidget(String pnum, String btnTitle, String percent,
// {String uid = ''}) {
// return InkWell(
// onTap: () async {
// String index = '0';
// if (btnTitle == '活跃') {
// index = '1';
// } else if (btnTitle == '60天未到店') {
// index = '2';
// } else if (btnTitle == '120天未到店') {
// index = '3';
// }
// if (btnTitle == '未分配') {
// NavigatorUtil.goCustomerListPage(
// context, FromPage.FromPageHome, uid,
// index: index, distribution: true);
// } else {
// NavigatorUtil.goCustomerListPage(
// context, FromPage.FromPageHome, uid,
// index: index);
// }
// },
// child: Container(
// color: MyColours.color_ffffff,
// // height: ScreenUtil().setWidth(230),
// width: (ScreenUtil().screenWidth - ScreenUtil().setWidth(20)) / 3,
// height: (ScreenUtil().screenWidth - ScreenUtil().setWidth(20)) / 3,
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Row(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Text(pnum,
// style: TextStyle(
// color: MyColours.color_199095,
// fontSize: ScreenUtil().setSp(40),
// fontWeight: FontWeight.bold)),
// Text('位',
// style: TextStyle(
// color: MyColours.color_199095,
// fontSize: ScreenUtil().setSp(24),
// ))
// ],
// ),
// btnTitle == '' ? SizedBox() : VEmptyView(20),
// btnTitle == ''
// ? SizedBox()
// : InkWell(
// onTap: () async {
// String index = '0';
// if (btnTitle == '活跃客户') {
// index = '1';
// } else if (btnTitle == '沉睡客户') {
// index = '2';
// } else if (btnTitle == '流失客户') {
// index = '3';
// }
// if (btnTitle == '未分配') {
// NavigatorUtil.goCustomerListPage(
// context, FromPage.FromPageHome, uid,
// index: index, distribution: true);
// } else {
// NavigatorUtil.goCustomerListPage(
// context, FromPage.FromPageHome, uid,
// index: index);
// }
// },
// child: Container(
// height: ScreenUtil().setWidth(45),
// width: ScreenUtil().setWidth(160),
// alignment: Alignment.center,
// padding: EdgeInsets.symmetric(horizontal: w(10)),
// decoration: BoxDecoration(
// color: MyColours.color_ffffff,
// border: Border.all(
// width: w(1),
// color: Color.fromRGBO(118, 118, 118, 1),
// ),
// borderRadius:
// BorderRadius.circular(ScreenUtil().setWidth(30)),
// ),
// child: Text(
// btnTitle,
// maxLines: 1,
// overflow: TextOverflow.ellipsis,
// style: TextStyle(
// color: MyColours.color_333333,
// fontSize: font(12)),
// ),
// ))
// // RoundButton(
// // onPressed: () async {
// // String index = '0';
// // if (btnTitle == '活跃客户') {
// // index = '1';
// // } else if (btnTitle == '沉睡客户') {
// // index = '2';
// // } else if (btnTitle == '流失客户') {
// // index = '3';
// // }
// // NavigatorUtil.goCustomerListPage(
// // context, FromPage.FromPageHome, uid,
// // index: index);
// // },
// // text: btnTitle,
// // fontSize: 24,
// // isBold: false,
// // textColor: MyColours.color_333333,
// // gradientStart: MyColours.color_ffffff,
// // gradientEnd: MyColours.color_ffffff,
// // borderColor: Color.fromRGBO(118, 118, 118, 1),
// // height: ScreenUtil().setWidth(45),
// // width: ScreenUtil().setWidth(160),
// // radius: ScreenUtil().setWidth(30),
// // ),
// ,
// VEmptyView(16),
// percent == null
// ? SizedBox()
// : Text('${percent}%',
// style: TextStyle(
// color: MyColours.color_199095,
// fontSize: ScreenUtil().setSp(24),
// )),
// ],
// ),
// ));
// }
Widget _chart() {
return Container(
// height: w(216),
padding: EdgeInsets.only(top: w(16), left: w(16), right: w(16)),
margin: EdgeInsets.all(w(10)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.circular(r(8))),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
setState(() {
year--;
});
// _getGuestReserve(showLoading: true);
},
child: Padding(
padding:
EdgeInsets.only(right: ScreenUtil().setWidth(20)),
child: Image.asset(
Utils.getImgPath('c_arrow_left'),
width: ScreenUtil().setWidth(24),
))),
Text(
'${year}年',
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_000000),
),
InkWell(
onTap: () {
if (year >= DateTime.now().year) {
return;
}
setState(() {
year++;
});
// _getGuestReserve(showLoading: true);
},
child: Padding(
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(20),
),
child: Image.asset(
Utils.getImgPath(year != DateTime.now().year
? 'c_arrow_right'
: 'c_arrow_right_gray'),
width: ScreenUtil().setWidth(24),
)))
],
),
VEmptyView(80),
Container(
width: double.infinity,
height: w(177),
child: LayoutBuilder(builder: (context, constraints) {
return BarChartWidget(
dataList: dataList,
);
}))
],
),
);
}
Widget _monthWidget() {
return Container(
margin: EdgeInsets.symmetric(horizontal: w(10)),
padding: EdgeInsets.symmetric(horizontal: w(15), vertical: w(10)),
decoration: BoxDecoration(color: MyColours.color_ffffff),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
if (month == 1) {
month = 12;
setState(() {});
} else {
setState(() {
month--;
});
}
// _getGuestReserve(showLoading: true);
},
child: Padding(
padding:
EdgeInsets.only(right: ScreenUtil().setWidth(20)),
child: Image.asset(
Utils.getImgPath('c_arrow_left'),
width: ScreenUtil().setWidth(24),
))),
Text(
'${month}月',
style: TextStyle(
fontSize: ScreenUtil().setSp(40),
color: MyColours.color_515151),
),
InkWell(
onTap: () {
if (month == 12) {
month = 1;
setState(() {});
} else {
setState(() {
month++;
});
}
// _getGuestReserve(showLoading: true);
},
child: Padding(
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(20),
),
child: Image.asset(
Utils.getImgPath('c_arrow_right'),
width: ScreenUtil().setWidth(24),
)))
],
),
VEmptyView(20),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'预订',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_515151,
fontSize: font(
(18),
)),
),
HEmptyView(10),
Text(
'1089单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190桌',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
],
),
VEmptyView(15),
Wrap(
// crossAxisAlignment: WrapCrossAlignment.center,
// runAlignment: WrapAlignment.center,
// alignment: WrapAlignment.center,
runSpacing: w(5),
children: [
Text(
'到店',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_515151,
fontSize: font(
(18),
)),
),
HEmptyView(10),
Text(
'1089单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190桌',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190人',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190取消',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'到客97.2%',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
],
),
VEmptyView(15),
MyDivider(
double.infinity,
w(1),
color: MyColours.color_DBDBDB,
),
VEmptyView(15),
Wrap(
// crossAxisAlignment: WrapCrossAlignment.start,
// runAlignment: WrapAlignment.center,
// alignment: WrapAlignment.center,
runSpacing: w(5),
children: [
Text(
'有金额订单 6000',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'消费 9585800.00元',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'人均 8885.58元',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'桌均 95888.58元',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'存酒 8位',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'提前点餐 9位',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'安排菜 9位',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
],
),
],
),
);
}
Widget _managerWidget(String pnum, String btnTitle, String percent,
{String uid = ''}) {
return Container(
// width: w(122),
height: w(116),
padding: EdgeInsets.symmetric(vertical: w(12), horizontal: w(10)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
),
child: Column(
children: [
Align(
alignment: Alignment.centerLeft,
child: Container(
padding: EdgeInsets.symmetric(vertical: w(4), horizontal: w(5)),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(3)),
border:
Border.all(color: MyColours.color_999999, width: w(1))),
child: Text(
btnTitle,
style: TextStyle(
fontSize: font(12),
fontWeight: FontWeight.bold,
color: MyColours.color_999999),
),
),
),
VEmptyView(20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
pnum,
style: TextStyle(
fontSize: font(24),
fontWeight: FontWeight.bold,
color: MyColours.color_438E93),
),
Text(
'位',
style: TextStyle(
fontSize: font(14), color: MyColours.color_000000),
),
],
),
VEmptyView(10),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'23',
style: TextStyle(
fontSize: font(14),
fontWeight: FontWeight.bold,
color: MyColours.color_438E93),
),
MyDivider(
w(4),
w(1),
color: MyColours.color_999999,
),
Text(
'9',
style: TextStyle(
fontSize: font(14),
fontWeight: FontWeight.bold,
color: MyColours.color_E89243),
),
MyDivider(
w(4),
w(1),
color: MyColours.color_999999,
),
Text(
'2',
style: TextStyle(
fontSize: font(14),
fontWeight: FontWeight.bold,
color: MyColours.color_E34D59),
),
],
),
],
),
);
}
@override
Widget build(BuildContext context) {
customerProvider = Provider.of<CustomerProvider>(context, listen: false);
return Scaffold(
// backgroundColor: Color.fromRGBO(246, 248, 250, 1),
// appBar: SystemAppBar('全店客情', onTap: () {
// EventBus().emit('changeStatusColor');
// Navigator.pop(context);
// }),
body: WillPopScope(onWillPop: () async {
EventBus().emit('changeStatusColor');
return true;
}, child: Consumer<CustomerProvider>(builder: (context, model, _) {
if (model.pageStateStoreHome != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateStoreHome,
callback: () {
// getTableList();
_getSellerGuestManage();
},
emptyMsg: "暂时没有全店客情哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return Column(children: [
Expanded(
child: SingleChildScrollView(
controller: _controller,
child: Column(
children: [
VEmptyView(10),
Stack(
children: [
InkWell(
onTap: () {
NavigatorUtil.goCustomerListPage(
context, FromPage.FromPageHome, '');
},
child: Container(
height: w(80),
color: MyColours.color_ffffff,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'${customerProvider.storeSunmodel.myCustomer}',
style: TextStyle(
color: MyColours.color_438E93,
fontSize: ScreenUtil().setSp(64),
fontWeight: FontWeight.bold),
),
Text(
'位',
style: TextStyle(
color: MyColours.color_515151,
// fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(32)),
)
],
),
)),
Positioned(
top: ScreenUtil().setWidth(30),
right: ScreenUtil().setWidth(40),
child: InkWell(
onTap: () {
NavigatorUtil.goCustomerSetPage(context);
},
child: Image.asset(Utils.getImgPath('c_set'),
width: ScreenUtil().setWidth(40))))
],
),
VEmptyView(10),
Row(
children: [
_percentWidget(
'${customerProvider.storeSunmodel.active.count}',
'活跃',
'${customerProvider.storeSunmodel.active.scale}'),
HEmptyView(10),
_percentWidget(
'${customerProvider.storeSunmodel.sleep.count}',
'60天未到店',
'${customerProvider.storeSunmodel.sleep.scale}'),
HEmptyView(10),
_percentWidget(
'${customerProvider.storeSunmodel.drain.count}',
'120天未到店',
'${customerProvider.storeSunmodel.drain.scale}'),
],
),
// GridView.builder(
// controller: _controller,
// shrinkWrap: true,
// cacheExtent: ScreenUtil().setWidth(0),
// itemCount: 3,
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 3,
// childAspectRatio: 1,
// mainAxisSpacing: ScreenUtil().setWidth(10),
// crossAxisSpacing: ScreenUtil().setWidth(10)),
// itemBuilder: (BuildContext context, int index) {
// // locationState = state;
// return _percentWidget('1999', '活跃客户', '39.20');
// }),
// Row(
// children: [
// _percentWidget('19992', '活跃客户', '90.90'),
// HEmptyView(10),
// _percentWidget('19992', '沉睡客户', '90.90'),
// HEmptyView(10),
// _percentWidget('19992', '流失客户', '5.90'),
// ],
// ),
// Padding(
// padding: EdgeInsets.symmetric(
// vertical: ScreenUtil().setWidth(30)),
// child: Text(
// '客户经理',
// style: TextStyle(
// fontSize: ScreenUtil().setSp(28),
// color: MyColours.color_333333),
// ),
// ),
VEmptyView(10),
GridView.builder(
controller: _controller,
shrinkWrap: true,
cacheExtent: ScreenUtil().setWidth(0),
itemCount:
customerProvider.storeSunmodel.sellerUser.length + 1,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
childAspectRatio: 1.05,
mainAxisSpacing: ScreenUtil().setWidth(10),
crossAxisSpacing: ScreenUtil().setWidth(10)),
itemBuilder: (BuildContext context, int index) {
// locationState = state;
if (index == 0) {
return _managerWidget(
'${customerProvider.storeSunmodel.distribution}',
'未分配经理',
null);
}
return _managerWidget(
'${customerProvider.storeSunmodel.sellerUser[index - 1].count}',
customerProvider.storeSunmodel.sellerUser[index - 1]
.account ==
null
? ''
: '${customerProvider.storeSunmodel.sellerUser[index - 1].nickName ?? customerProvider.storeSunmodel.sellerUser[index - 1].account}',
null,
uid: customerProvider
.storeSunmodel.sellerUser[index - 1].uid);
}),
VEmptyView(10),
ListView.builder(
shrinkWrap: true,
controller: _controller,
itemCount: 2,
itemBuilder: (context, index) {
return Container(
padding: EdgeInsets.symmetric(
vertical: w(12), horizontal: w(16)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
border: Border(
bottom: BorderSide(
color: index == 2 - 1
? MyColours.color_ffffff
: MyColours.color_E7E7E7,
width: w(1)))),
child: Row(
children: [
Expanded(
child: Text(
'7天内存酒超期:5位/7天内纪念日提醒:3位',
style: TextStyle(
fontSize: font(16),
color: MyColours.color_515151),
)),
Text(
'创建营销计划',
style: TextStyle(
fontSize: font(16),
color: MyColours.color_999999),
),
HEmptyView(20),
Image.asset(
Utils.getImgPath('arrow_right_new'),
width: w(12),
)
],
),
);
}),
_chart(),
// _monthWidget(),
ListView.builder(
itemCount: 10,
shrinkWrap: true,
controller: _controller,
padding: EdgeInsets.symmetric(horizontal: w(10)),
itemBuilder: (context, index) {
return MonthItem();
}),
/**
ListView.builder(
itemCount: 10,
controller: _controller,
shrinkWrap: true,
padding: EdgeInsets.symmetric(horizontal: w(10)),
itemBuilder: (context, index) {
return Container(
margin: EdgeInsets.only(bottom: w(10)),
padding: EdgeInsets.symmetric(horizontal: w(10)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.only(
topRight: Radius.circular(r(8)),
bottomRight: Radius.circular(r(8))),
),
child: Row(
children: [
Container(
width: w(122),
padding: EdgeInsets.symmetric(vertical: w(5)),
decoration: BoxDecoration(
border: Border(
right: BorderSide(
color: MyColours.color_f3f3f3,
width: w(1)))),
child: Column(
children: [
VEmptyView(24),
Align(
alignment: Alignment.centerLeft,
child: Container(
padding: EdgeInsets.symmetric(
vertical: w(4), horizontal: w(5)),
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(r(3)),
border: Border.all(
color: MyColours.color_999999,
width: w(1))),
child: Text(
'张珊珊',
style: TextStyle(
fontSize: font(12),
fontWeight: FontWeight.bold,
color: MyColours.color_999999),
),
),
),
VEmptyView(10),
Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Text(
'34',
style: TextStyle(
fontSize: font(24),
fontWeight: FontWeight.bold,
color: MyColours.color_438E93),
),
Text(
'位',
style: TextStyle(
fontSize: font(14),
color: MyColours.color_000000),
),
],
),
VEmptyView(10),
Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Text(
'23',
style: TextStyle(
fontSize: font(14),
fontWeight: FontWeight.bold,
color: MyColours.color_438E93),
),
MyDivider(
w(4),
w(1),
color: MyColours.color_999999,
),
Text(
'9',
style: TextStyle(
fontSize: font(14),
fontWeight: FontWeight.bold,
color: MyColours.color_E89243),
),
MyDivider(
w(4),
w(1),
color: MyColours.color_999999,
),
Text(
'2',
style: TextStyle(
fontSize: font(14),
fontWeight: FontWeight.bold,
color: MyColours.color_E34D59),
),
],
),
VEmptyView(24),
],
),
),
Expanded(
child: Container(
padding: EdgeInsets.only(
top: w(5), bottom: w(5), left: w(10)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'预订',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_515151,
fontSize: font(
(12),
)),
),
HEmptyView(10),
Text(
'1089单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190桌',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(10),
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'到店',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_515151,
fontSize: font(
(12),
)),
),
HEmptyView(10),
Text(
'1089单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190桌',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(10),
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'1089人',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190取消',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'到客90.1%',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(10),
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'有金额订单数 25',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'总消费 25800元',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(10),
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'人均 103.2元',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'桌均 860元',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(10),
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'存酒 1位',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'提前点餐 9位',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'安排菜 9位',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
],
),
],
),
Image.asset(
Utils.getImgPath('arrow_right_new'),
width: w(12),
)
],
),
))
],
),
);
})
*/
],
),
)),
Container(
color: MyColours.color_FAFAFA,
padding: EdgeInsets.only(
top: w(13), bottom: w(26), left: w(45), right: (45)),
child: Stack(
children: [
RoundButton(
onPressed: () {
NavigatorUtil.goMarketingRecordsPage(
context, FromPage.FromPageStoreCustomer);
},
text: '历史营销记录',
fontSize: 32,
isBold: true,
// margin: EdgeInsets.only(
// top: w(13),
// bottom: w(26),
// left: w(45),
// right: (45)),
textColor: MyColours.color_F8F9FD,
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
borderColor: MyColours.color_199095,
height: ScreenUtil().setWidth(86),
// width: ScreenUtil().setWidth(260),
radius: ScreenUtil().setWidth(10),
),
showWarning
? Positioned(
right: ScreenUtil().setWidth(30),
top: ScreenUtil().setWidth(45 / 2),
child: Image.asset(
Utils.getImgPath('warning'),
width: ScreenUtil().setWidth(35),
))
: SizedBox()
],
))
]);
}
})),
);
}
}
... ...
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/models/seller_info.dart';
import 'package:one_key/models/store_customer_home_model.dart';
import 'package:one_key/pages/my/customer_type/store_customer/bar_chart_page.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/event_bus.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/pages/my/customer_type/store_customer/store_customer_home_left_page.dart';
import 'package:one_key/pages/my/customer_type/store_customer/store_customer_home_right_page.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';
import 'package:provider/provider.dart';
import '../../../../res/colors.dart';
import '../../../../utils/screen_util.dart';
import '../../../../widgets/v_empty_view.dart';
/***
* 全店客情首页
*/
class StoreCustomerHomePage extends StatefulWidget {
StoreCustomerHomePage({Key key}) : super(key: key);
... ... @@ -30,1168 +20,93 @@ class StoreCustomerHomePage extends StatefulWidget {
_StoreCustomerHomePageState createState() => _StoreCustomerHomePageState();
}
class _StoreCustomerHomePageState extends State<StoreCustomerHomePage> {
ScrollController _controller = ScrollController();
CustomerProvider customerProvider;
bool showWarning = false;
int year;
int month;
List<BarData> dataList = [
BarData(MyColours.color_8EBBBE, 200),
BarData(MyColours.color_8EBBBE, 8),
BarData(MyColours.color_8EBBBE, 15),
BarData(MyColours.color_8EBBBE, 5),
BarData(MyColours.color_8EBBBE, 2),
BarData(MyColours.color_8EBBBE, 2),
BarData(MyColours.color_8EBBBE, 18),
BarData(MyColours.color_8EBBBE, 168),
BarData(MyColours.color_8EBBBE, 15),
BarData(MyColours.color_8EBBBE, 5),
BarData(MyColours.color_8EBBBE, null ?? 0),
BarData(MyColours.color_8EBBBE, 0),
];
class _StoreCustomerHomePageState extends State<StoreCustomerHomePage>
with TickerProviderStateMixin {
TabController tabController;
Color selectedColor = MyColours.color_ffffff;
Color unSelectedColor = MyColours.color_BFC4D4;
@override
void initState() {
// TODO: implement initState
super.initState();
year = DateTime.now().year;
month = DateTime.now().month;
WidgetsBinding.instance.addPostFrameCallback((_) {
_getSellerGuestManage();
_getMarketingBySeller();
});
bus.on("refresh_store_customer_home", (arg) {
_getMarketingBySeller();
_getSellerGuestManage();
tabController = TabController(length: 2, vsync: this);
tabController.addListener(() {
//点击tab时或滑动tab回调一次
// if (tabController.index.toDouble() == tabController.animation.value) {
// getMessage(index: tabController.index);
// selectIndex = tabController.index;
// setState(() {});
// }
});
}
@override
void dispose() {
bus.off('refresh_store_customer_home');
// bus.off("refresh_coupon_list");
super.dispose();
}
///全店客情首页
_getSellerGuestManage() async {
StoreCustomerHomeSunModel model =
await customerProvider.getSellerGuestManage(context);
// setState(() {});
}
_getMarketingBySeller() async {
Map<String, String> params = {
"sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid
};
List<MarketingBySellerSunModel> list =
await customerProvider.getMarketingBySeller(context, params);
if (list != null && list.length > 0) {
bool temp = list.any((value) {
return value.finishedStatus == '0';
});
setState(() {
showWarning = temp;
});
}
// await customerProvider.searchData(customerProvider.controller.text);
}
///活跃客户、沉睡客户、流失客户
Widget _percentWidget(String pnum, String btnTitle, String percent,
{String uid = ''}) {
return InkWell(
onTap: () async {
String index = '0';
if (btnTitle == '活跃客户') {
index = '1';
} else if (btnTitle == '沉睡客户') {
index = '2';
} else if (btnTitle == '流失客户') {
index = '3';
}
if (btnTitle == '未分配') {
NavigatorUtil.goCustomerListPage(
context, FromPage.FromPageHome, uid,
index: index, distribution: true);
} else {
NavigatorUtil.goCustomerListPage(
context, FromPage.FromPageHome, uid,
index: index);
}
},
child: Container(
color: MyColours.color_ffffff,
// height: ScreenUtil().setWidth(230),
width: (ScreenUtil().screenWidth - ScreenUtil().setWidth(20)) / 3,
height: (ScreenUtil().screenWidth - ScreenUtil().setWidth(20)) / 3,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(pnum,
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(40),
fontWeight: FontWeight.bold)),
Text('位',
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(24),
))
],
),
btnTitle == '' ? SizedBox() : VEmptyView(20),
btnTitle == ''
? SizedBox()
: InkWell(
onTap: () async {
String index = '0';
if (btnTitle == '活跃客户') {
index = '1';
} else if (btnTitle == '沉睡客户') {
index = '2';
} else if (btnTitle == '流失客户') {
index = '3';
}
if (btnTitle == '未分配') {
NavigatorUtil.goCustomerListPage(
context, FromPage.FromPageHome, uid,
index: index, distribution: true);
} else {
NavigatorUtil.goCustomerListPage(
context, FromPage.FromPageHome, uid,
index: index);
}
},
child: Container(
height: ScreenUtil().setWidth(45),
width: ScreenUtil().setWidth(160),
alignment: Alignment.center,
padding: EdgeInsets.symmetric(horizontal: w(10)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
border: Border.all(
width: w(1),
color: Color.fromRGBO(118, 118, 118, 1),
),
borderRadius:
BorderRadius.circular(ScreenUtil().setWidth(30)),
),
child: Text(
btnTitle,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_333333,
fontSize: font(12)),
),
))
// RoundButton(
// onPressed: () async {
// String index = '0';
// if (btnTitle == '活跃客户') {
// index = '1';
// } else if (btnTitle == '沉睡客户') {
// index = '2';
// } else if (btnTitle == '流失客户') {
// index = '3';
// }
// NavigatorUtil.goCustomerListPage(
// context, FromPage.FromPageHome, uid,
// index: index);
// },
// text: btnTitle,
// fontSize: 24,
// isBold: false,
// textColor: MyColours.color_333333,
// gradientStart: MyColours.color_ffffff,
// gradientEnd: MyColours.color_ffffff,
// borderColor: Color.fromRGBO(118, 118, 118, 1),
// height: ScreenUtil().setWidth(45),
// width: ScreenUtil().setWidth(160),
// radius: ScreenUtil().setWidth(30),
// ),
,
VEmptyView(16),
percent == null
? SizedBox()
: Text('${percent}%',
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(24),
)),
],
),
));
}
Widget _chart() {
return Container(
// height: w(216),
padding: EdgeInsets.only(top: w(16), left: w(16), right: w(16)),
margin: EdgeInsets.all(w(10)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.circular(r(8))),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
setState(() {
year--;
});
// _getGuestReserve(showLoading: true);
},
child: Padding(
padding:
EdgeInsets.only(right: ScreenUtil().setWidth(20)),
child: Image.asset(
Utils.getImgPath('c_arrow_left'),
width: ScreenUtil().setWidth(24),
))),
Text(
'${year}年',
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_000000),
),
InkWell(
onTap: () {
if (year >= DateTime.now().year) {
return;
}
setState(() {
year++;
});
// _getGuestReserve(showLoading: true);
},
child: Padding(
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(20),
),
child: Image.asset(
Utils.getImgPath(year != DateTime.now().year
? 'c_arrow_right'
: 'c_arrow_right_gray'),
width: ScreenUtil().setWidth(24),
)))
],
),
VEmptyView(80),
Container(
width: double.infinity,
height: w(177),
child: LayoutBuilder(builder: (context, constraints) {
return BarChartWidget(
dataList: dataList,
);
}))
],
),
);
}
Widget _monthWidget() {
return Container(
margin: EdgeInsets.symmetric(horizontal: w(10)),
padding: EdgeInsets.symmetric(horizontal: w(15), vertical: w(10)),
decoration: BoxDecoration(color: MyColours.color_ffffff),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
if (month == 1) {
month = 12;
setState(() {});
} else {
setState(() {
month--;
});
}
// _getGuestReserve(showLoading: true);
},
child: Padding(
padding:
EdgeInsets.only(right: ScreenUtil().setWidth(20)),
child: Image.asset(
Utils.getImgPath('c_arrow_left'),
width: ScreenUtil().setWidth(24),
))),
Text(
'${month}月',
style: TextStyle(
fontSize: ScreenUtil().setSp(40),
color: MyColours.color_515151),
),
InkWell(
onTap: () {
if (month == 12) {
month = 1;
setState(() {});
} else {
setState(() {
month++;
});
}
// _getGuestReserve(showLoading: true);
},
child: Padding(
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(20),
),
child: Image.asset(
Utils.getImgPath('c_arrow_right'),
width: ScreenUtil().setWidth(24),
)))
],
),
VEmptyView(20),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'预订',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_515151,
fontSize: font(
(18),
)),
),
HEmptyView(10),
Text(
'1089单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190桌',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
],
),
VEmptyView(15),
Wrap(
// crossAxisAlignment: WrapCrossAlignment.center,
// runAlignment: WrapAlignment.center,
// alignment: WrapAlignment.center,
children: [
Text(
'到店',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_515151,
fontSize: font(
(18),
)),
),
HEmptyView(10),
Text(
'1089单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190桌',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190人',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190取消',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'到客97.2%',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
],
),
VEmptyView(15),
MyDivider(
double.infinity,
w(1),
color: MyColours.color_DBDBDB,
),
VEmptyView(15),
Wrap(
// crossAxisAlignment: WrapCrossAlignment.start,
// runAlignment: WrapAlignment.center,
// alignment: WrapAlignment.center,
runSpacing: w(5),
children: [
Text(
'有金额订单 6000',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'消费 9585800.00元',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'人均 8885.58元',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'桌均 95888.58元',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'存酒 8位',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'提前点餐 9位',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(12),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'安排菜 9位',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
fontSize: font(
(10),
)),
),
],
),
],
),
);
}
@override
Widget build(BuildContext context) {
customerProvider = Provider.of<CustomerProvider>(context, listen: false);
return Scaffold(
backgroundColor: Color.fromRGBO(246, 248, 250, 1),
appBar: SystemAppBar('全店客情', onTap: () {
EventBus().emit('changeStatusColor');
Navigator.pop(context);
}),
body: WillPopScope(onWillPop: () async {
EventBus().emit('changeStatusColor');
return true;
}, child: Consumer<CustomerProvider>(builder: (context, model, _) {
if (model.pageStateStoreHome != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateStoreHome,
callback: () {
// getTableList();
_getSellerGuestManage();
},
emptyMsg: "暂时没有全店客情哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return Column(children: [
Expanded(
child: SingleChildScrollView(
controller: _controller,
child: Column(
children: [
VEmptyView(10),
Stack(
children: [
Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(30)),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'${customerProvider.storeSunmodel.myCustomer}',
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(60),
fontWeight: FontWeight.bold),
),
Text(
'位',
style: TextStyle(
color: MyColours.color_199095,
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(30)),
)
],
),
VEmptyView(10),
RoundButton(
onPressed: () async {
NavigatorUtil.goCustomerListPage(
context, FromPage.FromPageHome, '');
},
text: '全店客户',
fontSize: 24,
isBold: false,
textColor: MyColours.color_333333,
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
borderColor: Color.fromRGBO(118, 118, 118, 1),
height: ScreenUtil().setWidth(45),
width: ScreenUtil().setWidth(160),
radius: ScreenUtil().setWidth(30),
)
],
),
),
Positioned(
top: ScreenUtil().setWidth(30),
right: ScreenUtil().setWidth(40),
child: InkWell(
onTap: () {
NavigatorUtil.goCustomerSetPage(context);
},
child: Image.asset(Utils.getImgPath('c_set'),
width: ScreenUtil().setWidth(40))))
],
),
VEmptyView(10),
Row(
children: [
_percentWidget(
'${customerProvider.storeSunmodel.active.count}',
'活跃客户',
'${customerProvider.storeSunmodel.active.scale}'),
HEmptyView(10),
_percentWidget(
'${customerProvider.storeSunmodel.sleep.count}',
'沉睡客户',
'${customerProvider.storeSunmodel.sleep.scale}'),
HEmptyView(10),
_percentWidget(
'${customerProvider.storeSunmodel.drain.count}',
'流失客户',
'${customerProvider.storeSunmodel.drain.scale}'),
],
),
// GridView.builder(
// controller: _controller,
// shrinkWrap: true,
// cacheExtent: ScreenUtil().setWidth(0),
// itemCount: 3,
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 3,
// childAspectRatio: 1,
// mainAxisSpacing: ScreenUtil().setWidth(10),
// crossAxisSpacing: ScreenUtil().setWidth(10)),
// itemBuilder: (BuildContext context, int index) {
// // locationState = state;
// return _percentWidget('1999', '活跃客户', '39.20');
// }),
// Row(
// children: [
// _percentWidget('19992', '活跃客户', '90.90'),
// HEmptyView(10),
// _percentWidget('19992', '沉睡客户', '90.90'),
// HEmptyView(10),
// _percentWidget('19992', '流失客户', '5.90'),
// ],
// ),
Padding(
padding: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(30)),
child: Text(
'客户经理',
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_333333),
),
),
GridView.builder(
controller: _controller,
shrinkWrap: true,
cacheExtent: ScreenUtil().setWidth(0),
itemCount:
customerProvider.storeSunmodel.sellerUser.length + 1,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
childAspectRatio: 1,
mainAxisSpacing: ScreenUtil().setWidth(10),
crossAxisSpacing: ScreenUtil().setWidth(10)),
itemBuilder: (BuildContext context, int index) {
// locationState = state;
if (index == 0) {
return _percentWidget(
'${customerProvider.storeSunmodel.distribution}',
'未分配',
null);
}
return _percentWidget(
'${customerProvider.storeSunmodel.sellerUser[index - 1].count}',
customerProvider.storeSunmodel.sellerUser[index - 1]
.account ==
null
? ''
: '${customerProvider.storeSunmodel.sellerUser[index - 1].nickName ?? customerProvider.storeSunmodel.sellerUser[index - 1].account}经理',
null,
uid: customerProvider
.storeSunmodel.sellerUser[index - 1].uid);
}),
_chart(),
_monthWidget(),
VEmptyView(24),
ListView.builder(
itemCount: 10,
controller: _controller,
shrinkWrap: true,
padding: EdgeInsets.symmetric(horizontal: w(10)),
itemBuilder: (context, index) {
return Container(
margin: EdgeInsets.only(bottom: w(10)),
padding: EdgeInsets.symmetric(horizontal: w(10)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.only(
topRight: Radius.circular(r(8)),
bottomRight: Radius.circular(r(8))),
),
child: Row(
children: [
Container(
width: w(122),
padding: EdgeInsets.symmetric(vertical: w(5)),
decoration: BoxDecoration(
border: Border(
right: BorderSide(
color: MyColours.color_f3f3f3,
width: w(1)))),
child: Column(
children: [
VEmptyView(24),
Align(
alignment: Alignment.centerLeft,
child: Container(
padding: EdgeInsets.symmetric(
vertical: w(4), horizontal: w(5)),
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(r(3)),
border: Border.all(
color: MyColours.color_999999,
width: w(1))),
child: Text(
'张珊珊',
style: TextStyle(
fontSize: font(12),
fontWeight: FontWeight.bold,
color: MyColours.color_999999),
),
),
),
VEmptyView(10),
Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Text(
'34',
style: TextStyle(
fontSize: font(24),
fontWeight: FontWeight.bold,
color: MyColours.color_438E93),
),
Text(
'位',
style: TextStyle(
fontSize: font(14),
color: MyColours.color_000000),
),
],
),
VEmptyView(10),
Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Text(
'23',
style: TextStyle(
fontSize: font(14),
fontWeight: FontWeight.bold,
color: MyColours.color_438E93),
),
MyDivider(
w(4),
w(1),
color: MyColours.color_999999,
),
Text(
'9',
style: TextStyle(
fontSize: font(14),
fontWeight: FontWeight.bold,
color: MyColours.color_E89243),
),
MyDivider(
w(4),
w(1),
color: MyColours.color_999999,
),
Text(
'2',
style: TextStyle(
fontSize: font(14),
fontWeight: FontWeight.bold,
color: MyColours.color_E34D59),
),
],
),
VEmptyView(24),
],
),
),
Expanded(
child: Container(
padding: EdgeInsets.only(
top: w(5), bottom: w(5), left: w(10)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'预订',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_515151,
fontSize: font(
(12),
)),
),
HEmptyView(10),
Text(
'1089单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190桌',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(10),
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'到店',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_515151,
fontSize: font(
(12),
)),
),
HEmptyView(10),
Text(
'1089单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190桌',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(10),
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'1089人',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'1190取消',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'到客90.1%',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(10),
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'有金额订单数 25',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'总消费 25800元',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(10),
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'人均 103.2元',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'桌均 860元',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
],
),
VEmptyView(10),
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'存酒 1位',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'提前点餐 9位',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
Text(
'安排菜 9位',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(
(10),
)),
),
],
),
],
),
Image.asset(
Utils.getImgPath('arrow_right_new'),
width: w(12),
)
],
),
))
],
appBar: SystemAppBar('全店客情'),
body: Column(
children: [
Container(
alignment: Alignment.center,
width: double.infinity,
color: MyColours.color_ffffff,
padding: EdgeInsets.only(bottom: w(9), top: w(9)),
child: TabBar(
onTap: (index) {
print(index);
},
controller: tabController,
isScrollable: true,
indicatorColor: MyColours.color_438E93,
indicatorSize: TabBarIndicatorSize.tab,
indicatorWeight: w(2),
unselectedLabelColor: MyColours.color_999999,
labelColor: MyColours.color_438E93,
labelStyle: TextStyle(
fontSize: w(14),
color: MyColours.color_438E93,
fontWeight: FontWeight.bold),
unselectedLabelStyle:
TextStyle(fontSize: w(12), color: MyColours.color_999999),
indicatorPadding: EdgeInsets.only(left: w(24), right: w(24)),
// labelPadding:
// EdgeInsets.symmetric(horizontal: w(32)), //tabs控件之间的间距
tabs: [
Tab(
height: w(30),
child: Container(
width: w(100),
alignment: Alignment.center,
child: Text(
'全店',
),
);
})
],
),
)),
Padding(
padding: EdgeInsets.only(bottom: ScreenUtil().setWidth(30)),
child: Stack(
children: [
RoundButton(
onPressed: () {
NavigatorUtil.goMarketingRecordsPage(
context, FromPage.FromPageStoreCustomer);
},
text: '营销记录',
fontSize: 24,
isBold: false,
textColor: MyColours.color_199095,
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
borderColor: MyColours.color_199095,
height: ScreenUtil().setWidth(75),
width: ScreenUtil().setWidth(260),
radius: ScreenUtil().setWidth(10),
)),
Tab(
height: w(30),
child: Container(
width: w(100),
alignment: Alignment.center,
child: Text(
'分经理',
)),
),
showWarning
? Positioned(
right: ScreenUtil().setWidth(30),
top: ScreenUtil().setWidth(40 / 2),
child: Image.asset(
Utils.getImgPath('warning'),
width: ScreenUtil().setWidth(35),
))
: SizedBox()
],
))
]);
}
})),
);
// indicatorPadding: EdgeInsets.only(
// left: ScreenUtil().setWidth(16),
// right: ScreenUtil().setWidth(32)),
// indicatorWeight: ScreenUtil().setWidth(6.0),
)),
Expanded(
child: TabBarView(controller: tabController, children: [
StoreCustomerHomeLeftPage(),
StoreCustomerHomeRightPage()
]),
),
],
));
}
}
... ...
import 'dart:convert';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/guest_manage_model.dart';
import 'package:one_key/models/marketing_by_uid_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/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';
import 'package:provider/provider.dart';
import '../../../../models/message_menu_model.dart';
import '../../../../utils/screen_util.dart';
import '../../../../widgets/MyDivider.dart';
import '../month_item.dart';
import '../store_customer/bar_chart_page.dart';
/**
*
*/
class StoreCustomerHomeRightPage extends StatefulWidget {
StoreCustomerHomeRightPage({Key key}) : super(key: key);
@override
_StoreCustomerHomeRightPageState createState() =>
_StoreCustomerHomeRightPageState();
}
class _StoreCustomerHomeRightPageState
extends State<StoreCustomerHomeRightPage> {
ScrollController _controller = ScrollController();
CustomerProvider customerProvider;
bool showWarning = false;
int year;
List<BarData> dataList = [
BarData(MyColours.color_8EBBBE, 200),
BarData(MyColours.color_8EBBBE, 8),
BarData(MyColours.color_8EBBBE, 15),
BarData(MyColours.color_8EBBBE, 5),
BarData(MyColours.color_8EBBBE, 2),
BarData(MyColours.color_8EBBBE, 2),
BarData(MyColours.color_8EBBBE, 18),
BarData(MyColours.color_8EBBBE, 168),
BarData(MyColours.color_8EBBBE, 15),
BarData(MyColours.color_8EBBBE, 5),
BarData(MyColours.color_8EBBBE, null ?? 0),
BarData(MyColours.color_8EBBBE, 0),
];
List<MessageMenuModel> menuTitle = [];
@override
void initState() {
super.initState();
year = DateTime.now().year;
for (int i = 0; i < 15; i++) {
MessageMenuModel messageMenuModel = MessageMenuModel();
messageMenuModel.title = '${i}经理';
messageMenuModel.select = i == 0 ? true : false;
menuTitle.add(messageMenuModel);
}
WidgetsBinding.instance.addPostFrameCallback((_) {
_couponNetworkData();
_getMarketingByUid();
});
bus.on("refresh_my_customer_home", (arg) {
_getGuestManageData(isShowLoading: false);
_getMarketingByUid();
});
}
@override
void dispose() {
bus.off('refresh_my_customer_home');
// bus.off("refresh_coupon_list");
super.dispose();
}
///我的客户首页
_getGuestManageData({bool isShowLoading = true}) async {
GuestManageSunModel model = await customerProvider
.getGuestManageData(context, isShowLoading: isShowLoading);
// setState(() {});
}
///消费券
_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 (widget.sellerList.aid == customerProvider.couponListSelect[i].id) {
// aidStr = customerProvider.couponListSelect[i].aname;
// }
// }
// customerProvider.notifyListeners();
// } else {
// //没有新建的优惠券
// }
_getGuestManageData();
}
_getMarketingByUid() async {
Map<String, String> params = {
"uid": Provider.of<UserModel>(context, listen: false).user.openid
};
// await customerProvider.getMarketingByUid(context, params);
MarketingByUidsSunModel myRecordData =
await customerProvider.getMarketingByUid(context, params);
if (myRecordData != null && myRecordData.sellerList.length > 0) {
bool temp = myRecordData.sellerList.any((value) {
return value.finishedStatus == '0';
});
setState(() {
showWarning = temp;
});
}
// await customerProvider.searchData(customerProvider.controller.text);
}
Widget _chart() {
return Container(
// height: w(216),
padding: EdgeInsets.only(top: w(16), left: w(16), right: w(16)),
margin: EdgeInsets.all(w(10)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.circular(r(8))),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
setState(() {
year--;
});
// _getGuestReserve(showLoading: true);
},
child: Padding(
padding:
EdgeInsets.only(right: ScreenUtil().setWidth(20)),
child: Image.asset(
Utils.getImgPath('c_arrow_left'),
width: ScreenUtil().setWidth(24),
))),
Text(
'${year}年',
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_000000),
),
InkWell(
onTap: () {
if (year >= DateTime.now().year) {
return;
}
setState(() {
year++;
});
// _getGuestReserve(showLoading: true);
},
child: Padding(
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(20),
),
child: Image.asset(
Utils.getImgPath(year != DateTime.now().year
? 'c_arrow_right'
: 'c_arrow_right_gray'),
width: ScreenUtil().setWidth(24),
)))
],
),
VEmptyView(80),
Container(
width: double.infinity,
height: w(177),
child: LayoutBuilder(builder: (context, constraints) {
return BarChartWidget(
dataList: dataList,
);
}))
],
),
);
}
///活跃客户、沉睡客户、流失客户
Widget _percentWidget(String pnum, String btnTitle, String percent) {
return InkWell(
onTap: () async {
String index = '0';
if (btnTitle == '活跃') {
index = '1';
} else if (btnTitle == '60天未到店') {
index = '2';
} else if (btnTitle == '120天未到店') {
index = '3';
}
NavigatorUtil.goMyCustomerListPage(
context, FromPage.FromPageMyCustomer,
index: index);
},
child: Container(
color: MyColours.color_ffffff,
height: w(90),
width: (ScreenUtil().screenWidth - ScreenUtil().setWidth(20)) / 3,
// height: (ScreenUtil().screenWidth - ScreenUtil().setWidth(20)) / 3,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
VEmptyView(30),
Container(
height: w(24),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(pnum,
style: TextStyle(
color: btnTitle == '活跃'
? MyColours.color_199095
: btnTitle == '60天未到店'
? MyColours.color_E89243
: MyColours.color_E34D59,
fontSize: ScreenUtil().setSp(48),
fontWeight: FontWeight.bold)),
Text('位',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28),
))
],
)),
VEmptyView(20),
RoundButton(
onPressed: () async {
String index = '0';
if (btnTitle == '活跃') {
index = '1';
} else if (btnTitle == '60天未到店') {
index = '2';
} else if (btnTitle == '120天未到店') {
index = '3';
}
NavigatorUtil.goMyCustomerListPage(
context, FromPage.FromPageMyCustomer,
index: index);
},
text: btnTitle,
fontSize: 24,
isBold: false,
textColor: MyColours.color_999999,
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
borderColor: MyColours.color_ffffff,
height: ScreenUtil().setWidth(48),
// width: ScreenUtil().setWidth(160),
radius: ScreenUtil().setWidth(30),
),
// VEmptyView(16),
// percent == null
// ? SizedBox()
// : Text('${percent}%',
// style: TextStyle(
// color: MyColours.color_199095,
// fontSize: ScreenUtil().setSp(24),
// )),
],
),
));
}
@override
Widget build(BuildContext context) {
customerProvider = Provider.of<CustomerProvider>(context, listen: false);
return Scaffold(
// backgroundColor: MyColours.color_f3f3f3,
// appBar: SystemAppBar('我的客情', onTap: () {
// EventBus().emit('changeStatusColor');
// Navigator.pop(context);
// }),
body: WillPopScope(
onWillPop: () async {
EventBus().emit('changeStatusColor');
return true;
},
child: Column(
children: [
Container(
color: MyColours.color_ffffff,
height: ScreenUtil().setWidth(70),
padding: EdgeInsets.only(bottom: w(12)),
margin: EdgeInsets.only(bottom: ScreenUtil().setWidth(10)),
child: Row(
children: [
HEmptyView(48),
Expanded(
child: SizedBox(
// height: ScreenUtil().setWidth(30),
child: ListView.builder(
itemCount: menuTitle.length,
shrinkWrap: true,
controller: _controller,
scrollDirection: Axis.horizontal,
itemBuilder:
(BuildContext contxt, int index) {
return InkWell(
onTap: () {
for (MessageMenuModel item
in menuTitle) {
item.select = false;
}
menuTitle[index].select = true;
setState(() {});
// offset = 0;
// 1提前点餐/2内部预订/10在线预订/15店内消息传/12在线买单
// if (index == 0) {
// typeid = '';
// } else if (index == 1) {
// //店内消息
// typeid = '15';
// } else if (index == 2) {
// //在线预订
// typeid = '10';
// } else if (index == 3) {
// //提前点餐
// typeid = '1';
// } else if (index == 4) {
// //在线买单
// typeid = '12';
// } else if (index == 5) {
// //会员充值
// typeid = '17';
// } else if (index == 6) {
// //存酒超期
// typeid = '18';
// }
// getMessage(typeid, showLoading: true);
},
child: Container(
// width: ScreenUtil().setWidth(104 * 2),
margin: EdgeInsets.only(
right: ScreenUtil().setWidth(30),
),
padding: EdgeInsets.symmetric(
horizontal:
ScreenUtil().setWidth(10),
vertical: ScreenUtil().setWidth(4)),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(10)),
// color: menuTitle[index].select
// ? MyColours.color_438E93
// : MyColours.color_999999,
border: Border.all(
color: menuTitle[index].select
? MyColours.color_438E93
: MyColours.color_999999,
width:
ScreenUtil().setWidth(2))),
child: Text(
menuTitle[index].title,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: menuTitle[index].select
? MyColours.color_438E93
: MyColours.color_999999,
fontSize: ScreenUtil().setSp(24),
decoration: TextDecoration.none,
fontWeight: FontWeight.normal),
),
),
);
})))
],
),
),
Expanded(child:
Consumer<CustomerProvider>(builder: (context, model, _) {
if (model.pageStateMyHome != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateMyHome,
callback: () {
_getGuestManageData();
},
emptyMsg: "暂时没有我的客情哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return Column(children: [
Expanded(
child: SingleChildScrollView(
controller: _controller,
child: Column(
children: [
// VEmptyView(10),
InkWell(
onTap: () {
NavigatorUtil.goMyCustomerListPage(
context, FromPage.FromPageMyCustomer);
},
child: Container(
height: w(80),
color: MyColours.color_ffffff,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// Text(
// '累计',
// style: TextStyle(
// color: MyColours.color_515151,
// fontWeight: FontWeight.bold,
// fontSize: ScreenUtil().setSp(32)),
// ),
Text(
'${customerProvider.guestSunmodel.myCustomer}',
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(64),
fontWeight: FontWeight.bold),
),
Text(
'位',
style: TextStyle(
color: MyColours.color_515151,
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(32)),
)
],
),
)),
VEmptyView(10),
// GridView.builder(
// controller: _controller,
// shrinkWrap: true,
// cacheExtent: ScreenUtil().setWidth(0),
// itemCount: 3,
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 3,
// childAspectRatio: 1,
// mainAxisSpacing: ScreenUtil().setWidth(10),
// crossAxisSpacing: ScreenUtil().setWidth(10)),
// itemBuilder: (BuildContext context, int index) {
// // locationState = state;
// return _percentWidget(
// '${customerProvider.guestSunmodel.active.count}',
// '活跃客户',
// '${customerProvider.guestSunmodel.active.scale}');
// }),
Row(
children: [
_percentWidget(
'${customerProvider.guestSunmodel.active.count}',
'活跃',
'${customerProvider.guestSunmodel.active.scale}'),
HEmptyView(10),
_percentWidget(
'${customerProvider.guestSunmodel.sleep.count}',
'60天未到店',
'${customerProvider.guestSunmodel.sleep.scale}'),
HEmptyView(10),
_percentWidget(
'${customerProvider.guestSunmodel.drain.count}',
'120天未到店',
'${customerProvider.guestSunmodel.drain.scale}'),
],
),
ListView.builder(
controller: _controller,
shrinkWrap: true,
cacheExtent: ScreenUtil().setWidth(0),
itemCount:
customerProvider.guestSunmodel.tips.task ==
null ||
customerProvider.guestSunmodel.tips
.task.length ==
0
? 0
: customerProvider
.guestSunmodel.tips.task.length,
itemBuilder: (BuildContext context, int index) {
// locationState = state;
Task data = customerProvider
.guestSunmodel.tips.task[index];
return Column(
children: [
VEmptyView(10),
Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.symmetric(
horizontal:
ScreenUtil().setWidth(20),
vertical:
ScreenUtil().setWidth(30)),
child: Row(
children: [
Image.asset(
Utils.getImgPath('warning'),
width: ScreenUtil().setWidth(42),
),
HEmptyView(15),
Expanded(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'店内任务:${data.content}',
maxLines: 1,
overflow:
TextOverflow.ellipsis,
style: TextStyle(
color: MyColours
.color_333333,
fontSize: ScreenUtil()
.setSp(32)),
),
data.aid != null &&
data.aidStr != null
? Padding(
padding: EdgeInsets.only(
top: ScreenUtil()
.setWidth(8)),
child: Text(
'优惠内容:${data.aidStr}',
maxLines: 1,
overflow: TextOverflow
.ellipsis,
style: TextStyle(
color: MyColours
.color_333333,
fontSize:
ScreenUtil()
.setSp(
24)),
),
)
: SizedBox(),
VEmptyView(8),
Text(
'创建人:${data.createUser}',
maxLines: 1,
overflow:
TextOverflow.ellipsis,
style: TextStyle(
color: MyColours
.color_333333,
fontSize: ScreenUtil()
.setSp(26)),
)
],
)),
HEmptyView(20),
Column(children: [
RoundButton(
text: '立即完成',
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil()
.setWidth(26)),
gradientStart:
MyColours.color_199095,
gradientEnd:
MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius:
ScreenUtil().setWidth(40),
height:
ScreenUtil().setWidth(64),
width:
ScreenUtil().setWidth(180),
fontSize: 26,
isBold: false,
onPressed: () {
SellerList sellerList =
SellerList.fromJson(
json.decode(json
.encode(data)));
NavigatorUtil
.goMyMakeMarkingPageOnlyShow(
context, sellerList);
},
),
data.remainingTime != null
? Padding(
padding: EdgeInsets.only(
top: ScreenUtil()
.setWidth(6)),
child: Text(
'${data.remainingTime}天内',
maxLines: 1,
overflow: TextOverflow
.ellipsis,
style: TextStyle(
color:
Color.fromRGBO(
215,
30,
40,
1),
fontSize:
ScreenUtil()
.setSp(26)),
))
: SizedBox()
])
],
),
),
],
);
}),
ListView.builder(
controller: _controller,
shrinkWrap: true,
cacheExtent: ScreenUtil().setWidth(0),
itemCount: customerProvider
.guestSunmodel.tips.recover ==
null ||
customerProvider.guestSunmodel.tips
.recover.length ==
0
? 0
: 1,
itemBuilder: (BuildContext context, int index) {
// locationState = state;
return Column(
children: [
VEmptyView(10),
Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.symmetric(
horizontal:
ScreenUtil().setWidth(20),
vertical:
ScreenUtil().setWidth(30)),
child: Row(
children: [
Image.asset(
Utils.getImgPath('warning'),
width: ScreenUtil().setWidth(42),
),
HEmptyView(15),
Expanded(
child: Text(
'${customerProvider.guestSunmodel.tips.recover[0]}',
maxLines: 10,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_333333,
fontSize:
ScreenUtil().setSp(32)),
)),
HEmptyView(20),
RoundButton(
text: '一键追回',
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil()
.setWidth(26)),
gradientStart:
MyColours.color_199095,
gradientEnd:
MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: ScreenUtil().setWidth(40),
height: ScreenUtil().setWidth(64),
width: ScreenUtil().setWidth(180),
fontSize: 26,
isBold: false,
onPressed: () {
NavigatorUtil.goMyMakeMarkingPage(
context,
fromPage: FromPage
.FromPageMyCustomer,
homeGid: Utils
.listToStringEnglish1(
customerProvider
.guestSunmodel
.tips
.recover[1]));
},
),
],
),
),
],
);
}),
ListView.builder(
controller: _controller,
shrinkWrap: true,
cacheExtent: ScreenUtil().setWidth(0),
itemCount: customerProvider
.guestSunmodel.tips.awaken ==
null ||
customerProvider.guestSunmodel.tips
.awaken.length ==
0
? 0
: 1,
itemBuilder: (BuildContext context, int index) {
// locationState = state;
return Column(
children: [
VEmptyView(10),
Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.symmetric(
horizontal:
ScreenUtil().setWidth(20),
vertical:
ScreenUtil().setWidth(30)),
child: Row(
children: [
Image.asset(
Utils.getImgPath('warning'),
width: ScreenUtil().setWidth(42),
),
HEmptyView(15),
Expanded(
child: Text(
'${customerProvider.guestSunmodel.tips.awaken[0]}',
maxLines: 10,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_333333,
fontSize:
ScreenUtil().setSp(32)),
)),
HEmptyView(20),
RoundButton(
text: '一键唤醒',
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil()
.setWidth(26)),
gradientStart:
MyColours.color_199095,
gradientEnd:
MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: ScreenUtil().setWidth(40),
height: ScreenUtil().setWidth(64),
width: ScreenUtil().setWidth(180),
fontSize: 26,
isBold: false,
onPressed: () {
NavigatorUtil.goMyMakeMarkingPage(
context,
fromPage: FromPage
.FromPageMyCustomer,
homeGid: Utils
.listToStringEnglish1(
customerProvider
.guestSunmodel
.tips
.awaken[1]));
},
),
],
),
),
],
);
}),
_chart(),
ListView.builder(
itemCount: 10,
shrinkWrap: true,
controller: _controller,
padding:
EdgeInsets.symmetric(horizontal: w(10)),
itemBuilder: (context, index) {
return MonthItem();
})
],
),
)),
Container(
color: MyColours.color_FAFAFA,
padding: EdgeInsets.only(
top: w(13),
bottom: w(26),
left: w(45),
right: (45)),
child: Stack(
children: [
RoundButton(
onPressed: () {
NavigatorUtil.goMyMarketingRecordsPage(
context, FromPage.FromPageMyCustomer);
},
text: '历史营销记录',
fontSize: 32,
isBold: true,
// margin: EdgeInsets.only(
// top: w(13),
// bottom: w(26),
// left: w(45),
// right: (45)),
textColor: MyColours.color_F8F9FD,
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
borderColor: MyColours.color_199095,
height: ScreenUtil().setWidth(86),
// width: ScreenUtil().setWidth(260),
radius: ScreenUtil().setWidth(10),
),
showWarning
? Positioned(
right: ScreenUtil().setWidth(30),
top: ScreenUtil().setWidth(45 / 2),
child: Image.asset(
Utils.getImgPath('warning'),
width: ScreenUtil().setWidth(35),
))
: SizedBox()
],
))
]);
}
}))
],
)));
}
}
... ...
... ... @@ -182,6 +182,7 @@ import '../pages/feast/feast_wine_page.dart';
import '../pages/message/message_recharge_info_page.dart';
import '../pages/my/customer_type/my_customer/my_customer_home_page.dart';
import '../pages/my/customer_type/store_customer/store_customer_home_page.dart';
import '../pages/my/customer_type/store_customer/store_customer_home_left_page.dart';
import '../pages/my/feast_manage/feast_deposit_type_page.dart';
import '../pages/my/feast_manage/feast_dish_page.dart';
import '../pages/my/feast_manage/feast_dish_share_page.dart';
... ...