From 8a756a7a4cac8714e7e2515e9fd464749dbab5be Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期三, 12 三月 2025 15:35:37 +0800
Subject: [PATCH] 表格组件调整

---
 src/components/Table/lims-table.vue |  221 +++++++++++++++++++++++++++++++++---------------------
 1 files changed, 135 insertions(+), 86 deletions(-)

diff --git a/src/components/Table/lims-table.vue b/src/components/Table/lims-table.vue
index 2d5fce6..0251a1f 100644
--- a/src/components/Table/lims-table.vue
+++ b/src/components/Table/lims-table.vue
@@ -4,6 +4,8 @@
     <el-table
       ref="multipleTable"
       v-loading="tableLoading"
+      element-loading-text="鍔犺浇涓�..."
+      element-loading-spinner="el-icon-loading"
       :border="border"
       :data="tableData"
       :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }"
@@ -43,7 +45,6 @@
         :filter-multiple="item.filterMultiple"
         :filtered-value="item.filteredValue"
         :filters="item.filters"
-        :fixed="item.fixed"
         :label="item.label"
         :min-width="item.minWidth"
         :prop="item.prop"
@@ -132,88 +133,6 @@
               >{{ scope.row[item.prop] | formatters(item.formatData) }}</el-tag
             >
           </div>
-
-          <!-- 鎸夐挳 -->
-          <div v-else-if="item.dataType == 'action'">
-            <template v-for="(o, key) in item.operation">
-              <el-button
-                v-show="o.type != 'upload'"
-                size="mini"
-                v-if="o.showHide ? o.showHide(scope.row) : true"
-                :disabled="o.disabled ? o.disabled(scope.row) : false"
-                :icon="iconFn(o)"
-                :plain="o.plain"
-                :style="{ color: o.name === '鍒犻櫎' ? '#f56c6c' : o.color }"
-                :type="o.type | typeFn(scope.row)"
-                @click="o.clickFun(scope.row)"
-                :key="key"
-              >
-                {{ o.name }}
-              </el-button>
-              <el-upload
-                :action="
-                  javaApi +
-                  o.url +
-                  '?id=' +
-                  (o.uploadIdFun ? o.uploadIdFun(scope.row) : scope.row.id)
-                "
-                size="mini"
-                ref="upload"
-                :multiple="o.multiple ? o.multiple : false"
-                :limit="1"
-                :disabled="o.disabled ? o.disabled(scope.row) : false"
-                :accept="
-                  o.accept
-                    ? o.accept
-                    : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
-                "
-                v-if="o.type == 'upload' && o.url"
-                style="display: inline-block; width: 50px"
-                v-show="o.showHide ? o.showHide(scope.row) : true"
-                :headers="uploadHeader"
-                :on-error="onError"
-                :on-exceed="onExceed"
-                :on-success="handleSuccessUp"
-                :show-file-list="false"
-                :key="key"
-              >
-                <el-button
-                  :size="o.size ? o.size : 'small'"
-                  type="text"
-                  :disabled="o.disabled ? o.disabled(scope.row) : false"
-                  >{{ o.name }}</el-button
-                >
-              </el-upload>
-              <el-upload
-                action="#"
-                :on-change="
-                  (file, fileList) => o.clickFun(scope.row, file, fileList)
-                "
-                :multiple="o.multiple ? o.multiple : false"
-                :limit="o.limit ? o.limit : 1"
-                :disabled="o.disabled ? o.disabled(scope.row) : false"
-                :accept="
-                  o.accept
-                    ? o.accept
-                    : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
-                "
-                v-if="o.type == 'upload' && !o.url"
-                style="display: inline-block; width: 50px"
-                v-show="o.showHide ? o.showHide(scope.row) : true"
-                :auto-upload="false"
-                :on-exceed="onExceed"
-                :show-file-list="false"
-                :key="key"
-              >
-                <el-button
-                  :size="o.size ? o.size : 'small'"
-                  type="text"
-                  :disabled="o.disabled ? o.disabled(scope.row) : false"
-                  >{{ o.name }}</el-button
-                >
-              </el-upload>
-            </template>
-          </div>
           <!-- 鍙偣鍑荤殑鏂囧瓧 -->
           <div
             v-else-if="item.dataType == 'link'"
@@ -232,6 +151,109 @@
               scope.row[item.prop] | formatters(item.formatData)
             }}</span>
           </div>
