table_manager_page.dart 20.1 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/system_app_bar.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");
    tableManagerModel = Provider.of<TableManagerModel>(context, listen: false);
    WidgetsBinding.instance.addPostFrameCallback((_) {
      tableManagerModel.initTime(context);
      EventBus().on("refresh_tablemanager", (arg) {
        //订座-完成预订 刷新管理桌位
        tableManagerModel.getReserveList(context);
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Consumer<TableManagerModel>(
      builder: (context, model, child) {
        return Column(
          children: <Widget>[
            SystemAppBar("桌位", showLeading: 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,
                                                fromPage: 'table_manage',
                                                tableMap:
                                                    tableManagerModel.tableMap,
                                                rid: "");
                                          },
                                        );
                                      },
                                      itemCount: tableManagerModel
                                          .currentTables.length,
                                    )),
                                  ],
                                )),
                          )
                        ],
                      ),
                    );
                  }
                },
              ),
            ),
          ],
        );
      },
    );
  }

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