wangting
2024-05-14 51636e9cd814bddba7a9b4ff21b5bc94e95fb6cb
Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue
@@ -13,19 +13,50 @@
               @size-change="sizeChange"
               @row-click="rowClickChange"
               @search-change='searchChange'
               @filter="filterChange"
               @selection-change="selectChange">
      <!--top区域按钮-->
      <template slot="menuLeft" slot-scope="scope">
        <dynamic-button :componentVO="componentVO"
                        :key="areasName+'buttons-'+componentVO.oid"
                        :butttonList="componentVO.buttons" :dataStore="selectList" LocationType="top" :sourceData="sourceData"
                        @afterMethod="handleRefresh"
                        type="table"></dynamic-button>
      </template>
      <!--menu区域按钮-->
      <template slot="menu" slot-scope="scope">
        <dynamic-button :componentVO="componentVO" :butttonList="componentVO.buttons" :scope="scope" :dataStore="selectList" :sourceData="sourceData" LocationType="menu"
        <dynamic-button :componentVO="componentVO" :butttonList="componentVO.buttons" :scope="scope" :dataStore="selectList" :sourceData="sourceData"
                        LocationType="menu"
                        @afterMethod="handleRefresh"
                        @rowView="rowView"
                        type="table"></dynamic-button>
      </template>
      <template  slot="menuRight" slot-scope="scope">
        <el-tooltip class="item" effect="dark" content="打印" placement="top">
          <el-button icon="el-icon-printer" circle @click="$refs.dataTable.rowPrint()"
                     :size="scope.size"></el-button>
        </el-tooltip>
        <el-tooltip class="item" effect="dark" content="导出" placement="top">
          <el-button icon="el-icon-download" circle @click="rowExcel"
                     :size="scope.size"></el-button>
        </el-tooltip>
        <el-tooltip class="item" effect="dark" content="筛选" placement="top">
          <el-button icon="el-icon-tickets" circle  @click="$refs.dataTable.$refs.dialogFilter.box=!0"
                     :size="scope.size"></el-button>
        </el-tooltip>
        <el-tooltip class="item" effect="dark" content="列显隐" placement="top">
          <el-button icon="el-icon-s-operation" circle @click="$refs.dataTable.$refs.dialogColumn.columnBox=!0"
                     :size="scope.size"></el-button>
        </el-tooltip>
        <el-tooltip class="item" effect="dark" content="查询" placement="top">
          <el-button icon="el-icon-search" circle @click="$refs.dataTable.$refs.headerSearch.handleSearchShow()"
                     :size="scope.size"></el-button>
        </el-tooltip>
        <el-tooltip class="item" effect="dark" content="刷新" placement="top">
          <el-button icon="el-icon-refresh" circle @click="$refs.dataTable.refreshChange()"
                     :size="scope.size"></el-button>
        </el-tooltip>
      </template>
    </avue-crud>
  </div>
@@ -116,8 +147,15 @@
        addBtn: false,
        editBtn: false,
        delBtn: false,
        refreshBtn:false,
        columnBtn:false,
        searchShowBtn:false,
        printBtn:false,
        excelBtn:false,
        filterBtn:false,
        selection: true,
        tip: false,
        menuWidth:260,
        height: '100%',
        calcHeight: 15,
        indexFixed: false,
