From 9a991de2a0079a8f90ed0dfa26abf4d0f95a9bb5 Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期四, 28 九月 2023 10:01:29 +0800
Subject: [PATCH] bug修复(5089)

---
 src/components/makepager/TableCommonView.vue |  201 ++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 146 insertions(+), 55 deletions(-)

diff --git a/src/components/makepager/TableCommonView.vue b/src/components/makepager/TableCommonView.vue
index 10a0bca..8fcc0fe 100644
--- a/src/components/makepager/TableCommonView.vue
+++ b/src/components/makepager/TableCommonView.vue
@@ -1,6 +1,9 @@
 <!-- eslint-disable vue/no-use-v-if-with-v-for -->
 <template>
-  <div class="table-view" v-loading="loading">
+  <div
+    :class="{ 'table-view': true, table_height: !showSummary }"
+    v-loading="loading"
+  >
     <el-table
       ref="table"
       border
@@ -19,9 +22,18 @@
       :default-expand-all="tableList.isDefaultExpandAll"
       :tree-props="{ children: 'child', hasChildren: 'hasChildren' }"
       :span-method="objectSpanMethod"
+      :summary-method="getSummaries"
+      :show-summary="showSummary"
     >
-      <el-table-column v-if="tableList.selectBox" type="selection" width="40"> </el-table-column>
-      <el-table-column v-if="tableList.selectIndex" type="index" label="搴忓彿" width="50"> </el-table-column>
+      <el-table-column v-if="tableList.selectBox" type="selection" width="40">
+      </el-table-column>
+      <el-table-column
+        v-if="tableList.selectIndex"
+        type="index"
+        label="搴忓彿"
+        width="50"
+      >
+      </el-table-column>
       <el-table-column
         v-for="(item, i) in tableList.tableColumn"
         :key="i"
@@ -34,42 +46,65 @@
         v-if="item.isShowColumn"
       >
         <template slot-scope="scope">
-          <span v-if="item.price">{{ "锟�" + number_format(scope.row[item.prop], 2, ".", ",") }}</span>
-          <!-- 甯︾偣鐨勫姛鑳� -->
+          <span v-if="item.price">{{
+            "锟�" + number_format(scope.row[item.prop], 2, ".", ",")
+          }}</span>
+          <!-- 鐘舵�佹樉绀� -->
           <div v-else-if="item.status">
-            <!-- <span v-if="scope.row.status == '瀹屾垚'" class="Badge greenSlot"></span>
-            <span v-else-if="scope.row.status == '鑽夌'" class="Badge redSlot"></span>
-            <span v-else-if="scope.row.status == '灏辩华'" class="Badge redSlot"></span>
-            <span v-else-if="scope.row.status == '宸插彇娑�'" class="Badge yellowSlot"></span> -->
             <span
               class="Badge"
               :class="{
-                greenSlot: scope.row.status == '瀹屾垚',
-                redSlot: scope.row.status == '宸插彇娑�',
-                blueSlot: scope.row.status == '灏辩华',
-                graySlot: scope.row.status == '鑽夌'
+                greenSlot: scope.row.status == '4',
+                redSlot: scope.row.status == '5',
+                blueSlot: scope.row.status == '3',
+                graySlot: scope.row.status == '1',
               }"
-              >{{ scope.row[item.prop] }}</span
+              >{{
+                item.isCallMethod
+                  ? item.getCallMethod(scope.row[item.prop], scope.row)
+                  : scope.row[item.prop]
+              }}</span
             >
           </div>
           <!-- 璋冪敤鏂规硶鏄剧ず鏂囧瓧 -->
           <div v-else-if="item.isCallMethod">
-            <span>{{ item.getCallMethod(scope.row[item.prop], scope.row) }}</span>
+            <span>{{
+              item.getCallMethod(scope.row[item.prop], scope.row)
+            }}</span>
           </div>
           <!-- 灏忎簬褰撳墠鏃堕棿鏄剧ず涓嶅悓棰滆壊 -->
           <span
             v-else-if="item.date"
