From 2260b47026088827f177bec0931ded0fd73d97ba Mon Sep 17 00:00:00 2001
From: zuozhengqing <a13193816592@163.com>
Date: 星期二, 26 三月 2024 10:48:43 +0800
Subject: [PATCH] 销售明细单发货弹窗样式优化

---
 src/components/makepager/CommonFormTableView.vue |  235 +++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 159 insertions(+), 76 deletions(-)

diff --git a/src/components/makepager/CommonFormTableView.vue b/src/components/makepager/CommonFormTableView.vue
index d8ecea7..0fb598e 100644
--- a/src/components/makepager/CommonFormTableView.vue
+++ b/src/components/makepager/CommonFormTableView.vue
@@ -3,6 +3,7 @@
     <el-form ref="form" :model="tableList" :show-message="false" label-position="right">
       <el-table
         ref="fromTable"
+        :border="isBorder"
         :data="tableList.tableData"
         :show-summary="showSummary.show"
         :summary-method="getSummaries"
@@ -44,7 +45,7 @@
                   :disabled="!isOperate"
                   @change="
                     (val) => {
-                      commonInputChange(val, item.prop, scope.row,scope)
+                      commonInputChange(val, item.prop, scope.row, scope)
                     }
                   "
                 ></el-input>
@@ -67,15 +68,23 @@
                       }
                     "
                   ></el-autocomplete>
-                  <div class="common-select-btn" v-if="isOperate" @click="selClientClick(scope.row, item.prop)">
-                    <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i>
+
+                  <div
+                    v-if="scope.row[item.prop] && scope.row[item.prop].length > 0 && isOperate"
+                    class="common-select-btn"
+                    @click="handleEditClient(scope, item.prop)"
+                  >
+                    <i class="el-icon-edit" title="缂栬緫"></i>
                   </div>
                   <div
-                    v-if="scope.row[item.prop] && scope.row[item.prop].length > 0&&isOperate"
+                    v-if="scope.row[item.prop] && scope.row[item.prop].length > 0 && isOperate"
                     class="common-select-btn"
-                    @click="clearupClient(scope.row)"
+                    @click="clearupClient(scope)"
                   >
                     <i class="el-icon-remove-outline" title="娓呴櫎"></i>
+                  </div>
+                  <div class="common-select-btn" v-else @click="selClientClick(scope, item.prop)">
+                    <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i>
                   </div>
                 </div>
               </el-form-item>
@@ -86,7 +95,13 @@
                 :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 :disabled="!isOperate" v-model="scope.row[item.prop]" type="date" size="mini" style="width: 110px">
+                <el-date-picker
+                  :disabled="!isOperate"
+                  v-model="scope.row[item.prop]"
+                  type="date"
+                  size="mini"
+                  style="width: 110px"
+                >
                 </el-date-picker>
               </el-form-item>
               <el-form-item
@@ -105,7 +120,7 @@
                   style="width: 100%; margin-right: 5px"
                   @change="
                     (val) => {
-                      commonInputChange(val, item.prop, scope.row,scope)
+                      commonInputChange(val, item.prop, scope.row, scope)
                     }
                   "
                 ></el-input-number>
@@ -127,23 +142,39 @@
                   style="width: 100%; margin-right: 5px"
                   @change="
                     (val) => {
-                      commonInputChange(val, item.prop, scope.row,scope)
+                      commonInputChange(val, item.prop, scope.row, scope)
                     }
                   "
                 ></el-input-number>
               </el-form-item>
               <span v-else>
-                <template v-if="pageName=='quotation'&&item.prop=='profit'">
-                  {{ (scope.row.price&&scope.row.cost)?Number(scope.row.price)-Number(scope.row.cost):'' }}
-                </template>
-                <template v-if="pageName=='quotation'&&item.prop=='margin'">
-                  {{ (scope.row.price&&scope.row.cost)?((Number(scope.row.price)-Number(scope.row.cost))*100/Number(scope.row.cost)).toFixed(2):'' }}
-                </template>
-                <template v-else>
+                <template>
                   {{ scope.row[item.prop] }}
                 </template>
               </span>
             </template>
+            <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"
+                  :disabled="!isOperate"
+                  :controls="false"
+                  size="mini"
+                  style="width: 100%; margin-right: 5px"
+                  @change="
+                    (val) => {
+                      commonInputChange(val, item.prop, scope.row, scope)
+                    }
+                  "
+                ></el-input-number>
+              </el-form-item>
             <el-form-item
               v-else-if="item.inputNumber && selectBox"
               label=" "
@@ -160,7 +191,7 @@
                 style="width: 100%; margin-right: 5px"
                 @change="
                   (val) => {
-                    commonInputChange(val, item.prop, scope.row,scope)
+                    commonInputChange(val, item.prop, scope.row, scope)
                   }
                 "
               ></el-input-number>
