Commit 12ab131c3a08fe717737e4b9eee1b5b5decbfd44

Authored by wdn127929
1 parent 8d1542c5

列表接口

  1 +import 'package:json_annotation/json_annotation.dart';
  2 +
  3 +part 'statics_model.g.dart';
  4 +
  5 +@JsonSerializable()
1 class StaticsModel extends Object { 6 class StaticsModel extends Object {
2 - bool select;  
3 - String numstr;  
4 - String name; 7 + @JsonKey(name: 'ret')
  8 + int ret;
  9 +
  10 + @JsonKey(name: 'data')
  11 + List<StaticsSunModel> data;
  12 +
  13 + @JsonKey(name: 'msg')
  14 + String msg;
  15 +
  16 + StaticsModel(
  17 + this.ret,
  18 + this.data,
  19 + this.msg,
  20 + );
  21 +
  22 + factory StaticsModel.fromJson(Map<String, dynamic> srcJson) =>
  23 + _$StaticsModelFromJson(srcJson);
  24 +
  25 + Map<String, dynamic> toJson() => _$StaticsModelToJson(this);
  26 +}
  27 +
  28 +@JsonSerializable()
  29 +class StaticsSunModel extends Object {
  30 + @JsonKey(name: 'rname')
  31 + String rname;
  32 +
  33 + @JsonKey(name: 'phone')
5 String phone; 34 String phone;
6 - String count; 35 +
  36 + @JsonKey(name: 'xiaofei')
  37 + String xiaofei;
  38 +
  39 + @JsonKey(name: 'renjun')
  40 + String renjun;
  41 +
  42 + @JsonKey(name: 'cu')
  43 + String cu;
  44 +
  45 + bool select; //是否选中
  46 + String numstr; //序号
  47 + String sortstr; //排序
  48 +
  49 + StaticsSunModel(
  50 + this.rname,
  51 + this.phone,
  52 + this.xiaofei,
  53 + this.renjun,
  54 + this.cu,
  55 + );
  56 +
  57 + factory StaticsSunModel.fromJson(Map<String, dynamic> srcJson) =>
  58 + _$StaticsSunModelFromJson(srcJson);
  59 +
  60 + Map<String, dynamic> toJson() => _$StaticsSunModelToJson(this);
7 } 61 }
  1 +// GENERATED CODE - DO NOT MODIFY BY HAND
  2 +
  3 +part of 'statics_model.dart';
  4 +
  5 +// **************************************************************************
  6 +// JsonSerializableGenerator
  7 +// **************************************************************************
  8 +
  9 +StaticsModel _$StaticsModelFromJson(Map<String, dynamic> json) {
  10 + return StaticsModel(
  11 + json['ret'] as int,
  12 + (json['data'] as List)
  13 + ?.map((e) => e == null
  14 + ? null
  15 + : StaticsSunModel.fromJson(e as Map<String, dynamic>))
  16 + ?.toList(),
  17 + json['msg'] as String,
  18 + );
  19 +}
  20 +
  21 +Map<String, dynamic> _$StaticsModelToJson(StaticsModel instance) =>
  22 + <String, dynamic>{
  23 + 'ret': instance.ret,
  24 + 'data': instance.data,
  25 + 'msg': instance.msg,
  26 + };
  27 +
  28 +StaticsSunModel _$StaticsSunModelFromJson(Map<String, dynamic> json) {
  29 + return StaticsSunModel(
  30 + json['rname'] as String,
  31 + json['phone'] as String,
  32 + json['xiaofei'] as String,
  33 + json['renjun'] as String,
  34 + json['cu'] as String,
  35 + );
  36 +}
  37 +
  38 +Map<String, dynamic> _$StaticsSunModelToJson(StaticsSunModel instance) =>
  39 + <String, dynamic>{
  40 + 'rname': instance.rname,
  41 + 'phone': instance.phone,
  42 + 'xiaofei': instance.xiaofei,
  43 + 'renjun': instance.renjun,
  44 + 'cu': instance.cu,
  45 + };