-            :style="{ color: new Date().getTime() > new Date(scope.row[item.prop]).getTime() ? '#D23F3A' : '#606266' }"
+            :style="{
+              color:
+                new Date().getTime() > new Date(scope.row[item.prop]).getTime()
+                  ? '#D23F3A'
+                  : '#606266',
+            }"
             >{{ timeAgo(scope.row[item.prop]) }}</span
           >
+          <div v-else-if="item.conversion">
+            <span>{{ item.getStatus(scope.row[item.prop]) }}</span>
+          </div>
           <span
             v-else-if="item.isClick && scope.row[item.prop]"
             :class="item.className ? item.className : 'sel-name'"
             @click="selCommonClick(scope.row)"
             >{{ scope.row[item.prop] }}</span
           >
+          <span v-else-if="item.propType == 'mulitple'">
+            {{
+              scope.row[item.prop][item.propTwo]
+                ? scope.row[item.prop][item.propTwo]
+                : "--"
+            }}
+          </span>
           <span :class="item.className ? item.className : ''" v-else>{{
-            scope.row[item.prop] ? scope.row[item.prop] : scope.row[item.prop] === 0 ? scope.row[item.prop] : "--"
+            scope.row[item.prop]
+              ? scope.row[item.prop]
+              : scope.row[item.prop] === 0
+              ? scope.row[item.prop]
+              : "--"
           }}</span>
         </template>
       </el-table-column>
@@ -81,15 +116,22 @@
     <div class="overSpread1" v-show="iscolopen" @click="onMaskClick"></div>
     <div v-if="showCheckcol" class="styleBtn">
       <i @click="checkcol()" class="label">...</i>
-      <el-checkbox-group v-model="showcolList" v-show="iscolopen" class="checkbox-group" @change="selCeckBoxList">
-        <el-checkbox v-for="item in tableList.allcol" :label="item" :key="item">{{ item }} </el-checkbox>
+      <el-checkbox-group
+        v-model="showcolList"
+        v-show="iscolopen"
+        class="checkbox-group"
+        @change="selCeckBoxList"
+      >
+        <el-checkbox v-for="item in tableList.allcol" :label="item" :key="item"
+          >{{ item }}
+        </el-checkbox>
       </el-checkbox-group>
     </div>
   </div>
 </template>
 
 <script>
