ludc
2024-04-09 fecc7305a48f8ce6e283434718da33e143885c75
Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue
@@ -1,109 +1,86 @@
<template>
  <basic-container>
    <avue-crud v-model="form"
  <div :id="'UI-dynamic-'+areasName+componentVO.oid" class="UI-dynamic">
    <avue-crud ref="dataTable"
               v-model="form"
               :data="tableList"
               :option="option"
               :page.sync="page"
               :table-loading="loading">
               :page.sync="pageType"
               :table-loading="loading"
               @row-click="rowClickChange"
               @search-change='searchChange'
               @selection-change="selectChange">
      <!--top区域按钮-->
      <template slot="menuLeft" slot-scope="scope">
        <dynamic-button LocationType="top" type="table" @buttonClick="buttonClick"></dynamic-button>
        <dynamic-button :butttonList="componentVO.buttons" :selectList="selectList" LocationType="top"
                        type="table"></dynamic-button>
      </template>
      <!--menu区域按钮-->
      <template slot="menu" slot-scope="scope">
        <dynamic-button LocationType="menu" type="table" @buttonClick="buttonClick"></dynamic-button>
        <dynamic-button :butttonList="componentVO.buttons" :scope="scope" :selectList="selectList" LocationType="menu"
                        type="table"></dynamic-button>
      </template>
    </avue-crud>
    <!-- 表格内按钮操作对话框表单   -->
<!--    <dynamic-form :visible.sync="visible" style="display: none"></dynamic-form>-->
  </basic-container>
  </div>