@@ -120,4 +120,7 @@ class HttpUrl { @@ -120,4 +120,7 @@ class HttpUrl {
120 static const String del_table_photo = 120 static const String del_table_photo =
121 "?service=App.Tables.DelTablePhoto"; // Apps删除桌位关联图片 121 "?service=App.Tables.DelTablePhoto"; // Apps删除桌位关联图片
122 122
  123 + static const String get_statistics_list =
  124 + "?service=App.Reserve.ReserveStatistics"; //App订单统计
  125 +
123 } 126 }
@@ -3,7 +3,6 @@ import 'package:flutter_screenutil/screenutil.dart'; @@ -3,7 +3,6 @@ import 'package:flutter_screenutil/screenutil.dart';
3 import 'package:one_key/app.dart'; 3 import 'package:one_key/app.dart';
4 import 'package:one_key/models/get_seller_info_model.dart'; 4 import 'package:one_key/models/get_seller_info_model.dart';
5 import 'package:one_key/models/user.dart'; 5 import 'package:one_key/models/user.dart';
6 -import 'package:one_key/provider/book_set_time_model.dart';  
7 import 'package:one_key/provider/create_store_model.dart'; 6 import 'package:one_key/provider/create_store_model.dart';
8 import 'package:one_key/provider/user_model.dart'; 7 import 'package:one_key/provider/user_model.dart';
9 import 'package:one_key/res/colors.dart'; 8 import 'package:one_key/res/colors.dart';
@@ -25,6 +25,7 @@ import 'package:one_key/widgets/app_bar.dart'; @@ -25,6 +25,7 @@ import 'package:one_key/widgets/app_bar.dart';
25 import 'package:one_key/widgets/common_button.dart'; 25 import 'package:one_key/widgets/common_button.dart';
26 import 'package:one_key/widgets/dialog.dart'; 26 import 'package:one_key/widgets/dialog.dart';
27 import 'package:one_key/widgets/h_empty_view.dart'; 27 import 'package:one_key/widgets/h_empty_view.dart';
  28 +import 'package:one_key/widgets/input_done_view.dart';
28 import 'package:one_key/widgets/loading.dart'; 29 import 'package:one_key/widgets/loading.dart';
29 import 'package:one_key/widgets/need_item.dart'; 30 import 'package:one_key/widgets/need_item.dart';
30 import 'package:one_key/widgets/page_exception.dart'; 31 import 'package:one_key/widgets/page_exception.dart';
@@ -1592,33 +1593,3 @@ class _TitleAndTextfieldState extends State<TitleAndTextfield> { @@ -1592,33 +1593,3 @@ class _TitleAndTextfieldState extends State<TitleAndTextfield> {
1592 ])); 1593 ]));
1593 } 1594 }
1594 } 1595 }
1595 -  
1596 -class InputDoneView extends StatelessWidget {  
1597 - final VoidCallback callback;  
1598 - const InputDoneView({Key key, this.callback}) : super(key: key);  
1599 -  
1600 - @override  
1601 - Widget build(BuildContext context) {  
1602 - return Container(  
1603 - width: double.infinity,  
1604 - color: Colors.white,  
1605 - child: Align(  
1606 - alignment: Alignment.topRight,  
1607 - child: Padding(  
1608 - padding: const EdgeInsets.only(top: 4.0, bottom: 4.0),  
1609 - child: CupertinoButton(  
1610 - padding: EdgeInsets.only(right: 24.0, top: 8.0, bottom: 8.0),  
1611 - onPressed: () {  
1612 - FocusScope.of(context).requestFocus(new FocusNode());  
1613 - callback();  
1614 - },  
1615 - child: Text("完成",  
1616 - style: TextStyle(  
1617 - color: MyColours.color_199095,  
1618 - fontWeight: FontWeight.bold)),  
1619 - ),  
1620 - ),  
1621 - ),  
1622 - );  
1623 - }  
1624 -}  
1 import 'package:common_utils/common_utils.dart'; 1 import 'package:common_utils/common_utils.dart';
  2 +import 'package:flutter/cupertino.dart';
2 import 'package:flutter/material.dart'; 3 import 'package:flutter/material.dart';
3 import 'package:flutter_screenutil/flutter_screenutil.dart'; 4 import 'package:flutter_screenutil/flutter_screenutil.dart';
4 import 'package:one_key/constant/state.dart'; 5 import 'package:one_key/constant/state.dart';
5 import 'package:one_key/models/statics_model.dart'; 6 import 'package:one_key/models/statics_model.dart';
6 import 'package:one_key/provider/statistics_provider.dart'; 7 import 'package:one_key/provider/statistics_provider.dart';
  8 +import 'package:one_key/provider/user_model.dart';
