You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
937 lines
32 KiB
937 lines
32 KiB
import 'package:dio/dio.dart'; |
|
import 'package:flutter/cupertino.dart'; |
|
import 'package:flutter/material.dart'; |
|
import 'package:flutter_easyloading/flutter_easyloading.dart'; |
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; |
|
import 'package:huixiang/utils/business_instance.dart'; |
|
import 'package:huixiang/view_widget/classic_header.dart'; |
|
import 'package:huixiang/view_widget/my_footer.dart'; |
|
import 'package:intl/intl.dart'; |
|
import 'package:pull_to_refresh/pull_to_refresh.dart'; |
|
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
|
import 'package:shared_preferences/shared_preferences.dart'; |
|
|
|
import '../../generated/l10n.dart'; |
|
import '../../retrofit/business_api.dart'; |
|
import '../../retrofit/data/base_data.dart'; |
|
import '../../retrofit/data/business_login_info.dart'; |
|
import '../../retrofit/data/day_count.dart'; |
|
import '../../utils/flutter_utils.dart'; |
|
import '../../utils/font_weight.dart'; |
|
import '../../view_widget/settlement_tips_dialog.dart'; |
|
|
|
class BusinessHomePage extends StatefulWidget { |
|
final BusinessLoginInfo businessLoginInfo; |
|
final int selectStoreIndex; |
|
final Function changeIndex; |
|
final Function changeTab; |
|
|
|
BusinessHomePage(Key key,this.businessLoginInfo, this.selectStoreIndex, |
|
this.changeIndex, this.changeTab): super(key: key); |
|
|
|
@override |
|
State<StatefulWidget> createState() { |
|
return _BusinessHomePage(); |
|
} |
|
} |
|
|
|
class _BusinessHomePage extends State<BusinessHomePage> { |
|
final RefreshController refreshController = RefreshController(); |
|
final ScrollController scrollController = ScrollController(); |
|
BusinessApiService businessService; |
|
DayCount dayCount; |
|
int _loadCount = 0; |
|
|
|
@override |
|
void initState() { |
|
super.initState(); |
|
_onRefresh(); |
|
} |
|
|
|
@override |
|
void dispose() { |
|
super.dispose(); |
|
refreshController.dispose(); |
|
} |
|
|
|
_onRefresh({int index, isLoading = true}) async { |
|
if (isLoading) |
|
EasyLoading.show( |
|
status: S.current.zhengzaijiazai, |
|
maskType: EasyLoadingMaskType.black); |
|
SharedPreferences.getInstance().then((value) { |
|
if (!mounted) return; |
|
businessService = BusinessApiService(Dio(), |
|
context: context, |
|
token: BusinessInstance.instance.businessToken, |
|
tenant: BusinessInstance.instance.businessTenant, |
|
storeId: widget.businessLoginInfo |
|
.storeList[index ?? widget.selectStoreIndex].name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo |
|
.storeList[index ?? widget.selectStoreIndex].id); |
|
queryDayAmount(); |
|
}); |
|
} |
|
|
|
addLoadCount() { |
|
_loadCount += 1; |
|
if (_loadCount == 1) { |
|
_loadCount = 0; |
|
EasyLoading.dismiss(); |
|
if (refreshController.isRefresh) refreshController.refreshCompleted(); |
|
if (mounted) setState(() {}); |
|
} |
|
} |
|
|
|
///每日营业额/交易笔数/退款金额/退款笔数 |
|
queryDayAmount() async { |
|
try { |
|
BaseData<DayCount> baseData = await businessService.getDayCounts({ |
|
"summaryDate": "${DateFormat("yyyy-MM-dd").format(DateTime.now())}" |
|
}).catchError((error) { |
|
SmartDialog.show( |
|
clickBgDismissTemp: false, |
|
widget: SettlementTips( |
|
() {}, |
|
text: AppUtils.dioErrorTypeToString(error.type), |
|
color: Color(0xFF30415B), |
|
)); |
|
refreshController.refreshFailed(); |
|
refreshController.loadFailed(); |
|
}); |
|
if (baseData != null && baseData.isSuccess) { |
|
dayCount = baseData.data; |
|
} |
|
} finally { |
|
addLoadCount(); |
|
} |
|
} |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Column( |
|
children: [ |
|
Expanded( |
|
child: Container( |
|
child: SmartRefresher( |
|
controller: refreshController, |
|
enablePullDown: true, |
|
enablePullUp: false, |
|
header: MyHeader( |
|
color: Color(0xFF30415B), |
|
), |
|
physics: BouncingScrollPhysics(), |
|
scrollController: scrollController, |
|
footer: CustomFooter( |
|
builder: (context, mode) { |
|
return MyFooter(mode); |
|
}, |
|
), |
|
onRefresh: () { |
|
_onRefresh(isLoading: false); |
|
}, |
|
child: SingleChildScrollView( |
|
physics: NeverScrollableScrollPhysics(), |
|
child: Column( |
|
children: [ |
|
homeTop(), |
|
commonFunctions(), |
|
homeStatistics(), |
|
], |
|
)), |
|
), |
|
), |
|
), |
|
if(BusinessInstance.instance.serviceStatus == "试用") |
|
GestureDetector( |
|
behavior: HitTestBehavior.opaque, |
|
onTap: () { |
|
Navigator.of(context) |
|
.pushNamed('/router/service_subscription_page', arguments: { |
|
"storeId": widget.businessLoginInfo |
|
.storeList[widget.selectStoreIndex].name == |
|
"所有门店" |
|
? "0" |
|
: widget |
|
.businessLoginInfo.storeList[widget.selectStoreIndex].id |
|
}).then((value){ |
|
if(value == 1){ |
|
setState((){}); |
|
} |
|
}); |
|
}, |
|
child: Container( |
|
alignment: Alignment.center, |
|
padding: EdgeInsets.only( |
|
top: 20.h, bottom: 28.h, left: 20.w, right: 23.w), |
|
color: Color(0xFFDCE8FC), |
|
child: Row( |
|
children: [ |
|
Expanded( |
|
child: Text.rich( |
|
TextSpan( |
|
children: [ |
|
TextSpan( |
|
text: "试用期到期时间:", |
|
style: TextStyle( |
|
color: Color(0xFF252626), |
|
fontSize: 14.sp, |
|
fontWeight: MyFontWeight.regular, |
|
), |
|
), |
|
TextSpan( |
|
text: "${(widget?.businessLoginInfo?.expirationTime ?? "").length > 9 ? (widget?.businessLoginInfo?.expirationTime ?? "").substring(0, 10) : ""}", |
|
style: TextStyle( |
|
color: Color(0xFFFF8F1F), |
|
fontSize: 14.sp, |
|
fontWeight: FontWeight.w500, |
|
), |
|
), |
|
], |
|
), |
|
), |
|
), |
|
Padding( |
|
padding: EdgeInsets.only(right: 2.w), |
|
child: Text( |
|
"去购买服务", |
|
style: TextStyle( |
|
fontSize: 12.sp, |
|
color: Color(0xFF30415B), |
|
fontWeight: MyFontWeight.regular), |
|
)), |
|
Image.asset( |
|
"assets/image/icon_right_z.webp", |
|
width: 14.h, |
|
height: 14.h, |
|
color: Color(0xFF30415B), |
|
), |
|
], |
|
)), |
|
), |
|
SizedBox( |
|
height: 76.h, |
|
), |
|
], |
|
); |
|
} |
|
|
|
///首页头部 |
|
Widget homeTop() { |
|
return Container( |
|
color: Color(0xFF30415B), |
|
width: double.infinity, |
|
padding: EdgeInsets.only( |
|
top: MediaQuery.of(context).padding.top + 23.h, |
|
bottom: 16.h, |
|
left: 16.w, |
|
right: 16.w), |
|
child: Column( |
|
children: [ |
|
Row( |
|
children: [ |
|
Expanded( |
|
child: GestureDetector( |
|
behavior: HitTestBehavior.opaque, |
|
onTap: () { |
|
widget.changeIndex(); |
|
//改变导航栏状态栏颜色 |
|
// SystemChrome.setSystemUIOverlayStyle( SystemUiOverlayStyle(statusBarColor: Colors.white), ); |
|
// Navigator.of(context).pushNamed('/router/select_shop'); |
|
}, |
|
child: Row( |
|
children: [ |
|
Image.asset( |
|
"assets/image/bs_more.webp", |
|
width: 16.w, |
|
height: 13.h, |
|
), |
|
Padding( |
|
padding: EdgeInsets.only(left: 7.w), |
|
child: Text( |
|
widget?.businessLoginInfo |
|
?.storeList[widget.selectStoreIndex].name ?? |
|
"", |
|
style: TextStyle( |
|
fontSize: 16.sp, |
|
fontWeight: MyFontWeight.semi_bold, |
|
color: Colors.white, |
|
), |
|
), |
|
), |
|
], |
|
), |
|
)), |
|
GestureDetector( |
|
behavior: HitTestBehavior.opaque, |
|
onTap: () { |
|
showIdentitySwitchDialog(); |
|
}, |
|
child: Container( |
|
padding: EdgeInsets.symmetric(horizontal: 10.w), |
|
child: Image.asset( |
|
"assets/image/bs_user_switch.webp", |
|
width: 25.h, |
|
height: 25.h, |
|
color: Colors.white, |
|
), |
|
)), |
|
GestureDetector( |
|
behavior: HitTestBehavior.opaque, |
|
onTap: () { |
|
Navigator.of(context) |
|
.pushNamed('/router/scan_code_page', arguments: { |
|
"storeId": widget.businessLoginInfo |
|
.storeList[widget.selectStoreIndex].name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo |
|
.storeList[widget.selectStoreIndex].id |
|
}); |
|
}, |
|
child: Image.asset( |
|
"assets/image/icon_scan_qr_code.webp", |
|
width: 28.h, |
|
height: 28.h, |
|
), |
|
) |
|
], |
|
), |
|
Container( |
|
margin: EdgeInsets.only(top: 14.h), |
|
padding: EdgeInsets.symmetric(vertical: 12.h), |
|
decoration: BoxDecoration( |
|
color: Colors.white, |
|
borderRadius: BorderRadius.circular(4), |
|
), |
|
child: Column( |
|
crossAxisAlignment: CrossAxisAlignment.start, |
|
mainAxisAlignment: MainAxisAlignment.center, |
|
children: [ |
|
Padding( |
|
padding: EdgeInsets.symmetric(horizontal: 23.w), |
|
child: Row( |
|
children: [ |
|
Image.asset( |
|
"assets/image/bs_home_bill.webp", |
|
width: 14, |
|
height: 14, |
|
), |
|
Padding( |
|
padding: EdgeInsets.only(left: 3.w), |
|
child: Text( |
|
"营业额(元)", |
|
style: TextStyle( |
|
fontSize: 12.sp, |
|
fontWeight: MyFontWeight.semi_bold, |
|
color: Color(0xFF30415B), |
|
), |
|
), |
|
), |
|
], |
|
)), |
|
Padding( |
|
padding: EdgeInsets.only( |
|
top: 6.h, bottom: 17.h, left: 23.w, right: 23.w), |
|
child: Text( |
|
dayCount?.paySum ?? "0", |
|
style: TextStyle( |
|
fontSize: 24.sp, |
|
fontWeight: MyFontWeight.medium, |
|
color: Color(0xFF30415B), |
|
), |
|
), |
|
), |
|
Row( |
|
children: [ |
|
Expanded( |
|
child: Column( |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
children: [ |
|
Row( |
|
mainAxisAlignment: MainAxisAlignment.center, |
|
children: [ |
|
Image.asset( |
|
"assets/image/bs_trade_num.webp", |
|
width: 16, |
|
height: 16, |
|
), |
|
Padding( |
|
padding: EdgeInsets.only(left: 3.w), |
|
child: Text( |
|
"交易笔数", |
|
style: TextStyle( |
|
fontSize: 12.sp, |
|
fontWeight: MyFontWeight.medium, |
|
color: Color(0xFF30415B), |
|
), |
|
), |
|
), |
|
], |
|
), |
|
Padding( |
|
padding: EdgeInsets.only( |
|
top: 5.h, left: 20.w, right: 20.w), |
|
child: Text( |
|
(dayCount?.orderNum ?? 0).toString(), |
|
style: TextStyle( |
|
fontSize: 18.sp, |
|
fontWeight: MyFontWeight.medium, |
|
color: Color(0xFF30415B), |
|
), |
|
), |
|
), |
|
], |
|
)), |
|
Expanded( |
|
child: Column( |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
children: [ |
|
Row( |
|
mainAxisAlignment: MainAxisAlignment.center, |
|
children: [ |
|
Image.asset( |
|
"assets/image/bs_refund.webp", |
|
width: 14, |
|
height: 14, |
|
), |
|
Padding( |
|
padding: EdgeInsets.only(left: 3.w), |
|
child: Text( |
|
"退款金额(元)", |
|
style: TextStyle( |
|
fontSize: 12.sp, |
|
fontWeight: MyFontWeight.medium, |
|
color: Color(0xFF30415B), |
|
), |
|
), |
|
), |
|
], |
|
), |
|
Padding( |
|
padding: EdgeInsets.only( |
|
top: 5.h, left: 20.w, right: 20.w), |
|
child: Text( |
|
(dayCount?.refundMoney ?? "0.00") == "0" |
|
? "0.00" |
|
: (dayCount?.refundMoney ?? "0.00"), |
|
style: TextStyle( |
|
fontSize: 18.sp, |
|
fontWeight: MyFontWeight.medium, |
|
color: Color(0xFF30415B), |
|
), |
|
), |
|
), |
|
], |
|
)), |
|
Expanded( |
|
child: Column( |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
children: [ |
|
Row( |
|
mainAxisAlignment: MainAxisAlignment.center, |
|
children: [ |
|
Image.asset( |
|
"assets/image/bs_refund_num.webp", |
|
width: 14, |
|
height: 14, |
|
), |
|
Padding( |
|
padding: EdgeInsets.only(left: 3.w), |
|
child: Text( |
|
"退款笔数", |
|
style: TextStyle( |
|
fontSize: 12.sp, |
|
fontWeight: MyFontWeight.medium, |
|
color: Color(0xFF30415B), |
|
), |
|
), |
|
), |
|
], |
|
), |
|
Padding( |
|
padding: EdgeInsets.only( |
|
top: 5.h, left: 20.w, right: 20.w), |
|
child: Text( |
|
(dayCount?.refundOrderNum ?? 0).toString(), |
|
style: TextStyle( |
|
fontSize: 18.sp, |
|
fontWeight: MyFontWeight.medium, |
|
color: Color(0xFF30415B), |
|
), |
|
), |
|
), |
|
], |
|
)) |
|
], |
|
), |
|
], |
|
), |
|
) |
|
], |
|
), |
|
); |
|
} |
|
|
|
///用户身份切换 |
|
showIdentitySwitchDialog() async { |
|
SharedPreferences sharedPreferences = await SharedPreferences.getInstance(); |
|
showDialog( |
|
context: context, |
|
builder: (context) { |
|
return AlertDialog( |
|
content: GestureDetector( |
|
behavior: HitTestBehavior.opaque, |
|
onTap: () { |
|
sharedPreferences.setString('identitySwitch', "2"); |
|
Navigator.of(context).pushNamedAndRemoveUntil( |
|
'/router/main_page', |
|
(route) => false, |
|
); |
|
}, |
|
child: Column( |
|
mainAxisSize: MainAxisSize.min, |
|
mainAxisAlignment: MainAxisAlignment.center, |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
children: [ |
|
Image.asset( |
|
"assets/image/bs_user_switch_bg.webp", |
|
width: 144.h, |
|
height: 97.h, |
|
), |
|
Padding( |
|
padding: EdgeInsets.only(top: 10.h, bottom: 10.h), |
|
child: Row( |
|
mainAxisAlignment: MainAxisAlignment.center, |
|
children: [ |
|
Image.asset( |
|
"assets/image/bs_switch.webp", |
|
width: 12.h, |
|
height: 12.h, |
|
), |
|
SizedBox( |
|
width: 10.w, |
|
), |
|
Text( |
|
"切换成用户端", |
|
style: TextStyle( |
|
color: Color(0xFF30415B), |
|
fontSize: 15.sp, |
|
fontWeight: MyFontWeight.bold, |
|
), |
|
), |
|
], |
|
), |
|
) |
|
], |
|
), |
|
)); |
|
}, |
|
); |
|
} |
|
|
|
///常用功能 |
|
Widget commonFunctions() { |
|
return Container( |
|
color: Colors.white, |
|
margin: EdgeInsets.only(bottom: 16.h), |
|
padding: |
|
EdgeInsets.only(left: 16.w, right: 15.w, top: 12.h, bottom: 16.h), |
|
child: Column( |
|
children: [ |
|
Row( |
|
children: [ |
|
Container(width: 4.w, height: 16.h, color: Color(0xFF30415B)), |
|
Padding( |
|
padding: EdgeInsets.only( |
|
left: 12.w, |
|
), |
|
child: Text( |
|
"常用功能", |
|
style: TextStyle( |
|
fontSize: 15.sp, |
|
fontWeight: MyFontWeight.semi_bold, |
|
color: Color(0xFF0D0D0D), |
|
), |
|
), |
|
), |
|
], |
|
), |
|
GridView.builder( |
|
itemCount: commonFunctionsList.length ?? 0, |
|
padding: EdgeInsets.only(top: 24.h), |
|
shrinkWrap: true, |
|
physics: NeverScrollableScrollPhysics(), |
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( |
|
crossAxisCount: 4, |
|
crossAxisSpacing: 15.w, |
|
mainAxisSpacing: 12.w, |
|
), |
|
itemBuilder: (context, index) { |
|
return GestureDetector( |
|
behavior: HitTestBehavior.opaque, |
|
onTap: () { |
|
commonFunctionsIndex(index); |
|
}, |
|
child: commonFunctionsItem(index)); |
|
}, |
|
), |
|
], |
|
), |
|
); |
|
} |
|
|
|
///常用功能跳转 |
|
commonFunctionsIndex(index) async { |
|
switch (index) { |
|
case 0: |
|
if ((widget.businessLoginInfo.storeList[widget.selectStoreIndex].name == |
|
"所有门店" |
|
? "0" |
|
: widget |
|
.businessLoginInfo.storeList[widget.selectStoreIndex].id) == |
|
"0") { |
|
widget.changeIndex(); |
|
} else { |
|
Navigator.of(context).pushNamed('/router/cashier_page', arguments: { |
|
"storeId": widget.businessLoginInfo |
|
.storeList[widget.selectStoreIndex].name == |
|
"所有门店" |
|
? "0" |
|
: widget |
|
.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
}); |
|
} |
|
break; |
|
case 1: |
|
Navigator.of(context) |
|
.pushNamed('/router/vip_recharge_page', arguments: { |
|
"storeId": widget.businessLoginInfo.storeList[widget.selectStoreIndex] |
|
.name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
}); |
|
break; |
|
case 2: |
|
Navigator.of(context).pushNamed('/router/add_vip', arguments: { |
|
"storeId": widget.businessLoginInfo.storeList[widget.selectStoreIndex] |
|
.name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
}); |
|
break; |
|
case 3: |
|
Navigator.of(context) |
|
.pushNamed('/router/trade_overview_page', arguments: { |
|
"storeId": widget.businessLoginInfo.storeList[widget.selectStoreIndex] |
|
.name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
}); |
|
break; |
|
case 4: |
|
Navigator.of(context) |
|
.pushNamed('/router/business_vip_page', arguments: { |
|
"storeId": widget.businessLoginInfo.storeList[widget.selectStoreIndex] |
|
.name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
}); |
|
break; |
|
case 5: |
|
Navigator.of(context).pushNamed('/router/hot_selling_page', arguments: { |
|
"storeId": widget.businessLoginInfo.storeList[widget.selectStoreIndex] |
|
.name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
}); |
|
break; |
|
case 6: |
|
Navigator.of(context).pushNamed('/router/flow_page', arguments: { |
|
"storeName": widget?.businessLoginInfo |
|
?.storeList[widget.selectStoreIndex].name ?? |
|
"", |
|
"storeId": widget.businessLoginInfo.storeList[widget.selectStoreIndex] |
|
.name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
}); |
|
break; |
|
case 7: |
|
widget.changeTab(3); |
|
break; |
|
} |
|
} |
|
|
|
///常用功能板块 |
|
List<Map<String, String>> commonFunctionsList = [ |
|
{ |
|
"image": "assets/image/bus_home_syt.webp", |
|
"commonName": "收银台", |
|
"imageWidth": "26", |
|
"imageHeight": "23" |
|
}, |
|
{ |
|
"image": "assets/image/bus_home_cz.webp", |
|
"commonName": "充值", |
|
"imageWidth": "22", |
|
"imageHeight": "19" |
|
}, |
|
{ |
|
"image": "assets/image/bus_home_bhy.webp", |
|
"commonName": "办会员", |
|
"imageWidth": "24", |
|
"imageHeight": "21" |
|
}, |
|
{ |
|
"image": "assets/image/bus_home_syzl.webp", |
|
"commonName": "生意总览", |
|
"imageWidth": "22", |
|
"imageHeight": "23" |
|
}, |
|
{ |
|
"image": "assets/image/bus_home_hygl.webp", |
|
"commonName": "会员管理", |
|
"imageWidth": "23", |
|
"imageHeight": "25" |
|
}, |
|
{ |
|
"image": "assets/image/bus_home_rxbd.webp", |
|
"commonName": "热销榜单", |
|
"imageWidth": "20", |
|
"imageHeight": "26" |
|
}, |
|
{ |
|
"image": "assets/image/bus_home_jrls.webp", |
|
"commonName": "今日流水", |
|
"imageWidth": "22", |
|
"imageHeight": "23" |
|
}, |
|
{ |
|
"image": "assets/image/bus_home_goods.webp", |
|
"commonName": "商品", |
|
"imageWidth": "21", |
|
"imageHeight": "23" |
|
}, |
|
]; |
|
|
|
///常用功能Item |
|
Widget commonFunctionsItem(index) { |
|
return Column( |
|
children: [ |
|
Image.asset( |
|
commonFunctionsList[index]["image"], |
|
width: double.tryParse(commonFunctionsList[index]["imageWidth"]).w, |
|
height: double.tryParse(commonFunctionsList[index]["imageHeight"]).h, |
|
fit: BoxFit.fill, |
|
), |
|
Padding( |
|
padding: EdgeInsets.only(top: 12.h), |
|
child: Text( |
|
commonFunctionsList[index]["commonName"], |
|
textAlign: TextAlign.center, |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
fontWeight: MyFontWeight.regular, |
|
color: Color(0xFF252626), |
|
), |
|
)), |
|
], |
|
); |
|
} |
|
|
|
///统计 |
|
Widget homeStatistics() { |
|
return Container( |
|
color: Colors.white, |
|
margin: EdgeInsets.only(bottom: 16.h), |
|
padding: |
|
EdgeInsets.only(left: 16.w, right: 15.w, top: 12.h, bottom: 16.h), |
|
child: Column( |
|
children: [ |
|
Row( |
|
children: [ |
|
Container(width: 4.w, height: 16.h, color: Color(0xFF30415B)), |
|
Padding( |
|
padding: EdgeInsets.only( |
|
left: 12.w, |
|
), |
|
child: Text( |
|
"统计", |
|
style: TextStyle( |
|
fontSize: 15.sp, |
|
fontWeight: MyFontWeight.semi_bold, |
|
color: Color(0xFF0D0D0D), |
|
), |
|
), |
|
), |
|
], |
|
), |
|
GridView.builder( |
|
itemCount: homeStatisticsList.length ?? 0, |
|
padding: EdgeInsets.only(top: 24.h), |
|
shrinkWrap: true, |
|
physics: NeverScrollableScrollPhysics(), |
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( |
|
crossAxisCount: 4, |
|
crossAxisSpacing: 15.w, |
|
mainAxisSpacing: 12.w, |
|
), |
|
itemBuilder: (context, index) { |
|
return GestureDetector( |
|
behavior: HitTestBehavior.opaque, |
|
onTap: () { |
|
homeStatisticsIndex(index); |
|
}, |
|
child: homeStatisticsItem(index)); |
|
}, |
|
), |
|
], |
|
), |
|
); |
|
} |
|
|
|
///统计跳转 |
|
homeStatisticsIndex(index) async { |
|
switch (index) { |
|
case 0: |
|
Navigator.of(context) |
|
.pushNamed('/router/trade_overview_page', arguments: { |
|
"storeId": widget.businessLoginInfo.storeList[widget.selectStoreIndex] |
|
.name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
}); |
|
break; |
|
case 1: |
|
Navigator.of(context) |
|
.pushNamed('/router/business_vip_page', arguments: { |
|
"storeId": widget.businessLoginInfo.storeList[widget.selectStoreIndex] |
|
.name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
"index": 2 |
|
}); |
|
break; |
|
case 2: |
|
Navigator.of(context) |
|
.pushNamed('/router/business_vip_page', arguments: { |
|
"storeId": widget.businessLoginInfo.storeList[widget.selectStoreIndex] |
|
.name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
"index": 1 |
|
}); |
|
break; |
|
case 3: |
|
Navigator.of(context) |
|
.pushNamed('/router/consumer_ranking_page', arguments: { |
|
"storeId": widget.businessLoginInfo.storeList[widget.selectStoreIndex] |
|
.name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
"titleName": "会员余额统计" |
|
}); |
|
break; |
|
case 4: |
|
Navigator.of(context) |
|
.pushNamed('/router/consumer_ranking_page', arguments: { |
|
"storeId": widget.businessLoginInfo.storeList[widget.selectStoreIndex] |
|
.name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
"titleName": "消费排名" |
|
}); |
|
break; |
|
case 5: |
|
Navigator.of(context) |
|
.pushNamed('/router/trade_overview_page', arguments: { |
|
"storeId": widget.businessLoginInfo.storeList[widget.selectStoreIndex] |
|
.name == |
|
"所有门店" |
|
? "0" |
|
: widget.businessLoginInfo.storeList[widget.selectStoreIndex].id, |
|
"index": 2 |
|
}); |
|
break; |
|
} |
|
} |
|
|
|
///统计板块 |
|
List<Map<String, String>> homeStatisticsList = [ |
|
{ |
|
"image": "assets/image/bus_home_yytj.webp", |
|
"commonName": "营业统计", |
|
"imageWidth": "21", |
|
"imageHeight": "20" |
|
}, |
|
{ |
|
"image": "assets/image/bus_home_xfjl.webp", |
|
"commonName": "消费记录", |
|
"imageWidth": "22", |
|
"imageHeight": "21" |
|
}, |
|
{ |
|
"image": "assets/image/bus_home_czjl.webp", |
|
"commonName": "充值记录", |
|
"imageWidth": "19", |
|
"imageHeight": "22" |
|
}, |
|
{ |
|
"image": "assets/image/bus_home_hyyetj.webp", |
|
"commonName": "会员余额统计", |
|
"imageWidth": "23", |
|
"imageHeight": "23" |
|
}, |
|
{ |
|
"image": "assets/image/bus_home_xfpm.webp", |
|
"commonName": "消费排名", |
|
"imageWidth": "26", |
|
"imageHeight": "22" |
|
}, |
|
{ |
|
"image": "assets/image/bus_home_goods_ssfx.webp", |
|
"commonName": "商品销售分析", |
|
"imageWidth": "26", |
|
"imageHeight": "23" |
|
}, |
|
]; |
|
|
|
///统计Item |
|
Widget homeStatisticsItem(index) { |
|
return Column( |
|
children: [ |
|
Image.asset( |
|
homeStatisticsList[index]["image"], |
|
width: double.tryParse(homeStatisticsList[index]["imageWidth"]).w, |
|
height: double.tryParse(homeStatisticsList[index]["imageHeight"]).h, |
|
fit: BoxFit.fill, |
|
), |
|
Padding( |
|
padding: EdgeInsets.only(top: 12.h), |
|
child: Text( |
|
homeStatisticsList[index]["commonName"], |
|
textAlign: TextAlign.center, |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
fontWeight: MyFontWeight.regular, |
|
color: Color(0xFF252626), |
|
), |
|
)), |
|
], |
|
); |
|
} |
|
}
|
|
|