import Loading from '_c/loading'
import {request} from "@/api/base";
import {localRead, localRemove, localSave, sessionRead, sessionSave} from "@/libs/base/util";

/**
 * @desc   : 一览界面混入
 * @author : 周兴
 * @date   : 2022/12/12 10:46
 */
export const indexMixin = {
  components: {
    Loading
  },
  props: {
    type: {
      type: String
    },
  },
  data() {
    return {
      printData: undefined, //打印数据
      loading: false,        // 加载标识
      modalVisible: false,    // 弹框显示
      existsFlag: true,
      searchButtonName: null, // 查询按钮的权限名称
      initSearchFlag: false, // 初始查询标识(初始不进行查询）
      formType: null,// 如果是同一个路由，要记录类型
      pageFlag: true,    // 是否进行分页查询
      pageInfo: {
        total: 0,
        pageSize: this.$config.pageSize,
        currentPage: 1
      },
      pageSizeOpts: this.$config.pageSizeOpts,
      split: 0.5,// 分区的默认
      _mainHeight: 0,// 初始加载时div的大小，用户退出全屏后计算大小使用
      tableData: [],
      searchInfo: [], // 记录的查询的实体
      tableDataSocial: [], // 记录原始的列表数据，用于过滤后恢复
      currentRow: {},
      currentIds: [],
      //查询条件
      searchCond: {},
      searchList: {},
      tableHeight: 750,
      countTableHeight: true, // 是否计算表格高度
      tableSwitch: true, // 开关是否开启
      allScreenFlag: false, // 列表是否最大化
      params: {},
      searchParams: {},// 查询的参数
      primaryKey: null, // 主键Id,
      routeObjName: '', // 页面路由名称
      tableRef: 'table-select',// 列表的ref名
      exportCondition: null,// 额外导出条件
      flagSameRouteFlag: false,// 控制相同页面多开的问题
      routeNameByExport: null, // 路由的名称 导出时用
      _tableRefList: [],// 给表格右键使用(销毁使用)
      _buttonList: [],// 给按钮使用(销毁使用)
      _childButtonList: [],// 给子级按钮使用(销毁使用)
      modalParams: {      // 打开modal传入的参数
        modalRef: 'modal_editAdd',
        button: 'add',
        clearFlag: true,
        closeFlag: false
      },
      editAddModal: false,
      modalTitle: '',//新建编辑弹窗名称
      submitType: '',//新建编辑提交类型
      formData: null, //新建编辑实体
      formDataInit: {},  // 记录页面初始化的数据
      comHandleEnableFlag: false, // 是否共通处理批量启用、停用标识
      canPageFlag: true,// 读取系统的页数，控制翻页
    }
  },
  watch: {
    $route: {
      handler: 'resetData',
    }
  },
  methods: {
    resetData(route, oldRoute) {
      let resetFlag = sessionRead(route.name + '_resetFlag')
      // 不同页面同一路由的处理 TODO
      if (route.meta.flgSameRoute && oldRoute && !resetFlag) {
        this._createdInitPage(); // 调用页面的创建时的方法
        sessionSave(route.name + '_resetFlag', true)
        setTimeout(() => {
          sessionSave(route.name + '_resetFlag', false)
        }, 2000)
      }
      if (route.meta.flgSameRoute && oldRoute && !oldRoute.meta.flgSameRoute
        && this && this.formType && !this.flagSameRouteFlag) {
        this.flagSameRouteFlag = true;
        // setTimeout(()=>{
        //   this.flagSameRouteFlag = false;
        // },2000)
        // this._createdInit();  // 加载创建的初始方法
        // this._mountedInit();  // 加载加载完后的初始方法
      }
    },
    /**
     * @desc   : 设置标题
     * @param  : button: 按钮名; title:窗体明后
     * @author : 周兴
     * @date   : 2022/12/9 8:36
     */
    setTitle(button = '', title) {
      let label = ''
      if (button) {
        label = this.$t(button)
      }
      if (title) {
        label += this.$t(title).replace('管理', '')
      }
      return label;
    },
    /**
     * @desc   : 打开窗体
     * @author : 周兴
     * @param  : routeUrl :类型（config中的routeUrl），tableRef：勾选列表的ref名称，isMustChooseFlag：是否需要校验是否选择了数据
     * @date   : 2022/12/9 8:36
     */
    open(routeUrl, tableRef = 'table-select', isMustChooseFlag = true) {
      if (!routeUrl || !routeUrl.key) {
        return;
      }
      let name = routeUrl.key
      // 用routeName 替代url，为了解决params参数传递的问题
      // let url = routeUrl.url
      let routeName = routeUrl.routeName
      let chooseKeys = tableRef ? this.$refs[tableRef]?.batchKeys : []
      let chooseRows = tableRef ? this.$refs[tableRef]?.batchRows : []
      // 校验
      if (isMustChooseFlag && name.indexOf('add') < 0 && name !== 'search' && name !== 'clear') {
        // 新建不用校验
        if (!chooseKeys || chooseKeys.length === 0) {
          if(this.$refs[tableRef]){
            // 查看当前行是否有数据
            let rows = this.$refs[tableRef].getCurrentRow();
            if (!rows) {
              this.$Message.warning(this.$t('W_013'))
              return;
            } else {
              chooseKeys = [rows[this.$refs[tableRef]._props.primaryKey]]
              chooseRows = [rows];
            }
          }
        }
      }
      // 查询
      if (name === 'search') {
        this.searchData();
      } else if (name === 'clear') { // 清空
        this.clearCondition(routeUrl.searchButtonName);
      } else { // 其他
        // 页面校验
        this._openValidData(name, chooseRows).then(res => {
          if (!res) {
            return;
          }
          // 打开页面
          if (routeName) {
            if (name.indexOf('add') >= 0) {
              chooseKeys = []
            }
            // 记录从哪个父级打开
            sessionSave(this.$route.name + '-' + name + '-parent', this.$route.name)
            if (name === 'edit') {
              this.$router.push({name: routeName, params: {editKeys: chooseKeys.copy(), id: chooseKeys[0]}});
            } else {
              if (routeUrl.flgSameRoute) {
                // todo
                // this.$router.push(url + '/' + this.$route.name + '-add');
              } else {
                // console.log('ttt', routeUrl)
                if (routeUrl.chooseFlag && chooseKeys && chooseKeys.length > 0) {
                  // this.$router.push(url.endsWith('/') ? (url + chooseKeys[0]) : (url + '/' + chooseKeys[0]))
                  // console.log('routeUrl', routeUrl)
                  // console.log('chooseRows[0]', chooseRows[0])
                  // 跟页面的primaryKey不一致时,取route中设置的primaryKey
                  if (routeUrl.primaryKey) {
                    this.$router.push({name: routeName, params: {id: chooseRows[0][routeUrl.primaryKey]}});
                  } else {
                    this.$router.push({
                      name: routeName,
                      params: {id: chooseKeys[0], togetherFlag: routeUrl.togetherFlag,row:chooseRows[0]}
                    });
                  }
                } else {
                  this.$router.push({name: routeName})
                }
              }
            }
          } else {
            if (routeUrl.method && this[routeUrl.method]) {
              if (routeUrl.initFlag && this.initData) {
                // 如果加载基础数据打开需要进入加载基础数据的方法
                this.initData(name);
              }
              if (name === 'save') {
                chooseRows = null
              }
              // 执行方法
              this[routeUrl.method](chooseRows, routeUrl);
            }
          }
        })
      }
    },
    /**
     * @desc   : 打开窗体时校验数据（不给外部调用）
     * @author : 周兴
     * @date   : 2022/12/9 8:52
     */
    _openValidData(name, chooseRows) {
      return new Promise(resolve => {
        if (this.openValidData) {
          let flag = this.openValidData(name, chooseRows);
          resolve(flag);
        } else {
          resolve(true);
        }
      })
    },
    /**
     * @desc   : 操作日志
     * @author : 周兴
     * @date   : 2023/9/8 8:47
     */
    log(rows) {
      if (rows && rows.length > 0 && rows[0][this.primaryKey]) {
        this.$router.push('/apm/operation-log/index?objectCode=' + this.routeObjName + '&dataId=' + rows[0][this.primaryKey])
      }
    },
    /**
     * @desc   : 查询销售订单档案资料接口
     * @author : 周兴
     * @date   : 2022/3/29 16:05
     */
    searchData(pageInfo = null) {
      // 校验是否有必须输入项
      if (this.$refs['searchCond'] && this.$refs['searchCond'].requiredColumns
        && this.$refs['searchCond'].requiredColumns.length > 0) {
        let requiredColumns = this.$refs['searchCond'].requiredColumns
        for (let i in requiredColumns) {
          // 如果是范围需要判断范围
          if (requiredColumns[i].valueKind == this.$config.docUserInput.dateRange
            || requiredColumns[i].valueKind == this.$config.docUserInput.dateTimeRange
            || requiredColumns[i].valueKind == this.$config.docUserInput.monthRange) {
            if (this.searchCond && this.searchCond._value && requiredColumns[i].valueFormat
              && requiredColumns[i].valueFormat.code
              && (!this.searchCond._value[requiredColumns[i].valueFormat.code + 'Start']
                || !this.searchCond._value[requiredColumns[i].valueFormat.code + 'End'])) {
              this.$Message.warning(this.$t('inputWords', {'search-name': requiredColumns[i].itemName}),)
              return
            }
          } else {
            if (this.searchCond && this.searchCond._value && requiredColumns[i].valueFormat
              && requiredColumns[i].valueFormat.code
              && !this.searchCond._value[requiredColumns[i].valueFormat.code]) {
              this.$Message.warning(this.$t('inputWords', {'search-name': requiredColumns[i].itemName}),)
              return
            }
          }
        }
      }
      this.loading = true;
      let params = null;
      // 进行分页查询才会进行
      if (this.pageFlag) {
        if (pageInfo && pageInfo.currentPage) {
          if (pageInfo.currentPage === 1) {
            //查询条件
            this.setCondition(this.searchCond)
            // 设置查询条件
            params = this._setSearchParams();
          } else {
            params = {...this.searchParams}
          }
          this.pageInfo.currentPage = pageInfo.currentPage;
          this.pageInfo.pageSize = pageInfo.pageSize;
          params.currentPage = pageInfo.currentPage;
          params.pageSize = pageInfo.pageSize;
        } else {
          if (this.pageInfo) {
            //查询条件
            this.setCondition(this.searchCond)
            // 设置查询条件
            params = this._setSearchParams();
            params.currentPage = 1;
            params.pageSize = this.pageInfo.pageSize
          }
        }
      } else {
        //查询条件
        this.setCondition(this.searchCond)
        // 设置查询条件
        params = this._setSearchParams();
      }
      // if (this.pageFlag) {
      //   if (pageInfo && pageInfo.currentPage) {
      //     this.pageInfo.currentPage = pageInfo.currentPage;
      //     this.pageInfo.pageSize = pageInfo.pageSize;
      //     params.currentPage = pageInfo.currentPage;
      //     params.pageSize = pageInfo.pageSize;
      //   } else {
      //     params.currentPage = 1;
      //     params.pageSize = this.pageInfo.pageSize
      //   }
      // }
      // 记录查询参数，翻页时使用
      this.searchParams = {...params}
      // 查询数据
      this._getData(params).then(res => {
        if (res && res.code === this.$config.SUCCESS_CODE) {
          this.searchInfo = res.data;   // 记录返回的实体，返回较多的数据，可能会用到
          this.tableData = res.data.list;
          // 如果list没有值，可能就是data返回
          if (!this.tableData && res.data && Array.isArray(res.data)) {
            this.tableData = res.data;
          }
          if (!this.tableData && res.data && Array.isArray(res.data.detail)) {
            this.tableData = res.data.detail;
          }
          if (params.currentPage == 1) {
            this.pageInfo.total = res.data.total
            this.pageInfo.currentPage = 1;
          }
          this.loading = false
        }
      })
    },
    /**
     * @desc   : 分页查询
     * @author : 周兴
     * @date   : 2023/3/8 12:48
     */
    pageSizeChange(pageInfo) {
      if (this.canPageFlag) {
        this.searchData(pageInfo) // 查询数据
      } else {
        setTimeout(() => {
          this.canPageFlag = true;
        }, 500)
      }
    },
    /**
     * @desc   : 设置查询条件
     * @author : 周兴
     * @date   : 2023/1/4 10:55
     */
    _setSearchParams() {
      let params = {...this.searchList}
      if (this.setSearchParams) {
        params = this.setSearchParams(params);
      }
      // params.cpId = this.$store.state.user.cpId;
      return params;
    },
    /**
     * @desc   : 查询数据
     * @author : 周兴
     * @date   : 2023/1/4 10:58
     */
    _getData(params) {
      return new Promise(resolve => {
        let res = this.getData(params);
        resolve(res);
      })
    },
    /**
     * @desc   : 保存
     * @author : 周兴
     * @param  : arg:外部参数，可为空 modalParams,在打开模块时给该实体赋值 (传入参数为实体. button:按钮，默认为add,clearFlag:是否清空，
     * 默认为true;closeFlag，是否关闭当前modal,如果要关闭，formRef必须要有值
     * modalRef：当前modal的ref名称,)
     * @date   : 2022/12/8 13:12
     */
    save(arg) {
      let modalRef = (this.modalParams && this.modalParams.modalRef) ? this.modalParams.modalRef : 'modal_editAdd';
      let button = (this.modalParams && this.modalParams.button) ? this.modalParams.button : 'add';
      let clearFlag = (this.modalParams && this.modalParams.clearFlag) ? this.modalParams.clearFlag : true;
      let closeFlag = (this.modalParams && this.modalParams.closeFlag) ? this.modalParams.closeFlag : false;
      // 1、校验
      this._validData(arg).then(res => {
        if (!res) {
          return;
        }
        this.loading = true;
        // 2、给参数赋值
        this._setParams(arg);
        // this.params.ftyId = this.$store.state.user.ftyId;// 给工厂赋默认值
        this.params.cpId = this.$store.state.user.cpId;

        // 如果主键id有值需要在新建时清空主键Id
        if (this.primaryKey && button === 'add' && this.params[this.primaryKey]) {
          this.params[this.primaryKey] = null;
        }
        // 3、保存数据
        this._saveData(arg).then(result => {
          // 新建成功
          if (result.code === this.$config.SUCCESS_CODE) {
            // 提示信息
            this.$Message.success(this.$t('I_001', {'param': this.$t(button)}))
            if (clearFlag) {
              // 清空表单
              this._clear(arg);
              this.searchData(); // 重新触发查询
            }
            if (closeFlag && modalRef && this.$refs[modalRef]) {
              this.$refs[modalRef].showModal = false;
              this.searchData(); // 重新触发查询
            }
          }
          // else {
          //   // 如果不成功就提示错误信息
          //   this.$Message.warning(result.message)
          // }
          this.loading = false
        });
      });
    },
    /**
     * @desc   : 校验，（不给外部调用）
     * @author : 周兴
     * @date   : 2022/12/8 14:13
     */
    _validData(arg) {
      return new Promise(resolve => {
        if (this.validData) {
          let flag = this.validData(arg);
          resolve(flag);
        } else {
          resolve(true);
        }
      })
    },
    /**
     * @desc   : 设置参数
     * @author : 周兴
     * @date   : 2023/1/4 10:55
     */
    _setParams() {
      let params = {...this.formData}
      if (this.setParams) {
        params = this.setParams(params);
      }
      this.params = params;
    },
    /**
     * @desc   : 清空保存参数
     * @author : 周兴
     * @date   : 2024/1/18 13:05
     */
    _clear(flag) {
      // 清空表单
      if (this.formDataInit) {
        this.formData = {...this.formDataInit}
      }
      // 调用页面的清空
      if (this.clear) {
        this.clear(flag);
      }
    },
    /**
     * @desc   : 新建按钮点击事件(共通）
     * @author : 周兴
     * @date   : 2024/1/18 11:02
     */
    add() {
      this.modalTitle = this.setTitle(this.$config.formMode.add, this.$route.meta.title) // 给modal标题赋值
      this.modalParams = {
        button: this.$config.formMode.add,
      }
      this.editAddModal = true
    },
    /**
     * @desc   : 编辑按钮事件
     * @author : 周兴
     * @date   : 2022年12月13日10:13:23
     */
    edit(rows) {
      // console.log('rows',rows,this.primaryKey)
      this.modalTitle = this.setTitle(this.$config.formMode.edit, this.$route.meta.title)  // 给modal标题赋值
      this.modalParams = {
        button: this.$config.formMode.edit,
        closeFlag: true
      }
      if (this.primaryKey && rows.length > 0 && rows[0][this.primaryKey]) {
        this.detail(rows[0][this.primaryKey]).then(res => {
          if (res && res.code === this.$config.SUCCESS_CODE) {
            this.formData = res.data;
          }
        })
      }
      this.editAddModal = true
    },
    /**
     * @desc   : 批量启用
     * @author : 周兴
     * @date   : 2024/3/8 11:07
     */
    enable(rows) {
      if (!this.primaryKey || !this.routeObjName || !this.comHandleEnableFlag) {
        return;
      }
      if (rows && rows.length > 0) {
        // 只获取停用数据
        let ids = rows.filter(it => !it.flgValid).map(it => it[this.primaryKey]);
        if (ids.length > 0) {
          let service = this.$service[this.routeObjName + 'Service']
          this.$IBMessage({
              content: this.$t('Q_002', {'param': this.$t('enable')}),
              title: this.$t('systemQuestion')
            },
            {
              ok: () => {
                //获取id
                this.excute(service, service.enableBatch, ids, true, this.$t('enable'), true)
              },
            })
        } else {
          this.$Message.warning(this.$t('W_094', {param: this.$t('disable')}))
        }
      } else {
        this.$Message.warning(this.$t('W_094', {param: this.$t('disable')}))
      }
    },
    /**
     * @desc   : 停用按钮
     * @author : 宋扬
     * @date   : 2024/3/4 16:16
     */
    disable(rows) {
      if (!this.primaryKey || !this.routeObjName || !this.comHandleEnableFlag) {
        return;
      }
      if (rows && rows.length > 0) {
        // 只获取有效数据
        let ids = rows.filter(it => it.flgValid).map(it => it[this.primaryKey]);
        if (ids.length > 0) {
          let service = this.$service[this.routeObjName + 'Service']
          this.$IBMessage({
              content: this.$t('Q_002', {'param': this.$t('enable')}),
              title: this.$t('systemQuestion')
            },
            {
              ok: () => {
                //获取id
                this.excute(service, service.disableBatch, ids, true, this.$t('disable'), true)
              },
            })
        } else {
          this.$Message.warning(this.$t('W_094', {param: this.$t('enable')}))
        }
      } else {
        this.$Message.warning(this.$t('W_094', {param: this.$t('enable')}))
      }
    },
    /**
     * @desc   : 调用后台接口
     * @author : 周兴
     * @param  : service：那个实体，$service;method：方法名；params：参数，showMessage：是否显示错误信息; button:提示信息的button
     * @date   : 2022/12/12 13:33
     */
    excute(service, method, params, showMessage = true,
           button = '', searchFlag = false) {
      if (service && method) {
        // params['lan'] = localRead('local_lan')
        let res = request(service.prefix + method, params)
        if (res) {
          res.then(t => {
            if (showMessage) {
              if (t.code === this.$config.SUCCESS_CODE) {
                if (button && this.$t(button)) {
                  this.$Message.success(this.$t('I_001', {'param': this.$t(button)}))
                }
                if (searchFlag) {
                  this.searchData();
                }
              } else {
                if (t.message) {
                  this.$Message.warning(t.message)
                }
              }
            }
          })
          return res;
        }
      }
    },
    /**
     * @desc   : 调用后台接口（无参数）
     * @author : 周兴
     * @param  : service：那个实体，$service;method：方法名；params：参数，showMessage：是否显示错误信息
     * @date   : 2022/12/12 13:33
     */
    excuteNoParam(service, method, params = [], showMessage = true,
                  button = '', searchFlag = false) {
      if (service && params && params.length > 0) {
        // this.loading = true;
        let url = service.prefix + (method ? method : '');
        let par = ''
        params.forEach(it => {
          par += '/' + it
        })
        let res = request(url + par, params,null,null)
        if (res) {
          res.then(t => {
            if (showMessage) {
              if (t.code === this.$config.SUCCESS_CODE) {
                button = button ? button : method;
                this.$Message.success(this.$t('I_001', {'param': this.$t(button)}))
                // 查询数据
                if (searchFlag) {
                  this.searchData();
                }
              } else {
                this.$Message.warning(t.message)
              }
            }
          })
          // this.loading = false;
          return res;
        }
        // this.loading = false;
      }
    },
    /**
     * @desc   : 给参数赋值（不给外部调用）
     * @author : 周兴
     * @date   : 2022/12/8 14:33
     */
    _saveData(arg) {
      return new Promise(resolve => {
        let res = this.saveData(arg);
        resolve(res);
      })
    },
    /**
     * @desc   : 点右键
     * @author : 周兴
     * @date   : 2023/2/23 13:41
     */
    cellMenu(e, tableRef = 'table-select') {
      // 只有右键点击可以进行
      if (e.button === 2 && this.$refs[tableRef]) {
        //查询条件
        this.setCondition(this.searchCond)
        let params = this.searchList
        params.name = this.$route.name
        // 如果页面单独设置，需要读取页面的
        if (this.routeNameByExport) {
          params.name = this.routeNameByExport;
        }
        params.title = this.$route.meta.title
        params.currentPage = this.pageInfo.currentPage
        params.pageSize = this.pageInfo.pageSize
        // 合并实体
        if (this.exportCondition) {
          this.objectMerge(params, this.exportCondition);
        }
        this.$refs[tableRef].exportCondition = params;
      }
    },
    /**
     * @desc   : 获取最大顺序号
     * @author : 周兴
     * @date   : 2023/1/6 13:04
     */
    getMaxDisplayNo(displayNoTable, otherParams, formDataName = null) {
      let params = {
        table: displayNoTable.model + "." + displayNoTable.table,
        // ftyId: this.$store.state.user.ftyId
        cpId: this.$store.state.user.cpId
      }
      // 如果有其他条件，需要合并到查询条件中
      if (otherParams) {
        this.objectMerge(params, otherParams)
      }
      this.excute(this.$service.commonService, this.$service.commonService.getMaxDisplayNo, params).then(res => {
        if (res.code === this.$config.SUCCESS_CODE) {
          if (!formDataName) {
            this.formData.displayNo = res.data;
          } else {
            this[formDataName].displayNo = res.data;
          }
        }
      })
    },
    /**
     * @desc   : desc
     * @author : 周兴
     * @date   : 2023/4/27 8:43
     */
    handleVisibleModal(e) {
      if (e) {
        this.modalVisible = true;
      } else {
        this.modalVisible = false;
      }
    },
    /**
     * @desc   : 监听全局键盘按钮按下的事件
     * @author : 周兴
     * @date   : 2022/3/4 16:57
     */
    addKeyBoardEvent() {
      let code = 0
      let self = this

      document.onkeydown = function (e) {
        const evn = e || event
        const key = evn.keyCode || evn.which || evn.charCode
        // alt：code = 18
        if (key === 18) {
          code = 18
        }

        // 查询子模块是否开着
        let currentModal = null
        let modalName = ''
        for (let it of Object.keys(self.$refs)) {
          // 如果放大镜的查询开着就先优先放大镜
          if (it.startsWith('modal_select') && self.$refs[it] && self.$refs[it].showModal) {
            currentModal = self.$refs[it]
            break
          }
          // 如果没有放大镜的查询，那么就看这个界面的查询
          if (it.startsWith('modal_') && self.$refs[it] && self.$refs[it].showModal) {
            currentModal = self.$refs[it]
            modalName = it
            break
          }
        }
        // Q：code = 81 查询
        let btList = Object.values(self.$config.button);
        // console.log('btList',btList,self.$config.button)
        btList.forEach(forIt => {
          if (code != 18 || forIt.hotKey?.toLowerCase() != e.key.toLowerCase()) return
          e.returnValue = false
          // 如果模块开着，在前面加上模块的ref名
          if (currentModal != null) {
            if (self.$refs[modalName + '_' + forIt.name]) {
              self.$refs[modalName + '_' + forIt.name].$el.click()
            }
            if (self.$refs[modalName].$refs[modalName + '_' + forIt.name]) {
              self.$refs[modalName].$refs[modalName + '_' + forIt.name].$el.click()
            }
            // 兼容放大镜
            if (currentModal.$refs[forIt.name]) {
              currentModal.$refs[forIt.name].$el.click()
            }
          } else {
            if (self.$refs[forIt.name]) {
              self.$refs[forIt.name].$el.click()
            }
          }
        })
      }
      // 监听全局键盘按钮松开的事件
      document.onkeyup = function (e) {
        const evn = e || event
        const key = evn.keyCode || evn.which || evn.charCode
        if (key === 18) {
          code = 0
        }
        // 一秒钟失效，避免因为按了alt+tab之后再回来，按其他什么英文字母都不好使了的问题
        setTimeout(() => {
          code = 0
        }, 1000)
      }
    },
    /**
     * @desc   : 缩放查询条件
     * @author : 周兴
     * @date   : 2022/3/15 14:57
     */
    collapseChange() {
      setTimeout(() => {
        this.resizeTable() // 重新计算表格高度
      }, 500)

      // 光标停留在第一个控件上
      this.$refs['searchCond'].focus()
    },
    /**
     * @desc   : 重算table的高度(给resize调用）
     * @author : 周兴
     * @date   : 2023/4/27 11:44
     */
    resizeTableByResize() {
      setTimeout(() => {
        this.resizeTable();
      }, 800)
    },
    /**
     * @desc   : 重算table的高度
     * @author : 周兴
     * @date   : 2022/3/14 9:24
     */
    resizeTable() {
      // console.log('-----------------------------')
      this.$nextTick(() => {
        let tableHeight = 0;
        // 只有需要计算的才进行
        if (!this.countTableHeight) return
        let searchHeight = 0
        // 查询条件的高度
        if (document.getElementById('search-cond-div')) {
          searchHeight = document.getElementById('search-cond-div').offsetHeight
        }
        // console.log('查询条件',searchHeight)

        let footInfoHeight = 0
        // 底边注意信息的高度
        if (this.$refs.footInfo) {
          footInfoHeight = this.$refs.footInfo.clientHeight + 10
        }
        // console.log('底部信息',footInfoHeight)

        // tab的高度
        let tabHeight = 0
        // let tabs = document.getElementsByClassName('ivu-tabs-bar');
        // if (tabs?.length>0) {
        //   tabs.forEach(element => {
        //     tabHeight+= element.offsetHeight
        //   });
        // }
        // console.log('tab组件',tabHeight)

        // 已选的区域的高度
        let pageHeight = 0
        // let pageInfos = document.getElementsByClassName('table-foot-class');
        //
        // if (pageInfos?.length>0) {
        //   pageInfos.forEach(element => {
        //     pageHeight+= element.offsetHeight
        //   });
        // }
        // console.log('页码组件',pageHeight)


        // table的工具栏
        let tableToolsHeight = 0
        if (document.getElementById('tableTools') != null) {
          tableToolsHeight = document.getElementById('tableTools').offsetHeight + 15
          // console.log('tableToolsHeight',tableToolsHeight)
        }
        // console.log('table的工具栏',tableToolsHeight)



        // console.log('ddss',tabHeight,tableToolsHeight)
        let mainHeight = 0;
        mainHeight = document.documentElement.clientHeight - 72
        // let mainDiv = document.getElementsByClassName('main-div');
        // if (mainDiv && mainDiv.length > 0) {
        //   mainHeight = mainDiv[0].clientHeight
        // }
        // 如果是最小化有值，说明是从还原回来
        let restore = sessionRead('restore')
        if (restore === 'restore') {
          mainHeight = this._mainHeight;
          // localRemove('restore');
        }
        let toolsHeight = 0;
        if (document.getElementById('BaseIndexButtonGroup') != null) {
          toolsHeight = document.getElementById('BaseIndexButtonGroup').offsetHeight
        }
        // console.log('功能按钮',toolsHeight)


        // console.log('tableSwitch',this.tableSwitch, mainHeight,searchHeight,toolsHeight,footInfoHeight,tabHeight,this)
        // 如果全屏那么就不减其他部分的高度
        if (this.allScreenFlag) {
          tableHeight = mainHeight - 3 - pageHeight - tableToolsHeight + 90
        } else {
          // 如果没有Switch开关，不用除以2
          if (this.tableSwitch) {
            tableHeight = mainHeight - searchHeight - toolsHeight - 3 - 20 - footInfoHeight - pageHeight - tableToolsHeight - tabHeight + 10
          } else {
            // console.log('333', mainHeight, searchHeight, toolsHeight, footInfoHeight, pageHeight, tableToolsHeight, tabHeight)
            tableHeight = (mainHeight - searchHeight - toolsHeight - 3 - 20 - footInfoHeight - pageHeight - tableToolsHeight - tabHeight - 15) / 2
          }
          // console.log('3333',window.innerHeight)
          // console.log('4444',document.documentElement.clientHeight,document.documentElement.offsetHeight,document.documentElement.scrollHeight)
          // console.log('tableHeight', this.tableHeight,   'mainHeight:' + mainHeight, 'searchHeight:' + searchHeight, 'toolsHeight:' + toolsHeight, 'footInfoHeight:' + footInfoHeight)
        }
        this.tableHeight = tableHeight;
        // console.log('tableHeight',tableHeight)
      })
    },
    /**
     * @desc   : 设置查询条件
     * @author : 周兴
     * @date   : 2022/3/4 17:03
     */
    setCondition(val) {
      if (val._value) {
        this.searchList = val._value
        let keys = Object.keys(this.searchList);
        for (let i in keys) {
          // 处理数据 把空字符串处理为undifined
          if (this.searchList[keys[i]] == '') {
            this.searchList[keys[i]] = undefined;
          }
        }
      } else {
        this.searchList = this.pageInfo
      }
    },
    /**
     * @desc   : 清空事件
     * @author : 周兴
     * @date   : 2022/3/4 8:19
     */
    clearCondition(queryButtonName) {
      this.searchList = {}
      this.searchCond._value = {}
      if (this.$refs.searchCond) {
        this.$refs.searchCond.clearCondition();
      }
      // this.$nextTick(() => {
      //   if (queryButtonName) {
      //     // 如果有查询权限，才进行查询
      //     if (this.$libaray.checkButtonHasRight(queryButtonName)) {
      //       this.searchData()
      //     }
      //   } else {
      //     //重新查询
      //     this.searchData()
      //   }
      // })
    },
    /**
     *   @author : 寇珊珊
     *   @date   : 2022/3/22 10:54
     *   @desc   : 滚动后模拟点击事件，模拟关闭poptip
     */
    scroll(e) {
      e.target.click()
    },
    /**
     * @desc   : 链接跳转
     * @author : 周兴
     * @date   : 2023/3/27 11:32
     */
    handleLink(e) {
      if (!e) return;
      if (e.url) {
        // 跳转到链接
        this.$router.push(e.url)
      } else {
        // 默认查编辑
        let button = e.button?e.button:'edit'
        if (button) {
          // 有子级
          if (e.child && this.$refs[e.button].$refs['child_' + e.child]) {
            this.$refs[button].$refs['child_' + e.child][0].click()
          } else {
            // 如果没有设置url跳转到本页的编辑页面
            this.$refs[button].$el.click()
          }
        }
      }
    },
    /**
     * @desc   : 设置用户的表格设置
     * @author : 周兴
     * @date   : 2023/4/4 15:31
     */
    setUserTableSetting() {
      let code = this.$route.name;
      if (this.$store.state.user.userTableSetting) {
        let filters = this.$store.state.user.userTableSetting.filter(it => it.code === code);
        if (filters && filters.length > 0) {
          // 一个页面可能多个表格
          filters.forEach(c => {
            if (this.$refs[c.tableRef] && c.columns.value) {
              let tableV = this.$refs[c.tableRef];
              let columns = JSON.parse(c.columns.value)
              const tableColumns = tableV.getTableColumn()
              if (tableColumns.fullColumn && columns && columns.length > 0) {
                const fullColumns = tableColumns.fullColumn;
                let finalColumns = []
                columns.forEach(it => {
                  let filterRows = fullColumns.filter(item => item.field === it.field);
                  if (filterRows && filterRows.length > 0) {
                    this.$set(filterRows[0], 'visible', it.visible)
                    this.$set(filterRows[0], 'defaultVisible', it.visible)
                    finalColumns.push(filterRows[0])
                  }
                })
                if (tableV.chooseFlag) {
                  // // 加入选择
                  finalColumns.splice(0, 0, fullColumns[0])
                  // 加入序号
                  finalColumns.splice(1, 0, fullColumns[1])
                } else {
                  // 加入序号
                  finalColumns.splice(0, 0, tableColumns.fullColumn[0])
                }
                // 重新加载表格
                tableV.loadColumn(finalColumns);
              }
            }
          })
        }
      }
    },
    /**
     * @desc   : 给表格赋值相关信息
     * @author : 姜宁
     * @date   : 2023/4/3 16:42
     */
    showSetting(it, refName) {
      if (it) {
        it.userTableSetInfo = {
          // ftyId: this.$store.state.user.ftyId,
          cpId: this.$store.state.user.cpId,
          userId: this.$store.state.user.id,
          tableType: this.$config.userTableType.page,
          code: this.$route.name,
          tableRef: refName
        }
      }
    },
    // /**
    //  * @desc   : 点击按钮，供监听使用
    //  * @author : 周兴
    //  * @date   : 2023/4/13 17:08
    //  */
    // buttonClick(e) {
    //   if (this._buttonList && this._buttonList.length > 0) {
    //     this._buttonList.forEach(it => {
    //       if (!it.button.disabledFlag) {
    //         it.button.disabledFlag = true;
    //         this.open(it.obj, this.tableRef, it.button.isMustChooseFlag)
    //         setTimeout(() => {
    //           it.button.disabledFlag = false;
    //         }, 1000)
    //       }
    //     })
    //   }
    // },
    /**
     * @desc   : 创建时加载的方法
     * @author : 周兴
     * @date   : 2023/2/8 11:50
     */
    _createdInit() {
      let _this = this
      // 初始化页面所需要的数据
      if (_this.initData) {
        _this.initData();
      }
      setTimeout(() => {
        _this.resizeTable() // 重新计算表格高度
      }, 800)

      // _this.columnDrop2()
      //监听form页面滚动
      _this.$nextTick(() => {
        let self = this
        // _this.$el.addEventListener('scroll', (e) => {
        //   self.scroll(e)
        // })
      })
    },
    /**
     * @desc   : 同一页面的created事件
     * @author : 周兴
     * @date   : 2023/3/16 8:46
     */
    _createdInitPage() {
      let _this = this;
      // 记录formType
      if (_this.$route.meta && _this.$route.meta.flgSameRoute) {
        _this.formType = _this.$route.meta.formCode
      }
      // 初始化页面数据
      if (_this.createdInit) {
        _this.createdInit();
      }
    },
    /**
     * @desc   : 加载完成后的方法
     * @author : 周兴
     * @date   : 2023/2/8 11:51
     */
    _mountedInit() {
      clearTimeout(this.overTimer)
      let _this = this
      //监听窗口变化
      window.addEventListener('resize', _this.resizeTable)
      // 初始化页面数据
      if (_this.mountedInit) {
        _this.mountedInit();
      }
      // 给dk-table列表注册cellMenu事件
      _this._buttonList = []
      _this._childButtonList = []
      _this._tableRefList = []
      if (_this.$refs) {
        let arr = Object.keys(_this.$refs);
        if (arr && arr.length > 0) {
          arr.forEach(it => {
            if (_this.$refs[it] && _this.$refs[it].$vnode && _this.$refs[it].$vnode.tag &&
              _this.$refs[it].$vnode.tag.endsWith('DkTable')) {
              // 说明是dk-table列表 增加右键事件 为了导出做准备
              _this._tableRefList.push(_this.$refs[it].$el)
              _this.$refs[it].$el.addEventListener('mousedown', _this.cellMenu);
              // 在点开设置页面，为设置做准备
              if (_this.$refs[it].showSettingFlag) {
                if (_this.$refs[it].$refs['setting']) {
                  _this.showSetting(_this.$refs[it], it);
                }
              }
            }
            // 说明是buttonGroup
            if (_this.$refs[it] && _this.$refs[it].$vnode && _this.$refs[it].$vnode.tag &&
              _this.$refs[it].$vnode.tag.endsWith('BaseIndexButton')
              && this.routeObjName && _this.$config.routeUrl[this.routeObjName]) {
              // _this.$refs[it].$vnode.componentInstance.$el.click();
              let buttonRef = _this.$refs[it].$vnode?.data.ref;
              // 查询特殊处理
              if (buttonRef && (_this.$config.routeUrl[this.routeObjName][buttonRef] || buttonRef === 'search')) {
                let obj = _this.$config.routeUrl[this.routeObjName][buttonRef];
                if (buttonRef === 'search') {
                  obj = _this.$config.routeUrl[buttonRef]
                }
                // 增加子级
                if (_this.$refs[it].$vnode.componentInstance.childOptions && _this.$refs[it].$vnode.componentInstance.childOptions.length > 0) {
                  _this.$refs[it].$vnode.componentInstance.childOptions.forEach(c => {
                    // console.log('bb4', _this.$refs[it].$vnode.componentInstance.childOptions)
                    if (_this.$refs[it].$vnode.componentInstance.$refs['child_' + c.name]) {
                      _this._childButtonList.push({
                        button: _this.$refs[it].$vnode.componentInstance.$refs['child_' + c.name][0],
                        obj: _this.$config.routeUrl[this.routeObjName][c.name],
                        isMustChooseFlag: c.isMustChooseFlag ? true : false
                      })
                    }
                  })
                }
                // 记录按钮，用于销毁
                // 如果没有子级才会加进去
                if (_this.$refs[it].$vnode.componentInstance && !_this.$refs[it].$vnode.componentInstance.childOptions) {
                  _this._buttonList.push({button: _this.$refs[it].$vnode.componentInstance, obj: obj});
                }
                // _this.$refs[it].$vnode.componentInstance.$el.addEventListener('click', _this.buttonClick, false);
                const listener = new WeakMap()
                let ele = _this.$refs[it].$vnode.componentInstance.$el;
                listener.set(ele, function (e) {
                  if (!_this.$refs[it].$vnode.componentInstance.disabledFlag &&
                    (!_this.$refs[it].$vnode.componentInstance.childOptions || _this.$refs[it].$vnode.componentInstance.childOptions.length === 0)) {
                    if (it != 'clear') {
                      _this.$refs[it].$vnode.componentInstance.disabledFlag = true;
                    }
                    _this.open(obj, _this.tableRef, _this.$refs[it].$vnode.componentInstance.isMustChooseFlag)
                    setTimeout(() => {
                      if (_this.$refs[it]) {
                        _this.$refs[it].$vnode.componentInstance.disabledFlag = false;
                      }
                    }, 1000)
                  }
                })
                ele.addEventListener('click', listener.get(ele), false)
              }
            }
          })
          // 子级按钮点击
          if (_this._childButtonList && _this._childButtonList.length > 0) {
            _this._childButtonList.forEach(it => {
              const listener = new WeakMap()
              let ele = it.button;
              listener.set(ele, function (e) {
                _this.open(it.obj, _this.tableRef, it.isMustChooseFlag)
              })
              ele.addEventListener('click', listener.get(ele), false)
            })
          }
        }
      }
      // 初始时，需要查询数据库 TODO
      // 读取数据库中配置
      _this.initSearchFlag = this.$route.meta?.flgAutoQuery
      if (_this.initSearchFlag && _this.searchData) {
        setTimeout(() => {
          if (_this.searchButtonName) {
            if (_this.$libaray.checkButtonHasRight(_this.searchButtonName)) {
              // 查询页面
              _this.searchData();
            }
          } else {
            _this.searchData();
          }
        }, 1000)
      }
    },
  },
  activated() {
    // 如果从菜单点新建
    if (this.$route.params && this.$route.params.menuClick) {
      if (this.$route.path == this.$route.params.parentPath && this.add) {
        this.add();
      }
    }
    // 快捷键
    this.addKeyBoardEvent()
    setTimeout(() => {
      this.resizeTable() // 重新计算表格高度
    }, 800)
  },
  deactivated() {
    //清空快捷键
    document.onkeydown = null;
  },
  beforeDestroy() {
    clearTimeout(this.overTimer)
    this.overTimer = null;
    // 移除dk-table 监听
    let _this = this
    try {
      if (_this._tableRefList && _this._tableRefList.length > 0) {
        _this._tableRefList.forEach(it => {
          it.removeEventListener('mousedown', _this.cellMenu)
        })
        _this._tableRefList = []
      }
      // 移除button的监听
      if (_this._buttonList && _this._buttonList) {
        _this._buttonList.forEach(it => {
          it.removeEventListener('click', _this._buttonList)
        })
        _this._buttonList = []
      }
      // 移除子级button的监听
      if (_this._childButtonList && _this._childButtonList) {
        _this._childButtonList.forEach(it => {
          it.removeEventListener('click', _this._childButtonList)
        })
        _this._childButtonList = []
      }
    } catch (e) {
    }
    window.removeEventListener('resize', _this.resizeTable)
    _this.existsFlag = null;
  },
  created() {
    this._createdInit();  // 调用创建时的方法
    this._createdInitPage(); // 调用页面的创建时的方法
    this.$nextTick(() => {
      this.setUserTableSetting();  // 用户表格设置
    })
  },
  mounted() {
    localRemove('maxFlag');
    this._mountedInit(); // 调用加载完后的方法
    this.$nextTick(() => {
      // 计算main-div的高度
      let mainDiv = document.getElementsByClassName('main-div');
      if (mainDiv && mainDiv.length > 0) {
        this._mainHeight = mainDiv[0].clientHeight;
      }
      // setTimeout(()=>{
      //   this.setUserTableSetting();  // 用户表格设置
      // },1000)
      if (this.formData) {
        this.formDataInit = {...this.formData};
      }
    })
    if (this.$route.meta.pageGridInfo && this.$route.meta.pageGridInfo.value) {
      let pageGridInfo = JSON.parse(this.$route.meta.pageGridInfo.value)
      if (pageGridInfo && pageGridInfo.G1) {
        this.canPageFlag = false;
        this.pageSizeOpts = pageGridInfo.G1.rowQtys;
        setTimeout(() => {
          this.pageInfo.pageSize = pageGridInfo.G1.defRowQty;
        }, 100)
      }
    }
  },
}