-import { timeago } from "@/common/config/index"
+import { timeago } from "@/common/config/index";
 export default {
   name: "TableCommonView",
   props: {
@@ -102,116 +144,162 @@
           showStyle: true,
           tableInfomation: [], // 鎺ュ彛杩斿洖鏁版嵁
           showcol: [],
+          countcol: [],
           allcol: [],
           highlight: false,
           tableColumn: [
             // table琛ㄥ崟
-            { label: "", prop: "", min: 200, tooltip: true }
-          ]
-        }
+            { label: "", prop: "", min: 200, tooltip: true },
+          ],
+        };
       },
       showcol: {
         typeof: Array,
-        default: () => []
-      }
+        default: () => [],
+      },
     },
     // 鍚堝苟鍗曞厓鏍�
     rowData: {
       type: Array,
       default: () => {
-        return []
-      }
+        return [];
+      },
     },
     // 鍔犺浇鐨刲oading
     loading: {
       type: Boolean,
-      default: false
+      default: false,
     },
     // 閫変腑鐨勬牱寮�
     selectClassRow: {
       type: Object,
       default: () => {
-        return {}
-      }
+        return {};
+      },
     },
     showCheckcol: {
       type: Boolean,
-      default: true
-    }
+      default: true,
+    },
+    showSummary: {
+      type: Boolean,
+      default: false,
+    },
   },
   data() {
     return {
       iscolopen: false,
-      showcolList: this.tableList.showcol
-    }
+      showcolList: this.tableList.showcol,
+    };
   },
   watch: {},
   computed: {},
   beforeUpdate() {},
   methods: {
     onMaskClick() {
-      this.iscolopen = false
+      this.iscolopen = false;
     },
     // 鍚堝苟鍗曞厓鏍�
     objectSpanMethod({ row, column, rowIndex, columnIndex }) {
-      row
-      column
+      row;
+      column;
       if (this.rowData && this.rowData.length > 0) {
         // 浜у搧BOM 琛ㄦ牸鐗规畩澶勭悊 鍚堝苟鍗曞厓鏍�
         if (columnIndex < 5 || columnIndex == 9) {
-          const _row = this.rowData[rowIndex]
-          const _col = _row > 0 ? 1 : 0
+          const _row = this.rowData[rowIndex];
+          const _col = _row > 0 ? 1 : 0;
           return {
             rowspan: _row,
-            colspan: _col
-          }
+            colspan: _col,
+          };
         }
       }
     },
     tableRowClick(row) {
-      this.$emit("tableRowClick", row)
+      this.$emit("tableRowClick", row);
     },
     handleReserve(row) {
-      return row._id ? row._id : row.id
+      return row._id ? row._id : row.id;
     },
     handleSelectionChange(val) {
-      this.$emit("getSelectArray", val)
+      this.$emit("getSelectArray", val);
     },
     // 鍏叡璇︽儏
     selCommonClick(row) {
-      this.$emit("selCommonClick", row)
+      this.$emit("selCommonClick", row);
     },
     // 閫夋嫨鍒�
     checkcol() {
-      this.iscolopen = !this.iscolopen
+      this.iscolopen = !this.iscolopen;
     },
     closeCheckbox() {
-      let label = document.querySelector(".label")
+      let label = document.querySelector(".label");
       if (label) {
-        this.iscolopen = false
+        this.iscolopen = false;
       }
     },
     selCeckBoxList(val) {
-      this.$emit("selTableCol", val)
+      this.$emit("selTableCol", val);
     },
     // 鍗曢�夎鐩稿叧
     tableRowClassName({ row }) {
       if (Object.keys(this.selectClassRow).length > 0) {
         if (row.id == this.selectClassRow.id) {
-          return "onSelect"
+          return "onSelect";
         }
       }
-      this.$emit("tableRowClassName", row)
+      this.$emit("tableRowClassName", row);
     },
     timeAgo(val) {
-      return timeago(val)
-    }
-  }
-}
+      return timeago(val);
+    },
+    //姹傚拰
+    getSummaries(param) {
+      if (this.tableList.countcol && this.tableList.countcol.length > 0) {
+        const { columns, data } = param;
+        const sums = [];
+        columns.forEach((column, index) => {
+          if (index === 0) {
+            sums[index] = " ";
+            return;
+          }
+          this.tableList.countcol.forEach((countcols) => {
+            if (column.label === countcols) {
+              const values = data.map((item) => Number(item[column.property]));
+              if (!values.every((value) => isNaN(value))) {
+                sums[index] = values.reduce((prev, curr) => {
+                  const value = Number(curr);
+                  if (!isNaN(value)) {
+                    return prev + curr;
+                  } else {
+                    return prev;
+                  }
+                }, 0);
+                sums[index] =
+                  this.tableList.tableColumn[index - 1].unit + "" + sums[index];
+              } else {
+                sums[index] = "";
+              }
+            } else {
+              return;
+            }
+          });
+        });
+        return sums;
+      }
+    },
+  },
+};
 </script>
 
 <!-- Add "scoped" attribute to limit CSS to this component only -->
 <style lang="scss" scoped>
+.table_height {
+  height: 100%;
+}
+.el-table__body-wrapper{
+  height: 100%;
+}
 .table-view {
   position: relative;
   height: 100%;
@@ -292,5 +380,8 @@
     border-top-right-radius: 12px;
     overflow: auto;
   }
+  .el-table__body-wrapper {
+    // height: ;
+  }
 }
 </style>

--
Gitblit v1.8.0