From b0d4df5f39525ae7fe252e8ee65d85fd71dca721 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期四, 07 五月 2026 14:53:32 +0800
Subject: [PATCH] 手动下单:检验中订单撤销报错问题修复

---
 src/components/Table/lims-table.vue |  106 ++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 84 insertions(+), 22 deletions(-)

diff --git a/src/components/Table/lims-table.vue b/src/components/Table/lims-table.vue
index cb4eb0f..ad7f9dc 100644
--- a/src/components/Table/lims-table.vue
+++ b/src/components/Table/lims-table.vue
@@ -2,11 +2,11 @@
   <div>
     <!-- 琛ㄦ牸 -->
     <el-table ref="multipleTable" v-loading="tableLoading" :border="border" :data="tableData"
-      :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" :height="height"
+      :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" :height="tableHeight"
       :highlight-current-row="highlightCurrentRow" :row-class-name="rowClassName" :row-style="rowStyle"
-      :row-key="rowKey" :span-method="spanMethod" stripe style="width: 100%" tooltip-effect="dark" @row-click="rowClick"
+      :row-key="rowKey" :span-method="spanMethod" :show-summary="showSummary" :summary-method="summaryMethod" stripe style="width: 100%" tooltip-effect="dark" @row-click="rowClick"
       @current-change="currentChange" @selection-change="handleSelectionChange" class="lims-table">
-      <el-table-column align="center" type="selection" width="55" v-if="isSelection" />
+      <el-table-column align="center" type="selection" width="55" :selectable="selectionSelectable" v-if="isSelection" />
       <el-table-column align="center" label="搴忓彿" type="index" width="60" :index="indexMethod" />
 
       <el-table-column v-for="(item, index) in column" :key="index" :column-key="item.columnKey"
@@ -39,7 +39,7 @@
           <div v-else-if="item.dataType == 'tag'">
             <el-tag v-if="
               typeof dataTypeFn(scope.row[item.prop], item.formatData) ==
-              'string'
+              'string' && item.formatType!=null
             " :title="scope.row[item.prop] | formatters(item.formatData)"
               :type="formatType(scope.row[item.prop], item.formatType)">{{ scope.row[item.prop] |
                 formatters(item.formatData) }}</el-tag>
@@ -48,7 +48,7 @@
               item.formatData
             )" v-else-if="
               typeof dataTypeFn(scope.row[item.prop], item.formatData) ==
-              'object'
+              'object' && item.formatType!=null
             " :key="index" :title="scope.row[item.prop] | formatters(item.formatData)"
               :type="formatType(tag, item.formatType)">{{
                 item.tagGroup
@@ -57,9 +57,10 @@
                     : tag
                   : tag
               }}</el-tag>
-            <el-tag v-else :title="scope.row[item.prop] | formatters(item.formatData)"
+            <el-tag v-else-if="item.formatType!=null" :title="scope.row[item.prop] | formatters(item.formatData)"
               :type="formatType(scope.row[item.prop], item.formatType)">{{ scope.row[item.prop] |
                 formatters(item.formatData) }}</el-tag>
+            <span v-else>{{item.formatData}}</span>
           </div>
 
           <!-- 鎸夐挳 -->
@@ -70,7 +71,7 @@
                 :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 }}
+                {{ typeof o.name === 'function'? o.name(scope.row) : o.name }}
               </el-button>
               <el-upload :action="javaApi + o.url + '?id=' + (o.uploadIdFun ? o.uploadIdFun(scope.row) : scope.row.id)"
                          :key="uploadKeys[scope.$index]"
@@ -186,8 +187,12 @@
       default: false,
     },
     height: {
-      type: String,
-      default: null,
+      type: Number,
+      default: 0,
+    },
+    more:{
+      type:Boolean,
+      default: false,
     },
     tableLoading: {
       type: Boolean,
@@ -198,6 +203,10 @@
       default: () => {
         return () => { };
       },
+    },
+    selectionSelectable: {
+      type: Function,
+      default: () => true,
     },
     rowClick: {
       type: Function,
@@ -260,6 +269,14 @@
         };
       },
     },
+    showSummary: {
+      type: Boolean,
+      default: false
+    },
+    summaryMethod: {
+      type: Function,
+      default: null
+    }
   },
   data() {
     return {
@@ -267,10 +284,22 @@
       btnWidth: "120px",
       uploadRefs: [],
       currentFiles: {}, // 鐢ㄤ簬瀛樺偍姣忚鐨勫綋鍓嶆枃浠�
-      uploadKeys: {} // 鐢ㄤ簬鍔ㄦ�侀噸缃粍浠�
+      uploadKeys: {}, // 鐢ㄤ簬鍔ㄦ�侀噸缃粍浠�
+      tableHeight:0,
+      resizeHandler: null, // 闃叉姈鍑芥暟寮曠敤
     };
   },