</template>
<script>
import {validatenull} from '@/util/validate'
export default {
  name: "dynamic-table",
  props: {
    componentVO: {
      type: Object,
      default: {}
    },
    inDialog: {
      type: Boolean,
      default: false
    },
    areasName: {
      type: String,
      default: ''//westArea导航区
    },
    sourceData: {
      //菜单源数据或者弹窗时按钮所属区域的上一区域选中数据
      type: Object,
      default: {}
    },
    paramVOS: {
      type: Object,
      default: {}
    },
    isShow: {
      //所在区域是否已显示,针对tab和collapse
      type: Boolean,
      default: true
    },
    dataStore: {
      //弹窗时按钮所属区域选中数据
      type: Array,
      default: []
    },
    tableType: {
      type: String
    }
  },
  data() {
    return {
      parentHeight: '100%',//当前组件根节点元素高度
      form: {},
      loading: false,
      visible:false,
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 5,
        total: 50,
      },
      tableHeadList: [
        {
          align: "left",
          colspan: 1,
          field: "name",
          fieldType: "text",
          hidden: false,
          title: "名称",
          width: 100,
        },
        {
          align: "left",
          colspan: 1,
          field: "code",
          fieldType: "text",
          hidden: false,
          title: "编码",
          width: 100
        },
        {
          align: "left",
          colspan: 1,
          comboxKey: "EnumReviewType",
          field: "reviewtypetext",
          fieldType: "combox",
          hidden: false,
          sortField: "reviewtype",
          title: "类型",
          width: 80
        },
        {
          align: "left",
          colspan: 1,
          field: "content",
          fieldType: "textarea",
          hidden: false,
          title: "备注",
          width: 150
        },
        {
          align: "left",
          colspan: 1,
          comboxKey: "ProcessReviewLC${lcstatus}",
          field: "lcstatus_text",
          fieldType: "text",
          hidden: false,
          sortField: "lcstatus",
          title: "状态",
          width: 100
        },
        {
          align: "left",
          colspan: 1,
          field: "creator_name",
          fieldType: "text",
          hidden: false,
          sortField: "creator",
          title: "创建人",
          width: 80
        },
        {
          align: "left",
          colspan: 1,
          dateFormate: "yyyy-MM-dd HH:mm:ss",
          field: "createtime",
          fieldType: "date",
          hidden: false,
          title: "创建日期",
          width: 160
        }
      ],
      simplePage: {
        currentPage: 1,
        total: 100,
        pagerCount: 4,
        layout: "prev, pager, next"
      },
      //表格数据
      tableList: [
        {
          code: "20220102",
@@ -300,23 +277,229 @@
          checkintime: "",
          isfirstr: "1",
          ts: "2022-02-18 14:35:53.177"
        }
      ]
    }
  },
  computed: {
    option() {
      return {
        },
        {
          code: "20220102",
          lastmodifier: "jhming",
          revisionseq: "1",
          versionvalue: "1",
          description: "",
          oid: "2E66D17B-E3E6-4725-BB83-93F4A20D4E20",
          versionseq: "1",
          content: "第二次中期评审犹太人",
          checkinby: "",
          revisionrule: "ObjectVersion",
          reviewtypetext: "部门级",
          lctid: "ProcessReviewLC",
          reviewtype: "department",
          lcstatus_text: "编辑中",
          id: "",
          owner: "1",
          checkoutby: "",
          creator: "1",
          createtime: "2022-01-13 13:58:43.035",
          isfirstv: "1",
          lastmodifier_name: "姜红明",
          revisionoid: "4F400A1B-2313-4B11-894C-4F4F0B01368A",
          btmname: "processreview",
          checkouttime: "",
          revisionvalue: "A",
          versionrule: "0",
          name: "1月评审3",
          islastr: "1",
          lastmodifytime: "2022-07-15 16:04:43.703",
          copyfromversion: "",
          creator_name: "测试",
          nameoid: "CF350DE8-8E6D-470B-B273-4FD78D41BA4A",
          lcstatus: "Editing",
          islastv: "1",
          checkintime: "",
          isfirstr: "1",
          ts: "2022-07-15 16:04:43.703"
        },
        {
          code: "w02",
          lastmodifier: "1",
          revisionseq: "0",
          versionvalue: "1",
          description: "",
          oid: "2f8d94b2-d65a-4f9b-9a71-caa3afd96459",
          versionseq: "0",
          content: "",
          checkinby: "",
          revisionrule: "ObjectVersion",
          reviewtypetext: "部门级",
          lctid: "ProcessReviewLC",
          reviewtype: "department",
          lcstatus_text: "编辑中",
          id: "",
          owner: "1",
          checkoutby: "",
          creator: "1",
          createtime: "2022-02-18 14:35:45.03",
          isfirstv: "1",
          lastmodifier_name: "测试",
          revisionoid: "31612b9f-022d-4b05-a24c-370a0fd457da",
          btmname: "processreview",
          checkouttime: "",
          revisionvalue: "A",
          versionrule: "0",
          name: "web页面测试02",
          islastr: "1",
          lastmodifytime: "2022-02-18 14:35:45.03",
          copyfromversion: "",
          creator_name: "测试",
          nameoid: "dfc0d8a5-ebe7-40f2-af56-fa437d3866e0",
          lcstatus: "Editing",
          islastv: "1",
          checkintime: "",
          isfirstr: "1",
          ts: "2022-02-18 14:35:45.03"
        },
        {
          code: "webt01",
          lastmodifier: "1",
          revisionseq: "0",
          versionvalue: "1",
          description: "",
          oid: "38033242-3cb4-415c-9cc4-acdb86c2ee8f",
          versionseq: "0",
          content: "wbtest123修改后",
          checkinby: "",
          revisionrule: "ObjectVersion",
          reviewtypetext: "部门级",
          lctid: "ProcessReviewLC",
          reviewtype: "department",
          lcstatus_text: "待评审",
          id: "",
          owner: "1",
          checkoutby: "",
          creator: "1",
          createtime: "2022-01-21 10:04:08.053",
          isfirstv: "1",
          lastmodifier_name: "测试",
          revisionoid: "3f3b2112-f356-4809-969b-1e63f6daa08d",
          btmname: "processreview",
          checkouttime: "",
          revisionvalue: "A",
          versionrule: "0",
          name: "web端新增测试01",
          islastr: "1",
          lastmodifytime: "2022-02-09 09:45:56.044",
          copyfromversion: "",
          creator_name: "测试",
          nameoid: "d8975a06-4c1e-462b-af84-093068c58e9e",
          lcstatus: "Waiting",
          islastv: "1",
          checkintime: "",
          isfirstr: "1",
          ts: "2022-02-09 09:45:56.044"
        },
        {
          code: "w017",
          lastmodifier: "1",
          revisionseq: "0",
          versionvalue: "1",
          description: "",
          oid: "4011e1a7-9eb6-4b5c-89bf-847abff56682",
          versionseq: "0",
          content: "",
          checkinby: "",
          revisionrule: "ObjectVersion",
          reviewtypetext: "部门级",
          lctid: "ProcessReviewLC",
          reviewtype: "department",
          lcstatus_text: "编辑中",
          id: "",
          owner: "1",
          checkoutby: "",
          creator: "1",
          createtime: "2022-02-18 14:37:53.247",
          isfirstv: "1",
          lastmodifier_name: "测试",
          revisionoid: "648f5cf8-b42a-4b78-9928-883c94a83081",
          btmname: "processreview",
          checkouttime: "",
          revisionvalue: "A",
          versionrule: "0",
          name: "web页面测试17",
          islastr: "1",
          lastmodifytime: "2022-02-18 14:37:53.247",
          copyfromversion: "",
          creator_name: "测试",
          nameoid: "5d14e204-f085-4be0-9da6-b08c99172f8a",
          lcstatus: "Editing",
          islastv: "1",
          checkintime: "",
          isfirstr: "1",
          ts: "2022-02-18 14:37:53.247"
        },
        {
          code: "w03",
          lastmodifier: "1",
          revisionseq: "0",
          versionvalue: "1",
          description: "",
          oid: "68583bec-b9ca-4321-8b66-a11d2298f51e",
          versionseq: "0",
          content: "",
          checkinby: "",
          revisionrule: "ObjectVersion",
          reviewtypetext: "部门级",
          lctid: "ProcessReviewLC",
          reviewtype: "department",
          lcstatus_text: "编辑中",
          id: "",
          owner: "1",
          checkoutby: "",
          creator: "1",
          createtime: "2022-02-18 14:35:53.177",
          isfirstv: "1",
          lastmodifier_name: "测试",
          revisionoid: "ff85f436-4dd1-498e-9665-44d53e27ac29",
          btmname: "processreview",
          checkouttime: "",
          revisionvalue: "A",
          versionrule: "0",
          name: "web页面测试03",
          islastr: "1",
          lastmodifytime: "2022-02-18 14:35:53.177",
          copyfromversion: "",
          creator_name: "测试",
          nameoid: "e0f20755-6954-4757-911e-7b9929fbe9a2",
          lcstatus: "Editing",
          islastv: "1",
          checkintime: "",
          isfirstr: "1",
          ts: "2022-02-18 14:35:53.177"
        },
      ],
      option: {
        index: true,
        addBtn: false,
        editBtn: false,
        delBtn: false,
        column: this.updatedColumns,
      };
    },
        selection: true,
        tip: false,
        height: '100%',
        calcHeight: 15,
        indexFixed: false,
        menuFixed: false,
        searchMenuSpan:12,
        searchShow:false,
        column: [],
      },
      selectList: [],
    }
  },
  computed: {
    updatedColumns() {
      return this.tableHeadList.map(item => {
      const queryFields = !validatenull(this.componentVO.tableDefineVO.queryColumns) ? this.componentVO.tableDefineVO.queryColumns.map(item => item.field) : [];
      return this.componentVO.tableDefineVO.cols[0].map(item => {
        const typeValue = item.fieldType === 'text' || item.fieldType === 'combox' ? 'input' : item.fieldType; // 表单Type类型
        const search = queryFields.includes(item.field); // 判断 field 是否在 queryColumns 里
        return {
          align: item.align,
@@ -326,14 +509,60 @@
          hidden: item.hidden,
          label: item.title,
          width: item.width,
          search: search
        };
      });
    },
    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) {
        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;
        }
      }
    }
  },
  created() {
    this.option.column = this.updatedColumns;
  },
  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;
    }
  },
  methods: {
    buttonClick(id) {
      console.log(id)
      this.visible = true;
    rowClickChange(row){
      this.$refs.dataTable.toggleRowSelection(row);
    },
    selectChange(row) {
      this.selectList = row;
    },
    searchChange(form,done){
      console.log(form)
      done()
      this.$emit("setDataStore", {
        area: this.areasName,
        dataStore:row
      });
    }
  }
}