my_table_manage_home_model.dart 9.88 KB
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:one_key/constant/constant.dart';
import 'package:one_key/constant/error.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/area.dart';
import 'package:one_key/models/area_model.dart';
import 'package:one_key/models/guest_info_model.dart';
import 'package:one_key/models/notebook.dart';
import 'package:one_key/models/reserve_info_model.dart';
import 'package:one_key/models/tableOuter.dart';
import 'package:one_key/models/table_list.dart';
import 'package:one_key/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/net/http_url.dart';
import 'package:one_key/models/table.dart' as t;
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/lunar_calendar.dart';
import 'package:one_key/utils/utils.dart';
import 'package:provider/provider.dart';

import 'notebook_model.dart';

class MyTableManageHomeModel with ChangeNotifier {
  List<Area> areas = []; //区域列表

  List<t.Table> selectTables = []; //选择的桌位

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

  List<t.Table> currentTables = []; //当前显示的区域-桌位

  String currentArea; //当前选中区域
  int selectIndex = 0;

  UserModel userModel;

  PageState pageState = PageState.Loading;

  int selectNumber;

  //初始化时间
  initTime(BuildContext context) async {
    userModel = Provider.of<UserModel>(context, listen: false);

    List temp = await getTableList(context);
    // if (temp.length > 0) {
    //   getReserveList(context);
    // } else {
    //   // pageState = PageState.Empty;

    //没有区域、没有桌子
    pageState = PageState.Success;
    initData();

    //   pageState = PageState.Success;
    //   notifyListeners();
    // }
  }

  //获取桌位数据
  Future<List<TableOuter>> getTableList(BuildContext context,
      {bool needLoading = true}) async {
    if (needLoading) {
      pageState = PageState.Loading;
      notifyListeners();
    }

    Map<String, String> params = {"sellerid": userModel.user.sellerid};
    BaseResp<List> baseResp = await DioUtil()
        .request<List>(context, Method.get, HttpUrl.table_list,
            data: params, showLoading: false)
        .catchError((error) {
      print(error.toString());
      if (error is MyError) {
        switch (error.type) {
          case 1:
            pageState = PageState.ConnectivityError;
            break;
          case 2:
            pageState = PageState.ConnectivityTimeOut;
            break;
          default:
            pageState = PageState.ConnectivityError;
            break;
        }
      }
      notifyListeners();
    });
    tableOuterList = [];
    if (baseResp.code == Constant.status_success) {
      if (baseResp.data.length == 0) {
        pageState = PageState.ConnectivityError;
        notifyListeners();
      }
      if ((baseResp.data[0] as List).isEmpty) {
        pageState = PageState.Success;
        notifyListeners();
        return [];
      }

      tableOuterList = (baseResp.data[0] as List).map((value) {
        TableOuter tableOuter = TableOuter();
        tableOuter.name = value["name"];
        List tableOuterList = value["list"] as List;
        List enableList = []; //删除已停用的桌子,剩余可用的桌子
        tableOuterList.forEach((element) {
          if (element['enable'] != '0') {
            enableList.add(element);
          }
        });
        tableOuter.list = enableList.map((table) {
          return t.Table.fromJson(table as Map<String, dynamic>);
        }).toList();
        return tableOuter;
      }).toList();
    }
    List<AreaSunModel> areaSunModelList = await getRegionBySellerid(context);
    if (areaSunModelList != null && areaSunModelList.length > 0) {
      List<String> tempTableName = []; //有桌子区域
      List<String> tempAreaName = []; //全部区域
      for (TableOuter itemTable in tableOuterList) {
        tempTableName.add(itemTable.name);
      }
      for (AreaSunModel itemArea in areaSunModelList) {
        tempAreaName.add(itemArea.name);
      }
      if (tempAreaName.length > tempTableName.length) {
        for (var itemT in tempTableName) {
          tempAreaName.removeWhere(
              (element) => element == itemT); //全部区域移除有桌子的区域,剩下没有桌子的区域
        }
        for (var item in tempAreaName) {
          for (AreaSunModel itemarea in areaSunModelList) {
            if (item == itemarea.name) {
              TableOuter tableOuter = TableOuter();
              tableOuter.name = item;
              tableOuter.list = [];
              tableOuter.rid = itemarea.id;
              tableOuterList.add(tableOuter); //区域信息包含有桌子和没有桌子两部分类型
            }
          }
        }
      }
    }
    if (tableOuterList.length == 0) {
      pageState = PageState.Success;
    }

    return tableOuterList;
  }

