select_table_page.dart 13.3 KB
import 'dart:ffi';

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.dart';
import 'package:one_key/models/tableOuter.dart';
import 'package:one_key/models/table_list.dart';
import 'package:one_key/provider/choose_table_model.dart';
import 'package:one_key/provider/notebook_detail_change_model.dart';
import 'package:one_key/provider/notebook_model.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/utils.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 SelectTablePage extends StatefulWidget {
  final String rid; //预订id
  final DateTime dateTime; //日期
  final String ddate_slot; //时段
  final bool canChoose; //变更预订可以取消原来已预订的选中状态
  final List<TableList> tableList;

  SelectTablePage(this.rid, this.dateTime, this.ddate_slot,
      {this.canChoose = false, this.tableList});

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

class SelectTablePageState extends State<SelectTablePage> {
  List<Area> areas = []; //区域列表
  List<t.Table> selectTables = []; //选择的桌位

  List<TableOuter> tableOuterList = []; //区域-桌位列表

  Map<String, List<t.Table>> areaTableMap = {}; //区域-桌位Map

  ChooseTableModel _chooseTableModel;

  Map<String, Notebook> tableMap = {}; //记录已预订桌位对应的订单

  String currentArea; //当前选中区域

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      getTableList();
    });
  }

  //获取桌位列表
  getTableList() async {
    UserModel userModel = Provider.of<UserModel>(context, listen: false);
    Map<String, String> params = {"sellerid": userModel.user.sellerid};
    tableOuterList = await _chooseTableModel.getTableList(
      context,
      params,
    );
    for (TableOuter item in tableOuterList) {
      // if (item.name == "推荐") {
      //   itemModelList.remove(item);
      // }
      for (var item in item.list) {
        for (var table in widget.tableList) {
          if (item.id == table.id) {
            item.selected = true;
            // if (!tableList.contains(item)) {
            //   tableList.add(item);
            // }
          }
        }
      }
    }
    if (_chooseTableModel.pageState == PageState.Success) {
      _getReserveList(userModel.user.sellerid);
    }
  }

  //获取已预订列表
  _getReserveList(String sid) async {
    NoteBookModel model = new NoteBookModel();
    Map<String, String> params = {
      "sid": sid,
      "rdate": _getRdate(),
      "ddate_solt": widget.ddate_slot,
      "y": "200",
      "x": "1",
      "keywords": "",
      "sort": "1"
    };
    List<Notebook> noteBooks = await model.getReserveList(context, params);
    for (Notebook notebook in noteBooks) {
      if (notebook.tid.isEmpty) continue;
      if (notebook.status == "1" ||
          notebook.status == "2" ||
          notebook.status == "5") {
        //已预订,用餐中,已安排
        List<String> tids = notebook.tid.split(",");
        for (String tid in tids) {
          tableMap["$tid"] = notebook;
        }
      }
    }
    print(tableMap);
    initData();
  }

  //初始桌位数据
  initData() {
    for (TableOuter outer in tableOuterList) {
      int count = 0;
      for (t.Table table in outer.list) {
        if (table.tablestatus == "0") {
          //没有用餐中
          if (tableMap["${table.id}"] != null) {
            Notebook notebook = tableMap["${table.id}"];
            table.sign = notebook.status;
            table.notebookId = notebook.id;
            table.reserver = notebook.rnameStr;
          } else {
            table.sign = "";
            table.notebookId = "";
            if (table.enable == "1") {
              count++;
            }
          }
        } else {
          table.sign = "2";
          table.notebookId = "";
        }
      }
      areaTableMap["${outer.name}"] = outer.list;
      Area area = Area();
      area.name = outer.name;
      area.count = count;
      areas.add(area);
    }
    currentArea = areaTableMap.keys.first;
    setState(() {});
  }

  //获取一天开始-结束时间字符串
  String _getRdate() {
    //一天开始时间
    double startDay = (DateTime.parse((widget.dateTime.year.toString() +
                "-" +
                Utils.addZeroNumber(widget.dateTime.month) +
                "-" +
                Utils.addZeroNumber(widget.dateTime.day) +
                " 00:00:00"))
            .millisecondsSinceEpoch) /
        1000;
    //一天结束时间
    double endDay = (DateTime.parse((widget.dateTime.year.toString() +
                "-" +
                Utils.addZeroNumber(widget.dateTime.month) +
                "-" +
                Utils.addZeroNumber(widget.dateTime.day) +
                " 23:59:59"))
            .millisecondsSinceEpoch) /
        1000;
    return startDay.floor().toString() + "-" + endDay.floor().toString();
  }

  @override
  Widget build(BuildContext context) {
    _chooseTableModel = Provider.of<ChooseTableModel>(context);
    return Scaffold(
        body: SafeArea(
      child: Column(
        children: <Widget>[
          MyAppBar(
            "选择桌位",
            showBack: true,
          ),
          Expanded(
            child: Consumer<ChooseTableModel>(builder: (context, model, _) {
              if (model.pageState != PageState.Success) {
                return ExceptionPage(
                  pageState: model.pageState,
                  callback: () {
                    getTableList();
                  },
                  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 AreaItem(areas[index], currentArea, (area) {
                              setState(() {
                                currentArea = (area as Area).name;
                              });
                            });
                          },
                          itemExtent: ScreenUtil().setHeight(207),
                          itemCount: 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 TableItem(
                                        areaTableMap[currentArea][index],
                                        onSelected: (table) {
                                      if ((table as t.Table).selected) {
                                        selectTables.add(table);
                                        widget.tableList
                                            .add(tableToTableList(table));
                                      } else {
                                        widget.tableList.removeWhere(
                                            (t) => t.id == table.id);
                                        selectTables.removeWhere(
                                            (t) => t.id == table.id);
                                      }
                                    },
                                        canSelected: true,
                                        fromPage: 'change',
                                        tableMap: tableMap,
                                        rid: widget.rid);
                                  },
                                  itemCount: areaTableMap[currentArea].length,
                                )),
                                Container(
                                    width: double.infinity,
                                    height: ScreenUtil().setHeight(84),
                                    margin: EdgeInsets.only(
                                        bottom: ScreenUtil().setWidth(50)),
                                    padding: EdgeInsets.symmetric(
                                        horizontal: ScreenUtil().setWidth(31)),
                                    alignment: Alignment.center,
                                    color: MyColours.color_ffffff,
                                    child: CommonButton(
                                      content: "确定",
                                      width: 500,
                                      height: 84,
                                      fontSize: 34,
                                      state: 1,
                                      onPress: () {
                                        if (widget.canChoose) {
                                          // if (widget.tableList.length > 0) {
                                          String tid = "";
                                          for (TableList table
                                              in widget.tableList) {
                                            tid += table.id + ",";
                                          }
                                          if (widget.tableList.length > 0) {
                                            tid = tid.substring(
                                                0, tid.length - 1);
                                          }

                                          Map temp = {
                                            'object': widget.tableList,
                                            'tid': tid
                                          };
                                          Navigator.of(context).pop(temp);
                                          // }
                                        } else {
                                          if (selectTables.length > 0) {
                                            String tid = "";
                                            for (t.Table table
                                                in selectTables) {
                                              tid += table.id + ",";
                                            }
                                            if (selectTables.length > 0) {
                                              tid = tid.substring(
                                                  0, tid.length - 1);
                                            }

                                            Map temp = {
                                              'object': widget.tableList,
                                              'tid': tid
                                            };
                                            Navigator.of(context).pop(temp);
                                          }
                                        }
                                      },
                                    )),
                              ],
                            )),
                      )
                    ],
                  ),
                );
              }
            }),
          ),
        ],
      ),
    ));
  }

  tableToTableList(t.Table table) {
    TableList _tableList = TableList(
        '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '');
    _tableList.id = table.id;
    _tableList.rid = table.rid;
    _tableList.tid = table.tid;
    _tableList.name = table.name;
    _tableList.tablePnum = table.table_pnum;
    _tableList.sellerid = null;
    _tableList.qrcode = null;
    _tableList.mostPnum = table.most_pnum;
    _tableList.hot = null;
    _tableList.orderO = table.order_o;
    _tableList.status = table.status;
    _tableList.enable = table.enable;
    _tableList.spell = table.spell;
    _tableList.cdate = null;
    _tableList.rname = table.rname;
    _tableList.regionName = table.rname;
    _tableList.selected = true;
    return _tableList;
  }
}