From d548850b4835050ef2d28d801286b3b43bd40f8e Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期二, 29 八月 2023 17:26:53 +0800
Subject: [PATCH] 新增弹窗样式

---
 src/components/makepager/CommonFormTableView.vue |  339 ++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 219 insertions(+), 120 deletions(-)

diff --git a/src/components/makepager/CommonFormTableView.vue b/src/components/makepager/CommonFormTableView.vue
index aa3b08e..91b6d2c 100644
--- a/src/components/makepager/CommonFormTableView.vue
+++ b/src/components/makepager/CommonFormTableView.vue
@@ -19,103 +19,99 @@
           </template>
           <!-- column鏍峰紡 -->
           <template slot-scope="scope">
-            <template v-if="!detailEnter">
-              <el-form-item
-                v-if="item.input"
-                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"
+            <!-- <template v-if="!detailEnter"> -->
+            <el-form-item
+              v-if="item.input"
+              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"
+                @change="
+                  (val) => {
+                    commonInputChange(val, item.prop, scope.row)
+                  }
+                "
+              ></el-input>
+            </el-form-item>
+            <el-form-item v-else-if="item.productName" label=" " :prop="'tableData.' + scope.$index + '.' + item.prop">
+              <div class="custom-name">
+                <el-autocomplete
+                  v-model="scope.row[item.prop]"
+                  :fetch-suggestions="querySearchAsync"
+                  value-key="name"
                   size="mini"
-                  @change="
+                  @select="
                     (val) => {
-                      commonInputChange(val, item.prop, scope.row)
+                      handleSelectClient(val, item.prop, scope.row)
                     }
                   "
-                ></el-input>
-              </el-form-item>
-              <el-form-item
-                v-else-if="item.productName"
-                label=" "
-                :prop="'tableData.' + scope.$index + '.' + item.prop"
-              >
-                <div class="custom-name">
-                  <el-autocomplete
-                    v-model="scope.row[item.prop]"
-                    :fetch-suggestions="querySearchAsync"
-                    value-key="name"
-                    size="mini"
-                    @select="
-                      (val) => {
-                        handleSelectClient(val, item.prop, scope.row)
-                      }
-                    "
-                  ></el-autocomplete>
-                  <div class="common-select-btn" @click="selClientClick(scope.row, item.prop)">
-                    <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i>
-                  </div>
-                  <div class="common-select-btn" @click="clearupClient(scope.row)">
-                    <i class="el-icon-edit-outline" title="娓呴櫎"></i>
-                  </div>
+                ></el-autocomplete>
+                <div class="common-select-btn" @click="selClientClick(scope.row, item.prop)">
+                  <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i>
                 </div>
-              </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>
-              <el-form-item
-                v-else-if="item.inputNumber"
-                label=" "
-                :prop="'tableData.' + scope.$index + '.' + item.prop"
-                :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
-              >
-                <el-input-number
-                  v-model="scope.row[item.prop]"
-                  placeholder=""
-                  :min="0"
-                  :controls="false"
-                  size="mini"
-                  style="width: 100%; margin-right: 5px"
-                  @change="
-                    (val) => {
-                      commonInputChange(val, item.prop, scope.row)
-                    }
-                  "
-                ></el-input-number>
-              </el-form-item>
-              <el-form-item
-                v-else-if="item.inputFloat"
-                label=" "
-                :prop="'tableData.' + scope.$index + '.' + item.prop"
-                :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
-              >
-                <el-input-number
-                  v-model="scope.row[item.prop]"
-                  placeholder=""
-                  :min="0"
-                  :precision="2"
-                  :controls="false"
-                  size="mini"
-                  style="width: 100%; margin-right: 5px"
-                  @change="
-                    (val) => {
-                      commonInputChange(val, item.prop, scope.row)
-                    }
-                  "
-                ></el-input-number>
-              </el-form-item>
-              <span v-else>{{ scope.row[item.prop] }}</span>
-            </template>
+                <div class="common-select-btn" @click="clearupClient(scope.row)">
+                  <i class="el-icon-remove-outline" title="娓呴櫎"></i>
+                </div>
+              </div>
+            </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>
+            <el-form-item
+              v-else-if="item.inputNumber"
+              label=" "
+              :prop="'tableData.' + scope.$index + '.' + item.prop"
+              :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
+            >
+              <el-input-number
+                v-model="scope.row[item.prop]"
+                placeholder=""
+                :min="0"
+                :controls="false"
+                size="mini"
+                style="width: 100%; margin-right: 5px"
+                @change="
+                  (val) => {
+                    commonInputChange(val, item.prop, scope.row)
+                  }
+                "
+              ></el-input-number>
+            </el-form-item>
+            <el-form-item
+              v-else-if="item.inputFloat"
+              label=" "
+              :prop="'tableData.' + scope.$index + '.' + item.prop"
+              :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
+            >
+              <el-input-number
+                v-model="scope.row[item.prop]"
+                placeholder=""
+                :min="0"
+                :precision="2"
+                :controls="false"
+                size="mini"
+                style="width: 100%; margin-right: 5px"
+                @change="
+                  (val) => {
+                    commonInputChange(val, item.prop, scope.row)
+                  }
+                "
+              ></el-input-number>
+            </el-form-item>
             <span v-else>{{ scope.row[item.prop] }}</span>
