From ebddc02611b0373c1d5bfa342bd781fb5eb82009 Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期二, 01 八月 2023 14:23:31 +0800
Subject: [PATCH] 侧边栏样式机销售明细单增加销售机会选择弹窗

---
 src/components/makepager/TableCommonView.vue |  163 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 152 insertions(+), 11 deletions(-)

diff --git a/src/components/makepager/TableCommonView.vue b/src/components/makepager/TableCommonView.vue
index 904f826..129ae2b 100644
--- a/src/components/makepager/TableCommonView.vue
+++ b/src/components/makepager/TableCommonView.vue
@@ -7,10 +7,13 @@
       tooltip-effect="dark"
       style="width: 100%"
       :lazy="tableList.lazy"
+      :show-summary="showSummary.show"
+      :summary-method="getSummaries"
+      :span-method="arraySpanMethod"
       @selection-change="handleSelectionChange"
       :header-cell-style="{ background: '#ECF4FF', color: '#666' }"
     >
-      <el-table-column type="selection" width="55"> </el-table-column>
+      <el-table-column v-if="selectBox" type="selection" width="40"> </el-table-column>
       <el-table-column
         v-for="(item, i) in tableList.tableColumn"
         :key="i"
@@ -18,22 +21,44 @@
         :label="item.label"
         :width="item.width"
         :min-width="item.min"
-        sortable
+        show-overflow-tooltip
+        :sortable="item.sortable"
       >
+        <template slot-scope="scope">
+          <span v-if="item.price">{{ "锟�" + number_format(scope.row[item.prop], 2, ".", ",") }}</span>
+          <div v-else-if="item.status" :class="scope.row.status">{{ scope.row[item.prop] }}</div>
+          <span v-else-if="item.isTime">{{
+            dateFormat("YYYY-mm-dd HH:MM:SS", scope.row[item.prop]) === "1900-01-01 08:00:00"
+              ? "--"
+              : dateFormat("YYYY-mm-dd HH:MM:SS", scope.row[item.prop])
+          }}</span>
+          <span v-else-if="item.isClick" class="sel-name" @click="selNameClick(scope.row)">{{
+            scope.row[item.prop]
+          }}</span>
+          <span v-else>{{ scope.row[item.prop] ? scope.row[item.prop] : "--" }}</span>
+        </template>
       </el-table-column>
       <slot name="tableButton" />