+  created(){
+    this.calcTableHeight()
+    this.resizeHandler = this.debounce(() => {
+      this.calcTableHeight();
+    }, 200);
+  },
+  beforeDestroy(){
+    window.removeEventListener("resize",this.resizeHandler)
+  },
   mounted() {
+    window.addEventListener("resize",this.resizeHandler)
     this.calculateSpanInfo();
     this.$nextTick(() => {
       this.$refs.multipleTable.doLayout();
@@ -284,15 +313,47 @@
   watch: {
     tableData: {
       handler() {
-        // 褰撹〃鏍兼暟鎹彉鍖栨椂锛屽垵濮嬪寲 uploadKeys
         this.tableData.forEach((_, index) => {
           this.$set(this.uploadKeys, index, Date.now());
         });
+        this.refreshTableLayout();
       },
       immediate: true
-    }
+    },
+    more() {
+      this.refreshTableLayout();
+    },
+    height() {
+      this.refreshTableLayout();
+    },
   },
   methods: {
+    refreshTableLayout() {
+      this.$nextTick(() => {
+        this.calcTableHeight();
+        if (this.$refs.multipleTable) {
+          this.$refs.multipleTable.doLayout();
+        }
+      });
+    },
+    calcTableHeight(){
+      const innerHeight = window.innerHeight;
+      const naviHeight = 96;//瀵艰埅鏍忛珮搴�
+      const pageHeight = this.page?52:0;//鍒嗛〉缁勪欢楂樺害
+      const mainMarginHeight = 40;//涓荤粍浠朵笂涓嬮棿璺�
+      const otherHeight = this.height;//鍏朵綑楂樺害
+      const searchHeight = this.more?101:51;//鎼滅储鏍忛珮搴�
+
+      this.tableHeight = innerHeight - naviHeight - pageHeight - mainMarginHeight - otherHeight - searchHeight
+    },
+    //闃叉姈鍑芥暟
+    debounce(fn, delay) {
+      let timer = null;
+      return (...args) => {
+        clearTimeout(timer);
+        timer = setTimeout(() => fn.apply(this, args), delay);
+      };
+    },
     getWidth(row, row0) {
       let count = 0;
       row.forEach((a) => {
@@ -302,8 +363,8 @@
           count += a.name.length;
         }
       });
-      this.btnWidth = count * 18 + 60 + "px";
-      return count * 18 + 60 + "px";
+      this.btnWidth = count * 15 + 60 + "px";
+      return count * 15 + 60 + "px";
     },
     getTitleWidth(row) {
       if (row.label.includes('鏃堕棿') || row.label.includes('缂栧彿') || row.label.includes('鏍峰搧鍚嶇О') || row.label.includes('闆朵欢')) {
@@ -323,8 +384,6 @@
     iconFn(row) {
       if (row.name === "缂栬緫" || row.name === "淇敼") {
         return "el-icon-edit";
-      } else if (row.name === "鍒犻櫎") {
-        return "el-icon-delete";
       } else if (row.name === "鏌ョ湅") {
         return "el-icon-view";
       } else {
@@ -473,7 +532,7 @@
 </script>
 
 <style scoped>
-.el-table>>>.el-table__empty-text {
+.el-table ::v-deep .el-table__empty-text {
   text-align: center;
 }
 
@@ -481,7 +540,7 @@
   color: rgb(64, 158, 255);
   cursor: pointer;
 }
->>>.cell {
+::v-deep .cell {
   padding: 0 !important;
 }
 .cell {
@@ -492,19 +551,22 @@
   padding-left: 10px !important;
 }
 
-.lims-table .highlight-warning-row-border td:first-child {
+.lims-table >>>.highlight-warning-row-border td:first-child {
   border-left: 4px solid #ffcd29;
 }
 
-.lims-table .highlight-warning-row-border td:last-child {
+.lims-table >>>.highlight-warning-row-border td:last-child {
   border-right: 4px solid #ffcd29;
 }
 
-.lims-table .highlight-danger-row-border td:first-child {
+.lims-table >>>.highlight-danger-row-border td:first-child {
   border-left: 4px solid #f56c6c;
 }
 
-.lims-table .highlight-danger-row-border td:last-child {
+.lims-table >>>.highlight-danger-row-border td:last-child {
   border-right: 4px solid #f56c6c;
 }
+>>>.red-row td {
+  background: #FFCCCC !important;
+}
 </style>

--
Gitblit v1.9.3