@@ -162,6 +200,7 @@
    },
    isShow: {
      handler(newval) {
        debugger;
        if (newval && this.$el.clientHeight > 50) {
          this.parentHeight = this.$el.clientHeight - this.$children[0].$children[1].$children[0].$el.clientHeight - this.$children[0].$children[2].$el.clientHeight - 5;
        }
@@ -170,6 +209,20 @@
        }
      }
    },
    tableList:{
      handler(newval) {
        if(newval) {
          this.$emit("setData", {
            area: this.areasName,
            type:this.componentVO.uiComponentType,
            currentDefineVO:this.currentDefineVO,
            data:newval
          });
        }
      },
      deep: true,
      immediate: true
    },
    'sourceData':{
      handler(newval) {
        if(newval) {
@@ -177,7 +230,9 @@
          this.getParams();
          this.handleRefresh();
        }
      }
      },
      deep: true,
      immediate: true
    }
  },
  created() {
@@ -198,7 +253,7 @@
  mounted() {
    if (this.$el.clientHeight > 50) {
      //父元素高度-按钮高度-分页高度
      this.parentHeight = this.$el.clientHeight - this.$children[0].$children[1].$children[0].$el.clientHeight - this.$children[0].$children[2].$el.clientHeight - 5;
      this.parentHeight = this.$el.clientHeight - this.$children[0].$children[1].$children[0].$el.clientHeight - 57 -5;
    }
  },
  methods: {
@@ -237,19 +292,18 @@
          sourceDataMap.sourceOid = this.sourceData.oid;
        }
        for (let i in this.sourceData) {
          let item = this.sourceData[i]
          if (item && item.constructor === Object) return;
          if (i == 'type' || i == 'context' || i == 'content') return;
          const item = this.sourceData[i]
          if (item && item.constructor === Object) continue;
          if (i == 'type' || i == 'context' || i == 'content') continue;
          sourceDataMap['sourceData["' + i + '"]'] = item
        }
      }
      if (Object.keys(this.paramVOS).length>0) {
        for (let i in this.paramVOS) {
          let item = this.paramVOS[i]
          if (item && item.constructor === Object) return;
          if (i == 'type' || i == 'context' || i == 'content') return;
          sourceDataMap['sourceData["' + i + '"]'] = item
        for (let j in this.paramVOS) {
          if (this.paramVOS[j] && this.paramVOS[j].constructor === Object) continue;
          if (j == 'type' || j == 'context' || j == 'content' || j == "getdataurl" || j == "getdatamethod" || j == "url" || j == "method" || j == "uploadfileurl" || j == "title") continue;
          sourceDataMap['sourceData["' + j + '"]'] = this.paramVOS[j]
        }
      }
      return sourceDataMap;
@@ -272,7 +326,7 @@
    onLoad(page, params = {}) {
      if (Object.keys(this.sourceData).length>0 && this.isShow) {
        this.loading = true;
        getList(page.currentPage, page.pageSize, Object.assign(params,this.params,this.query)).then(res => {
        getList(page.currentPage, page.pageSize, Object.assign({},this.params,this.query,params)).then(res => {
          let data = [];
          if (res.data && res.data.data) {
            data = res.data.data;
@@ -293,6 +347,9 @@
        });
      }
    },
    rowView(row,index){
      this.$refs.dataTable.rowView(row,index)
    },
    rowClickChange(row){
      this.$refs.dataTable.toggleRowSelection(row);
    },
@@ -312,10 +369,33 @@
      this.page.pageSize = pageSize;
    },
    searchChange(params,done){
      this.query = params;
      this.query = {};
      for (let i in params) {
        this.query['conditionMap["' + i + '"]'] = "*" + params[i] + "*";
      }
      this.page.currentPage = 1;
      this.onLoad(this.page);
      done();
    },
    filterChange(result){
      let parms={}
      for (let i in result) {
        if(!validatenull(result[i][2])) {
          const fieldVal = result[i][2]
          if (result[i][1] == "=") {
            parms['conditionMap["' + result[i][0] + '"]'] = fieldVal;
          } else if (result[i][1] == "≠") {
            parms['conditionMap["' + result[i][0] + '"]'] = '!=' + fieldVal;
          } else if (result[i][1] == "like") {
            parms['conditionMap["' + result[i][0] + '"]'] = "*" + fieldVal + "*";
          } else if (result[i][1] == "∈") {
            parms['conditionMap["' + result[i][0] + '"]'] = "*" + fieldVal + "*";
          } else {
            parms['conditionMap["' + result[i][0] + '"]'] = result[i][1] + fieldVal;
          }
        }
      }
      this.onLoad(this.page,parms);
    },
    searchReset() {
      this.query = {};
@@ -329,8 +409,18 @@
      }
    },
    handleRefresh() {
      this.onLoad(this.page, this.query);
    handleRefresh(type) {
      this.onLoad(this.page);
    },
    rowExcel() {
      //导出
      this.$refs.dataTable.$refs.dialogExcel.handleShow();
      //导出弹窗中的确定按钮
      this.$refs.dataTable.$refs.dialogExcel.handleSubmit = function () {
        this.$Export.excel({title: this.$refs.dataTable.$refs.dialogExcel.form.name, columns: this.$refs.dataTable.$refs.dialogExcel.columns, data: this.$refs.dataTable.$refs.dialogExcel.handleSum()});
        this.$refs.dataTable.$refs.dialogExcel.box = !1
      }
      //this.$refs.dataTable.rowExcel()
    }
  }
}