choose_table_model.dart 7.78 KB
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_model.dart';
import 'package:one_key/models/tableOuter.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/utils/utils.dart';
import 'package:provider/provider.dart';

class ChooseTableModel with ChangeNotifier {
  PageState pageState = PageState.Loading;
  List<TableOuter> tableOuterList = []; //区域-桌位列表

  bool swichState = false; //仅看空座

  Map<String, List<t.Table>> areaTableMap = {}; //区域-桌位Map 已预订和空桌子
  Map<String, List<t.Table>> areaTableMapCanNote =
      {}; //区域-桌位Map  筛选出已经预订的桌子,剩余空桌子

  Map<String, List<t.Table>> areaTableMapShow; ////区域-桌位Map 页面展示用(全部或者只看空桌子)
  List<t.Table> currentTables = []; //当前显示的区域-桌位

  List<t.Table> tablesAll = []; //全部桌子(已预订和空桌子)
  List<t.Table> tablesCanNote = []; //全部桌子(空桌子)
  List<t.Table> tablesShow = []; //页面展示

  //获取桌位数据
  Future<List<TableOuter>> getTableList(
      BuildContext context, Map<String, String> params,
      {bool needLoading = true}) async {
    if (needLoading) {
      pageState = PageState.Loading;
      notifyListeners();
    }
    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.isEmpty) {
        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) {
      if (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); //区域信息包含有桌子和没有桌子两部分类型
              }
            }
          }
        }
      }
    }

    return tableOuterList;
  }

  //添加商家桌位
  Future<bool> addTable(
      BuildContext context, Map<String, String> params) async {
    UserModel userModel = Provider.of<UserModel>(context, listen: false);
    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;
  }

  //获取区域数据
  Future<List<AreaSunModel>> getRegionBySellerid(BuildContext context) async {
    UserModel userModel = Provider.of<UserModel>(context, listen: false);
    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> addTableAreas(BuildContext context, String name) async {
    UserModel userModel = Provider.of<UserModel>(context, listen: false);
    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;
  }
}