+        </template>
+      </el-table-column>
+      <!-- 鎿嶄綔鍒� -->
+      <el-table-column
+        v-if="table.operator"
+        :label="(table.operatorConfig && table.operatorConfig.label) || '鎿嶄綔'"
+        :width="
+          table.operatorConfig &&
+          (table.operatorConfig.width
+            ? table.operatorConfig.width
+            : calcOperationWidth())
+        "
+        :min-width="
+          (table.operatorConfig && table.operatorConfig.width) ||
+          table.operatorConfig.minWidth ||
+          100
+        "
+        align="center"
+        :fixed="table.operatorConfig ? table.operatorConfig.fixed : 'right'"
+        :show-overflow-tooltip="true"
+      >
+        <template slot-scope="scope">
+          <template v-for="(o, index) in table.operator">
+            <el-button
+              :key="index"
+              v-if="o.type != 'upload'"
+              @click.stop="o.clickFun(scope.row)"
+              :type="o.type || 'text'"
+              :icon="o.icon"
+              :size="o.size || 'small'"
+              :disabled="o.disabled ? o.disabled(scope.row) : false"
+              v-show="o.showFun ? o.showFun(scope.row) : true"
+              :class="[
+                'commonButton',
+                {
+                  del: o.name === '鍒犻櫎' || o.name === '浣滃簾',
+                },
+              ]"
+              >{{ o.name }}
+            </el-button>
+            <el-upload
+              :action="
+                javaApi +
+                o.url +
+                '?id=' +
+                (o.uploadIdFun ? o.uploadIdFun(scope.row) : scope.row.id)
+              "
+              size="mini"
+              ref="upload"
+              :multiple="o.multiple ? o.multiple : false"
+              :limit="1"
+              :disabled="o.disabled ? o.disabled(scope.row) : false"
+              :accept="
+                o.accept
+                  ? o.accept
+                  : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
+              "
+              v-if="o.type == 'upload' && o.url"
+              style="display: inline-block; width: 50px"
+              v-show="o.showHide ? o.showHide(scope.row) : true"
+              :headers="uploadHeader"
+              :on-error="onError"
+              :on-exceed="onExceed"
+              :on-success="handleSuccessUp"
+              :show-file-list="false"
+              :key="index"
+            >
+              <el-button
+                :size="o.size ? o.size : 'small'"
+                type="text"
+                :disabled="o.disabled ? o.disabled(scope.row) : false"
+                >{{ o.name }}</el-button
+              >
+            </el-upload>
+            <el-upload
+              action="#"
+              :on-change="
+                (file, fileList) => o.clickFun(scope.row, file, fileList)
+              "
+              :multiple="o.multiple ? o.multiple : false"
+              :limit="o.limit ? o.limit : 1"
+              :disabled="o.disabled ? o.disabled(scope.row) : false"
+              :accept="
+                o.accept
+                  ? o.accept
+                  : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
+              "
+              v-if="o.type == 'upload' && !o.url"
+              style="display: inline-block; width: 50px"
+              v-show="o.showHide ? o.showHide(scope.row) : true"
+              :auto-upload="false"
+              :on-exceed="onExceed"
+              :show-file-list="false"
+              :key="index"
+            >
+              <el-button
+                :size="o.size ? o.size : 'small'"
+                type="text"
+                :disabled="o.disabled ? o.disabled(scope.row) : false"
+                >{{ o.name }}</el-button
+              >
+            </el-upload>
+          </template>
         </template>
       </el-table-column>
     </el-table>
@@ -366,11 +388,18 @@
         return {};
       },
     },
-    column: {
-      type: Array,
+    // column: {
+    //   type: Array,
+    //   default() {
+    //     return [];
+    //   },
+    // },
+    table: {
+      type: Object,
       default() {
-        return [];
+        return {};
       },
+      required: true,
     },
     rowClassName: {
       type: Function,
@@ -405,12 +434,32 @@
   data() {
     return {
       spanList: [],
+      column: [],
     };
+  },
+  watch: {
+    table(val) {
+      this.doLayout();
+    },
   },
   mounted() {
     this.calculateSpanInfo();
+    this.column = this.table.column;
   },
   methods: {
+    //璁$畻鎿嶄綔鍒楃殑瀹藉害
+    calcOperationWidth() {
+      let width = 0;
+      this.table.operator.forEach((item) => {
+        width += item.name.length * 15 + 15;
+      });
+      return width;
+    },
+    doLayout() {
+      this.$nextTick(() => {
+        this.$refs.multipleTable && this.$refs.multipleTable.doLayout();
+      });
+    },
     getWidth(row) {
       let count = 0;
       row.forEach((a) => {

--
Gitblit v1.9.3