{"remainingRequest":"D:\\jenkins\\workspace\\xypm-web\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xypm-web\\src\\components\\AtTable.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\xypm-web\\src\\components\\AtTable.vue","mtime":1723543352497},{"path":"D:\\jenkins\\workspace\\xypm-web\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xypm-web\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xypm-web\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\r\nimport Sortable from 'sortablejs'\r\nexport default {\r\n  name: 'AtTable',\r\n  props: {\r\n    data: Array,\r\n    showHeader: {\r\n      type: Boolean,\r\n      default: true,\r\n    },\r\n    defaultQuerys: {\r\n      type: Array,\r\n      default() {\r\n        return []\r\n      },\r\n    },\r\n    pageResult: {\r\n      type: Object,\r\n      default: () => {\r\n        return {page: 1, pageSize: 50, total: 0}\r\n      },\r\n    },\r\n    paginationJustify: {\r\n      type: String,\r\n      default: 'end',\r\n      validator: function (value) {\r\n        return (\r\n          ['start', 'end', 'center', 'space-around', 'space-between'].indexOf(\r\n            value\r\n          ) !== -1\r\n        )\r\n      },\r\n    },\r\n    pageSizes: {\r\n      type: Array,\r\n      default: () => {\r\n        return [10, 20, 50, 100, 200, 300, 500]\r\n      },\r\n    },\r\n    pagerCount: {\r\n      type: Number,\r\n      default: 11,\r\n    },\r\n    defaultSorter: {\r\n      type: Array,\r\n      default() {\r\n        return []\r\n      },\r\n    },\r\n    dialogTitle: {\r\n      type: String,\r\n      default: '添加',\r\n    },\r\n    dialogVisible: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    dialogTop: {\r\n      type: String,\r\n      default: '8vh',\r\n    },\r\n    isDrag: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    isShowFooter: {\r\n      type: Boolean,\r\n      default: true,\r\n    },\r\n    dialogWidth: {\r\n      type: String,\r\n      default: '1000px',\r\n    },\r\n    stripe: {\r\n      type: Boolean,\r\n      default: true,\r\n    },\r\n    defaultExpandAll: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    isShowPagination: {\r\n      type: Boolean,\r\n      default: true,\r\n    },\r\n    expandRowKeys: {\r\n      type: Array,\r\n      default: () => {\r\n        return []\r\n      },\r\n    },\r\n    isSortLoad: {\r\n      type: Boolean,\r\n      default: true,\r\n    },\r\n    exportText: {\r\n      type: String,\r\n      default: '',\r\n    },\r\n    justShowSearch: {\r\n      //为true时只显示高级搜索中的查询条件\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    showAdvancedSearchText: {\r\n      type: String,\r\n      default: '基础搜索',\r\n    },\r\n    hideAdvancedSearchText: {\r\n      type: String,\r\n      default: '高级搜索',\r\n    },\r\n    elAuth: {\r\n      type: String,\r\n      default: '',\r\n    },\r\n    cellClassNameFn: {\r\n        type: Function,\r\n        default: () => {}\r\n    }\r\n  },\r\n  data() {\r\n    return {\r\n      filters: {},\r\n      querys: [],\r\n      sorter: null,\r\n      tableMaxHeight: 400,\r\n      pagination: {...this.pageResult},\r\n      loading: false,\r\n      selection: [],\r\n      showAdvancedSearch: false,\r\n      hasSearchPanel: false,\r\n    }\r\n  },\r\n  watch: {\r\n    justShowSearch: {\r\n      handler(val) {\r\n        if (val) {\r\n          this.showAdvancedSearch = true\r\n        }\r\n      },\r\n      immediate: true,\r\n    },\r\n  },\r\n  mounted() {\r\n    this.calcTableHeight()\r\n    this.$root.$on('resize', () => {\r\n      this.calcTableHeight(500)\r\n    })\r\n    this.$bus.$on('reHeight', () => {\r\n      this.calcTableHeight()\r\n    })\r\n    this.load()\r\n    if (this.isDrag) {\r\n      this.rowDrop()\r\n    }\r\n    // 判断是否有高级搜索面板\r\n    this.hasSearchPanel = !!this.$scopedSlots.search\r\n    this.$watch('pageResult', (n, o) => {\r\n      if (n !== o) {\r\n        this.pagination = {...n}\r\n      }\r\n    })\r\n    this.$watch('showAdvancedSearch', (n, o) => {\r\n      if (n !== o) {\r\n        // if (n) {\r\n        //   this.quickSearchWord = null;\r\n        // }\r\n        // 显示或收起搜索面板时，重新计算表格高度\r\n        this.calcTableHeight(500)\r\n      }\r\n    })\r\n  },\r\n  computed: {\r\n    calDefaultQuerys: function () {\r\n      let calQuerys = []\r\n      let query = {\r\n        group: 'defaultQueryGroup',\r\n        operation: 'EQUAL',\r\n        relation: 'AND',\r\n      }\r\n      this.defaultQuerys.forEach((c) => {\r\n        calQuerys.push({...query, ...c})\r\n      })\r\n      return calQuerys\r\n    },\r\n  },\r\n  created() {\r\n    this.$on('advance-search', (data) => this.advanceSearch(data))\r\n  },\r\n  methods: {\r\n    handleScroll() {\r\n      console.dir(this.$refs.table.$el.children[2].scrollTop)\r\n    },\r\n    //返回一个boolean类型，是否显示列表按钮\r\n    getMethodauth(elAuth) {\r\n      if (!elAuth) return true\r\n      let allMethod = window.sessionStorage.allMethod\r\n      let methodAuth = window.sessionStorage.methodAuth\r\n      let allMethodArray = allMethod && allMethod.split(',')\r\n      let methodAuthArray = methodAuth && methodAuth.split(',')\r\n      // 无权限则隐藏按钮\r\n      if (\r\n        methodAuthArray &&\r\n        methodAuthArray.includes(elAuth) &&\r\n        allMethodArray &&\r\n        allMethodArray.includes(elAuth)\r\n      ) {\r\n        return true\r\n      } else {\r\n        return false\r\n      }\r\n    },\r\n    // 高级搜索展开或关闭时，清空表单数据\r\n    showAdvanced() {\r\n      this.showAdvancedSearch = !this.showAdvancedSearch\r\n      this.$parent.searchForm = {}\r\n      this.$parent.$refs.projectInfo.getProjectData()\r\n    },\r\n    handleClearFilter() {\r\n      this.$refs.table.clearFilter()\r\n      this.filters = {}\r\n      this.clearQueryByGroupName('quick')\r\n      this.clearQueryByGroupName('advance')\r\n      this.load()\r\n    },\r\n    setClassName({row, index}) {\r\n      // 通过自己的逻辑返回一个class或者空\r\n      if (row.hasChildren) {\r\n        return JSON.parse(row.hasChildren) ? '' : 'expand'\r\n      }\r\n    },\r\n    tableRowClassName({row, rowIndex}) {\r\n      if (rowIndex === 0) {\r\n        return 'tableStyle'\r\n      }\r\n      return ''\r\n    },\r\n    handleRowClick(row, column, event) {\r\n      this.$emit('row-click', row, column, event)\r\n    },\r\n    handleRowDBClick(row, column, event) {\r\n      this.$emit('row-dblclick', row, column, event)\r\n    },\r\n    handleExpandChange(row) {\r\n      this.$emit('expand-change', row)\r\n    },\r\n    handleTableSelect(selection, row) {\r\n      this.selection = selection\r\n      if (row) {\r\n        this.$emit('select', selection, row)\r\n      } else {\r\n        this.$emit('select-all', selection)\r\n      }\r\n    },\r\n    handleSortChange(column) {\r\n      if (!column.order) {\r\n        this.sorter = null\r\n      } else {\r\n        this.sorter = [\r\n          {\r\n            property: column.prop,\r\n            direction: column.order == 'ascending' ? 'ASC' : 'DESC',\r\n          },\r\n        ]\r\n      }\r\n      if (isSortLoad) {\r\n        this.load()\r\n      }\r\n      this.$emit('sort-change', column)\r\n    },\r\n    handleFilterChange(m) {\r\n      this.filters = {...this.filters, ...m}\r\n      Object.keys(this.filters).forEach((k) => {\r\n        if (!this.filters[k] || this.filters[k].length == 0) {\r\n          delete this.filters[k]\r\n        }\r\n      })\r\n      this.load()\r\n      this.$emit('filter-change', m)\r\n    },\r\n    handleDialogCancel() {\r\n      this.$emit('handleDialogCancel')\r\n      /* 发送一个事件用于侧边栏按钮监听是否显示 */\r\n      this.$bus.$emit('handleAsideBtn', true)\r\n    },\r\n    handleDialogClose(done) {\r\n      this.$emit('handleDialogClose', done)\r\n      /* 发送一个事件用于侧边栏按钮监听是否显示 */\r\n      this.$bus.$emit('handleAsideBtn', true)\r\n    },\r\n    handleDialogExport() {\r\n      this.$emit('handleDialogExport')\r\n      /* 发送一个事件用于侧边栏按钮监听是否显示 */\r\n      this.$bus.$emit('handleAsideBtn', true)\r\n    },\r\n    handleDialogSubmit(formName) {\r\n      this.$emit('handleDialogSubmit', formName)\r\n    },\r\n    handleDialogOpen() {\r\n      this.$emit('handleDialogOpen')\r\n      /* 发送一个事件用于侧边栏按钮监听是否显示 */\r\n      this.$bus.$emit('handleAsideBtn', false)\r\n    },\r\n    advanceSearch(data) {\r\n      if (this.loading || !this.showAdvancedSearch) {\r\n        return\r\n      }\r\n      this.clearQueryByGroupName('quick')\r\n      this.clearQueryByGroupName('advance')\r\n      data &&\r\n        data.forEach((d) => {\r\n          let query = {\r\n            property: d.prop,\r\n            value: d.value,\r\n            group: 'advance',\r\n            relation: d.relation,\r\n            operation: d.operation,\r\n          }\r\n          query.value && this.querys.push(query)\r\n        })\r\n      this.load()\r\n    },\r\n    load(doNotResetPage) {\r\n      this.loading = true\r\n      // 默认重置页码为第一页\r\n      if (!doNotResetPage) {\r\n        this.pagination.page = 1\r\n      }\r\n      let param = {\r\n        pageBean: this.pagination,\r\n      }\r\n      if (this.sorter && this.sorter.length > 0) {\r\n        param.sorter = this.sorter\r\n      }\r\n      // 处理排序字段\r\n      if (this.defaultSorter.length > 0) {\r\n        if (!param.sorter) {\r\n          param.sorter = []\r\n        }\r\n        this.defaultSorter.forEach((item) => {\r\n          param.sorter.remove(item)\r\n        })\r\n        param.sorter = param.sorter.concat(this.defaultSorter)\r\n      }\r\n      // 处理过滤条件\r\n      this.handleFilters()\r\n      if (this.querys && this.querys.length > 0) {\r\n        param.querys = this.querys\r\n      }\r\n\r\n      // 处理查询条件\r\n      if (this.calDefaultQuerys.length > 0) {\r\n        if (!param.querys) {\r\n          param.querys = []\r\n        }\r\n        this.calDefaultQuerys.forEach((item) => {\r\n          param.querys.remove(item)\r\n        })\r\n        param.querys = param.querys.concat(this.calDefaultQuerys)\r\n      }\r\n\r\n      const me = this\r\n      // 防止外部没有回调，设置10秒后自动取消加载中的状态\r\n      const finalTickCB = setTimeout(function () {\r\n        me.loading = false\r\n      }, 10000)\r\n\r\n      if (this.nopagination) {\r\n        param.pageBean = {}\r\n      }\r\n      this.$emit('load', {...param}, () => {\r\n        // 外部已经回调的情况下，取消倒计时\r\n        clearTimeout(finalTickCB)\r\n        me.loading = false\r\n        this.isReset = false\r\n        setTimeout(() => {\r\n          me.$refs.quickSearch &&\r\n            me.$refs.quickSearch.$children[0].$el.children[0].focus()\r\n        })\r\n      })\r\n    },\r\n    // 通过分组名称清除对应查询条件\r\n    clearQueryByGroupName(groupName) {\r\n      // 待删除的查询条件\r\n      let toDelete = []\r\n      this.querys &&\r\n        this.querys.forEach((query) => {\r\n          if (query.group == groupName) {\r\n            toDelete.push(query)\r\n          }\r\n        })\r\n      toDelete.forEach((d) => {\r\n        this.querys.remove(d)\r\n      })\r\n    },\r\n    handleFilters() {\r\n      this.clearQueryByGroupName('filter')\r\n      // 将过滤条件添加查询参数数组中\r\n      if (this.filters && Object.keys(this.filters).length > 0) {\r\n        Object.keys(this.filters).forEach((k) => {\r\n          const filter = this.filters[k]\r\n          let query = {\r\n            property: k,\r\n            value: filter[0],\r\n            group: 'filter',\r\n            relation: 'AND',\r\n          }\r\n          if (filter.length == 1) {\r\n            query.operation = 'EQUAL'\r\n            this.querys.push(query)\r\n          } else if (filter.length > 1) {\r\n            query.operation = 'IN'\r\n            query.value = filter\r\n            this.querys.push(query)\r\n          }\r\n        })\r\n      }\r\n    },\r\n    handleSizeChange(pageSize) {\r\n      this.pagination = {...this.pagination, pageSize}\r\n      this.load()\r\n    },\r\n    handleCurrentChange(page) {\r\n      this.pagination = {...this.pagination, page}\r\n      // 翻页时不重置页码\r\n      this.load(true)\r\n    },\r\n    //行拖拽\r\n    rowDrop() {\r\n      const tbody = document\r\n        .getElementById('AtTable')\r\n        .querySelector('.el-table__body-wrapper tbody')\r\n      const _this = this\r\n      Sortable.create(tbody, {\r\n        onEnd({newIndex, oldIndex}) {\r\n          const currRow = _this.data.splice(oldIndex, 1)[0]\r\n          _this.data.splice(newIndex, 0, currRow)\r\n        },\r\n      })\r\n    },\r\n    doLayout() {\r\n      this.$refs.table.doLayout()\r\n    },\r\n    calcTableHeight(delay) {\r\n      // 动态计算表格的高度，自适应当前容器\r\n      setTimeout(() => {\r\n        if (!this.$refs.tablePanel) {\r\n          return\r\n        }\r\n        let tablePanelHeight\r\n        const tabPanHeight = this.$parent.$parent.$el.clientHeight\r\n        if (tabPanHeight) {\r\n          tablePanelHeight = tabPanHeight\r\n        } else {\r\n          tablePanelHeight = this.$refs.tablePanel.$el.clientHeight\r\n        }\r\n        const toolbarPanelHeight = this.$refs.toolbarPanel.clientHeight || 0\r\n\r\n        const searchPanelHeight =\r\n          this.$refs.searchPanel && this.$refs.searchPanel.clientHeight\r\n            ? this.$refs.searchPanel.clientHeight\r\n            : 0\r\n\r\n        const paginationPanelHeight =\r\n          (this.$refs.paginationPanel &&\r\n            this.$refs.paginationPanel.clientHeight) ||\r\n          0\r\n\r\n        this.tableMaxHeight =\r\n          tablePanelHeight -\r\n          (searchPanelHeight > 0 ? 45 : 5) -\r\n          toolbarPanelHeight -\r\n          searchPanelHeight -\r\n          paginationPanelHeight\r\n      }, delay || 0)\r\n    },\r\n  },\r\n}\r\n",null]}