7 import 'package:one_key/res/colors.dart'; 9 import 'package:one_key/res/colors.dart';
8 import 'package:one_key/route/navigator_util.dart'; 10 import 'package:one_key/route/navigator_util.dart';
9 import 'package:one_key/utils/dialog_util.dart'; 11 import 'package:one_key/utils/dialog_util.dart';
10 import 'package:one_key/utils/utils.dart'; 12 import 'package:one_key/utils/utils.dart';
11 import 'package:one_key/widgets/h_empty_view.dart'; 13 import 'package:one_key/widgets/h_empty_view.dart';
  14 +import 'package:one_key/widgets/input_done_view.dart';
12 import 'package:one_key/widgets/page_exception.dart'; 15 import 'package:one_key/widgets/page_exception.dart';
13 import 'package:one_key/widgets/system_app_bar.dart'; 16 import 'package:one_key/widgets/system_app_bar.dart';
14 import 'package:one_key/widgets/v_empty_view.dart'; 17 import 'package:one_key/widgets/v_empty_view.dart';
@@ -29,24 +32,127 @@ class StatisticsPage extends StatefulWidget { @@ -29,24 +32,127 @@ class StatisticsPage extends StatefulWidget {
29 class _StatisticsPageState extends State<StatisticsPage> { 32 class _StatisticsPageState extends State<StatisticsPage> {
30 StatisticsProvider _provider; 33 StatisticsProvider _provider;
31 List<String> selectList; 34 List<String> selectList;
  35 + FocusNode numberFocusNode = new FocusNode();
  36 + OverlayEntry overlayEntry;
32 37
33 @override 38 @override
34 void initState() { 39 void initState() {
35 super.initState(); 40 super.initState();
36 41
37 selectList = ['预订次数多到少', '消费总金额高到低', '人均高到低']; 42 selectList = ['预订次数多到少', '消费总金额高到低', '人均高到低'];
  43 + numberFocusNode.addListener(() {
  44 + if (numberFocusNode.hasFocus) {
  45 + showOverlay(context);
  46 + } else {
  47 + // _updateMoney();
  48 + removeOverlay();
  49 + }
  50 + });
38 WidgetsBinding.instance.addPostFrameCallback((_) { 51 WidgetsBinding.instance.addPostFrameCallback((_) {
39 - for (int i = 0; i < 50; i++) {  
40 - StaticsModel tableHeaderModel1 = StaticsModel();  
41 - tableHeaderModel1.select = false;  
42 - tableHeaderModel1.numstr = '$i';  
43 - tableHeaderModel1.name = '某某';  
44 - tableHeaderModel1.phone = '1879097890';  
45 - tableHeaderModel1.count = '${i}次';  
46 - _provider.dataStatics.add(tableHeaderModel1); 52 + // for (int i = 0; i < 50; i++) {
  53 + // StaticsModel tableHeaderModel1 = StaticsModel();
  54 + // tableHeaderModel1.select = false;
  55 + // tableHeaderModel1.numstr = '$i';
  56 + // tableHeaderModel1.name = '某某';
  57 + // tableHeaderModel1.phone = '1879097890';
  58 + // tableHeaderModel1.count = '${i}次';
  59 + // _provider.dataStatics.add(tableHeaderModel1);
  60 + // }
  61 + // _provider.notifyListeners();
  62 + });
  63 + }
  64 +
  65 + showOverlay(BuildContext context) {
  66 + if (overlayEntry != null) return;
  67 + OverlayState overlayState = Overlay.of(context);
  68 + overlayEntry = OverlayEntry(builder: (context) {
  69 + return Positioned(
  70 + bottom: MediaQuery.of(context).viewInsets.bottom,
  71 + right: 0.0,
  72 + left: 0.0,
  73 + child: InputDoneView(
  74 + callback: () {
  75 + // _updateMoney();
  76 + _getStatisticsList();
  77 + },
  78 + ));
  79 + });
  80 +
  81 + overlayState.insert(overlayEntry);
  82 + }
  83 +
  84 + removeOverlay() {
  85 + if (overlayEntry != null) {
  86 + overlayEntry.remove();
  87 + overlayEntry = null;
  88 + }
  89 + }
  90 +
  91 + ///获取统计列表
  92 + _getStatisticsList() async {
  93 + if (_provider.datetimeS == null ||
  94 + _provider.datetimeE == null ||
  95 + _provider.sortstr == '排序') {
  96 + return;
  97 + }
  98 + if (_provider.datetimeE.compareTo(_provider.datetimeS) < 0) {
  99 + Utils.showToast('结束日期不能早于开始日期');
  100 + return;
  101 + }
  102 + if (_provider.controller.text.trim().length == 0) {
  103 + Utils.showToast('请输入数字');
  104 + return;
  105 + }
  106 + UserModel userModel = Provider.of<UserModel>(context, listen: false);
  107 + Map<String, String> params = {
  108 + "sid": userModel.user.sellerid,
  109 + "uid": userModel.user.openid,
  110 + "stime":
  111 + '${_provider.datetimeS.millisecondsSinceEpoch.toString().substring(0, 10)}',
  112 + "etime":
  113 + '${_provider.datetimeE.millisecondsSinceEpoch.toString().substring(0, 10)}',
  114 + "size": _provider.controller.text,
  115 + "od": '${_provider.currentIndex + 1}',
  116 + };
  117 + await _provider.getStatisticsList(context, params);
  118 + if (_provider.dataStatics.length > 0) {
  119 + switch (_provider.currentIndex) {
  120 + case 0: //显示预订次数
  121 + _provider.tableHeaderModel.sortstr = '预订次数';
  122 + for (int i = 0; i < _provider.dataStatics.length; i++) {
  123 + _provider.dataStatics[i].select = false;
  124 + _provider.dataStatics[i].sortstr =
  125 + _provider.dataStatics[i].cu == null
  126 + ? ""
  127 + : '${_provider.dataStatics[i].cu}次';
  128 + _provider.dataStatics[i].numstr = '${i + 1}';
  129 + }
  130 + break;
  131 + case 1: //显示消费总金额
  132 + _provider.tableHeaderModel.sortstr = '消费总金额';
  133 + for (int i = 0; i < _provider.dataStatics.length; i++) {
  134 + _provider.dataStatics[i].select = false;
  135 + _provider.dataStatics[i].sortstr =
  136 + _provider.dataStatics[i].xiaofei == null
  137 + ? ""
  138 + : '${_provider.dataStatics[i].xiaofei}元';
  139 + _provider.dataStatics[i].numstr = '${i + 1}';
  140 + }
  141 + break;
  142 + case 2: //显示人均
  143 + _provider.tableHeaderModel.sortstr = '人均';
  144 + for (int i = 0; i < _provider.dataStatics.length; i++) {
  145 + _provider.dataStatics[i].select = false;
  146 + _provider.dataStatics[i].sortstr =
  147 + _provider.dataStatics[i].renjun == null
  148 + ? ''
  149 + : '${_provider.dataStatics[i].renjun}元';
  150 + _provider.dataStatics[i].numstr = '${i + 1}';
  151 + }
  152 + break;
47 } 153 }
48 _provider.notifyListeners(); 154 _provider.notifyListeners();
49 - }); 155 + }
50 } 156 }
51 157
52 _buttonChoose(String title, ClickCallback callback, 158 _buttonChoose(String title, ClickCallback callback,
@@ -134,11 +240,86 @@ class _StatisticsPageState extends State<StatisticsPage> { @@ -134,11 +240,86 @@ class _StatisticsPageState extends State<StatisticsPage> {
134 })); 240 }));
135 } 241 }
136 242
  243 + ///显示50 size
  244 + Widget _sizeWidget() {
  245 + return Container(
  246 + alignment: Alignment.centerLeft,
  247 + padding: EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(40)),
  248 + color: MyColours.color_f5f5f5,
  249 + // width: double.infinity,
  250 + height: ScreenUtil().setWidth(80),
  251 + child: Row(
  252 + children: [
  253 + Text(
  254 + '显示前 ',
  255 + style: TextStyle(
  256 + fontSize: ScreenUtil().setSp(26),
  257 + color: MyColours.color_333333),
  258 + ),
  259 + Container(
  260 + alignment: Alignment.center,
  261 + margin:
  262 + EdgeInsets.symmetric(vertical: ScreenUtil().setWidth(20)),
  263 + // alignment: Alignment.centerLeft,
  264 + // height: ScreenUtil().setWidth(80),
  265 + constraints:
  266 + BoxConstraints(maxWidth: ScreenUtil().setWidth(50 * 2)),
  267 + decoration: BoxDecoration(
  268 + border: Border(
  269 + bottom: BorderSide(
  270 + width: ScreenUtil().setWidth(2),
  271 + color: MyColours.color_199095))),
  272 + child: IntrinsicWidth(
  273 + child: TextField(
  274 + controller: _provider.controller,
  275 + maxLines: 1,
  276 + // inputFormatters: [
  277 + // LengthLimitingTextInputFormatter(9),
  278 + // WhitelistingTextInputFormatter.digitsOnly
  279 + // ],
  280 +
  281 + // inputFormatters: [
  282 + // NumLengthInputFormatter(
  283 + // decimalLength: 2, integerLength: 6),
  284 + // ],
  285 + focusNode: numberFocusNode,
  286 +
  287 + //光标颜色
  288 + cursorColor: MyColours.color_199095,
  289 + //输入文本的样式
  290 + style: TextStyle(
  291 + fontSize: ScreenUtil().setSp(26),
  292 + color: MyColours.color_199095),
  293 + textAlign: TextAlign.center,
  294 + textInputAction: TextInputAction.done,
  295 + decoration: InputDecoration(
  296 + isDense: true,
  297 + hintText: "输入",
  298 + hintStyle: TextStyle(
  299 + color: MyColours.color_999999,
  300 + fontSize: ScreenUtil().setSp(26),
  301 + ),
  302 +
  303 + contentPadding: EdgeInsets.zero, //ios 17
  304 + border: InputBorder.none,
  305 + ),
  306 + onChanged: (value) {},
  307 + onEditingComplete: () {
  308 + FocusScope.of(context).requestFocus(FocusNode()); //隐藏键盘
  309 + _getStatisticsList();
  310 + },
  311 + keyboardType: TextInputType.numberWithOptions(decimal: true),
  312 + )))
  313 + ],
  314 + ));
  315 + }
  316 +
