Commit 90a3db2609debd1b703dbe300dc0268e6ff4e943

Authored by wdn127929
1 parent 60bfa78d

日订单部分

class DayStaticsModel {
int ret;
DayStaticsSunModel data;
String msg;
DayStaticsModel({this.ret, this.data, this.msg});
DayStaticsModel.fromJson(Map<String, dynamic> json) {
ret = json['ret'];
data = json['data'] != null
? new DayStaticsSunModel.fromJson(json['data'])
: null;
msg = json['msg'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ret'] = this.ret;
if (this.data != null) {
data['data'] = this.data.toJson();
}
data['msg'] = this.msg;
return data;
}
}
class DayStaticsSunModel {
String ddateSolt;
String totalRserve;
String totalPnum;
String totalDao;
String totalCel;
String totalPrice;
dynamic totalConsume;
dynamic avgPrice;
String totalDaoKe;
int totalTable;
int daoTable;
int storeWine;
int order;
int plancook;
int agvTable;
Map<String, ItemData> data;
DayStaticsSunModel(
{this.ddateSolt,
this.totalRserve,
this.totalPnum,
this.totalDao,
this.totalCel,
this.totalPrice,
this.totalConsume,
this.avgPrice,
this.totalDaoKe,
this.totalTable,
this.daoTable,
this.storeWine,
this.order,
this.plancook,
this.agvTable,
this.data});
DayStaticsSunModel.fromJson(Map<String, dynamic> json) {
ddateSolt = json['ddate_solt'];
totalRserve = json['totalRserve'];
totalPnum = json['totalPnum'];
totalDao = json['totalDao'];
totalCel = json['totalCel'];
totalPrice = json['totalPrice'];
totalConsume = json['totalConsume'];
avgPrice = json['avgPrice'];
totalDaoKe = json['totalDaoKe'];
totalTable = json['totalTable'];
daoTable = json['daoTable'];
storeWine = json['storeWine'];
order = json['Order'];
plancook = json['Plancook'];
agvTable = json['agvTable'];
if (json['list'] != null) {
data = {};
json['list'].map((key, value) {
List<DsoltListModel> temp = [];
value.forEach((element) {
temp.add(DsoltListModel.fromJson(value));
});
ItemData itemData = ItemData();
itemData.dsoltListModelItem = temp;
itemData.expansion = true;
print(key);
data.addAll({key: itemData});
// data.putIfAbsent(key.toString(), () => itemData);
print(data);
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ddate_solt'] = this.ddateSolt;
data['totalRserve'] = this.totalRserve;
data['totalPnum'] = this.totalPnum;
data['totalDao'] = this.totalDao;
data['totalCel'] = this.totalCel;
data['totalPrice'] = this.totalPrice;
data['totalConsume'] = this.totalConsume;
data['avgPrice'] = this.avgPrice;
data['totalDaoKe'] = this.totalDaoKe;
data['totalTable'] = this.totalTable;
data['daoTable'] = this.daoTable;
data['storeWine'] = this.storeWine;
data['Order'] = this.order;
data['Plancook'] = this.plancook;
data['agvTable'] = this.agvTable;
if (this.data != null) {
// data['list'] = this.data;
}
return data;
}
}
class ItemData {
bool expansion = true;
List<DsoltListModel> dsoltListModelItem;
}
class DsoltListModel {
String id;
String rname;
String phone;
Null pnum;
String ddate;
String ddateSolt;
String tableinfo;
String sex;
String uid;
String actualPum;
Null conAmount;
Null cusdem;
String nickName;
int isOrder;
int avgPrice;
int isStoreWine;
DsoltListModel(
{this.id,
this.rname,
this.phone,
this.pnum,
this.ddate,
this.ddateSolt,
this.tableinfo,
this.sex,
this.uid,
this.actualPum,
this.conAmount,
this.cusdem,
this.nickName,
this.isOrder,
this.avgPrice,
this.isStoreWine});
DsoltListModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
rname = json['rname'];
phone = json['phone'];
pnum = json['pnum'];
ddate = json['ddate'];
ddateSolt = json['ddate_solt'];
tableinfo = json['tableinfo'];
sex = json['sex'];
uid = json['uid'];
actualPum = json['actual_pum'];
conAmount = json['con_amount'];
cusdem = json['cusdem'];
nickName = json['nick_name'];
isOrder = json['is_order'];
avgPrice = json['avgPrice'];
isStoreWine = json['is_store_wine'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['rname'] = this.rname;
data['phone'] = this.phone;
data['pnum'] = this.pnum;
data['ddate'] = this.ddate;
data['ddate_solt'] = this.ddateSolt;
data['tableinfo'] = this.tableinfo;
data['sex'] = this.sex;
data['uid'] = this.uid;
data['actual_pum'] = this.actualPum;
data['con_amount'] = this.conAmount;
data['cusdem'] = this.cusdem;
data['nick_name'] = this.nickName;
data['is_order'] = this.isOrder;
data['avgPrice'] = this.avgPrice;
data['is_store_wine'] = this.isStoreWine;
return data;
}
}
... ...
class MonthStaticsModel {
int ret;
MonthStaticsSunModel data;
String msg;
MonthStaticsModel({this.ret, this.data, this.msg});
MonthStaticsModel.fromJson(Map<String, dynamic> json) {
ret = json['ret'];
data = json['data'] != null
? new MonthStaticsSunModel.fromJson(json['data'])
: null;
msg = json['msg'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ret'] = this.ret;
if (this.data != null) {
data['data'] = this.data.toJson();
}
data['msg'] = this.msg;
return data;
}
}
class MonthStaticsSunModel {
dynamic totalRserve;
dynamic totalPnum;
dynamic totalDao;
dynamic totalCel;
dynamic totalPrice;
dynamic totalConsume;
dynamic avgPrice;
dynamic totalDaoKe;
dynamic totalTable;
dynamic daoTable;
dynamic storeWine;
dynamic order;
dynamic plancook;
dynamic agvTable;
List<DayList> dayList;
MonthStaticsSunModel(
{this.totalRserve,
this.totalPnum,
this.totalDao,
this.totalCel,
this.totalPrice,
this.totalConsume,
this.avgPrice,
this.totalDaoKe,
this.totalTable,
this.daoTable,
this.storeWine,
this.order,
this.plancook,
this.agvTable,
this.dayList});
MonthStaticsSunModel.fromJson(Map<String, dynamic> json) {
totalRserve = json['totalRserve'];
totalPnum = json['totalPnum'];
totalDao = json['totalDao'];
totalCel = json['totalCel'];
totalPrice = json['totalPrice'];
totalConsume = json['totalConsume'];
avgPrice = json['avgPrice'];
totalDaoKe = json['totalDaoKe'];
totalTable = json['totalTable'];
daoTable = json['daoTable'];
storeWine = json['storeWine'];
order = json['Order'];
plancook = json['Plancook'];
agvTable = json['agvTable'];
if (json['dayList'] != null) {
dayList = new List<DayList>();
json['dayList'].forEach((v) {
dayList.add(new DayList.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['totalRserve'] = this.totalRserve;
data['totalPnum'] = this.totalPnum;
data['totalDao'] = this.totalDao;
data['totalCel'] = this.totalCel;
data['totalPrice'] = this.totalPrice;
data['totalConsume'] = this.totalConsume;
data['avgPrice'] = this.avgPrice;
data['totalDaoKe'] = this.totalDaoKe;
data['totalTable'] = this.totalTable;
data['daoTable'] = this.daoTable;
data['storeWine'] = this.storeWine;
data['Order'] = this.order;
data['Plancook'] = this.plancook;
data['agvTable'] = this.agvTable;
if (this.dayList != null) {
data['dayList'] = this.dayList.map((v) => v.toJson()).toList();
}
return data;
}
}
class DayList {
dynamic days;
dynamic totalRserve;
dynamic totalPnum;
dynamic totalDao;
dynamic totalCel;
dynamic totalPrice;
dynamic totalConsume;
dynamic avgPrice;
dynamic totalDaoKe;
dynamic totalTable;
dynamic daoTable;
dynamic storeWine;
dynamic order;
dynamic plancook;
dynamic agvTable;
DayList(
{this.days,
this.totalRserve,
this.totalPnum,
this.totalDao,
this.totalCel,
this.totalPrice,
this.totalConsume,
this.avgPrice,
this.totalDaoKe,
this.totalTable,
this.daoTable,
this.storeWine,
this.order,
this.plancook,
this.agvTable});
DayList.fromJson(Map<String, dynamic> json) {
days = json['days'];
totalRserve = json['totalRserve'];
totalPnum = json['totalPnum'];
totalDao = json['totalDao'];
totalCel = json['totalCel'];
totalPrice = json['totalPrice'];
totalConsume = json['totalConsume'];
avgPrice = json['avgPrice'];
totalDaoKe = json['totalDaoKe'];
totalTable = json['totalTable'];
daoTable = json['daoTable'];
storeWine = json['storeWine'];
order = json['Order'];
plancook = json['Plancook'];
agvTable = json['agvTable'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['days'] = this.days;
data['totalRserve'] = this.totalRserve;
data['totalPnum'] = this.totalPnum;
data['totalDao'] = this.totalDao;
data['totalCel'] = this.totalCel;
data['totalPrice'] = this.totalPrice;
data['totalConsume'] = this.totalConsume;
data['avgPrice'] = this.avgPrice;
data['totalDaoKe'] = this.totalDaoKe;
data['totalTable'] = this.totalTable;
data['daoTable'] = this.daoTable;
data['storeWine'] = this.storeWine;
data['Order'] = this.order;
data['Plancook'] = this.plancook;
data['agvTable'] = this.agvTable;
return data;
}
}
... ...
... ... @@ -445,4 +445,14 @@ class HttpUrl {
static const String get_seller_counts_list =
"?service=App.GuestManage.GetSellerCountsList"; // 获取全店全年订单统计数据
static const String get_seller_counts_list_by_month =
"?service=App.GuestManage.GetSellerCountsListByMonth"; // 获取全店全月订单统计数据
static const String get_seller_counts_list_by_day =
"?service=App.GuestManage.GetSellerCountsListByDay"; // 获取全店日订单统计数据
}
... ...
... ... @@ -241,26 +241,26 @@ class _MyCustomerHomePageState extends State<MyCustomerHomePage> {
children: [
VEmptyView(30),
Container(
height: w(24),
// 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),
))
],
)),
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 {
... ... @@ -661,15 +661,27 @@ class _MyCustomerHomePageState extends State<MyCustomerHomePage> {
}),
_chart(),
ListView.builder(
itemCount: customerProvider.managerStatisticsList.length,
itemCount:
customerProvider.managerStatisticsList.length,
shrinkWrap: true,
controller: _controller,
padding: EdgeInsets.symmetric(horizontal: w(10)),
itemBuilder: (context, index) {
SellerCountsListSunModel countsListSunModel =
customerProvider.managerStatisticsList[index];
return MonthItem(
countsListSunModel: countsListSunModel);
return InkWell(
onTap: () {
NavigatorUtil.goMonthOrderPage(
context,
year.toString(),
countsListSunModel.monthss.toString(),
uid: Provider.of<UserModel>(context,
listen: false)
.user
.openid);
},
child: MonthItem(
countsListSunModel: countsListSunModel));
})
],
),
... ...
... ... @@ -4,12 +4,24 @@ 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/v_empty_view.dart';
import 'package:provider/provider.dart';
import '../../../../constant/state.dart';
import '../../../../provider/customer_provider.dart';
import '../../../../provider/user_model.dart';
import '../../../../utils/screen_util.dart';
import '../../../../widgets/page_exception.dart';
class DayOrderLeftPage extends StatefulWidget {
final int index;
const DayOrderLeftPage({Key key, this.index}) : super(key: key);
final String year;
final String month;
final String day;
final String uid;
const DayOrderLeftPage(
{Key key, this.index, this.year, this.month, this.day, this.uid})
: super(key: key);
@override
_DayOrderLeftPageState createState() => _DayOrderLeftPageState();
... ... @@ -31,14 +43,54 @@ var data = {
};
class _DayOrderLeftPageState extends State<DayOrderLeftPage> {
CustomerProvider customerProvider;
@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_getSellerCountsListByDay();
});
}
_getSellerCountsListByDay({isShowLoading = false}) async {
Map<String, String> params = {
'sellerid': Provider.of<UserModel>(context, listen: false).user.sellerid,
'year': widget.year,
'month': widget.month,
'day': widget.day,
'reserveStatus': widget.index == 0 ? '1' : '2',
};
if (widget.uid != null && widget.uid != '') {
params['uid'] = widget.uid;
}
await customerProvider.getSellerCountsListByDay(context, params,
isShowLoading: isShowLoading);
}
@override
Widget build(BuildContext context) {
customerProvider = Provider.of<CustomerProvider>(context, listen: true);
return Container(
color: MyColours.color_f3f3f3,
child: ListView(
children: _buildList(),
),
);
color: MyColours.color_f3f3f3,
child: Consumer<CustomerProvider>(builder: (context, model, _) {
if (model.pageStateDay != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateDay,
callback: () {
// getTableList();
// _getSellerGuestManage();
},
emptyMsg: "暂时没有记录哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return ListView(
children: _buildList(),
);
}
}));
}
List<Widget> _buildList() {
... ...
... ... @@ -4,10 +4,14 @@ import 'package:one_key/pages/my/customer_type/store_customer/day_order_left_pag
import 'package:one_key/res/colors.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 '../../../../constant/state.dart';
import '../../../../provider/customer_provider.dart';
import '../../../../utils/screen_util.dart';
import '../../../../widgets/MyDivider.dart';
import '../../../../widgets/h_empty_view.dart';
import '../../../../widgets/page_exception.dart';
/**
*
... ... @@ -15,7 +19,12 @@ import '../../../../widgets/h_empty_view.dart';
*/
class DayOrderPage extends StatefulWidget {
DayOrderPage({Key key}) : super(key: key);
final String year;
final String month;
final String day;
final String uid;
DayOrderPage({Key key, this.year, this.month, this.day, this.uid})
: super(key: key);
@override
_DayOrderPageState createState() => _DayOrderPageState();
... ... @@ -365,7 +374,13 @@ class _DayOrderPageState extends State<DayOrderPage>
// VEmptyView(10),
Expanded(
child: TabBarView(controller: tabController, children: [
DayOrderLeftPage(index: 0),
DayOrderLeftPage(
index: 0,
year: widget.year,
month: widget.month,
day: widget.day,
uid: widget.uid,
),
DayOrderLeftPage(
index: 1,
),
... ...
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/month_statics_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/widgets/system_app_bar.dart';
... ... @@ -8,6 +10,7 @@ import 'package:provider/provider.dart';
import '../../../../constant/state.dart';
import '../../../../provider/customer_provider.dart';
import '../../../../provider/user_model.dart';
import '../../../../utils/screen_util.dart';
import '../../../../utils/utils.dart';
import '../../../../widgets/MyDivider.dart';
... ... @@ -19,7 +22,11 @@ import '../../../../widgets/page_exception.dart';
*/
class MonthOrderPage extends StatefulWidget {
MonthOrderPage({Key key}) : super(key: key);
final String year;
final String month;
final String uid;
MonthOrderPage({Key key, this.year, this.month, this.uid}) : super(key: key);
@override
_MonthOrderPageState createState() => _MonthOrderPageState();
... ... @@ -34,13 +41,51 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
void initState() {
// TODO: implement initState
super.initState();
month = 1;
month = int.parse(widget.month);
WidgetsBinding.instance.addPostFrameCallback((_) {
customerProvider.pageStateStoreHome = PageState.Success;
setState(() {});
_getSellerCountsListByMonth();
});
}
String nongliShow(String year, String month, String day) {
String dateStr = year +
'-' +
Utils.addZeroNumber(int.parse(month)) +
'-' +
Utils.addZeroNumber(int.parse(day));
DateTime date = DateUtil.getDateTime(dateStr);
return Utils.lunarCalendarHolidays(date);
}
String weekdayShow(String year, String month, String day) {
String dateStr = year +
'-' +
Utils.addZeroNumber(int.parse(month)) +
'-' +
Utils.addZeroNumber(int.parse(day));
DateTime date = DateUtil.getDateTime(dateStr);
return "星期${Utils.formatWeekDayNum(date.weekday)} ";
}
_getSellerCountsListByMonth(
{isShowLoading = false, VoidCallback callback}) async {
Map<String, String> params = {
'sellerid': Provider.of<UserModel>(context, listen: false).user.sellerid,
'year': widget.year.toString(),
'month': month.toString()
};
if (widget.uid != null && widget.uid != '') {
params['uid'] = widget.uid;
}
await customerProvider.getSellerCountsListByMonth(context, params,
isShowLoading: isShowLoading);
if ((customerProvider.monthStaticsData == null ||
customerProvider.monthStaticsData.dayList.length == 0) &&
callback != null) {
callback();
}
}
Widget _monthWidget() {
return Container(
// margin: EdgeInsets.symmetric(horizontal: w(10)),
... ... @@ -63,12 +108,32 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
InkWell(
onTap: () {
if (month == 1) {
month = 12;
if (widget.year ==
DateTime.now().year.toString()) {
month = DateTime.now().month;
} else {
month = 12;
}
setState(() {});
_getSellerCountsListByMonth(
isShowLoading: true,
callback: () {
setState(() {
month = 1;
});
});
} else {
setState(() {
month--;
});
_getSellerCountsListByMonth(
isShowLoading: true,
callback: () {
setState(() {
month++;
});
});
}
// _getGuestReserve(showLoading: true);
... ... @@ -101,13 +166,51 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
InkWell(
onTap: () {
if (month == 12) {
if (widget.year ==
DateTime.now().year.toString()) {
if (month == DateTime.now().month) {
month = 1;
setState(() {});
_getSellerCountsListByMonth(
isShowLoading: true,
callback: () {
setState(() {
month = DateTime.now().month;
});
});
} else {
setState(() {
month++;
});
_getSellerCountsListByMonth(
isShowLoading: true,
callback: () {
setState(() {
month--;
});
});
}
} else if (month == 12) {
month = 1;
setState(() {});
_getSellerCountsListByMonth(
isShowLoading: true,
callback: () {
setState(() {
month = 12;
});
});
} else {
setState(() {
month++;
});
_getSellerCountsListByMonth(
isShowLoading: true,
callback: () {
setState(() {
month--;
});
});
}
// _getGuestReserve(showLoading: true);
... ... @@ -124,7 +227,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
VEmptyView(20),
Text(
'2023年',
'${widget.year}年',
style: TextStyle(
fontSize: font(14), color: MyColours.color_515151),
)
... ... @@ -157,7 +260,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'1089单',
'${customerProvider.monthStaticsData.totalRserve}单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
... ... @@ -172,7 +275,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'1190桌',
'${customerProvider.monthStaticsData.totalTable}桌',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
... ... @@ -183,6 +286,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
VEmptyView(20),
Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
runSpacing: w(10),
children: [
Text(
... ... @@ -196,7 +300,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'1089单',
'${customerProvider.monthStaticsData.totalDao}单',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
... ... @@ -211,22 +315,22 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'1190桌',
'${customerProvider.monthStaticsData.daoTable}桌',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
(14),
)),
),
HEmptyView(10),
MyDivider(
w(1),
w(15),
color: MyColours.color_DBDBDB,
),
HEmptyView(10),
],
),
VEmptyView(20),
Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
runSpacing: w(10),
children: [
Text(
'1190人',
'${customerProvider.monthStaticsData.totalPnum ?? 0}人',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
... ... @@ -241,7 +345,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'1190取消',
'${customerProvider.monthStaticsData.totalCel}取消',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
... ... @@ -256,7 +360,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'到客97.2%',
'到客${customerProvider.monthStaticsData.totalDaoKe}',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(
... ... @@ -264,7 +368,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
)),
),
],
),
)
],
)))
],
... ... @@ -285,7 +389,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
runSpacing: w(5),
children: [
Text(
'有金额订单 6000',
'有金额订单 ${customerProvider.monthStaticsData.totalPrice}',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
... ... @@ -301,7 +405,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'消费 9585800.00元',
'消费 ${customerProvider.monthStaticsData.totalConsume ?? 0}元',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
... ... @@ -317,7 +421,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'人均 8885.58元',
'人均 ${customerProvider.monthStaticsData.avgPrice ?? 0}元',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
... ... @@ -333,7 +437,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'桌均 95888.58元',
'桌均 ${customerProvider.monthStaticsData.agvTable}元',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
... ... @@ -349,7 +453,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'存酒 8位',
'存酒 ${customerProvider.monthStaticsData.storeWine}位',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
... ... @@ -365,7 +469,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'提前点餐 9位',
'提前点餐 ${customerProvider.monthStaticsData.order}位',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
... ... @@ -381,7 +485,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'安排菜 9位',
'安排菜 ${customerProvider.monthStaticsData.plancook}位',
style: TextStyle(
color: MyColours.color_999999,
decoration: TextDecoration.underline,
... ... @@ -403,9 +507,9 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
backgroundColor: MyColours.color_f3f3f3,
appBar: SystemAppBar('月度订单'),
body: Consumer<CustomerProvider>(builder: (context, model, _) {
if (model.pageStateStoreHome != PageState.Success) {
if (model.pageStateMonth != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateStoreHome,
pageState: model.pageStateMonth,
callback: () {
// getTableList();
// _getSellerGuestManage();
... ... @@ -423,14 +527,19 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
_monthWidget(),
VEmptyView(20),
ListView.builder(
itemCount: 10,
itemCount:
customerProvider.monthStaticsData.dayList.length,
controller: _controller,
shrinkWrap: true,
padding: EdgeInsets.symmetric(horizontal: w(10)),
itemBuilder: (context, index) {
DayList daylist =
customerProvider.monthStaticsData.dayList[index];
return InkWell(
onTap: () {
NavigatorUtil.goDayOrderPage(context);
NavigatorUtil.goDayOrderPage(context,
widget.year, widget.month, daylist.days,
uid: widget.uid);
},
child: Container(
margin: EdgeInsets.only(bottom: w(10)),
... ... @@ -455,7 +564,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
children: [
VEmptyView(32),
Text(
'30日',
'${daylist.days}日',
style: TextStyle(
fontSize: font(16),
fontWeight: FontWeight.bold,
... ... @@ -463,14 +572,20 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
VEmptyView(40),
Text(
'十二月廿四',
nongliShow(
widget.year,
month.toString(),
daylist.days.toString()),
style: TextStyle(
fontSize: font(10),
color: MyColours.color_999999),
),
VEmptyView(10),
Text(
'星期日',
weekdayShow(
widget.year,
month.toString(),
daylist.days.toString()),
style: TextStyle(
fontSize: font(10),
color: MyColours.color_999999),
... ... @@ -497,7 +612,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
children: [
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
CrossAxisAlignment.center,
children: [
Text(
'预订',
... ... @@ -512,7 +627,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'1089单',
'${daylist.totalRserve}单',
style: TextStyle(
color: MyColours
.color_515151,
... ... @@ -529,7 +644,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'1190桌',
'${daylist.totalTable}桌',
style: TextStyle(
color: MyColours
.color_515151,
... ... @@ -541,6 +656,8 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
VEmptyView(10),
Wrap(
crossAxisAlignment:
WrapCrossAlignment.center,
runSpacing: w(5),
children: [
Text(
... ... @@ -556,7 +673,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'1089单',
'${daylist.totalDao}单',
style: TextStyle(
color: MyColours
.color_515151,
... ... @@ -573,7 +690,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'1190桌',
'${daylist.daoTable}桌',
style: TextStyle(
color: MyColours
.color_515151,
... ... @@ -583,7 +700,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'1089人',
'${daylist.totalPnum ?? 0}人',
style: TextStyle(
color: MyColours
.color_515151,
... ... @@ -600,7 +717,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'1190取消',
'${daylist.totalCel}取消',
style: TextStyle(
color: MyColours
.color_515151,
... ... @@ -617,7 +734,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'到客90.1%',
'到客${daylist.totalDaoKe}',
style: TextStyle(
color: MyColours
.color_515151,
... ... @@ -633,7 +750,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
CrossAxisAlignment.start,
children: [
Text(
'有金额订单数 25',
'有金额订单数 ${daylist.totalPrice}',
style: TextStyle(
color: MyColours
.color_999999,
... ... @@ -650,7 +767,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'总消费 25800元',
'总消费 ${daylist.totalConsume ?? 0}元',
style: TextStyle(
color: MyColours
.color_999999,
... ... @@ -666,7 +783,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
CrossAxisAlignment.start,
children: [
Text(
'人均 103.2元',
'人均 ${daylist.avgPrice ?? 0}元',
style: TextStyle(
color: MyColours
.color_999999,
... ... @@ -683,7 +800,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'桌均 860元',
'桌均 ${daylist.agvTable ?? 0}元',
style: TextStyle(
color: MyColours
.color_999999,
... ... @@ -699,7 +816,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
CrossAxisAlignment.start,
children: [
Text(
'存酒 1位',
'存酒 ${daylist.storeWine}位',
style: TextStyle(
color: MyColours
.color_999999,
... ... @@ -716,7 +833,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'提前点餐 9位',
'提前点餐 ${daylist.order}位',
style: TextStyle(
color: MyColours
.color_999999,
... ... @@ -733,7 +850,7 @@ class _MonthOrderPageState extends State<MonthOrderPage> {
),
HEmptyView(10),
Text(
'安排菜 9位',
'安排菜 ${daylist.plancook}位',
style: TextStyle(
color: MyColours
.color_999999,
... ...
... ... @@ -128,26 +128,26 @@ class _StoreCustomerHomeLeftPageState extends State<StoreCustomerHomeLeftPage> {
children: [
VEmptyView(30),
Container(
height: w(24),
// 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),
))
],
)),
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 {
... ... @@ -1021,7 +1021,10 @@ class _StoreCustomerHomeLeftPageState extends State<StoreCustomerHomeLeftPage> {
widget.customerProvider.homeStatisticsList[index];
return InkWell(
onTap: () {
NavigatorUtil.goMonthOrderPage(context);
NavigatorUtil.goMonthOrderPage(
context,
year.toString(),
countsListSunModel.monthss.toString());
},
child: MonthItem(
countsListSunModel: countsListSunModel));
... ...
... ... @@ -9,6 +9,7 @@ import 'package:provider/provider.dart';
import '../../../../models/store_customer_home_model.dart';
import '../../../../provider/customer_provider.dart';
import '../../../../res/colors.dart';
import '../../../../utils/event_bus.dart';
import '../../../../utils/screen_util.dart';
import '../../../../widgets/v_empty_view.dart';
... ... @@ -60,69 +61,79 @@ class _StoreCustomerHomePageState extends State<StoreCustomerHomePage>
Widget build(BuildContext context) {
customerProvider = Provider.of<CustomerProvider>(context, listen: false);
return Scaffold(
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(
'全店',
),
)),
Tab(
height: w(30),
child: Container(
width: w(100),
alignment: Alignment.center,
child: Text(
'分经理',
)),
),
],
appBar: SystemAppBar('全店客情', onTap: () {
EventBus().emit('changeStatusColor');
Navigator.pop(context);
}),
body: WillPopScope(
onWillPop: () async {
EventBus().emit('changeStatusColor');
return true;
},
child: 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(
'全店',
),
)),
Tab(
height: w(30),
child: Container(
width: w(100),
alignment: Alignment.center,
child: Text(
'分经理',
)),
),
],
// indicatorPadding: EdgeInsets.only(
// left: ScreenUtil().setWidth(16),
// right: ScreenUtil().setWidth(32)),
// indicatorWeight: ScreenUtil().setWidth(6.0),
)),
Expanded(
child: TabBarView(controller: tabController, children: [
StoreCustomerHomeLeftPage(
customerProvider: customerProvider,
// indicatorPadding: EdgeInsets.only(
// left: ScreenUtil().setWidth(16),
// right: ScreenUtil().setWidth(32)),
// indicatorWeight: ScreenUtil().setWidth(6.0),
)),
Expanded(
child: TabBarView(controller: tabController, children: [
StoreCustomerHomeLeftPage(
customerProvider: customerProvider,
),
StoreCustomerHomeRightPage(
customerProvider: customerProvider)
]),
),
StoreCustomerHomeRightPage(customerProvider: customerProvider)
]),
),
],
));
],
)));
}
}
... ...
... ... @@ -268,26 +268,26 @@ class _StoreCustomerHomeRightPageState
children: [
VEmptyView(30),
Container(
height: w(24),
// 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),
))
],
)),
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 {
... ... @@ -842,8 +842,24 @@ class _StoreCustomerHomeRightPageState
SellerCountsListSunModel countsListSunModel =
widget.customerProvider
.managerStatisticsList[index];
return MonthItem(
countsListSunModel: countsListSunModel);
return InkWell(
onTap: () {
String uid = '';
menuTitle.forEach((element) {
if (element.select) {
uid = element.uid;
}
});
NavigatorUtil.goMonthOrderPage(
context,
year.toString(),
countsListSunModel.monthss
.toString(),
uid: uid);
},
child: MonthItem(
countsListSunModel:
countsListSunModel));
})
],
),
... ...
... ... @@ -29,6 +29,8 @@ import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/loading.dart';
import 'package:provider/provider.dart';
import '../models/day_statics_model.dart';
import '../models/month_statics_model.dart';
import '../models/seller_counts_list.dart';
import '../pages/my/customer_type/store_customer/bar_chart_page.dart';
import '../res/colors.dart';
... ... @@ -97,10 +99,79 @@ class CustomerProvider extends ChangeNotifier {
List pageDataMy = [];
List<SellerCountsListSunModel> homeStatisticsList = []; //全店客情首页统计数据
List<BarData> chartHomeDataList = [];
List<BarData> chartHomeDataList = []; //全店客情柱形图数据
List<SellerCountsListSunModel> managerStatisticsList = []; //经理客情首页统计数据
List<BarData> chartManagerDataList = [];
List<BarData> chartManagerDataList = []; //我的客情柱形图数据
MonthStaticsSunModel monthStaticsData; //月度统计页面数据
DayStaticsSunModel dayStaticsData; //日订单
PageState pageStateMonth = PageState.Loading;
PageState pageStateDay = PageState.Loading;
/// 获取全店日订单统计数据
Future<DayStaticsSunModel> getSellerCountsListByDay(
BuildContext context, Map<String, String> params,
{isShowLoading = true}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(
context, Method.get, HttpUrl.get_seller_counts_list_by_day,
data: params, showLoading: isShowLoading)
.catchError((error) {
print(error.toString());
if (error is MyError) {
switch (error.type) {
}
}
pageStateDay = PageState.ConnectivityError;
notifyListeners();
});
if (baseResp == null) return null;
if (baseResp.code == Constant.status_success) {
dayStaticsData = DayStaticsModel.fromJson(baseResp.responseData).data;
pageStateDay = PageState.Success;
} else {
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
pageStateDay = PageState.ConnectivityError;
}
notifyListeners();
return dayStaticsData;
}
/// 获取全店全月订单统计数据
Future<MonthStaticsSunModel> getSellerCountsListByMonth(
BuildContext context, Map<String, String> params,
{isShowLoading = true}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(
context, Method.get, HttpUrl.get_seller_counts_list_by_month,
data: params, showLoading: isShowLoading)
.catchError((error) {
print(error.toString());
if (error is MyError) {
switch (error.type) {
}
}
pageStateMonth = PageState.ConnectivityError;
notifyListeners();
});
if (baseResp == null) return null;
if (baseResp.code == Constant.status_success) {
monthStaticsData = MonthStaticsModel.fromJson(baseResp.responseData).data;
pageStateMonth = PageState.Success;
} else {
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
pageStateMonth = PageState.ConnectivityError;
}
notifyListeners();
return monthStaticsData;
}
///获取全店全年订单统计数据
Future<List<SellerCountsListSunModel>> getSellerCountsList(
... ... @@ -155,6 +226,7 @@ class CustomerProvider extends ChangeNotifier {
Utils.showToast(baseResp.msg ?? "");
}
}
return homeStatisticsList;
}
... ...
... ... @@ -1737,17 +1737,19 @@ class NavigatorUtil {
/// 月度订单
static Future<dynamic> goMonthOrderPage(
BuildContext context, {
replace = false,
}) {
return _navigateTo(context, "${Routes.month_order_page}", replace: replace);
BuildContext context, String year, String month,
{replace = false, String uid = ''}) {
return _navigateTo(context,
"${Routes.month_order_page}?year=${year}&month=${month}&uid=${uid}",
replace: replace);
}
/// 日订单
static Future<dynamic> goDayOrderPage(
BuildContext context, {
replace = false,
}) {
return _navigateTo(context, "${Routes.day_order_page}", replace: replace);
BuildContext context, String year, String month, String day,
{replace = false, String uid = ''}) {
return _navigateTo(context,
"${Routes.day_order_page}?year=${year}&month=${month}&day=${day}&uid=${uid}",
replace: replace);
}
}
... ...
... ... @@ -2825,28 +2825,34 @@ var wineSettingPageHandle = new Handler(
//月度订单
var monthOrderPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<String, List<Object>> params) {
// String idStr = params["idStr"].first;
String year = params["year"].first;
String month = params["month"].first;
String uid = params["uid"].first;
// IsExamineSunModel isExamineSunModel = IsExamineSunModel.fromJson(json.decode(
// FluroConvertUtils.fluroCnParamsDecode(
// params["isExamineSunModel"].first)));
// }
return ChangeNotifierProvider<CustomerProvider>(
create: (_) => CustomerProvider(), child: MonthOrderPage());
create: (_) => CustomerProvider(),
child: MonthOrderPage(year: year, month: month, uid: uid));
});
//日订单
var dayOrderPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<String, List<Object>> params) {
// String idStr = params["idStr"].first;
String year = params["year"].first;
String month = params["month"].first;
String day = params["day"].first;
String uid = params["uid"].first;
// IsExamineSunModel isExamineSunModel = IsExamineSunModel.fromJson(json.decode(
// FluroConvertUtils.fluroCnParamsDecode(
// params["isExamineSunModel"].first)));
// }
return ChangeNotifierProvider<CustomerProvider>(
create: (_) => CustomerProvider(), child: DayOrderPage());
create: (_) => CustomerProvider(),
child: DayOrderPage(year: year, month: month, day: day, uid: uid));
});
... ...
... ... @@ -42,33 +42,35 @@ class SystemAppBar extends StatelessWidget implements PreferredSizeWidget {
},
child: Container(
// color: Colors.red,
padding: EdgeInsets.only(
// horizontal: ScreenUtil().setWidth(40),
top: ScreenUtil().setWidth(15),
bottom: ScreenUtil().setWidth(15),
left: ScreenUtil().setWidth(40),
),
// padding: EdgeInsets.only(
// // horizontal: ScreenUtil().setWidth(40),
// top: ScreenUtil().setWidth(15),
// bottom: ScreenUtil().setWidth(15),
// // left: ScreenUtil().setWidth(40),
// ),
child: Row(
children: <Widget>[
Image.asset(
needWhite
? "assets/icon_white.png"
: "assets/icon_back.png",
width: ScreenUtil().setWidth(20),
height: ScreenUtil().setWidth(31),
),
leftTitle != ''
? Padding(
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(20)),
child: Text(leftTitle,
style: TextStyle(
fontSize: ScreenUtil().setWidth(30),
color: MyColours.color_333333)),
)
: Container()
],
)),
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Image.asset(
needWhite
? "assets/icon_white.png"
: "assets/icon_back.png",
width: ScreenUtil().setWidth(20),
height: ScreenUtil().setWidth(31),
),
leftTitle != ''
? Padding(
padding:
EdgeInsets.only(left: ScreenUtil().setWidth(20)),
child: Text(leftTitle,
style: TextStyle(
fontSize: ScreenUtil().setWidth(30),
color: MyColours.color_333333)),
)
: Container()
],
)),
)
: Container(),
title: Text(
... ...