+      <div slot="empty">
+        <el-empty description="鏆傛棤鏁版嵁"></el-empty>
+      </div>
     </el-table>
   </div>
 </template>
 
 <script>
 export default {
-  name: "PagerView",
+  name: "TableCommonView",
   props: {
+    selectBox: {
+      type: Boolean,
+      default: true
+    },
     tableList: {
       type: Object,
       default: () => {
         return {
+          selectBox: true,
           tableInfomation: [], // 鎺ュ彛杩斿洖鏁版嵁
           tableColumn: [
             // table琛ㄥ崟
@@ -41,25 +66,124 @@
           ]
         }
       }
+    },
+    showSummary: {
+      type: Object,
+      default: () => {
+        return {
+          show: false,
+          sumProp: [],
+          mergeNumber: 1
+        }
+      }
     }
   },
   data() {
     return {}
   },
-  computed: {
-    maxHeight() {
-      if (this.tableList.height) {
-        return `calc(100vh - ${this.tableList.height})`
-      }
-      return undefined
-    }
-  },
+  computed: {},
   methods: {
     handleReserve(row) {
       return row._id ? row._id : row.id
     },
     handleSelectionChange(val) {
       this.$emit("getSelectArray", val)
+    },
+    // 琛屽悎骞�
+    arraySpanMethod() {
+      if (this.showSummary.show) {
+        this.$nextTick(() => {
+          if (this.$refs.table.$el) {
+            var current = this.$refs.table.$el
+              .querySelector(".el-table__footer-wrapper")
+              .querySelector(".el-table__footer")
+            var cell = current.rows[0].cells
+            for (let i = 0; i < this.showSummary.mergeNumber; i++) {
+              cell[i].style.display = "none"
+            }
+            cell[this.showSummary.mergeNumber].classList.remove("is-left")
+            cell[this.showSummary.mergeNumber].colSpan = this.showSummary.mergeNumber.toString()
+          }
+        })
+      }
+    },
+    // 閲戦鍚堣
+    getSummaries(param) {
+      if (this.showSummary.show) {
+        const { columns, data } = param
+        const sums = []
+        columns.forEach((column, index) => {
+          if (index === this.showSummary.mergeNumber) {
+            sums[index] = "鏈〉鎬昏"
+          }
+          const values = data.map((item) => Number(item[column.property]))
+          if (this.showSummary.sumProp.includes(column.property)) {
+            sums[index + 1] = values.reduce((prev, curr) => {
+              const value = Number(curr)
+              if (!isNaN(value)) {
+                return prev + curr
+              } else {
+                return prev
+              }
+            }, 0)
+            sums[index + 1]
+          }
+        })
+        // console.log(sums)
+        return sums
+      }
+    },
+    // 鏁板瓧鎹㈣涓洪噾棰濇樉绀烘牸寮�
+    number_format(number, decimals, dec_point, thousands_sep) {
+      decimals = 2 //杩欓噷榛樿璁剧疆淇濈暀涓や綅灏忔暟锛屼篃鍙互娉ㄩ噴杩欏彞閲囩敤浼犲叆鐨勫弬鏁�
+      /*
+       * 鍙傛暟璇存槑锛�
+       * number锛氳鏍煎紡鍖栫殑鏁板瓧
+       * decimals锛氫繚鐣欏嚑浣嶅皬鏁�
+       * dec_point锛氬皬鏁扮偣绗﹀彿
+       * thousands_sep锛氬崈鍒嗕綅绗﹀彿
+       * */
+      number = (number + "").replace(/[^0-9+-Ee.]/g, "")
+      var n = !isFinite(+number) ? 0 : +number,
+        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
+        sep = typeof thousands_sep === "undefined" ? "," : thousands_sep,
+        dec = typeof dec_point === "undefined" ? "." : dec_point
+      var s = n.toString().split(".")
+      var re = /(-?\d+)(\d{3})/
+      while (re.test(s[0])) {
+        s[0] = s[0].replace(re, "$1" + sep + "$2")
+      }
+      if ((s[1] || "").length < prec) {
+        s[1] = s[1] || ""
+        s[1] += new Array(prec - s[1].length + 1).join("0")
+      } else {
+        s[1] = s[1].substring(0, prec) //灏忔暟鐐逛綅鏁拌秴鍑洪暱搴︽椂鎴彇鍓嶉潰鐨勪綅鏁�
+      }
+      return s.join(dec)
+    },
+    // 鏃堕棿鏄剧ず
+    dateFormat(fmt, date) {
+      let ret = ""
+      date = new Date(date)
+      const opt = {
+        "Y+": date.getFullYear().toString(), // 骞�
+        "m+": (date.getMonth() + 1).toString(), // 鏈�
+        "d+": date.getDate().toString(), // 鏃�
+        "H+": date.getHours().toString(), // 鏃�
+        "M+": date.getMinutes().toString(), // 鍒�
+        "S+": date.getSeconds().toString() // 绉�
+        // 鏈夊叾浠栨牸寮忓寲瀛楃闇�姹傚彲浠ョ户缁坊鍔狅紝蹇呴』杞寲鎴愬瓧绗︿覆
+      }
+      for (let k in opt) {
+        ret = new RegExp("(" + k + ")").exec(fmt)
+        if (ret) {
+          fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, "0"))
+        }
+      }
+      return fmt
+    },
+    selNameClick(row) {
+      this.$emit("selCommonClick", row)
     }
   }
 }
@@ -71,5 +195,22 @@
   margin-top: 20px;
   margin-right: 10px;
   margin-bottom: 40px;
+  .blue {
+    width: 70px;
+    text-align: center;
+    color: #fff;
+    background-color: $color-primary;
+    border-radius: 4px;
+  }
+  .sel-name {
+    color: $color-primary;
+    cursor: pointer;
+  }
+}
+::v-deep {
+  .el-table__footer-wrapper tbody td.el-table__cell {
+    background-color: #fff;
+    text-align: right;
+  }
 }
 </style>

--
Gitblit v1.8.0