137 @override 317 @override
138 Widget build(BuildContext context) { 318 Widget build(BuildContext context) {
139 _provider = Provider.of<StatisticsProvider>(context, listen: true); 319 _provider = Provider.of<StatisticsProvider>(context, listen: true);
140 return Scaffold( 320 return Scaffold(
141 backgroundColor: MyColours.color_ffffff, 321 backgroundColor: MyColours.color_ffffff,
  322 + resizeToAvoidBottomInset: false,
142 appBar: SystemAppBar( 323 appBar: SystemAppBar(
143 '统计列表', 324 '统计列表',
144 rightImgName: '清空', 325 rightImgName: '清空',
@@ -157,12 +338,16 @@ class _StatisticsPageState extends State<StatisticsPage> { @@ -157,12 +338,16 @@ class _StatisticsPageState extends State<StatisticsPage> {
157 return Column( 338 return Column(
158 children: [ 339 children: [
159 VEmptyView(100), 340 VEmptyView(100),
  341 + model.pageState == PageState.Statics
  342 + ? SizedBox()
  343 + : _sizeWidget(),
160 Expanded( 344 Expanded(
161 child: ExceptionPage( 345 child: ExceptionPage(
162 pageState: model.pageState, 346 pageState: model.pageState,
163 callback: () { 347 callback: () {
164 // offset = 0; 348 // offset = 0;
165 // getMessage(showLoading: true); 349 // getMessage(showLoading: true);
  350 + _getStatisticsList();
166 }, 351 },
167 emptyMsg: model.pageState == PageState.Statics 352 emptyMsg: model.pageState == PageState.Statics
168 ? "请选择日期和排序条件" 353 ? "请选择日期和排序条件"
@@ -177,79 +362,7 @@ class _StatisticsPageState extends State<StatisticsPage> { @@ -177,79 +362,7 @@ class _StatisticsPageState extends State<StatisticsPage> {
177 crossAxisAlignment: CrossAxisAlignment.end, 362 crossAxisAlignment: CrossAxisAlignment.end,
178 children: [ 363 children: [
179 VEmptyView(100), 364 VEmptyView(100),
180 - Container(  
181 - alignment: Alignment.centerLeft,  
182 - padding: EdgeInsets.symmetric(  
183 - horizontal: ScreenUtil().setWidth(40)),  
184 - color: MyColours.color_f5f5f5,  
185 - // width: double.infinity,  
186 - height: ScreenUtil().setWidth(80),  
187 - child: Row(  
188 - children: [  
189 - Text(  
190 - '显示前 ',  
191 - style: TextStyle(  
192 - fontSize: ScreenUtil().setSp(26),  
193 - color: MyColours.color_333333),  
194 - ),  
195 - Container(  
196 - alignment: Alignment.center,  
197 - margin: EdgeInsets.symmetric(  
198 - vertical: ScreenUtil().setWidth(20)),  
199 - // alignment: Alignment.centerLeft,  
200 - // height: ScreenUtil().setWidth(80),  
201 - constraints: BoxConstraints(  
202 - maxWidth: ScreenUtil().setWidth(50 * 2)),  
203 - decoration: BoxDecoration(  
204 - border: Border(  
205 - bottom: BorderSide(  
206 - width: ScreenUtil().setWidth(2),  
207 - color: MyColours.color_199095))),  
208 - child: IntrinsicWidth(  
209 - child: TextField(  
210 - controller: _provider.controller,  
211 - maxLines: 1,  
212 - // inputFormatters: [  
213 - // LengthLimitingTextInputFormatter(9),  
214 - // WhitelistingTextInputFormatter.digitsOnly  
215 - // ],  
216 -  
217 - // inputFormatters: [  
218 - // NumLengthInputFormatter(  
219 - // decimalLength: 2, integerLength: 6),  
220 - // ],  
221 - // focusNode: numberFocusNode,  
222 -  
223 - //光标颜色  
224 - cursorColor: MyColours.color_199095,  
225 - //输入文本的样式  
226 - style: TextStyle(  
227 - fontSize: ScreenUtil().setSp(26),  
228 - color: MyColours.color_199095),  
229 - textAlign: TextAlign.center,  
230 - textInputAction: TextInputAction.done,  
231 - decoration: InputDecoration(  
232 - isDense: true,  
233 - hintText: "输入",  
234 - hintStyle: TextStyle(  
235 - color: MyColours.color_999999,  
236 - fontSize: ScreenUtil().setSp(26),  
237 - ),  
238 -  
239 - contentPadding: EdgeInsets.zero, //ios 17  
240 - border: InputBorder.none,  
241 - ),  
242 - onChanged: (value) {},  
243 - onEditingComplete: () {  
244 - FocusScope.of(context)  
245 - .requestFocus(FocusNode()); //隐藏键盘  
246 - // _updateMoney();  
247 - },  
248 - keyboardType: TextInputType.numberWithOptions(  
249 - decimal: true),  
250 - )))  
251 - ],  
252 - )), 365 + _sizeWidget(),
253 //表头 366 //表头
254 _tableItem(model.tableHeaderModel, 3, 367 _tableItem(model.tableHeaderModel, 3,
255 TableItemType.TableItemTypeHeader, (index) { 368 TableItemType.TableItemTypeHeader, (index) {
@@ -369,6 +482,7 @@ class _StatisticsPageState extends State<StatisticsPage> { @@ -369,6 +482,7 @@ class _StatisticsPageState extends State<StatisticsPage> {
369 _provider.datetimeS, 482 _provider.datetimeS,
370 format: DateFormats.y_mo_d); 483 format: DateFormats.y_mo_d);
371 }); 484 });
  485 + _getStatisticsList();
372 } 486 }
373 }); 487 });
374 }, timeType: TimeType.TimeTypeStart), 488 }, timeType: TimeType.TimeTypeStart),
@@ -395,6 +509,7 @@ class _StatisticsPageState extends State<StatisticsPage> { @@ -395,6 +509,7 @@ class _StatisticsPageState extends State<StatisticsPage> {
395 _provider.datetimeE, 509 _provider.datetimeE,
396 format: DateFormats.y_mo_d); 510 format: DateFormats.y_mo_d);
397 }); 511 });
  512 + _getStatisticsList();
398 } 513 }
399 }); 514 });
400 }, timeType: TimeType.TimeTypeEnd), 515 }, timeType: TimeType.TimeTypeEnd),
@@ -405,7 +520,6 @@ class _StatisticsPageState extends State<StatisticsPage> { @@ -405,7 +520,6 @@ class _StatisticsPageState extends State<StatisticsPage> {
405 _buttonChoose(_provider.sortstr, (value) { 520 _buttonChoose(_provider.sortstr, (value) {
406 setState(() { 521 setState(() {
407 _provider.showWidget = !_provider.showWidget; 522 _provider.showWidget = !_provider.showWidget;
408 - print('1');  
409 }); 523 });
410 }), 524 }),
411 VEmptyView(10), 525 VEmptyView(10),
@@ -424,6 +538,7 @@ class _StatisticsPageState extends State<StatisticsPage> { @@ -424,6 +538,7 @@ class _StatisticsPageState extends State<StatisticsPage> {
424 _provider.currentIndex = index; 538 _provider.currentIndex = index;
425 _provider.sortstr = selectList[index]; 539 _provider.sortstr = selectList[index];
426 }); 540 });
  541 + _getStatisticsList();