@@ -168,14 +199,9 @@
             <span v-else style="text-align: right">{{ scope.row[item.prop] }}</span>
           </template>
         </el-table-column>
-        <el-table-column  label="鎿嶄綔" width="40" align="center">
+        <el-table-column label="鎿嶄綔" width="40" v-if="!detailEnter" align="center">
           <template slot-scope="scope">
-            <el-button
-              type="text"
-              size="small"
-              :disabled="!isOperate"
-              @click="deleteClick(scope)"
-              >鍒犻櫎</el-button>
+            <el-button type="text" size="small" :disabled="!isOperate" @click="deleteClick(scope)">鍒犻櫎</el-button>
           </template>
         </el-table-column>
         <slot name="tableButton" />
@@ -185,7 +211,7 @@
       <el-button size="small" type="primary" :disabled="!isOperate" @click="add">鏂板</el-button>
       <!-- <el-button size="small" type="primary" disabled>瀵煎叆鏄庣粏</el-button> -->
       <el-button size="small" type="primary" :disabled="!isOperate" @click="empty">娓呯┖</el-button>
-      <el-button size="small" type="primary" @click="recalculate" :disabled="(isRecalculate&&!isOperate) ? false : true"
+      <el-button size="small" type="primary" @click="recalculate" :disabled="isRecalculate && !isOperate ? false : true"
         >閲嶇畻</el-button
       >
     </div>
@@ -205,8 +231,10 @@
     <SelectCommonDialog
       v-if="editSelCommonConfig.editVisible"
       :edit-common-config="editSelCommonConfig"
+      :selectBoxList="tableList.tableData"
       :quotationNumber="quotationNumber"
       @selClient="selClient"
+      @getSelectArray="getSelectArray"
     />
   </div>
 </template>
@@ -227,19 +255,28 @@
       default: false
     },
     // 閭d釜椤甸潰 鐢ㄦ潵鍒ゆ柇璁$畻鏂瑰紡
