From 8e7cd003414ea4ca8f42fb3171de18f8839ece17 Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期一, 10 七月 2023 18:04:27 +0800
Subject: [PATCH] 登录页面和查询分类设置

---
 src/components/makepager/CommonFormTableView.vue |  196 ++++++++++++++++++++++++++++++++++++------------
 1 files changed, 146 insertions(+), 50 deletions(-)

diff --git a/src/components/makepager/CommonFormTableView.vue b/src/components/makepager/CommonFormTableView.vue
index 125520c..c8ce837 100644
--- a/src/components/makepager/CommonFormTableView.vue
+++ b/src/components/makepager/CommonFormTableView.vue
@@ -1,65 +1,50 @@
 <template>
   <div class="page-view">
     <el-form ref="form" :model="productTableList" :show-message="false" label-position="right">
-      <el-table :data="productTableList.tableData" style="width: 100%">
-        <el-table-column prop="id" label="#" width="30"></el-table-column>
-        <el-table-column prop="productName" label="浜у搧鍚嶇О">
-          <template slot-scope="scope">
-            <el-form-item
-              label=" "
-              :prop="'tableData.' + scope.$index + '.productName'"
-              :rules="[{ required: true, message: '杈撳叆涓嶈兘涓虹┖' }]"
-            >
-              <el-input v-model.trim="scope.row.productName" maxlength="50" size="mini" style="width: 70px"></el-input>
-            </el-form-item>
+      <el-table
+        :data="productTableList.tableData"
+        :show-summary="showSummary.show"
+        :summary-method="getSummaries"
+        :span-method="arraySpanMethod"
+        style="width: 100%"
+      >
+        <el-table-column
+          v-for="(item, i) in productTableList.tableColumn"
+          :key="i"
+          :prop="item.prop"
+          :label="item.label"
+          :width="item.width"
+          :min-width="item.min"
+          align="right"
+        >
+          <!-- 琛ㄥご鏍峰紡 -->
+          <template slot="header">
+            <span v-if="item.isRequird" style="color: #f56c6c">*</span>
+            <span>{{ item.label }}</span>
           </template>
-        </el-table-column>
-        <el-table-column prop="productNumber" label="浜у搧缂栧彿"></el-table-column>
-        <el-table-column prop="startDate" label="鏈嶅姟寮�濮嬫棩" width="140">
+          <!-- column鏍峰紡 -->
           <template slot-scope="scope">
             <el-form-item
+              v-if="item.input"
               label=" "
-              :prop="'tableData.' + scope.$index + '.startDate'"
-              :rules="[{ required: true, message: '杈撳叆涓嶈兘涓虹┖' }]"
+              :prop="'tableData.' + scope.$index + '.' + item.prop"
+              :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
             >
-              <el-date-picker
-                v-model="scope.row.startDate"
-                size="mini"
-                type="date"
-                placeholder="閫夋嫨鏃ユ湡"
-                style="width: 90px"
-              >
+              <el-input v-model.trim="scope.row[item.prop]" maxlength="50" size="mini"></el-input>
+            </el-form-item>
+            <el-form-item
+              v-else-if="item.date"
+              label=" "
+              :prop="'tableData.' + scope.$index + '.' + item.prop"
+              :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
+            >
+              <!-- <el-input v-model.trim="scope.row[item.prop]" maxlength="50" size="mini"></el-input> -->
+              <el-date-picker v-model="scope.row[item.prop]" type="date" size="mini" style="width: 110px">
               </el-date-picker>
             </el-form-item>
