table_manager_page.dart 15.3 KB
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/area.dart';
import 'package:one_key/models/notebook_detail.dart';
import 'package:one_key/provider/table_manager_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/widgets/app_bar.dart';
import 'package:one_key/widgets/area_item.dart';
import 'package:one_key/widgets/common_button.dart';
import 'package:one_key/widgets/page_exception.dart';
import 'package:one_key/widgets/table_item.dart';
import 'package:one_key/models/table.dart' as t;
import 'package:provider/provider.dart';
import 'dart:convert' as convert;

class TableManagerPage extends StatefulWidget {


  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return new TableManagerPageState();
  }
}

class TableManagerPageState extends State<TableManagerPage> {

  TableManagerModel tableManagerModel;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    LogUtil.v("table_manager_page initState");
    WidgetsBinding.instance.addPostFrameCallback((_) {
      tableManagerModel=Provider.of<TableManagerModel>(context,listen: true);
      tableManagerModel.initTime(context);
      EventBus().on("refresh_tablemanager", (arg) {//订座-完成预订 刷新管理桌位
        tableManagerModel.getReserveList(context);
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Consumer<TableManagerModel>(
        builder: (context,model,child){
          return Column(
            children: <Widget>[
              MyAppBar(
                "桌位",
                showBack: false
              ),
              Container(
                color: MyColours.color_ffffff,
                width: double.infinity,
                padding: EdgeInsets.symmetric(vertical: ScreenUtil().setHeight(16)),
                child: Row(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    Expanded(
                      child: Center(
                        child: GestureDetector(
                          onTap: () {
                            DialogUtil.showCalendarDialog(context, tableManagerModel.dateTime)
                                .then((day) {
                              if (day != null) {
                                tableManagerModel.createDateText(context,day);
                              }
                            });
                          },
                          child: Container(
                            child: Text(
                              tableManagerModel.dateText,
                              style: TextStyle(
                                  color: MyColours.color_199095,
                                  fontSize: ScreenUtil().setSp(34)),
                            ),
                          ),
                        ),
                      ),
                    ),
                    MyDivider(
                      ScreenUtil().setWidth(2),
                      ScreenUtil().setHeight(68),
                      color: MyColours.color_E0E0E0,
                    ),
                    Expanded(
                      child: Padding(
                        padding: EdgeInsets.symmetric(
                            horizontal: ScreenUtil().setWidth(30)),
                        child: Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: <Widget>[
                            Offstage(
                                offstage: tableManagerModel.morning == "00:00-00:00" ? true : false,
                                child: Padding(
                                    padding: EdgeInsets.only(
                                        right: ScreenUtil().setWidth(18)),
                                    child: CommonButton(
                                      content: "早市",
                                      state: tableManagerModel.currTimeIndex == 1 ? 1 : 0,
                                      width: 92,
                                      height: 48,
                                      fontSize: 32,
                                      onPress: () {
                                        if (tableManagerModel.currTimeIndex == 1) return;
                                        tableManagerModel.currTimeIndex = 1;
                                        tableManagerModel.getReserveList(context);
                                      },
                                    ))),
                            Offstage(
                                offstage: tableManagerModel.noon == "00:00-00:00" ? true : false,
                                child: Padding(
                                    padding: EdgeInsets.only(
                                        right: ScreenUtil().setWidth(18)),
                                    child: CommonButton(
                                      content: "午市",
                                      state: tableManagerModel.currTimeIndex == 2 ? 1 : 0,
                                      width: 92,
                                      height: 48,
                                      fontSize: 32,
                                      onPress: () {
                                        if (tableManagerModel.currTimeIndex == 2) return;
                                        tableManagerModel.currTimeIndex = 2;
                                        tableManagerModel.getReserveList(context);
                                      },
                                    ))),
                            Offstage(
                              offstage: tableManagerModel.night == "00:00-00:00" ? true : false,
                              child: Container(
                                // padding: EdgeInsets.symmetric(
                                //     horizontal: ScreenUtil().setWidth(10)),
                                  child: CommonButton(
                                    content: "晚市",
                                    state: tableManagerModel.currTimeIndex == 3 ? 1 : 0,
                                    width: 92,
                                    height: 48,
                                    fontSize: 32,
                                    onPress: () {
                                      if (tableManagerModel.currTimeIndex == 3) return;
                                      tableManagerModel.currTimeIndex = 3;
                                      tableManagerModel.getReserveList(context);
                                    },
                                  )),
                            ),
                          ],
                        ),
                      ),
                    )
                  ],
                ),
              ),
              Container(
                height: ScreenUtil().setWidth(20),
                width: double.infinity,
                color: MyColours.color_f5f5f5,
              ),
              Expanded(
                child: Consumer<TableManagerModel>(
          builder: (context,model,child){
          if (model.pageState != PageState.Success) {
          return ExceptionPage(
          pageState: model.pageState,
          callback: () {
            if(tableManagerModel.tableOuterList.isEmpty){
              tableManagerModel.getTableList(context);
            }else{
              tableManagerModel.getReserveList(context);
            }
          },
          emptyMsg: "暂时没有桌位哦",
          emptyImg: "empty_search",
          showMsg: "加载中,请稍后...",
          );
          }else{
            return Container(
              color: MyColours.color_ffffff,
              child: Row(
                children: <Widget>[
                  Container(
                    width: ScreenUtil().setWidth(170),
                    height: double.infinity,
                    color: MyColours.color_f1f1f1,
                    child: ListView.builder(
                      itemBuilder: (context, index) {
                        return Selector<TableManagerModel,Area>(
                          selector: (context,model)=>model.areas[index],
                          builder: (context,area,_){
                            return AreaItem(area, tableManagerModel.currentArea,
                                    (area) {
                                  setState(() {
                                    tableManagerModel.currentArea = (area as Area).name;
                                    tableManagerModel.currentTables=tableManagerModel.areaTableMap[tableManagerModel.currentArea];
                                  });
                                });
                          },
                        );
                      },
                      itemExtent: ScreenUtil().setHeight(207),
                      itemCount: tableManagerModel.areas.length,
                    ),
                  ),
                  Expanded(
                    child: Padding(
                        padding: EdgeInsets.symmetric(
                            vertical: ScreenUtil().setHeight(10),
                            horizontal: ScreenUtil().setWidth(9)),
                        child: Column(
                          children: [
                            Expanded(
                                child: GridView.builder(
                                  gridDelegate:
                                  SliverGridDelegateWithFixedCrossAxisCount(
                                      crossAxisCount: 3,
                                      childAspectRatio: 8 / 9),
                                  itemBuilder: (context, index) {
                                    return Selector<TableManagerModel,t.Table>(
                                      shouldRebuild: (pre,next)=>true,
                                      selector: (context,model)=>model.currentTables[index],
                                      builder: (context,table,_){
                                        return TableItem(
                                            table,
                                            onSelected: (table) {
                                              if ((table as t.Table).selected) {
                                                tableManagerModel.selectTables.add(table);
                                              } else {
                                                tableManagerModel.selectTables.removeWhere(
                                                        (t) => t.id == table.id);
                                              }
                                              DialogUtil.showTableManagerDialog(context, table).then((value){
                                                if(value!=null){
                                                  switch(value){
                                                    case 1://查看详情
                                                      NavigatorUtil.goNotebookDetailPage(context, tableManagerModel.tableMap[table.id].id);
                                                      break;
                                                    case 2://订座
                                                      NavigatorUtil.goNoteBookChangePage(context, NotebookDetail.fromTableManager(tableManagerModel.getCurrDdateStr(), tableManagerModel.currTimeIndex.toString(),table), "");
                                                      break;
                                                    case 3://停用,启用桌位
                                                      Map<String,String> params={
                                                        "id":(table as t.Table).id,
                                                        "status":(table as t.Table).enable=="1"?"0":"1"
                                                      };
                                                      tableManagerModel.setSwitchStatus(context, params).then((value){
                                                        if(value!=null){
                                                          (table as t.Table).enable=((int.parse((table as t.Table).enable)+1)%2).toString();
                                                          if((table as t.Table).enable=="1"){
                                                            for(Area area in tableManagerModel.areas){
                                                              if(area.name==tableManagerModel.currentArea){
                                                                if(table.sign != '5'&&table.sign != '1'){//已预订
                                                                  area.count++;
                                                                }
                                                                break;
                                                              }
                                                            }
                                                          }else{
                                                            for(Area area in tableManagerModel.areas){
                                                              if(area.name==tableManagerModel.currentArea){
                                                                if(table.sign != '5'&&table.sign != '1'){//已预订
                                                                  area.count--;
                                                                }
                                                                break;
                                                              }
                                                            }
                                                          }
                                                          tableManagerModel.notifyListeners();
                                                        }
                                                      });
                                                      break;
                                                  }
                                                }
                                              });
                                            },
                                            canSelected: false,
                                            canChoose: false,
                                            tableMap: tableManagerModel.tableMap,
                                            rid: "");
                                      },
                                    );
                                  },
                                  itemCount: tableManagerModel.currentTables.length,
                                )),
                          ],
                        )),
                  )
                ],
              ),
            );
          }
          },
          ),
              ),
            ],
          );
        },
      ),
    );
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    EventBus().off("refresh_tablemanager");
  }
}