427 }), 542 }),
428 ))), 543 ))),
429 ]) 544 ])
@@ -436,8 +551,8 @@ class _StatisticsPageState extends State<StatisticsPage> { @@ -436,8 +551,8 @@ class _StatisticsPageState extends State<StatisticsPage> {
436 } 551 }
437 552
438 ///表头 553 ///表头
439 - Widget _tableItem(  
440 - StaticsModel model, int index, TableItemType type, IntCallback callback) { 554 + Widget _tableItem(StaticsSunModel model, int index, TableItemType type,
  555 + IntCallback callback) {
441 return InkWell( 556 return InkWell(
442 onTap: () { 557 onTap: () {
443 callback(index); 558 callback(index);
@@ -487,7 +602,7 @@ class _StatisticsPageState extends State<StatisticsPage> { @@ -487,7 +602,7 @@ class _StatisticsPageState extends State<StatisticsPage> {
487 width: ScreenUtil().setWidth(2), 602 width: ScreenUtil().setWidth(2),
488 color: MyColours.color_f5f5f5))), 603 color: MyColours.color_f5f5f5))),
489 child: Text( 604 child: Text(
490 - model.name, 605 + model.rname,
491 style: TextStyle( 606 style: TextStyle(
492 fontSize: ScreenUtil().setSp(28), 607 fontSize: ScreenUtil().setSp(28),
493 color: MyColours.color_333333), 608 color: MyColours.color_333333),
@@ -510,7 +625,7 @@ class _StatisticsPageState extends State<StatisticsPage> { @@ -510,7 +625,7 @@ class _StatisticsPageState extends State<StatisticsPage> {
510 Expanded( 625 Expanded(
511 child: Center( 626 child: Center(
512 child: Text( 627 child: Text(
513 - model.count, 628 + model.sortstr,
514 style: TextStyle( 629 style: TextStyle(
515 fontSize: ScreenUtil().setSp(28), 630 fontSize: ScreenUtil().setSp(28),
516 color: MyColours.color_333333), 631 color: MyColours.color_333333),
1 import 'package:flutter/material.dart'; 1 import 'package:flutter/material.dart';
  2 +import 'package:one_key/constant/constant.dart';
  3 +import 'package:one_key/constant/error.dart';
2 import 'package:one_key/constant/state.dart'; 4 import 'package:one_key/constant/state.dart';
3 import 'package:one_key/models/statics_model.dart'; 5 import 'package:one_key/models/statics_model.dart';
  6 +import 'package:one_key/net/base_resp.dart';
  7 +import 'package:one_key/net/dio_util.dart';
  8 +import 'package:one_key/net/http_url.dart';
  9 +import 'package:one_key/utils/utils.dart';
4 10
5 class StatisticsProvider with ChangeNotifier { 11 class StatisticsProvider with ChangeNotifier {
6 - PageState pageState = PageState.Success;  
7 - List<StaticsModel> dataStatics = [];  
8 - StaticsModel tableHeaderModel; 12 + PageState pageState = PageState.Statics;
  13 + List<StaticsSunModel> dataStatics = [];
  14 + StaticsSunModel tableHeaderModel;
9 String dateS = "开始日期"; //开始时间 15 String dateS = "开始日期"; //开始时间
10 String dateE = "结束日期"; //结束时间 16 String dateE = "结束日期"; //结束时间
11 DateTime datetimeS; //开始时间 17 DateTime datetimeS; //开始时间
@@ -18,12 +24,16 @@ class StatisticsProvider with ChangeNotifier { @@ -18,12 +24,16 @@ class StatisticsProvider with ChangeNotifier {
18 String sortstr = '排序'; 24 String sortstr = '排序';
19 25
20 StatisticsProvider() { 26 StatisticsProvider() {
21 - tableHeaderModel = StaticsModel(); 27 + tableHeaderModel = StaticsSunModel(
  28 + '顾客姓名',
  29 + '电话',
  30 + '',
  31 + '',
  32 + '',
  33 + );
22 tableHeaderModel.select = false; 34 tableHeaderModel.select = false;
23 tableHeaderModel.numstr = '序号'; 35 tableHeaderModel.numstr = '序号';
24 - tableHeaderModel.name = '顾客姓名';  
25 - tableHeaderModel.phone = '电话';  
26 - tableHeaderModel.count = '预订次数'; 36 + tableHeaderModel.sortstr = '预订次数';
27 datetimeS = DateTime.now(); 37 datetimeS = DateTime.now();
28 datetimeE = datetimeS.add(Duration(days: 1)); 38 datetimeE = datetimeS.add(Duration(days: 1));
29 dateNow = datetimeS; 39 dateNow = datetimeS;
@@ -33,11 +43,11 @@ class StatisticsProvider with ChangeNotifier { @@ -33,11 +43,11 @@ class StatisticsProvider with ChangeNotifier {
33 ///全选按钮方法 43 ///全选按钮方法
34 allSel() { 44 allSel() {
35 if (tableHeaderModel.select) { 45 if (tableHeaderModel.select) {
36 - for (StaticsModel item in dataStatics) { 46 + for (StaticsSunModel item in dataStatics) {
37 item.select = false; 47 item.select = false;
38 } 48 }
39 } else { 49 } else {
40 - for (StaticsModel item in dataStatics) { 50 + for (StaticsSunModel item in dataStatics) {
41 item.select = true; 51 item.select = true;
42 } 52 }
43 } 53 }
@@ -77,4 +87,52 @@ class StatisticsProvider with ChangeNotifier { @@ -77,4 +87,52 @@ class StatisticsProvider with ChangeNotifier {
77 } 87 }
78 return false; 88 return false;
79 } 89 }
  90 +
  91 + //获取统计列表
  92 + Future getStatisticsList(BuildContext context, Map<String, String> params,
  93 + {needLoading = true}) async {
  94 + if (needLoading) {
  95 + pageState = PageState.Loading;
  96 + notifyListeners();
  97 + }
  98 + pageState = PageState.Loading;
  99 + notifyListeners();
  100 + BaseResp<List> baseResp = await DioUtil()
  101 + .request<List>(context, Method.get, HttpUrl.get_statistics_list,
  102 + data: params, showLoading: false)
  103 + .catchError((error) {
  104 + print(error.toString());
  105 + if (error is MyError) {
  106 + switch (error.type) {
  107 + case 1:
  108 + pageState = PageState.ConnectivityError;
  109 + break;
  110 + case 2:
  111 + pageState = PageState.ConnectivityTimeOut;
  112 + break;
  113 + default:
  114 + pageState = PageState.ConnectivityError;
  115 + break;
  116 + }
  117 + }
  118 + notifyListeners();
  119 + });
  120 + if (baseResp == null) return null;
  121 +
  122 + if (baseResp.code == Constant.status_success) {
  123 + dataStatics = StaticsModel.fromJson(baseResp.responseData).data;
  124 + if (dataStatics.isEmpty) {
  125 + pageState = PageState.Empty;
  126 + notifyListeners();
  127 + } else {
  128 + pageState = PageState.Success;
  129 + }
  130 + } else {
  131 + pageState = PageState.ConnectivityError;
  132 + notifyListeners();
  133 + Utils.showToast(baseResp.msg ?? "");
  134 + }
  135 +
  136 + return dataStatics;
  137 + }
80 } 138 }
  1 +
  2 +import 'package:flutter/cupertino.dart';
  3 +import 'package:flutter/material.dart';
  4 +import 'package:one_key/res/colors.dart';
  5 +
  6 +class InputDoneView extends StatelessWidget {
  7 + final VoidCallback callback;
  8 + const InputDoneView({Key key, this.callback}) : super(key: key);
  9 +
  10 + @override
  11 + Widget build(BuildContext context) {
  12 + return Container(
  13 + width: double.infinity,
  14 + color: Colors.white,
  15 + child: Align(
  16 + alignment: Alignment.topRight,
  17 + child: Padding(
  18 + padding: const EdgeInsets.only(top: 4.0, bottom: 4.0),
  19 + child: CupertinoButton(
  20 + padding: EdgeInsets.only(right: 24.0, top: 8.0, bottom: 8.0),
  21 + onPressed: () {
  22 + FocusScope.of(context).requestFocus(new FocusNode());
  23 + callback();
  24 + },
  25 + child: Text("完成",
  26 + style: TextStyle(
  27 + color: MyColours.color_199095,
  28 + fontWeight: FontWeight.bold)),
  29 + ),
  30 + ),
  31 + ),
  32 + );
  33 + }
  34 +}