  //初始桌位数据
  initData({bool needKeep = false}) {
    areas.clear();
    List<String> tempList = [];
    for (TableOuter outer in tableOuterList) {
      int count = 0;

      tempList.add(outer.name);

      for (t.Table table in outer.list) {
        table.sign = "";
        table.notebookId = "";
        table.reserver = "";

        table.selected = false;
      }

      Area area = Area();
      area.name = outer.name;
      area.count = outer.list.length == 0 ? -1 : count;
      area.rid = outer.list.length == 0 ? outer.rid : outer.list[0].rid;
      areas.add(area);
    }

    if (currentArea != null && currentArea != '') {
      // tablesShow = areaTableMapShow[currentArea];
      selectNumber = tempList.indexOf(currentArea);
    } else {
      if (areas.length > 0) {
        currentArea = areas[0].name;
        selectNumber = 0;
      }
    }

    notifyListeners();
  }

  //获取桌位数据
  Future<dynamic> setSwitchStatus(
      BuildContext context, Map<String, String> params) async {
    BaseResp<dynamic> baseResp = await DioUtil()
        .request<dynamic>(context, Method.get, HttpUrl.set_switch_status,
            data: params, showLoading: true)
        .catchError((error) {
      print(error.toString());
    });
    if (baseResp == null) return null;
    if (baseResp.code == Constant.status_success) {
      return baseResp.data;
    } else {
      Utils.showToast(baseResp.msg);
    }
  }

  //添加商家桌位区域
  Future<bool> addTableAreas(BuildContext context, String name) async {
    Map<String, String> params = {
      "sellerid": userModel.user.sellerid,
      "name": name
    };
    BaseResp<dynamic> baseResp = await DioUtil()
        .request<dynamic>(context, Method.get, HttpUrl.add_table_area,
            data: params, showLoading: true)
        .catchError((error) {
      print(error.toString());
      // if (error is MyError) {
      //   switch (error.type) {
      //     case 1:
      //       pageState = PageState.ConnectivityError;
      //       break;
      //     case 2:
      //       pageState = PageState.ConnectivityTimeOut;
      //       break;
      //     default:
      //       pageState = PageState.ConnectivityError;
      //       break;
      //   }
      // }
      // notifyListeners();
      return false;
    });

    if (baseResp.code == Constant.status_success) {
      if (baseResp.responseData['data'] != null &&
          baseResp.responseData['data'].length > 0) {
        return true;
      } else {
        Utils.showToast(baseResp.msg ?? '新增区域失败!');
      }
    } else {
      Utils.showToast(baseResp.msg ?? '新增区域失败!');
    }
    return false;
  }

  //获取区域数据
  Future<List<AreaSunModel>> getRegionBySellerid(BuildContext context) async {
    Map<String, String> params = {"sellerid": userModel.user.sellerid};
    BaseResp<List> baseResp = await DioUtil()
        .request<List>(context, Method.get, HttpUrl.get_area_by_sellerid,
            data: params, showLoading: false)
        .catchError((error) {
      print(error.toString());
    });
    List<AreaSunModel> areaSunModelList;
    if (baseResp.code == Constant.status_success) {
      if (baseResp.data.length == 1 && baseResp.data[0] is String) {
        return areaSunModelList;
      } else if (baseResp.data.length > 0) {
        areaSunModelList = AreaModel.fromJson(baseResp.responseData).data;
      }
    }
    return areaSunModelList;
  }

  //添加商家桌位
  Future<bool> addTable(
      BuildContext context, Map<String, String> params) async {
    params["sellerid"] = userModel.user.sellerid;
    params["tid"] = '2';
    BaseResp<dynamic> baseResp = await DioUtil()
        .request<dynamic>(context, Method.get, HttpUrl.add_table,
            data: params, showLoading: true)
        .catchError((error) {
      print(error.toString());
      // if (error is MyError) {
      //   switch (error.type) {
      //     case 1:
      //       pageState = PageState.ConnectivityError;
      //       break;
      //     case 2:
      //       pageState = PageState.ConnectivityTimeOut;
      //       break;
      //     default:
      //       pageState = PageState.ConnectivityError;
      //       break;
      //   }
      // }
      // notifyListeners();
      return false;
    });

    if (baseResp.code == Constant.status_success) {
      if (baseResp.responseData['data'] != null &&
          baseResp.responseData['data'].length > 0) {
        return true;
      } else {
        Utils.showToast(baseResp.msg ?? '新增桌位失败!');
      }
    } else {
      Utils.showToast(baseResp.msg ?? '新增桌位失败!');
    }
    return false;
  }

  refreshTable(context) async {
    List temp = await getTableList(context, needLoading: false);
    // if (temp.length > 0) {
    //   getReserveList(context, needLoading: false, needKeep: true);
    // } else {
    //   // pageState = PageState.Empty;
    //   pageState = PageState.Success;
    //   notifyListeners();
    // }
  }
}