+            <span v-else>{{ scope.row[item.prop] }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="endDate" label="鏈嶅姟鍒版湡鏃�" width="140">
-          <template slot-scope="scope">
-            <el-form-item
-              label=" "
-              :prop="'tableData.' + scope.$index + '.endDate'"
-              :rules="[{ required: true, message: '杈撳叆涓嶈兘涓虹┖' }]"
-            >
-              <el-date-picker
-                v-model="scope.row.endDate"
-                size="mini"
-                type="date"
-                placeholder="閫夋嫨鏃ユ湡"
-                style="width: 90px"
-              >
-              </el-date-picker>
-            </el-form-item>
-          </template>
-        </el-table-column>
-        <el-table-column prop="number" label="鏁伴噺"></el-table-column>
-        <el-table-column prop="" label="鍚◣鍗曚环"> </el-table-column>
-        <el-table-column prop="" label="涓嶅惈绋庡崟浠�"> </el-table-column>
-        <el-table-column prop="" label="鎶樻墸鐜�(%)"></el-table-column>
-        <el-table-column prop="" label="鎶樻墸棰�"> </el-table-column>
-        <el-table-column prop="" label="绋�(閿�鍞�)"> </el-table-column>
-        <el-table-column prop="" label="瀹為檯鍚◣鍗曚环"></el-table-column>
-        <el-table-column prop="" label="浠风◣鍚堣"> </el-table-column>
-        <el-table-column prop="" label="鎻忚堪"> </el-table-column>
       </el-table>
     </el-form>
     <div style="margin: 10px">
@@ -67,6 +52,18 @@
       <el-button size="small" type="primary">瀵煎叆鏄庣粏</el-button>
       <el-button size="small" type="primary">娓呯┖</el-button>
       <el-button size="small" type="primary">閲嶇畻</el-button>
+    </div>
+    <div v-if="showSummary.total || showSummary.refundable" style="height: 42px; line-height: 42px">
+      <el-row :gutter="10">
+        <el-col v-if="showSummary.total" :span="2" :offset="22">
+          <span style="font-weight: bold">鍚堣</span>
+          <span style="margin-left: 10px">0.00</span>
+        </el-col>
+        <el-col v-if="showSummary.refundable" :span="2" :offset="22">
+          <span style="font-weight: bold">搴旈��娆�</span>
+          <span style="margin-left: 10px">0.00</span>
+        </el-col>
+      </el-row>
     </div>
   </div>
 </template>
@@ -84,6 +81,18 @@
             // table琛ㄥ崟
             { label: "", prop: "", min: 200, tooltip: true }
           ]
+        }
+      }
+    },
+    showSummary: {
+      type: Object,
+      default: () => {
+        return {
+          show: false,
+          total: false,
+          refundable: false,
+          sumProp: [],
+          mergeNumber: 1
         }
       }
     }
@@ -105,6 +114,76 @@
     },
     handleSelectionChange(val) {
       this.$emit("getSelectArray", val)
+    },
+    // 琛屽悎骞�
+    arraySpanMethod() {
+      if (this.showSummary.show) {
+        this.$nextTick(() => {
+          if (this.$refs.table) {
+            var current = this.$refs.table.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 (column.property === this.showSummary.sumProp) {
+          if (this.showSummary.sumProp.includes(column.property)) {
+            sums[index] = values.reduce((prev, curr) => {
+              const value = Number(curr)
+              if (!isNaN(value)) {
+                return this.number_format(prev + curr, 2, ".", ",")
+              } else {
+                return this.number_format(prev, 2, ".", ",")
+              }
+            }, 0)
+            sums[index]
+          }
+        })
+        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)
     }
   }
 }
@@ -117,4 +196,21 @@
     margin-bottom: 0;
   }
 }
+::v-deep {
+  .el-form-item__label {
+    display: none;
+  }
+  .el-table__footer-wrapper tbody td.el-table__cell {
+    background-color: #fff;
+    text-align: right;
+    font-weight: bold;
+  }
+  .el-input--suffix .el-input__inner {
+    padding-right: 0px;
+  }
+  .el-table .cell,
+  .el-table th.el-table__cell > .cell {
+    padding: 0 5px;
+  }
+}
 </style>

--
Gitblit v1.8.0