+            <!-- </template> -->
+            <!-- <span v-else>{{ scope.row[item.prop] }}</span> -->
           </template>
         </el-table-column>
       </el-table>
@@ -134,7 +130,7 @@
 </template>
 
 <script>
-import { getProductList } from "@/api/common/other"
+import { getProductListFromGrpc } from "@/api/productManage/product"
 import SelectCommonDialog from "@/views/other/commonDialog/SelectCommonDialog"
 export default {
   name: "CommmonFormTableView",
@@ -164,9 +160,14 @@
           total: false,
           refundable: false,
           sumProp: [],
+          titleProp: ["#", "浜у搧鍚嶇О"],
           mergeNumber: 1
         }
       }
+    },
+    recalculateShow: {
+      type: [Boolean],
+      defalut: true
     }
   },
   data() {
@@ -179,33 +180,25 @@
         title: "",
         infomation: {}
       },
-      productIndex: 0,
-      isRecalculate: true
+      productIndex: 0
     }
   },
   created() {
     this.getProductList()
     this.tableList = this.productTableList
-    if (this.tableList.tableData.length === 1 && this.tableList.tableData[0].name === "") {
-      this.isRecalculate = false
-    } else {
-      this.isRecalculate = true
-    }
   },
   computed: {},
   methods: {
     // 浜у搧鍚嶇О
     async getProductList() {
-      await getProductList({
-        productName: "",
-        productNumber: "",
+      await getProductListFromGrpc({
         page: 1,
-        pageSize: 5
+        pageSize: 100
       }).then((res) => {
         console.log(res.data)
         if (res.data.code === 200) {
-          if (res.data.data.data && res.data.data.data.length > 0) {
-            this.productList = res.data.data.data
+          if (res.data.data.list && res.data.data.list.length > 0) {
+            this.productList = res.data.data.list
           }
         }
       })
@@ -216,6 +209,61 @@
     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) {
+      const { columns, data } = param
+      const sums = []
+      columns.forEach((column, index) => {
+        // // 鏇存敼琛屽悕绉�
+        if (index === this.showSummary.mergeNumber) {
+          sums[index] = "灏忚:"
+          return
+        }
+        const title = this.showSummary.titleProp
+        // 鍘婚櫎鏌愪簺涓嶉渶瑕佽绠楃殑鏁版嵁
+        if (title.includes(column.label)) {
+          sums[index] = ""
+          return
+        }
+        // 鎶婂綋鍓嶈〃鏍兼暟鎹腑鍚屼釜鍒嗙被鐨勬暟鎹敹闆嗚捣鏉�
+        const values = data.map((item) => Number(item[column.property]))
+        // 杩囨护鎺�
+        if (!values.every((value) => Number.isNaN(value))) {
+          sums[index] = ` ${values.reduce((prev, curr) => {
+            const value = Number(curr)
+            if (!Number.isNaN(value)) {
+              const num = prev + curr
+              return Number(num.toFixed(2))
+            } else {
+              return Number(prev.toFixed(2))
+            }
+          }, 0)}`
+        } else {
+          sums[index] = ""
+        }
+        if (column.property === "total") {
+          this.total = sums[index]
+        }
+      })
+      return sums
+    },
+
     // 鏁板瓧鎹㈣涓洪噾棰濇樉绀烘牸寮�
     number_format(number, decimals, dec_point, thousands_sep) {
       decimals = 2 //杩欓噷榛樿璁剧疆淇濈暀涓や綅灏忔暟锛屼篃鍙互娉ㄩ噴杩欏彞閲囩敤浼犲叆鐨勫弬鏁�
@@ -255,7 +303,6 @@
     },
     // 娓呯┖
     empty() {
-      this.isRecalculate = false
       this.$emit("emptyProductClick")
     },
     // 閫夋嫨浜у搧鍚嶇О鐩稿叧鏂规硶
@@ -271,16 +318,41 @@
     },
     handleSelectClient(item, prop, row) {
       // this.clientId = item.id
-      this.isRecalculate = true
       console.log(item, prop, row)
       this.tableList.tableData.map((ite) => {
         if (ite.name === item.name) {
+          ite.ID = row.ID
           ite.amount = item.amount || 1
           ite.number = item.number
-          ite.price = item.price
-          ite.total = item.amount ? item.amount * item.price : 1 * item.price
+          ite.purchasePrice = item.purchasePrice
+          ite.unit = item.unit
+          ite.deliveryTime = item.deliveryTime
+          ite.shippingDuration = item.shippingDuration
+          ite.modelNumber = item.modelNumber
         }
       })
+      if (this.detailEnter) {
+        this.setEditName(item, row.ID)
+      }
+    },
+    setEditName(item, ID) {
+      let selRow = {
+        ID: ID,
+        deliveryTime: item.deliveryTime,
+        maximumStock: item.maximumStock,
+        minimumStock: item.minimumStock,
+        modelNumber: item.modelNumber,
+        name: item.name,
+        number: item.number,
+        productType: item.productType,
+        purchasePrice: item.purchasePrice,
+        remark: item.remark,
+        shippingDuration: item.shippingDuration,
+        specifications: item.specifications,
+        supplierId: item.supplierId,
+        unit: item.unit
+      }
+      this.$emit("selCommonName", selRow)
     },
     selClientClick(row, prop) {
       console.log(row, prop)
@@ -291,28 +363,55 @@
     selClient(item) {
       console.log(item)
       console.log(this.tableList.tableData)
-      this.isRecalculate = true
-      // this.editConfig.infomation.client_name = row.name
-      this.tableList.tableData.map((ite, index) => {
-        if (index === this.productIndex) {
+      if (this.detailEnter) {
+        this.tableList.tableData.map((ite) => {
+          ite.ID
           ite.name = item.name
           ite.amount = item.amount || 1
           ite.number = item.number
-          ite.price = item.price
-          ite.total = item.amount ? item.amount * item.price : 1 * item.price
-        }
-      })
+          ite.purchasePrice = item.purchasePrice
+          ite.unit = item.unit
+          ite.deliveryTime = item.deliveryTime
+          ite.shippingDuration = item.shippingDuration
+        })
+        this.setEditName(item, this.tableList.tableData[0].ID)
+      } else {
+        this.tableList.tableData.map((ite, index) => {
+          if (index === this.productIndex) {
+            ite.name = item.name
+            ite.amount = item.amount || 1
+            ite.number = item.number
+            ite.purchasePrice = item.purchasePrice
+            ite.unit = item.unit
+            ite.deliveryTime = item.deliveryTime
+            ite.shippingDuration = item.shippingDuration
+          }
+        })
+      }
     },
     // 娓呴櫎宸查�夋嫨鐢ㄦ埛
     clearupClient(row) {
       this.productIndex = row.productId - 1
       this.tableList.tableData.map((ite, index) => {
-        if (index === this.productIndex) {
+        console.log(row.productId)
+        if (row.productId && row.productId >= 0) {
+          if (index === this.productIndex) {
+            ite.name = ""
+            ite.amount = 1
+            ite.number = ""
+            ite.purchasePrice = 0
+            ite.unit = ""
+            ite.deliveryTime = 0
+            ite.shippingDuration = 0
+          }
+        } else {
           ite.name = ""
           ite.amount = 1
           ite.number = ""
-          ite.price = 0
-          ite.total = 0
+          ite.purchasePrice = 0
+          ite.unit = ""
+          ite.deliveryTime = 0
+          ite.shippingDuration = 0
         }
       })
       this.$emit("clearupProduct", this.tableList.tableData)

--
Gitblit v1.8.0