From fd15db44e6bd9b7b9a6537b82bb90a81c009b24a Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期五, 10 五月 2024 18:16:49 +0800
Subject: [PATCH] action

---
 Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue |  422 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 420 insertions(+), 2 deletions(-)

diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue
index 59ce237..6dca0c5 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue
@@ -1,10 +1,428 @@
 <template>
-  <basic-container>琛ㄦ牸娴嬭瘯椤�</basic-container>
+  <div :id="'UI-dynamic-'+areasName+componentVO.oid" class="UI-dynamic">
+    <avue-crud ref="dataTable"
+               v-model="form"
+               :data="tableList"
+               :option="option"
+               :page.sync="pageType"
+               :table-loading="loading"
+               @on-load="onLoad"
+               @search-reset="searchReset"
+               @refresh-change="handleRefresh"
+               @current-change="currentChange"
+               @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"
+                        @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>
 </template>
 
 <script>
+import {validatenull} from '@/util/validate'
+import {getList} from '@/api/base/ui'
+
 export default {
-  name: "dynamic-table"
+  name: "dynamic-table",
+  props: {
+    //ui涓婁笅鏂囩殑涓氬姟绫诲瀷锛堟垨閾炬帴绫诲瀷锛�
+    uiBtmType: {
+      type: String
+    },
+    //ui涓婁笅鏂�
+    uiContext:{
+      type: String
+    },
+    componentVO: {
+      type: Object,
+      default: {}
+    },
+    inDialog: {
+      type: Boolean,
+      default: false
+    },
+    canEdit:{
+      //鍐呭鏄惁鍙紪杈�
+      type:Boolean,
+      default:false
+    },
+    areasName: {
+      type: String,
+      default: ''//westArea瀵艰埅鍖�
+    },
+    sourceData: {
+      //鑿滃崟婧愭暟鎹垨鑰呭脊绐楁椂鎸夐挳鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁
+      type: Object,
+      default: {}
+    },
+    //涓婁竴鍖哄煙涓氬姟绫诲瀷
+    sourceBtmType:{
+      type: String
+    },
+    paramVOS: {
+      type: Object,
+      default: {}
+    },
+    isShow: {
+      //鎵�鍦ㄥ尯鍩熸槸鍚﹀凡鏄剧ず锛岄拡瀵箃ab鍜宑ollapse
+      type: Boolean,
+      default: true
+    },
+    dataStore: {
+      //寮圭獥鏃舵寜閽墍灞炲尯鍩熼�変腑鏁版嵁
+      type: Array,
+      default: []
+    },
+    tableType: {
+      type: String
+    }
+  },
+  data() {
+    return {
+      currentDefineVO:this.componentVO.uiComponentType=='table'?this.componentVO.tableDefineVO:this.componentVO.treeTableDefineVO,
+      parentHeight: '100%',//褰撳墠缁勪欢鏍硅妭鐐瑰厓绱犻珮搴�
+      form: {},
+      query:{},
+      params:{},
+      loading: false,
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0,
+      },
+      simplePage: {
+        currentPage: 1,
+        total: 0,
+        pagerCount: 4,
+        layout: "prev, pager, next"
+      },
+      //琛ㄦ牸鏁版嵁
+      tableList: [],
+      option: {
+        index: true,
+        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,
+        menuFixed: this.areasName === 'westArea' ? false : 'right',
+        searchMenuSpan:12,
+        searchShow:false,
+        column: [],
+      },
+      selectList: [],
+      columnType: {
+        text: "input",
+        combox: "select",
+        truefalse: "switch",
+        number: "number",
+        textarea: "textarea",
+        datetime: "datetime",
+        date: "date",
+        refer: "refer",
+      },
+      sourceDataMapParams:{}
+    }
+  },
+  computed: {
+    pageType() {
+      return this.areasName === 'westArea' ? this.simplePage : this.page;
+    }
+  },
+  watch: {
+    parentHeight: {
+      handler(newval) {
+        if (newval > 50) {
+          this.option.height = newval;
+          //doLayout涓嶇敓鏁堬紝鎵嬪姩璁剧疆琛ㄦ牸楂樺害
+          this.$children[0].$children[1].$children[1].$children[0].$el.style.height = newval + 'px';
+          /*this.$nextTick(() => {
+            if (this.$refs.dataTable && this.$refs.dataTable.doLayout) {
+              this.$refs.dataTable.doLayout();
+            }
+          })*/
+        }
+      }
+    },
+    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;
+        }
+        if(newval){
+          this.handleRefresh();
+        }
+      }
+    },
+    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) {
+          this.sourceDataMapParams=this.sourceDataMap();
+          this.getParams();
+          this.handleRefresh();
+        }
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  created() {
+    this.getParams();
+    this.option.column = this.updatedColumns();
+    if (this.componentVO.uiComponentType == 'TreeTable') {
+      //鏍戣〃
+      this.option.rowKey = this.currentDefineVO.treeCurrentField || 'oid';
+      this.option.rowParentKey = this.currentDefineVO.treeParentField || 'parentOid'
+    }
+    this.page = {
+      pageSize: this.currentDefineVO.pageVO ? this.currentDefineVO.pageVO.limit : 10,
+      currentPage: this.currentDefineVO.pageVO ? this.currentDefineVO.pageVO.page : 1,
+      total: 0,
+      pageSizes: this.currentDefineVO.limits || [10, 20, 30, 40, 50, 100]
+    };
+  },
+  mounted() {
+    if (this.$el.clientHeight > 50) {
+      //鐖跺厓绱犻珮搴�-鎸夐挳楂樺害-鍒嗛〉楂樺害
+      this.parentHeight = this.$el.clientHeight - this.$children[0].$children[1].$children[0].$el.clientHeight - 57 -5;
+    }
+  },
+  methods: {
+    updatedColumns: function () {
+      const queryFields = !validatenull(this.currentDefineVO.queryColumns) ? this.currentDefineVO.queryColumns.map(item => item.field) : [];
+      return this.currentDefineVO.cols[0].map(item => {
+        const search = queryFields.includes(item.field); // 鍒ゆ柇 field 鏄惁鍦� queryColumns 閲�
+        if (this.currentDefineVO.btmType == 'fileobject' && item.field == 'name') {
+          //鏄枃浠�
+          item.formatter = function (d) {
+            return '<a class="layui-btn layui-btn-intable"  lay-event="PREVIEW">' + d.name + '</a>'
+          }
+        }
+        let formatter = item.formatter || item.templet;
+        if (typeof formatter == "string" && formatter != '') {
+          formatter = eval("(" + formatter + ")");
+        }
+        item.type = this.columnType[item.fieldType] || item.fieldType;
+        return {
+          ...item,
+          prop: item.field,
+          label: item.title,
+          search: search,
+          formatter: formatter
+        };
+      });
+    },
+    sourceDataMap: function () {
+      const sourceDataMap = {};
+      if (Object.keys(this.sourceData).length>0) {
+        if(this.sourceData.oid ) {
+          if (this.sourceData.oid.indexOf('@vcitreesep@') > -1) {
+            this.sourceData.oid = this.sourceData.oid.split('@vcitreesep@')[1];
+          }
+          sourceDataMap.sourceBtmName = this.sourceBtmType;;
+          sourceDataMap.sourceOid = this.sourceData.oid;
+        }
+        for (let i in this.sourceData) {
+          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 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;
+    },
+    getParams: function () {
+      const tableParams = {
+        btmname: this.currentDefineVO.btmType,
+        btmType:this.currentDefineVO.btmType,
+        tableDefineId: this.currentDefineVO.id,
+        componentOid: this.componentVO.oid,
+        uiDefineId: this.uiContext,
+        linkTypeFlag: this.currentDefineVO.linkTypeFlag,
+        treeTableFlag:this.componentVO.uiComponentType == 'TreeTable'
+      };
+
+      const sourceDataMapList = this.sourceDataMapParams;
+
+      this.params = Object.assign({},tableParams, sourceDataMapList);
+    },
+    onLoad(page, params = {}) {
+      if (Object.keys(this.sourceData).length>0 && this.isShow) {
+        this.loading = true;
+        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;
+            this.page.total = res.data.total;
+          } else {
+            data = res.data;
+            this.page.total = res.total;
+          }
+          if (!data || data == null) {
+            data = [];
+          }
+          this.tableList = data;
+          this.loading = false;
+          this.selectionClear();
+        }).catch(error => {
+          this.$message.error(error);
+          this.loading = false;
+        });
+      }
+    },
+    rowView(row,index){
+      this.$refs.dataTable.rowView(row,index)
+    },
+    rowClickChange(row){
+      this.$refs.dataTable.toggleRowSelection(row);
+    },
+    selectChange(row) {
+      this.selectList = row;
+      this.$emit("setDataStore", {
+        area: this.areasName,
+        type:this.componentVO.uiComponentType,
+        btmType:this.currentDefineVO.btmType,
+        dataStore:row
+      });
+    },
+    currentChange(currentPage) {
+      this.page.currentPage = currentPage;
+    },
+    sizeChange(pageSize) {
+      this.page.pageSize = pageSize;
+    },
+    searchChange(params,done){
+      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 = {};
+      this.onLoad(this.page);
+    },
+    selectionClear() {
+      this.selectionList = [];
+      try {
+        this.$refs.dataTable.toggleSelection();
+      }catch (e) {
+
+      }
+    },
+    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()
+    }
+  }
 }
 </script>
 

--
Gitblit v1.9.3