-    pageName:{
-      type:String,
-      default:''
+    pageName: {
+      type: String,
+      default: ""
+    },
+    // 鍒楄〃鏂板鏄惁澶氶��
+    addTypeIdMultiple: {
+      type: Boolean,
+      default: false
     },
     // 鏍规嵁鎶ヤ环鍗曟煡璇骇鍝�
-    quotationNumber:{
-      type:[String,Number],
-      default:''
+    quotationNumber: {
+      type: [String, Number],
+      default: ""
     },
-    // 鏄惁鍙互鎿嶄綔 娣诲姞绛� 
-    isOperate:{
-      type:Boolean,
-      default:true,
+    // 鏄惁鍙互鎿嶄綔 娣诲姞绛�
+    isOperate: {
+      type: Boolean,
+      default: true
+    },
+    isBorder:{
+      type: Boolean,
+      default: false
     },
     productTableList: {
       type: Object,
@@ -274,6 +311,7 @@
       tableList: [],
       editSelCommonConfig: {
         editVisible: false,
+        isSelectBox: false,
         title: "",
         infomation: {}
       },
@@ -285,15 +323,26 @@
     if (!this.selectBox) {
       this.getProductList()
     }
-    this.tableList = this.productTableList
-    if (this.tableList.tableData.length === 1 && this.tableList.tableData[0].name === "") {
-      this.isRecalculate = false
-    } else {
-      this.isRecalculate = true
+    this.getTableInfo()
+  },
+  watch:{
+    "productTableList": {
+      handler() {
+        this.getTableInfo()
+      },
+      immediate: true
     }
   },
   computed: {},
   methods: {
+    getTableInfo(){
+      this.tableList = this.productTableList
+      if (this.tableList.tableData.length === 1 && this.tableList.tableData[0].name === "") {
+        this.isRecalculate = false
+      } else {
+        this.isRecalculate = true
+      }
+    },
     // 浜у搧鍚嶇О
     async getProductList() {
       await getProductList({
@@ -343,13 +392,13 @@
           sums[index] = "灏忚:"
           return
         }
-        const title = ["#", "浜у搧鍚嶇О",'浜у搧缂栧彿','鍗曚綅','閿�鍞崟浠�','鎴愭湰鍗曚环']
+        const title = ["#", "浜у搧鍚嶇О", "浜у搧缂栧彿", "鍗曚綅", "閿�鍞崟浠�", "鎴愭湰鍗曚环"]
         // 鍘婚櫎鏌愪簺涓嶉渶瑕佽绠楃殑鏁版嵁
         if (title.includes(column.label)) {
           sums[index] = ""
           return
         }
-        if(this.pageName=='quotation'&&column.label=='姣涘埄'){
+        if (this.pageName == "quotation" && column.label == "姣涘埄") {
           sums[index] = ""
           return
         }
@@ -405,9 +454,16 @@
     },
     // 鏂板
     add() {
-      this.$emit("addProductClick")
+      if (this.addTypeIdMultiple) {
+        this.productIndex = this.tableList.tableData.length
+        this.editSelCommonConfig.title = "浜у搧鍚嶇О"
+        this.editSelCommonConfig.isSelectBox = true
+        this.editSelCommonConfig.editVisible = true
+      } else {
+        this.$emit("addProductClick")
+      }
     },
-    commonInputChange(val, prop, row,scope) {
+    commonInputChange(val, prop, row, scope) {
       if (prop === "amount") {
         this.tableList.tableData.map((ite) => {
           if (ite.name === row.name) {
@@ -415,16 +471,28 @@
           }
         })
       }
-      if(this.pageName=='quotation'&&prop=='cost'&&scope.row.cost){
-        let value=scope.row.cost
-        let reg2 =
-            /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
-          if (!reg2.test(value)||value==0) {
-            this.$message.error("鎴愭湰鍗曚环闇�瑕佸~鍐欏ぇ浜�0鐨�2浣嶅皬鏁帮紒")
-          } 
+      if (this.pageName == "quotation" && prop == "cost" && scope.row.cost) {
+        let value = scope.row.cost
+        let reg2 = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
+        if (!reg2.test(value) || value == 0) {
+          this.$message.error("鎴愭湰鍗曚环闇�瑕佸~鍐欏ぇ浜�0鐨�2浣嶅皬鏁帮紒")
+          return true
+        }
         this.$forceUpdate()
       }
-      this.$emit("inputContent", val, prop, row)
+      if (this.pageName == "quotation") {
+        if (prop == "price" || prop == "cost") {
+          if (scope.row.price && scope.row.cost) {
+            let profit = Number(scope.row.price) - Number(scope.row.cost)
+            scope.row.profit = profit + ""
+            let margin = (((Number(scope.row.price) - Number(scope.row.cost)) * 100) / Number(scope.row.cost)).toFixed(
+              2
+            )
+            scope.row.margin = margin + ""
+          }
+        }
+      }
+      this.$emit("inputContent", val, prop, row, scope)
     },
     // 娓呯┖
     empty() {
@@ -432,11 +500,11 @@
       this.$emit("emptyProductClick")
     },
     // 鍒犻櫎
-    deleteClick(scope){
-      this.tableList.tableData.splice(scope.$index,1)
-      this.$forceUpdate();
-      this.$message.success('鍒犻櫎闄ゆ垚鍔燂紒')
-      this.$emit("deleteClick",scope)
+    deleteClick(scope) {
+      this.tableList.tableData.splice(scope.$index, 1)
+      this.$forceUpdate()
+      this.$message.success("鍒犻櫎鎴愬姛锛�")
+      this.$emit("deleteClick", scope)
     },
     // 閲嶇畻
     recalculate() {
@@ -478,31 +546,47 @@
         }
       })
     },
-    selClientClick(row, prop) {
-      console.log(row, prop)
-      this.productIndex = row.productId - 1
+    // 鏂板
+    selClientClick(scope, prop) {
+      console.log(scope, prop)
+      this.productIndex = scope.$index
       this.editSelCommonConfig.title = "浜у搧鍚嶇О"
+      this.editSelCommonConfig.isSelectBox = true
+      this.editSelCommonConfig.editVisible = true
+    },
+    // 缂栬緫
+    handleEditClient(scope, prop) {
+      console.log(scope, prop)
+      this.productIndex = scope.$index
+      this.editSelCommonConfig.title = "浜у搧鍚嶇О"
+      this.editSelCommonConfig.isSelectBox = false
       this.editSelCommonConfig.editVisible = true
     },
     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) {
-          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.unit = item.unit
-        }
-      })
+      let list = this.tableList.tableData.map((item) => item.number)
+      if (list.findIndex((v) => v == item.number) == -1) {
+        this.isRecalculate = true
+        // this.editConfig.infomation.client_name = row.name
+        this.tableList.tableData.map((ite, index) => {
+          if (index === this.productIndex) {
+            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.unit = item.unit
+          }
+        })
+      } else {
+        this.$message.error("涓嶈兘閫夋嫨閲嶅鐨勪骇鍝侊紝 璇烽噸鏂伴�夋嫨")
+      }
+    },
+    getSelectArray(val) {
+      this.$emit("getSelectArray", val, this.productIndex)
     },
     // 娓呴櫎宸查�夋嫨鐢ㄦ埛
-    clearupClient(row) {
-      this.productIndex = row.productId - 1
+    clearupClient(scope) {
+      this.productIndex = scope.$index
       this.tableList.tableData.map((ite, index) => {
         if (index === this.productIndex) {
           ite.name = ""
@@ -533,7 +617,6 @@
 <!-- Add "scoped" attribute to limit CSS to this component only -->
 <style lang="scss" scoped>
 .page-view {
-  
   .el-form-item {
     margin-bottom: 0;
     .custom-name {

--
Gitblit v1.8.0