From 96fdf32bd5612b6c16dcbcc8352a9f54adcc8e7e Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期五, 18 八月 2023 16:26:59 +0800
Subject: [PATCH] 產品相關及bug修復

---
 src/views/service/serviceContract/DetailServiceContract.vue       |   32 
 src/views/service/clientServiceOrder/DetailClientServiceOrder.vue |    2 
 src/views/sales/salesDetails/AddSalesDetailsDialog.vue            |  164 ++--
 src/components/makepager/TableCommonView.vue                      |   10 
 src/views/sales/salesDetails/DetailSpecification.vue              |   32 
 src/views/other/payment/receipt/index.vue                         |   10 
 src/views/client/followupRecords/index.vue                        |    2 
 src/views/sales/salesReturn/DetailReturn.vue                      |   32 
 src/views/sales/subOrder/DetailSubOrder.vue                       |   32 
 src/views/other/payment/collectionPlan/AddCollectionPlan.vue      |  195 ++---
 src/views/client/contacts/DetailContacts.vue                      |    2 
 src/views/sales/salesDetails/index.vue                            |   21 
 src/views/service/serviceContract/AddServiceContractDialog.vue    |  134 ++--
 src/views/sales/refundForm/DetailRefundForm.vue                   |   38 
 src/views/client/client/DetailClientManage.vue                    |   12 
 src/views/sales/generatePlan/DetailGeneratePlan.vue               |    6 
 src/components/makepager/CommonFormTableView.vue                  |  239 ++++++
 src/views/other/commonDialog/SelectCommonDialog.vue               |    5 
 src/views/sales/contractManage/DetailContractManage.vue           |    6 
 src/views/sales/masterOrder/AddMasterOrderDialog.vue              |  106 +-
 src/views/sales/salesReturn/AddSalesReturnDialog.vue              |  171 ++++-
 src/views/sales/refundForm/AddRefundFormDialog.vue                |  161 +++-
 src/views/service/serviceFollowup/DetailServiceFollowup.vue       |    6 
 src/views/client/salesLead/DetailSalesLead.vue                    |   56 +
 src/views/sales/salesOpportunity/AddSalesOpportunityDialog.vue    |   12 
 src/views/sales/quotation/AddQuotationDialog.vue                  |  116 +-
 src/views/sales/quotation/DetailQuotation.vue                     |   32 
 src/views/sales/subOrder/AddSubOrderDialog.vue                    |  205 ++----
 src/views/other/payment/collectionPlan/index.vue                  |   10 
 src/views/sales/contractManage/AddContractManageDialog.vue        |    4 
 src/views/sales/quotation/index.vue                               |    6 
 31 files changed, 1,009 insertions(+), 850 deletions(-)

diff --git a/src/components/makepager/CommonFormTableView.vue b/src/components/makepager/CommonFormTableView.vue
index 128caa4..b955bf0 100644
--- a/src/components/makepager/CommonFormTableView.vue
+++ b/src/components/makepager/CommonFormTableView.vue
@@ -1,15 +1,15 @@
 <template>
   <div class="page-view">
-    <el-form ref="form" :model="productTableList" :show-message="false" label-position="right">
+    <el-form ref="form" :model="tableList" :show-message="false" label-position="right">
       <el-table
-        :data="productTableList.tableData"
+        :data="tableList.tableData"
         :show-summary="showSummary.show"
         :summary-method="getSummaries"
         :span-method="arraySpanMethod"
         style="width: 100%"
       >
         <el-table-column
-          v-for="(item, i) in productTableList.tableColumn"
+          v-for="(item, i) in tableList.tableColumn"
           :key="i"
           :prop="item.prop"
           :label="item.label"
@@ -43,6 +43,32 @@
                 ></el-input>
               </el-form-item>
               <el-form-item
+                v-else-if="item.productName"
+                label=" "
+                :prop="'tableData.' + scope.$index + '.' + item.prop"
+                :rules="[{ required: item.isRequird ? true : false, message: '浜у搧鍚嶇О涓嶈兘涓虹┖' }]"
+              >
+                <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>
+                </div>
+              </el-form-item>
+              <el-form-item
                 v-else-if="item.date"
                 label=" "
                 :prop="'tableData.' + scope.$index + '.' + item.prop"
@@ -51,6 +77,47 @@
                 <!-- <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>
@@ -77,12 +144,21 @@
         </el-col>
       </el-row>
     </div>
+    <!-- 鍚堝悓璁㈠崟 -->
+    <SelectCommonDialog
+      v-if="editSelCommonConfig.editVisible"
+      :edit-common-config="editSelCommonConfig"
+      @selClient="selClient"
+    />
   </div>
 </template>
 
 <script>
+import { getProductList } from "@/api/common/other"
+import SelectCommonDialog from "@/views/other/commonDialog/SelectCommonDialog"
 export default {
   name: "CommmonFormTableView",
+  components: { SelectCommonDialog },
   props: {
     detailEnter: {
       type: Boolean,
@@ -115,11 +191,39 @@
   },
   data() {
     return {
-      total: 0
+      total: 0,
+      productList: [],
+      tableList: [],
+      editSelCommonConfig: {
+        editVisible: false,
+        title: "",
+        infomation: {}
+      },
+      productIndex: 0
     }
+  },
+  created() {
+    this.getProductList()
+    this.tableList = this.productTableList
   },
   computed: {},
   methods: {
+    // 浜у搧鍚嶇О
+    async getProductList() {
+      await getProductList({
+        productName: "",
+        productNumber: "",
+        page: 1,
+        pageSize: 5
+      }).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
+          }
+        }
+      })
+    },
     handleReserve(row) {
       return row._id ? row._id : row.id
     },
@@ -144,32 +248,41 @@
     },
     // 鍚堣
     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)
-            if (column.property === "total") {
-              this.total = sums[index]
+      const { columns, data } = param
+      const sums = []
+      columns.forEach((column, index) => {
+        // // 鏇存敼琛屽悕绉�
+        if (index === this.showSummary.mergeNumber) {
+          sums[index] = "灏忚:"
+          return
+        }
+        const title = ["#"]
+        // 鍘婚櫎鏌愪簺涓嶉渶瑕佽绠楃殑鏁版嵁
+        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))
             }
-            sums[index]
-          }
-        })
-        return sums
-      }
+          }, 0)}`
+        } else {
+          sums[index] = ""
+        }
+        if (column.property === "total") {
+          this.total = sums[index]
+        }
+      })
+      return sums
     },
     // 鏁板瓧鎹㈣涓洪噾棰濇樉绀烘牸寮�
     number_format(number, decimals, dec_point, thousands_sep) {
@@ -223,6 +336,63 @@
           this.$emit("recalculateProductClick")
         })
         .catch(() => {})
+    },
+    // 閫夋嫨浜у搧鍚嶇О鐩稿叧鏂规硶
+    querySearchAsync(queryString, cb) {
+      var restaurants = this.productList
+      var results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants
+      cb(results)
+    },
+    createStateFilter(queryString) {
+      return (state) => {
+        return state.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0
+      }
+    },
+    handleSelectClient(item, prop, row) {
+      // this.clientId = item.id
+      console.log(item, prop, row)
+      this.tableList.tableData.map((ite) => {
+        if (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
+        }
+      })
+    },
+    selClientClick(row, prop) {
+      console.log(row, prop)
+      this.productIndex = row.productId - 1
+      this.editSelCommonConfig.title = "浜у搧鍚嶇О"
+      this.editSelCommonConfig.editVisible = true
+    },
+    selClient(item) {
+      console.log(item)
+      console.log(this.tableList.tableData)
+      // 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
+        }
+      })
+    },
+    // 娓呴櫎宸查�夋嫨鐢ㄦ埛
+    clearupClient(row) {
+      this.productIndex = row.productId - 1
+      this.tableList.tableData.map((ite, index) => {
+        if (index === this.productIndex) {
+          ite.name = ""
+          ite.amount = 1
+          ite.number = ""
+          ite.price = 0
+          ite.total = 0
+        }
+      })
+      this.$emit("clearupProduct", this.tableList.tableData)
     }
   }
 }
@@ -233,6 +403,14 @@
 .page-view {
   .el-form-item {
     margin-bottom: 0;
+    .custom-name {
+      display: flex;
+      .common-select-btn {
+        margin-left: 5px;
+        font-size: 18px;
+        cursor: pointer;
+      }
+    }
   }
 }
 ::v-deep {
@@ -251,5 +429,8 @@
   .el-table th.el-table__cell > .cell {
     padding: 0 5px;
   }
+  .el-input__inner {
+    text-align: left;
+  }
 }
 </style>
diff --git a/src/components/makepager/TableCommonView.vue b/src/components/makepager/TableCommonView.vue
index 5abfbd8..e390ee3 100644
--- a/src/components/makepager/TableCommonView.vue
+++ b/src/components/makepager/TableCommonView.vue
@@ -92,6 +92,16 @@
             </ul>
             <div v-else class="no-product">{{ "--" }}</div>
           </div>
+          <div v-else-if="item.isProductCommon" class="product-view">
+            <ul v-if="scope.row.products && scope.row.products.length > 0">
+              <li v-for="(item, index) in scope.row.products" :key="index">
+                <div :class="scope.row.products.length === 1 ? 'name-view no-bottom' : 'name-view'">
+                  {{ item.prop === "price" ? item.price : item.total }}
+                </div>
+              </li>
+            </ul>
+            <div v-else class="no-product">{{ "--" }}</div>
+          </div>
           <span v-else>{{ scope.row[item.prop] ? scope.row[item.prop] : "--" }}</span>
         </template>
       </el-table-column>
diff --git a/src/views/client/client/DetailClientManage.vue b/src/views/client/client/DetailClientManage.vue
index ac60d6b..d71dab4 100644
--- a/src/views/client/client/DetailClientManage.vue
+++ b/src/views/client/client/DetailClientManage.vue
@@ -306,11 +306,11 @@
           leftStr: "鎵�灞炲叕娴�",
           leftValue: "",
           rightStr: "涓嬫鍥炶鏃ユ湡",
-          rightValue: this.processTime(item.next_visit_time)
+          rightValue: item.next_visit_time
         },
         {
           leftStr: "鏈�鏅氭湇鍔″埌鏈熸棩",
-          leftValue: this.processTime(item.latest_service_time),
+          leftValue: item.latest_service_time,
           rightStr: "鍒涘缓鏃堕棿",
           rightValue: ""
         },
@@ -364,7 +364,7 @@
         },
         {
           leftStr: "娉ㄥ唽鏃堕棿",
-          leftValue: this.processTime(item.registration_time),
+          leftValue: item.registration_time,
           rightStr: "娉ㄥ唽璧勯噾",
           rightValue: item.RegisteredCapital.name
         },
@@ -421,12 +421,6 @@
       } else if (value === "annex") {
         this.isAnnexExpand = !this.isAnnexExpand
       }
-    },
-    // 澶勭悊鏃堕棿
-    processTime(dateTime) {
-      return this.dateFormat("YYYY-mm-dd HH:MM:SS", dateTime) === "1900-01-01 08:00:00"
-        ? "--"
-        : this.dateFormat("YYYY-mm-dd HH:MM:SS", dateTime)
     },
     // 鏃堕棿鏄剧ず
     dateFormat(fmt, date) {
diff --git a/src/views/client/contacts/DetailContacts.vue b/src/views/client/contacts/DetailContacts.vue
index 74d6407..b375e17 100644
--- a/src/views/client/contacts/DetailContacts.vue
+++ b/src/views/client/contacts/DetailContacts.vue
@@ -203,7 +203,7 @@
         },
         {
           leftStr: "涓嬫鍥炶鏃ユ湡",
-          leftValue: "",
+          leftValue: item.Client.next_visit_time,
           rightStr: "鏈�鏂拌仈绯绘棩鏈�",
           rightValue: ""
         },
diff --git a/src/views/client/followupRecords/index.vue b/src/views/client/followupRecords/index.vue
index 7227a7e..9922a00 100644
--- a/src/views/client/followupRecords/index.vue
+++ b/src/views/client/followupRecords/index.vue
@@ -153,7 +153,7 @@
           { label: "鑱旂郴浜哄鍚�", prop: "contact_name", min: 100, isContactClick: true }, // 鑱旂郴浜哄鍚�
           { label: "瀹㈡埛鐘舵��", prop: "client_status", min: 100 }, // 瀹㈡埛鐘舵��
           { label: "鑱旂郴鏂瑰紡", prop: "contact_information_name", min: 100 }, // 鑱旂郴鏂瑰紡
-          { label: "鑱旂郴浜烘棩鏈�", prop: "follow_time", min: 130 }, // 鑱旂郴浜烘棩鏈�
+          { label: "鑱旂郴鏃ユ湡", prop: "follow_time", min: 130 }, // 鑱旂郴浜烘棩鏈�
           { label: "涓嬫鍥炶鏃ユ湡", prop: "next_follow_time", min: 130 }, // 涓嬫鍥炶鏃ユ湡
           { label: "璐熻矗浜�", prop: "member_name", min: 110 }, // 璐熻矗浜�
           { label: "璺熻繘璁板綍", prop: "record", min: 130 } // 璺熻繘璁板綍
diff --git a/src/views/client/salesLead/DetailSalesLead.vue b/src/views/client/salesLead/DetailSalesLead.vue
index 4a7745e..8a3a847 100644
--- a/src/views/client/salesLead/DetailSalesLead.vue
+++ b/src/views/client/salesLead/DetailSalesLead.vue
@@ -61,6 +61,10 @@
                   </div>
                 </li>
               </ul>
+              <div class="business_scope">
+                <div class="content-title">{{ "鏈�鏂拌繘灞�" }}</div>
+                <div class="content-data">{{ record ? record : "--" }}</div>
+              </div>
             </div>
           </div>
           <!-- 鍦板潃淇℃伅 -->
@@ -145,11 +149,12 @@
       addressInfoList: [],
       isRemarkExpand: true, // 澶囨敞淇℃伅
       remarkInfoList: [],
-      addConfig: {}
+      addConfig: {},
+      record: ""
     }
   },
   created() {
-    this.setData()
+    this.setData(this.detailConfig.infomation)
     this.addConfig = {
       id_name: "sales_leads_id",
       id: this.detailConfig.infomation.id,
@@ -160,31 +165,34 @@
   },
   mounted() {},
   methods: {
-    setData() {
+    setData(item) {
+      if (item.FollowRecord && item.FollowRecord.length > 0) {
+        this.record = item.FollowRecord[0].record
+      }
       this.basicInfoList = [
         {
           leftStr: "瀹㈡埛鍚嶇О",
-          leftValue: this.detailConfig.infomation.name,
+          leftValue: item.name,
           rightStr: "閿�鍞嚎绱㈢紪鍙�",
-          rightValue: this.detailConfig.infomation.number
+          rightValue: item.number
         },
         {
           leftStr: "鑱旂郴浜哄鍚�",
-          leftValue: this.detailConfig.infomation.contact_name,
+          leftValue: item.contact_name,
           rightStr: "鑱旂郴浜鸿亴鍔�",
-          rightValue: this.detailConfig.infomation.contact_position
+          rightValue: item.contact_position
         },
         {
           leftStr: "鎵嬫満鍙风爜",
-          leftValue: this.detailConfig.infomation.contact_phone,
+          leftValue: item.contact_phone,
           rightStr: "鍟嗘満鐘舵��",
           rightValue: "鏂板缓"
         },
         {
           leftStr: "鍟嗘満鏉ユ簮",
-          leftValue: this.detailConfig.infomation.sales_resources,
+          leftValue: item.sales_resources,
           rightStr: "璐熻矗浜�",
-          rightValue: this.detailConfig.infomation.member_name
+          rightValue: item.member_name
         },
         {
           leftStr: "鍒嗛厤鏃ユ湡",
@@ -209,13 +217,13 @@
         {
           leftStr: "鏈仈绯诲ぉ鏁�",
           leftValue: "",
-          rightStr: "鏈�鏂版帹杩涙椂闂�",
+          rightStr: "鏈�鏂拌仈绯绘棩鏈�",
           rightValue: ""
         },
         {
           leftStr: "鏈�鏂拌繘灞�",
-          leftValue: "",
-          rightStr: "鏈�鏂拌仈绯绘棩鏈�",
+          leftValue: this.record,
+          rightStr: "",
           rightValue: ""
         }
       ]
@@ -224,11 +232,11 @@
           leftStr: "鍥藉",
           leftValue: "涓浗",
           rightStr: "鐪佷唤",
-          rightValue: this.detailConfig.infomation.Province.name
+          rightValue: item.Province.name
         },
         {
           leftStr: "鍩庡競",
-          leftValue: this.detailConfig.infomation.City.name,
+          leftValue: item.City.name,
           rightStr: "",
           rightValue: ""
         }
@@ -335,6 +343,24 @@
               width: 100%;
             }
           }
+          .business_scope {
+            display: flex;
+            align-items: center;
+            font-size: 14px;
+            min-height: 40px;
+            .content-title {
+              width: 320px;
+              text-align: right;
+              color: #555;
+            }
+            .content-data {
+              flex: 1;
+              padding: 5px;
+              text-align: left;
+              margin-left: 25px;
+              color: #333;
+            }
+          }
         }
       }
     }
diff --git a/src/views/other/commonDialog/SelectCommonDialog.vue b/src/views/other/commonDialog/SelectCommonDialog.vue
index fcc993e..60238cb 100644
--- a/src/views/other/commonDialog/SelectCommonDialog.vue
+++ b/src/views/other/commonDialog/SelectCommonDialog.vue
@@ -145,9 +145,8 @@
         this.tableList = {
           tableInfomation: [],
           tableColumn: [
-            { label: "浜у搧鍚嶇О", prop: "Name", isClick: true },
-            { label: "浜у搧缂栧彿", prop: "Number" },
-            { label: "瑙勬牸鍨嬪彿", prop: "MaterialMode" }
+            { label: "浜у搧鍚嶇О", prop: "name", isClick: true },
+            { label: "浜у搧缂栧彿", prop: "number" }
           ]
         }
         this.searchSel = { value: "Name", label: "浜у搧鍚嶇О" }
diff --git a/src/views/other/payment/collectionPlan/AddCollectionPlan.vue b/src/views/other/payment/collectionPlan/AddCollectionPlan.vue
index 64b634c..bf6b7cd 100644
--- a/src/views/other/payment/collectionPlan/AddCollectionPlan.vue
+++ b/src/views/other/payment/collectionPlan/AddCollectionPlan.vue
@@ -13,8 +13,8 @@
         <div class="collection-view">
           <div class="label">鏀舵璁″垝绫诲瀷</div>
           <el-select v-model="editConfig.infomation.collectionType" size="mini">
-            <el-option label="璁″垝鏀舵鏃ユ湡" value="1"></el-option>
-            <el-option label="椤圭洰鐘舵��" value="2"></el-option>
+            <el-option label="璁″垝鏀舵鏃ユ湡" :value="1"></el-option>
+            <el-option label="椤圭洰鐘舵��" :value="2"></el-option>
           </el-select>
         </div>
         <div class="collection-view">
@@ -191,11 +191,13 @@
       sourceId: this.editCommonConfig.infomation.id,
       principalId: 0,
       planAmount: 0, // 璁″垝閲戦
-      firstDate: this.getCurrentDate(1)
+      firstDate: this.getCurrentDate(1),
+      collectionType: 1,
+      tableInfomation: []
     }
   },
   created() {
-    console.log(this.editCommonConfig.sourceType)
+    console.log(this.editCommonConfig)
     this.setData()
     this.setTableForm()
     this.getCommonData()
@@ -204,7 +206,7 @@
     // 璁剧疆鍒濆鍊�
     setData() {
       this.editConfig.infomation = {
-        collectionType: "1",
+        collectionType: this.collectionType,
         moneyType: "浜烘皯甯�",
         amount: this.amount.toFixed(2)
       }
@@ -261,63 +263,9 @@
       this.editConfig.visible = false
     },
     setTableForm() {
+      this.setTableInfomation(this.firstDate)
       this.tableData = {
-        tableInfomation: [
-          {
-            amount: this.amount,
-            amountReceivable: this.amount * 0.3,
-            amountReceived: 0,
-            amountTotal: 0,
-            collectionDate: this.getCurrentDate(1),
-            collectionType: 0,
-            fileId: 0,
-            id: 0,
-            moneyType: "浜烘皯甯�",
-            percent: 30,
-            principalId: this.principalId,
-            remark: "",
-            sourceId: this.sourceId,
-            sourceType: this.sourceType,
-            status: 1,
-            term: 1
-          },
-          {
-            amount: this.amount,
-            amountReceivable: this.amount * 0.5,
-            amountReceived: 0,
-            amountTotal: 0,
-            collectionDate: this.getCurrentDate(2),
-            collectionType: 0,
-            fileId: 0,
-            id: 0,
-            moneyType: "浜烘皯甯�",
-            percent: 50,
-            principalId: this.principalId,
-            remark: "",
-            sourceId: this.sourceId,
-            sourceType: this.sourceType,
-            status: 1,
-            term: 2
-          },
-          {
-            amount: this.amount,
-            amountReceivable: this.amount * 0.2,
-            amountReceived: 0,
-            amountTotal: 0,
-            collectionDate: this.getCurrentDate(3),
-            collectionType: 0,
-            fileId: 0,
-            id: 0,
-            moneyType: "浜烘皯甯�",
-            percent: 20,
-            principalId: this.principalId,
-            remark: "",
-            sourceId: this.sourceId,
-            sourceType: this.sourceType,
-            status: 1,
-            term: 3
-          }
-        ],
+        tableInfomation: this.tableInfomation,
         tableColumn: [
           { label: "鎿嶄綔", prop: "operate", width: 60 },
           { label: "鏈熸", prop: "term", inputNumber: true, width: 90 },
@@ -327,6 +275,65 @@
           { label: "澶囨敞", prop: "remark", input: true }
         ]
       }
+    },
+    setTableInfomation(date) {
+      console.log(this.sourceId)
+      this.tableInfomation = [
+        {
+          amount: this.amount,
+          amountReceivable: this.amount * 0.3,
+          amountReceived: 0,
+          amountTotal: 0,
+          collectionDate: this.setDate(date, 0),
+          collectionType: this.editConfig.infomation.collectionType,
+          fileId: 0,
+          id: 0,
+          moneyType: "浜烘皯甯�",
+          percent: 30,
+          principalId: this.principalId,
+          remark: "",
+          sourceId: this.sourceId,
+          sourceType: this.sourceType,
+          status: 1,
+          term: 1
+        },
+        {
+          amount: this.amount,
+          amountReceivable: this.amount * 0.5,
+          amountReceived: 0,
+          amountTotal: 0,
+          collectionDate: this.setDate(date, 1),
+          collectionType: this.editConfig.infomation.collectionType,
+          fileId: 0,
+          id: 0,
+          moneyType: "浜烘皯甯�",
+          percent: 50,
+          principalId: this.principalId,
+          remark: "",
+          sourceId: this.sourceId,
+          sourceType: this.sourceType,
+          status: 1,
+          term: 2
+        },
+        {
+          amount: this.amount,
+          amountReceivable: this.amount * 0.2,
+          amountReceived: 0,
+          amountTotal: 0,
+          collectionDate: this.setDate(date, 2),
+          collectionType: this.editConfig.infomation.collectionType,
+          fileId: 0,
+          id: 0,
+          moneyType: "浜烘皯甯�",
+          percent: 20,
+          principalId: this.principalId,
+          remark: "",
+          sourceId: this.sourceId,
+          sourceType: this.sourceType,
+          status: 1,
+          term: 3
+        }
+      ]
     },
     // 閲嶇畻
     recalculateClick() {
@@ -341,7 +348,7 @@
             amountReceived: 0,
             amountTotal: 0,
             collectionDate: this.setDate(this.firstDate, 0),
-            collectionType: 0,
+            collectionType: this.editConfig.infomation.collectionType,
             fileId: 0,
             id: 0,
             moneyType: "浜烘皯甯�",
@@ -362,7 +369,7 @@
             amountReceived: 0,
             amountTotal: 0,
             collectionDate: this.setDate(this.firstDate, 0),
-            collectionType: 0,
+            collectionType: this.editConfig.infomation.collectionType,
             fileId: 0,
             id: 0,
             moneyType: "浜烘皯甯�",
@@ -380,7 +387,7 @@
             amountReceived: 0,
             amountTotal: 0,
             collectionDate: this.setDate(this.firstDate, 1),
-            collectionType: 0,
+            collectionType: this.editConfig.infomation.collectionType,
             fileId: 0,
             id: 0,
             moneyType: "浜烘皯甯�",
@@ -394,62 +401,8 @@
           }
         ]
       } else if (this.allTerms === 3) {
-        this.tableData.tableInfomation = [
-          {
-            amount: this.amount,
-            amountReceivable: this.amount * 0.3,
-            amountReceived: 0,
-            amountTotal: 0,
-            collectionDate: this.setDate(this.firstDate, 0),
-            collectionType: 0,
-            fileId: 0,
-            id: 0,
-            moneyType: "浜烘皯甯�",
-            percent: 30,
-            principalId: this.principalId,
-            remark: "",
-            sourceId: this.sourceId,
-            sourceType: this.sourceType,
-            status: 1,
-            term: 1
-          },
-          {
-            amount: this.amount,
-            amountReceivable: this.amount * 0.5,
-            amountReceived: 0,
-            amountTotal: 0,
-            collectionDate: this.setDate(this.firstDate, 1),
-            collectionType: 0,
-            fileId: 0,
-            id: 0,
-            moneyType: "浜烘皯甯�",
-            percent: 50,
-            principalId: this.principalId,
-            remark: "",
-            sourceId: this.sourceId,
-            sourceType: this.sourceType,
-            status: 1,
-            term: 2
-          },
-          {
-            amount: this.amount,
-            amountReceivable: this.amount * 0.2,
-            amountReceived: 0,
-            amountTotal: 0,
-            collectionDate: this.setDate(this.firstDate, 2),
-            collectionType: 0,
-            fileId: 0,
-            id: 0,
-            moneyType: "浜烘皯甯�",
-            percent: 20,
-            principalId: this.principalId,
-            remark: "",
-            sourceId: this.sourceId,
-            sourceType: this.sourceType,
-            status: 1,
-            term: 3
-          }
-        ]
+        this.setTableInfomation(this.firstDate)
+        this.tableData.tableInfomation = this.tableInfomation
       }
     },
     delClick(row) {
@@ -482,6 +435,8 @@
     },
     principalClick(val) {
       this.principalId = val
+      this.setTableInfomation(this.firstDate)
+      this.tableData.tableInfomation = this.tableInfomation
     }
   }
 }
diff --git a/src/views/other/payment/collectionPlan/index.vue b/src/views/other/payment/collectionPlan/index.vue
index 02ab516..4f5ffa8 100644
--- a/src/views/other/payment/collectionPlan/index.vue
+++ b/src/views/other/payment/collectionPlan/index.vue
@@ -112,6 +112,7 @@
   },
   created() {
     this.setTable()
+    console.log(this.addConfig)
     if (!this.isDetail) {
       this.serviceContractId = 0
     } else {
@@ -148,15 +149,15 @@
         serviceContractId: this.serviceContractId
       })
         .then((res) => {
-          if (res.code === 200) {
-            if (res.data.list && res.data.list.length > 0) {
-              const list = res.data.list.map((item) => {
+          if (res.data.code === 200) {
+            if (res.data.data.data && res.data.data.data.length > 0) {
+              const list = res.data.data.data.map((item) => {
                 return {
                   ...item
                 }
               })
               this.tableList.tableInfomation = list || []
-              this.pagerOptions.totalCount = res.data.count
+              this.pagerOptions.totalCount = res.data.data.count
             } else {
               this.tableList.tableInfomation = []
             }
@@ -193,7 +194,6 @@
     // 鏂板缓
     addBtnClick() {
       if (this.tableList.tableInfomation && this.tableList.tableInfomation.length > 0) {
-        this.$message.success("璇ヨ鍗曞凡鍒涘缓鏀舵璁″垝")
         this.$confirm("璇ヨ鍗曞凡鍒涘缓鏀舵璁″垝", "鎻愮ず", {
           confirmButtonText: "纭畾",
           cancelButtonText: "鍙栨秷",
diff --git a/src/views/other/payment/receipt/index.vue b/src/views/other/payment/receipt/index.vue
index 2145240..63f0b6d 100644
--- a/src/views/other/payment/receipt/index.vue
+++ b/src/views/other/payment/receipt/index.vue
@@ -154,17 +154,17 @@
       })
         .then((res) => {
           console.log(res)
-          if (res.code === 200) {
-            if (res.data.list && res.data.list.length > 0) {
-              const list = res.data.list.map((item) => {
+          if (res.data.code === 200) {
+            if (res.data.data.data && res.data.data.data.length > 0) {
+              const list = res.data.data.data.map((item) => {
                 return {
                   ...item,
-                  paymentType_name: item.PaymentType.name,
+                  paymentType_name: item.paymentType.name,
                   principal_name: item.principal.username
                 }
               })
               this.tableList.tableInfomation = list || []
-              this.pagerOptions.totalCount = res.data.count
+              this.pagerOptions.totalCount = res.data.data.count
             } else {
               this.tableList.tableInfomation = []
             }
diff --git a/src/views/sales/contractManage/AddContractManageDialog.vue b/src/views/sales/contractManage/AddContractManageDialog.vue
index 9338216..2303dd3 100644
--- a/src/views/sales/contractManage/AddContractManageDialog.vue
+++ b/src/views/sales/contractManage/AddContractManageDialog.vue
@@ -128,11 +128,11 @@
             </el-row>
           </div> -->
           <!-- 灞曞紑鏀惰捣 -->
-          <div v-if="editConfig.title === '鏂板缓'" class="unflod-collapse" @click="unflodCollapseClick">
+          <!-- <div v-if="editConfig.title === '鏂板缓'" class="unflod-collapse" @click="unflodCollapseClick">
             <div>{{ unflodCollapseStr }}</div>
             <div v-if="isUnflod"><i class="el-icon-arrow-up"></i></div>
             <div v-else><i class="el-icon-arrow-down"></i></div>
-          </div>
+          </div> -->
           <!-- 閫夋嫨瀹℃壒娴佺▼ -->
           <!-- <div class="basic-info-title">閫夋嫨瀹℃壒娴佺▼</div>
           <div class="basic-info-view">
diff --git a/src/views/sales/contractManage/DetailContractManage.vue b/src/views/sales/contractManage/DetailContractManage.vue
index 7937296..1bf21f0 100644
--- a/src/views/sales/contractManage/DetailContractManage.vue
+++ b/src/views/sales/contractManage/DetailContractManage.vue
@@ -39,11 +39,11 @@
         <div class="tab-view">
           <el-tabs v-model="activeName" @tab-click="tabsClick">
             <el-tab-pane label="璇︽儏" name="first"></el-tab-pane>
-            <el-tab-pane label="闄勪欢绠$悊" name="annex">
-              <!-- <template slot="label">
+            <!-- <el-tab-pane label="闄勪欢绠$悊" name="annex"> -->
+            <!-- <template slot="label">
                 <div>璺熻繘璁板綍<el-badge type="primary" :value="2"> </el-badge></div>
               </template> -->
-            </el-tab-pane>
+            <!-- </el-tab-pane> -->
           </el-tabs>
         </div>
         <div v-if="activeName === 'first'" class="detail">
diff --git a/src/views/sales/generatePlan/DetailGeneratePlan.vue b/src/views/sales/generatePlan/DetailGeneratePlan.vue
index 772f613..3b4c7e2 100644
--- a/src/views/sales/generatePlan/DetailGeneratePlan.vue
+++ b/src/views/sales/generatePlan/DetailGeneratePlan.vue
@@ -17,11 +17,11 @@
         <div class="tab-view">
           <el-tabs v-model="activeName" @tab-click="tabsClick">
             <el-tab-pane label="璇︽儏" name="first"></el-tab-pane>
-            <el-tab-pane label="闄勪欢绠$悊" name="annex">
-              <!-- <template slot="label">
+            <!-- <el-tab-pane label="闄勪欢绠$悊" name="annex"> -->
+            <!-- <template slot="label">
                 <div>璺熻繘璁板綍<el-badge type="primary" :value="2"> </el-badge></div>
               </template> -->
-            </el-tab-pane>
+            <!-- </el-tab-pane> -->
           </el-tabs>
         </div>
         <div v-if="activeName === 'first'" class="detail">
diff --git a/src/views/sales/masterOrder/AddMasterOrderDialog.vue b/src/views/sales/masterOrder/AddMasterOrderDialog.vue
index 3040d17..7135130 100644
--- a/src/views/sales/masterOrder/AddMasterOrderDialog.vue
+++ b/src/views/sales/masterOrder/AddMasterOrderDialog.vue
@@ -27,14 +27,18 @@
                   <div class="custom-name">
                     <el-autocomplete
                       v-model="editConfig.infomation.client_name"
-                      :fetch-suggestions="querySearchAsync"
+                      :fetch-suggestions="
+                        (queryString, callback) => {
+                          querySearchAsync(queryString, callback, 'client')
+                        }
+                      "
                       value-key="name"
-                      @select="handleSelectClient"
+                      @select="handleSelectClient('client', $event)"
                     ></el-autocomplete>
-                    <div class="common-select-btn" @click="selClientClick">
+                    <div class="common-select-btn" @click="selClientClick('client')">
                       <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i>
                     </div>
-                    <div class="common-select-btn" @click="clearupClient">
+                    <div class="common-select-btn" @click="clearupClient('client')">
                       <i class="el-icon-edit-outline" title="娓呴櫎"></i>
                     </div>
                   </div>
@@ -182,7 +186,8 @@
         editVisible: false,
         title: "",
         infomation: {}
-      }
+      },
+      clientId: this.editCommonConfig.infomation.client_id
     }
   },
   created() {
@@ -207,37 +212,23 @@
           const params = this.saveParams()
           console.log(params)
           if (this.editConfig.title === "鏂板缓") {
-            getAddMasterOrder(params)
-              .then((res) => {
-                console.log(res)
-                this.editConfig.visible = false
-                if (res.code === 200) {
-                  this.$message({
-                    message: "娣诲姞鎴愬姛",
-                    type: "success"
-                  })
-                  this.$parent.getData()
-                }
-              })
-              .catch((err) => {
-                console.log(err)
-              })
+            getAddMasterOrder(params).then((res) => {
+              console.log(res)
+              this.editConfig.visible = false
+              if (res.code === 200) {
+                this.$message.success("娣诲姞鎴愬姛")
+                this.$parent.getData()
+              }
+            })
           } else {
-            getUpdateMasterOrder(params)
-              .then((res) => {
-                console.log(res)
-                this.editConfig.visible = false
-                if (res.code === 200) {
-                  this.$message({
-                    message: "缂栬緫鎴愬姛",
-                    type: "success"
-                  })
-                  this.$parent.getData()
-                }
-              })
-              .catch((err) => {
-                console.log(err)
-              })
+            getUpdateMasterOrder(params).then((res) => {
+              console.log(res)
+              this.editConfig.visible = false
+              if (res.code === 200) {
+                this.$message.success("缂栬緫鎴愬姛")
+                this.$parent.getData()
+              }
+            })
           }
         } else {
           console.log("error submit")
@@ -249,10 +240,10 @@
       let data = this.editConfig.infomation
       let params = {
         id: this.editConfig.title === "鏂板缓" ? 0 : data.id,
-        client_id: parseInt(data.client_id) || 0,
+        client_id: this.clientId || 0,
         end_time: data.end_time || "",
         member_id: data.member_id || 0,
-        money: parseFloat(data.money) || "0",
+        money: data.money || 0,
         number: data.number || "",
         start_time: data.start_time || ""
       }
@@ -261,9 +252,12 @@
     handleClose() {
       this.editConfig.visible = false
     },
-    // 閫夋嫨瀹㈡埛鐩稿叧鏂规硶
-    querySearchAsync(queryString, cb) {
-      var restaurants = this.clientList
+    // 閫夋嫨鐢ㄦ埛鐩稿叧鏂规硶
+    querySearchAsync(queryString, cb, value) {
+      var restaurants = []
+      if (value === "client") {
+        restaurants = this.clientList
+      }
       var results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants
       cb(results)
     },
@@ -272,21 +266,31 @@
         return state.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0
       }
     },
-    handleSelectClient(item) {
-      this.editConfig.infomation.client_id = item.id
+    handleSelectClient(value, item) {
+      if (value === "client") {
+        this.clientId = item.id
+      }
     },
-    selClientClick() {
-      this.editSelectClientConfig.editVisible = true
+    selClientClick(value) {
+      if (value === "client") {
+        this.editSelectClientConfig.editVisible = true
+      }
     },
-    selClient(row) {
-      console.log(row)
-      this.editConfig.infomation.client_name = row.name
-      this.editConfig.infomation.client_id = row.id
+    selClient(row, value) {
+      if (value === "client") {
+        this.editConfig.infomation.client_name = row.name
+        this.clientId = row.id
+      }
     },
     // 娓呴櫎宸查�夋嫨鐢ㄦ埛
-    clearupClient() {
-      this.editConfig.infomation.client_name = ""
-      this.editConfig.infomation.client_id = 0
+    clearupClient(value) {
+      if (value === "client") {
+        this.editConfig.infomation.client_name = ""
+        this.clientId = 0
+      } else if (value === "contact") {
+        this.editConfig.infomation.contact_name = ""
+        this.contactId = 0
+      }
     },
     // 娣诲姞闄勪欢
     addAnnexClick() {},
diff --git a/src/views/sales/quotation/AddQuotationDialog.vue b/src/views/sales/quotation/AddQuotationDialog.vue
index 309abba..45e4c87 100644
--- a/src/views/sales/quotation/AddQuotationDialog.vue
+++ b/src/views/sales/quotation/AddQuotationDialog.vue
@@ -203,6 +203,7 @@
               @addProductClick="addProductClick"
               @emptyProductClick="emptyProductClick"
               @recalculateProductClick="recalculateProductClick"
+              @clearupProduct="clearupProduct"
             />
           </div>
           <!-- 閫夋嫨瀹℃壒娴佺▼ -->
@@ -327,8 +328,8 @@
       showSummary: {
         show: true,
         total: true,
-        sumProp: ["Amount", "Unit", "other3"],
-        mergeNumber: 3
+        sumProp: ["Amount", "total"],
+        mergeNumber: 2
       },
       editSelectClientConfig: {
         editVisible: false,
@@ -350,8 +351,7 @@
       saleChanceId: this.editCommonConfig.infomation.sale_chance_id,
       tableData: [],
       productId: 1,
-      addProductArr: [],
-      isProductName: false
+      isNoProduct: true
     }
   },
   created() {
@@ -380,23 +380,19 @@
         }
       })
     },
-    productNameValidate() {
-      for (let i = 0; i < this.tableData.length; i++) {
-        if (this.tableData[i].Name === "") {
-          this.isProductName = true
-          return
-        } else {
-          this.isProductName = false
-        }
-      }
-    },
     // 淇濆瓨
     saveClick(formName) {
-      this.productNameValidate()
       this.$refs[formName].validate((valid) => {
         if (valid) {
-          console.log(this.isProductName)
-          if (this.isProductName) {
+          for (let i = 0; i < this.tableData.length; i++) {
+            if (this.tableData[i].name.length === 0) {
+              this.isNoProduct = true
+              break
+            } else {
+              this.isNoProduct = false
+            }
+          }
+          if (this.isNoProduct) {
             this.$message.error("浜у搧鍚嶇О涓嶈兘涓虹┖")
           } else {
             const params = this.saveParams()
@@ -514,86 +510,84 @@
     // 璁剧疆鍏佽涓婁紶鏂囦欢鏍煎紡
     setFormatClick() {},
     setTableForm() {
-      if (this.editConfig.title === "鏂板缓" || this.editConfig.infomation.products === null) {
+      if (this.editConfig.title === "鏂板缓") {
         this.tableData = [
           {
-            id: 1,
-            Amount: 0,
-            IsSale: true,
-            MaterialMode: "",
-            MinInventory: 0,
-            Name: "",
-            Number: "",
-            PurchaseType: "",
-            SalePrice: 0,
-            Unit: ""
+            productId: this.productId,
+            id: 0,
+            amount: 0,
+            desc: "",
+            name: "",
+            number: "",
+            price: 0,
+            total: 0
           }
         ]
       } else {
         this.tableData = this.editConfig.infomation.products
+        this.tableData.map((item, index) => {
+          item.productId = index + 1
+        })
       }
       this.productTableList = {
         tableData: this.tableData,
         tableColumn: [
-          { label: "#", prop: "id", width: 40 },
-          { label: "浜у搧鍚嶇О", prop: "Name", input: true, isRequird: true },
-          { label: "浜у搧缂栧彿", prop: "Number" },
-          { label: "鏁伴噺", prop: "Amount", input: true, isRequird: true },
-          { label: "閿�鍞崟浠�", prop: "Unit", input: true },
-          { label: "浠风◣鍚堣", prop: "total", input: true },
-          { label: "鎻忚堪", prop: "other8" }
+          { label: "#", prop: "productId", width: 40 },
+          { label: "浜у搧鍚嶇О", prop: "name", productName: true, isRequird: true },
+          { label: "浜у搧缂栧彿", prop: "number" },
+          { label: "鏁伴噺", prop: "amount", inputNumber: true, isRequird: true },
+          { label: "閿�鍞崟浠�", prop: "price", inputFloat: true },
+          { label: "浠风◣鍚堣", prop: "total", inputFloat: true }
         ]
       }
     },
     // 浜у搧鍒楄〃杈撳叆
     inputContent(val, prop, row) {
-      console.log("aaaaaaaa")
-      console.log(val, prop)
-      this.productId = row.id
+      this.productId = row.productId
       this.tableData.map((item) => {
-        if (item.id === row.id) {
+        if (item.productId === row.productId) {
           item[prop] = val
         }
       })
-      console.log(this.tableData)
     },
     // 浜у搧鏂板
     addProductClick() {
       this.productId++
       this.tableData.push({
-        id: this.productId,
-        Amount: 0,
-        IsSale: true,
-        MaterialMode: "",
-        MinInventory: 0,
-        Name: "",
-        Number: "",
-        PurchaseType: "",
-        SalePrice: 0,
-        Unit: ""
+        productId: this.productId,
+        id: 0,
+        amount: 0,
+        desc: "",
+        name: "",
+        number: "",
+        price: 0,
+        total: 0
       })
+      this.showSummary.show = true
     },
     //  浜у搧娓呯┖
     emptyProductClick() {
       this.productId = 1
       this.tableData = [
         {
-          id: 1,
-          Amount: 0,
-          IsSale: true,
-          MaterialMode: "",
-          MinInventory: 0,
-          Name: "",
-          Number: "",
-          PurchaseType: "",
-          SalePrice: 0,
-          Unit: ""
+          productId: this.productId,
+          id: 0,
+          amount: 0,
+          desc: "",
+          name: "",
+          number: "",
+          price: 0,
+          total: 0
         }
       ]
       this.productTableList.tableData = this.tableData
     },
     // 浜у搧閲嶇畻
-    recalculateProductClick() {}
+    recalculateProductClick() {},
+    clearupProduct(data) {
+      this.tableData = data
+      this.productTableList.tableData = this.tableData
+    }
   }
 }
 </script>
diff --git a/src/views/sales/quotation/DetailQuotation.vue b/src/views/sales/quotation/DetailQuotation.vue
index 8f65d45..bf0fc69 100644
--- a/src/views/sales/quotation/DetailQuotation.vue
+++ b/src/views/sales/quotation/DetailQuotation.vue
@@ -249,33 +249,13 @@
     },
     setTableForm() {
       this.productTableList = {
-        tableData: [
-          {
-            id: "1",
-            productName: "涓婃捣鏈夐檺鍏徃",
-            other0: "ZDYBD03-1",
-            other1: "12",
-            other2: "5.00",
-            other4: "3.00",
-            other3: "2.00"
-          }
-        ],
+        tableData: this.detailConfig.infomation.products,
         tableColumn: [
-          { label: "#", prop: "id", width: 40 },
-          { label: "鍚◣鍗曚环", prop: "other9", input: true },
-          { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
-          { label: "浜у搧缂栧彿", prop: "other0" },
-          { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
-          { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
-          { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
-          { label: "鎶樻墸棰�", prop: "other2" },
-          { label: "绋�(閿�鍞�)", prop: "other7", input: true },
-          { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
-          { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
-          { label: "浠风◣鍚堣", prop: "other3", input: true },
-          { label: "鎻忚堪", prop: "other8" },
-          { label: "婧愬崟绫诲瀷", prop: "other5" },
-          { label: "婧愬崟", prop: "other6" }
+          { label: "浜у搧鍚嶇О", prop: "name", productName: true, isRequird: true },
+          { label: "浜у搧缂栧彿", prop: "number" },
+          { label: "鏁伴噺", prop: "amount", inputNumber: true, isRequird: true },
+          { label: "閿�鍞崟浠�", prop: "price", inputFloat: true },
+          { label: "浠风◣鍚堣", prop: "total", inputFloat: true }
         ]
       }
     }
diff --git a/src/views/sales/quotation/index.vue b/src/views/sales/quotation/index.vue
index 54f7b5f..c9606c0 100644
--- a/src/views/sales/quotation/index.vue
+++ b/src/views/sales/quotation/index.vue
@@ -144,9 +144,9 @@
           { label: "鏈夋晥鏈�", prop: "validity_date", min: 100 }, // 淇敼鏃堕棿
           // { label: "灏忚", prop: "subTotal" }, // 灏忚
           // { label: "鍚堣", prop: "total" }, // 鍚堣
-          { label: "浜у搧鍚嶇О", prop: "productName", isProduct: true }, // 浜у搧鍚嶇О
-          { label: "鏁伴噺", prop: "number1" }, // 鏁伴噺
-          { label: "浠风◣鍚堣", prop: "priceTax" } // 浠风◣鍚堣
+          { label: "浜у搧鍚嶇О", prop: "productName", isProductName: true },
+          { label: "鏁伴噺", prop: "productNumber", isProductAmount: true },
+          { label: "浠风◣鍚堣", prop: "priceTax", isProductCommon: true }
         ]
       }
       this.searchOptions = []
diff --git a/src/views/sales/refundForm/AddRefundFormDialog.vue b/src/views/sales/refundForm/AddRefundFormDialog.vue
index b024999..f00aa48 100644
--- a/src/views/sales/refundForm/AddRefundFormDialog.vue
+++ b/src/views/sales/refundForm/AddRefundFormDialog.vue
@@ -192,7 +192,15 @@
             </div>
           </div>
           <div class="product-view">
-            <CommonFormTableView :show-summary="showSummary" :product-table-list="productTableList" />
+            <CommonFormTableView
+              :show-summary="showSummary"
+              :product-table-list="productTableList"
+              @inputContent="inputContent"
+              @addProductClick="addProductClick"
+              @emptyProductClick="emptyProductClick"
+              @recalculateProductClick="recalculateProductClick"
+              @clearupProduct="clearupProduct"
+            />
           </div>
           <!-- 閫夋嫨瀹℃壒娴佺▼ -->
           <!-- <div v-if="editConfig.title === '鏂板缓'" class="basic-info-title">閫夋嫨瀹℃壒娴佺▼</div>
@@ -305,7 +313,9 @@
         title: "",
         infomation: {}
       },
-      clientId: this.editCommonConfig.infomation.client_id
+      clientId: this.editCommonConfig.infomation.client_id,
+      productId: 1,
+      isNoProduct: true
     }
   },
   created() {
@@ -332,26 +342,38 @@
       this.$refs[formName].validate((valid) => {
         if (valid) {
           console.log(this.editConfig.infomation)
-          const params = this.saveParams()
-          console.log(params)
-          if (this.editConfig.title === "鏂板缓") {
-            getAddSalesRefund(params).then((res) => {
-              console.log(res)
-              this.editConfig.visible = false
-              if (res.code === 200) {
-                this.$message.success("娣诲姞鎴愬姛")
-                this.$parent.getData()
-              }
-            })
+          for (let i = 0; i < this.tableData.length; i++) {
+            if (this.tableData[i].name.length === 0) {
+              this.isNoProduct = true
+              break
+            } else {
+              this.isNoProduct = false
+            }
+          }
+          if (this.isNoProduct) {
+            this.$message.error("浜у搧鍚嶇О涓嶈兘涓虹┖")
           } else {
-            getUpdateSalesRefund(params).then((res) => {
-              console.log(res)
-              this.editConfig.visible = false
-              if (res.code === 200) {
-                this.$message.success("缂栬緫鎴愬姛")
-                this.$parent.getData()
-              }
-            })
+            const params = this.saveParams()
+            console.log(params)
+            if (this.editConfig.title === "鏂板缓") {
+              getAddSalesRefund(params).then((res) => {
+                console.log(res)
+                this.editConfig.visible = false
+                if (res.code === 200) {
+                  this.$message.success("娣诲姞鎴愬姛")
+                  this.$parent.getData()
+                }
+              })
+            } else {
+              getUpdateSalesRefund(params).then((res) => {
+                console.log(res)
+                this.editConfig.visible = false
+                if (res.code === 200) {
+                  this.$message.success("缂栬緫鎴愬姛")
+                  this.$parent.getData()
+                }
+              })
+            }
           }
         } else {
           console.log("error submit")
@@ -412,36 +434,83 @@
     // 璁剧疆鍏佽涓婁紶鏂囦欢鏍煎紡
     setFormatClick() {},
     setTableForm() {
-      this.productTableList = {
-        tableData: [
+      if (this.editConfig.title === "鏂板缓") {
+        this.tableData = [
           {
-            id: "1",
-            productName: "涓婃捣鏈夐檺鍏徃",
-            other0: "ZDYBD03-1",
-            other1: "12",
-            other2: "5.00",
-            other4: "3.00",
-            other3: "2.00"
+            productId: this.productId,
+            id: 0,
+            amount: 0,
+            desc: "",
+            name: "",
+            number: "",
+            price: 0,
+            total: 0
           }
-        ],
+        ]
+      } else {
+        this.tableData = this.editConfig.infomation.products
+        this.tableData.map((item, index) => {
+          item.productId = index + 1
+        })
+      }
+      this.productTableList = {
+        tableData: this.tableData,
         tableColumn: [
-          { label: "#", prop: "id", width: 40 },
-          { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
-          { label: "浜у搧缂栧彿", prop: "other0" },
-          { label: "婧愬崟绫诲瀷", prop: "other5" },
-          { label: "婧愬崟", prop: "other6" },
-          { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
-          { label: "鍚◣鍗曚环", prop: "other9", input: true },
-          { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
-          { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
-          { label: "鎶樻墸棰�", prop: "other2" },
-          { label: "绋�(閿�鍞�)", prop: "other7", input: true },
-          { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
-          { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
-          { label: "浠风◣鍚堣", prop: "other3", input: true },
-          { label: "鎻忚堪", prop: "other8" }
+          { label: "#", prop: "productId", width: 40 },
+          { label: "浜у搧鍚嶇О", prop: "name", productName: true, isRequird: true },
+          { label: "浜у搧缂栧彿", prop: "number" },
+          { label: "鏁伴噺", prop: "amount", inputNumber: true, isRequird: true },
+          { label: "閿�鍞崟浠�", prop: "price", inputFloat: true },
+          { label: "浠风◣鍚堣", prop: "total", inputFloat: true }
         ]
       }
+    },
+    // 浜у搧鍒楄〃杈撳叆
+    inputContent(val, prop, row) {
+      this.productId = row.productId
+      this.tableData.map((item) => {
+        if (item.productId === row.productId) {
+          item[prop] = val
+        }
+      })
+    },
+    // 浜у搧鏂板
+    addProductClick() {
+      this.productId++
+      this.tableData.push({
+        productId: this.productId,
+        id: 0,
+        amount: 0,
+        desc: "",
+        name: "",
+        number: "",
+        price: 0,
+        total: 0
+      })
+      this.showSummary.show = true
+    },
+    //  浜у搧娓呯┖
+    emptyProductClick() {
+      this.productId = 1
+      this.tableData = [
+        {
+          productId: this.productId,
+          id: 0,
+          amount: 0,
+          desc: "",
+          name: "",
+          number: "",
+          price: 0,
+          total: 0
+        }
+      ]
+      this.productTableList.tableData = this.tableData
+    },
+    // 浜у搧閲嶇畻
+    recalculateProductClick() {},
+    clearupProduct(data) {
+      this.tableData = data
+      this.productTableList.tableData = this.tableData
     }
   }
 }
diff --git a/src/views/sales/refundForm/DetailRefundForm.vue b/src/views/sales/refundForm/DetailRefundForm.vue
index 1353ee3..42422bb 100644
--- a/src/views/sales/refundForm/DetailRefundForm.vue
+++ b/src/views/sales/refundForm/DetailRefundForm.vue
@@ -17,11 +17,11 @@
         <div class="tab-view">
           <el-tabs v-model="activeName" @tab-click="tabsClick">
             <el-tab-pane label="璇︽儏" name="first"></el-tab-pane>
-            <el-tab-pane label="闄勪欢绠$悊" name="annex">
-              <!-- <template slot="label">
+            <!-- <el-tab-pane label="闄勪欢绠$悊" name="annex"> -->
+            <!-- <template slot="label">
                 <div>璺熻繘璁板綍<el-badge type="primary" :value="2"> </el-badge></div>
               </template> -->
-            </el-tab-pane>
+            <!-- </el-tab-pane> -->
           </el-tabs>
         </div>
         <div v-if="activeName === 'first'" class="detail">
@@ -205,33 +205,13 @@
     },
     setTableForm() {
       this.productTableList = {
-        tableData: [
-          {
-            id: "1",
-            productName: "涓婃捣鏈夐檺鍏徃",
-            other0: "ZDYBD03-1",
-            other1: "12",
-            other2: "5.00",
-            other4: "3.00",
-            other3: "2.00"
-          }
-        ],
+        tableData: this.detailConfig.infomation.products,
         tableColumn: [
-          { label: "#", prop: "id", width: 40 },
-          { label: "鍚◣鍗曚环", prop: "other9", input: true },
-          { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
-          { label: "浜у搧缂栧彿", prop: "other0" },
-          { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
-          { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
-          { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
-          { label: "鎶樻墸棰�", prop: "other2" },
-          { label: "绋�(閿�鍞�)", prop: "other7", input: true },
-          { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
-          { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
-          { label: "浠风◣鍚堣", prop: "other3", input: true },
-          { label: "鎻忚堪", prop: "other8" },
-          { label: "婧愬崟绫诲瀷", prop: "other5" },
-          { label: "婧愬崟", prop: "other6" }
+          { label: "浜у搧鍚嶇О", prop: "name", productName: true, isRequird: true },
+          { label: "浜у搧缂栧彿", prop: "number" },
+          { label: "鏁伴噺", prop: "amount", inputNumber: true, isRequird: true },
+          { label: "閿�鍞崟浠�", prop: "price", inputFloat: true },
+          { label: "浠风◣鍚堣", prop: "total", inputFloat: true }
         ]
       }
     }
diff --git a/src/views/sales/salesDetails/AddSalesDetailsDialog.vue b/src/views/sales/salesDetails/AddSalesDetailsDialog.vue
index 3aa7e53..b019896 100644
--- a/src/views/sales/salesDetails/AddSalesDetailsDialog.vue
+++ b/src/views/sales/salesDetails/AddSalesDetailsDialog.vue
@@ -206,7 +206,11 @@
             <el-row>
               <el-col :span="24">
                 <el-form-item label="澶囨敞" prop="remark">
-                  <el-input type="textarea" :autosize="{ minRows: 2 }" v-model="editConfig.infomation.notes"></el-input>
+                  <el-input
+                    type="textarea"
+                    :autosize="{ minRows: 2 }"
+                    v-model="editConfig.infomation.remark"
+                  ></el-input>
                 </el-form-item>
               </el-col>
             </el-row>
@@ -257,6 +261,7 @@
               @addProductClick="addProductClick"
               @emptyProductClick="emptyProductClick"
               @recalculateProductClick="recalculateProductClick"
+              @clearupProduct="clearupProduct"
             />
           </div>
           <!-- 閫夋嫨瀹℃壒娴佺▼ -->
@@ -376,7 +381,7 @@
       showSummary: {
         show: true,
         total: true,
-        sumProp: ["other1", "other7"],
+        sumProp: ["Amount", "total"],
         mergeNumber: 2
       },
       editSelectClientConfig: {
@@ -391,7 +396,8 @@
       },
       clientId: this.editCommonConfig.infomation.client_id,
       saleChanceId: this.editCommonConfig.infomation.saleChanceId,
-      productId: 1
+      productId: 1,
+      isNoProduct: true
     }
   },
   created() {
@@ -423,26 +429,38 @@
       this.$refs[formName].validate((valid) => {
         if (valid) {
           console.log(this.editConfig.infomation)
-          const params = this.saveParams()
-          console.log(params)
-          if (this.editConfig.title === "鏂板缓") {
-            getAddSalesDetails(params).then((res) => {
-              console.log(res)
-              this.editConfig.visible = false
-              if (res.code === 200) {
-                this.$message.success("娣诲姞鎴愬姛")
-                this.$parent.getData()
-              }
-            })
+          for (let i = 0; i < this.tableData.length; i++) {
+            if (this.tableData[i].name.length === 0) {
+              this.isNoProduct = true
+              break
+            } else {
+              this.isNoProduct = false
+            }
+          }
+          if (this.isNoProduct) {
+            this.$message.error("浜у搧鍚嶇О涓嶈兘涓虹┖")
           } else {
-            getUpdateSalesDetails(params).then((res) => {
-              console.log(res)
-              this.editConfig.visible = false
-              if (res.code === 200) {
-                this.$message.success("缂栬緫鎴愬姛")
-                this.$parent.getData()
-              }
-            })
+            const params = this.saveParams()
+            console.log(params)
+            if (this.editConfig.title === "鏂板缓") {
+              getAddSalesDetails(params).then((res) => {
+                console.log(res)
+                this.editConfig.visible = false
+                if (res.code === 200) {
+                  this.$message.success("娣诲姞鎴愬姛")
+                  this.$parent.getData()
+                }
+              })
+            } else {
+              getUpdateSalesDetails(params).then((res) => {
+                console.log(res)
+                this.editConfig.visible = false
+                if (res.code === 200) {
+                  this.$message.success("缂栬緫鎴愬姛")
+                  this.$parent.getData()
+                }
+              })
+            }
           }
         } else {
           console.log("error submit")
@@ -461,17 +479,7 @@
         memberId: data.memberId || 0,
         number: data.number || "",
         phone: data.phone || "",
-        products: [
-          {
-            amount: 0,
-            desc: "",
-            id: 0,
-            name: "",
-            number: "",
-            price: 0,
-            total: 0
-          }
-        ],
+        products: this.tableData,
         remark: data.remark || "",
         saleChanceId: this.saleChanceId || 0,
         saleType: data.saleType || 0,
@@ -529,9 +537,9 @@
       }
     },
     selClient(row, value) {
-      if (value === "contact") {
-        this.editConfig.infomation.contact_name = row.name
-        this.contactId = row.id
+      if (value === "client") {
+        this.editConfig.infomation.client_name = row.name
+        this.clientId = row.id
       } else if (value === "chance") {
         this.editConfig.infomation.sale_chance_name = row.name
         this.saleChanceId = row.id
@@ -555,83 +563,81 @@
       if (this.editConfig.title === "鏂板缓") {
         this.tableData = [
           {
-            id: 1,
-            Amount: 0,
-            IsSale: true,
-            MaterialMode: "",
-            MinInventory: 0,
-            Name: "",
-            Number: "",
-            PurchaseType: "",
-            SalePrice: 0,
-            Unit: ""
+            productId: this.productId,
+            id: 0,
+            amount: 0,
+            desc: "",
+            name: "",
+            number: "",
+            price: 0,
+            total: 0
           }
         ]
       } else {
         this.tableData = this.editConfig.infomation.products
+        this.tableData.map((item, index) => {
+          item.productId = index + 1
+        })
       }
       this.productTableList = {
         tableData: this.tableData,
         tableColumn: [
-          { label: "#", prop: "id", width: 40 },
-          { label: "浜у搧鍚嶇О", prop: "Name", input: true, isRequird: true },
-          { label: "浜у搧缂栧彿", prop: "Number" },
-          { label: "鏁伴噺", prop: "Amount", input: true, isRequird: true },
-          { label: "閿�鍞崟浠�", prop: "Unit", input: true },
-          { label: "浠风◣鍚堣", prop: "total", input: true },
-          { label: "鎻忚堪", prop: "other8" }
+          { label: "#", prop: "productId", width: 40 },
+          { label: "浜у搧鍚嶇О", prop: "name", productName: true, isRequird: true },
+          { label: "浜у搧缂栧彿", prop: "number" },
+          { label: "鏁伴噺", prop: "amount", inputNumber: true, isRequird: true },
+          { label: "閿�鍞崟浠�", prop: "price", inputFloat: true },
+          { label: "浠风◣鍚堣", prop: "total", inputFloat: true }
         ]
       }
     },
     // 浜у搧鍒楄〃杈撳叆
     inputContent(val, prop, row) {
-      console.log("aaaaaaaa")
-      console.log(val, prop)
-      this.productId = row.id
+      this.productId = row.productId
       this.tableData.map((item) => {
-        if (item.id === row.id) {
+        if (item.productId === row.productId) {
           item[prop] = val
         }
       })
-      console.log(this.tableData)
     },
     // 浜у搧鏂板
     addProductClick() {
       this.productId++
       this.tableData.push({
-        id: this.productId,
-        Amount: 0,
-        IsSale: true,
-        MaterialMode: "",
-        MinInventory: 0,
-        Name: "",
-        Number: "",
-        PurchaseType: "",
-        SalePrice: 0,
-        Unit: ""
+        productId: this.productId,
+        id: 0,
+        amount: 0,
+        desc: "",
+        name: "",
+        number: "",
+        price: 0,
+        total: 0
       })
+      this.showSummary.show = true
     },
     //  浜у搧娓呯┖
     emptyProductClick() {
       this.productId = 1
       this.tableData = [
         {
-          id: 1,
-          Amount: 0,
-          IsSale: true,
-          MaterialMode: "",
-          MinInventory: 0,
-          Name: "",
-          Number: "",
-          PurchaseType: "",
-          SalePrice: 0,
-          Unit: ""
+          productId: this.productId,
+          id: 0,
+          amount: 0,
+          desc: "",
+          name: "",
+          number: "",
+          price: 0,
+          total: 0
         }
       ]
       this.productTableList.tableData = this.tableData
     },
     // 浜у搧閲嶇畻
-    recalculateProductClick() {}
+    recalculateProductClick() {},
+    clearupProduct(data) {
+      this.tableData = data
+      this.productTableList.tableData = this.tableData
+    }
   }
 }
 </script>
diff --git a/src/views/sales/salesDetails/DetailSpecification.vue b/src/views/sales/salesDetails/DetailSpecification.vue
index 540e5f7..2667545 100644
--- a/src/views/sales/salesDetails/DetailSpecification.vue
+++ b/src/views/sales/salesDetails/DetailSpecification.vue
@@ -411,33 +411,13 @@
     },
     setTableForm() {
       this.productTableList = {
-        tableData: [
-          {
-            id: "1",
-            productName: "涓婃捣鏈夐檺鍏徃",
-            other0: "ZDYBD03-1",
-            other1: "12",
-            other2: "5.00",
-            other4: "3.00",
-            other3: "2.00"
-          }
-        ],
+        tableData: this.detailConfig.infomation.products,
         tableColumn: [
-          { label: "#", prop: "id", width: 40 },
-          { label: "鍚◣鍗曚环", prop: "other9", input: true },
-          { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
-          { label: "浜у搧缂栧彿", prop: "other0" },
-          { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
-          { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
-          { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
-          { label: "鎶樻墸棰�", prop: "other2" },
-          { label: "绋�(閿�鍞�)", prop: "other7", input: true },
-          { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
-          { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
-          { label: "浠风◣鍚堣", prop: "other3", input: true },
-          { label: "鎻忚堪", prop: "other8" },
-          { label: "婧愬崟绫诲瀷", prop: "other5" },
-          { label: "婧愬崟", prop: "other6" }
+          { label: "浜у搧鍚嶇О", prop: "name", productName: true, isRequird: true },
+          { label: "浜у搧缂栧彿", prop: "number" },
+          { label: "鏁伴噺", prop: "amount", inputNumber: true, isRequird: true },
+          { label: "閿�鍞崟浠�", prop: "price", inputFloat: true },
+          { label: "浠风◣鍚堣", prop: "total", inputFloat: true }
         ]
       }
     }
diff --git a/src/views/sales/salesDetails/index.vue b/src/views/sales/salesDetails/index.vue
index 560a58d..155b823 100644
--- a/src/views/sales/salesDetails/index.vue
+++ b/src/views/sales/salesDetails/index.vue
@@ -160,11 +160,10 @@
           { label: "搴旀敹浣欓", prop: "amountReceivable", price: true },
           { label: "宸插紑绁ㄩ噾棰�", prop: "invoicedAmount", price: true },
           { label: "鏈紑绁ㄩ噾棰�", prop: "uninvoicedAmount", price: true },
-          { label: "浜у搧鍚嶇О", prop: "productName" },
-          { label: "鏁伴噺", prop: "number1" },
-          { label: "鍚◣鍗曚环", prop: "taxUnitPrice", price: true },
-          { label: "鏈嚭搴撴暟閲�", prop: "unOutoundNo" },
-          { label: "浠风◣鍚堣", prop: "priceTax", price: true }
+          { label: "浜у搧鍚嶇О", prop: "productName", isProductName: true },
+          { label: "鏁伴噺", prop: "productNumber", isProductAmount: true },
+          { label: "閿�鍞崟浠�", prop: "taxUnitPrice", isProductCommon: true },
+          { label: "浠风◣鍚堣", prop: "priceTax", isProductCommon: true }
         ]
       }
       this.searchOptions = []
@@ -301,9 +300,15 @@
   }
 }
 ::v-deep {
-  .el-table .cell,
-  .el-table th.el-table__cell > .cell {
-    padding: 0 2px;
+  .el-table .el-table__cell {
+    padding: 0;
+  }
+  .el-table__header tr,
+  .el-table__header th {
+    height: 48px;
+  }
+  .el-table__footer-wrapper tbody td.el-table__cell {
+    height: 48px;
   }
 }
 </style>
diff --git a/src/views/sales/salesOpportunity/AddSalesOpportunityDialog.vue b/src/views/sales/salesOpportunity/AddSalesOpportunityDialog.vue
index 55c02f7..b57cefe 100644
--- a/src/views/sales/salesOpportunity/AddSalesOpportunityDialog.vue
+++ b/src/views/sales/salesOpportunity/AddSalesOpportunityDialog.vue
@@ -215,7 +215,14 @@
               </el-col>
               <el-col :span="12">
                 <el-form-item label="棰勭畻缁濆鍊�" prop="budget">
-                  <el-input v-model="editConfig.infomation.budget"></el-input>
+                  <el-input-number
+                    v-model="editConfig.infomation.budget"
+                    placeholder="璇疯緭鍏�"
+                    :min="0"
+                    :precision="2"
+                    :controls="false"
+                    style="width: 25%; margin-right: 5px"
+                  ></el-input-number>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
@@ -653,9 +660,6 @@
               this.editConfig.visible = false
               if (res.code === 200) {
                 this.$message.success("娣诲姞鎴愬姛")
-                // if (this.editConfig.title === "鏂板缓" && this.editConfig.infomation.client_name) {
-                //   this.$parent.handleClose()
-                // } else {
                 this.$parent.getData()
                 // }
               }
diff --git a/src/views/sales/salesReturn/AddSalesReturnDialog.vue b/src/views/sales/salesReturn/AddSalesReturnDialog.vue
index 1c1bedc..90aae43 100644
--- a/src/views/sales/salesReturn/AddSalesReturnDialog.vue
+++ b/src/views/sales/salesReturn/AddSalesReturnDialog.vue
@@ -168,13 +168,21 @@
             <div style="margin-left: 400px">
               甯佺
               <el-select v-model="editConfig.infomation.currency" placeholder="璇烽�夋嫨" size="mini" style="width: 63%">
-                <el-option v-for="item in currencyOptions" :key="item.value" :label="item.label" :value="item.value">
+                <el-option v-for="item in currencyOptions" :key="item.id" :label="item.name" :value="item.id">
                 </el-option>
               </el-select>
             </div>
           </div>
           <div class="product-view">
-            <CommonFormTableView :show-summary="showSummary" :product-table-list="productTableList" />
+            <CommonFormTableView
+              :show-summary="showSummary"
+              :product-table-list="productTableList"
+              @inputContent="inputContent"
+              @addProductClick="addProductClick"
+              @emptyProductClick="emptyProductClick"
+              @recalculateProductClick="recalculateProductClick"
+              @clearupProduct="clearupProduct"
+            />
           </div>
         </div>
       </el-form>
@@ -235,16 +243,17 @@
       productTableList: {},
       showSummary: {
         show: true,
-        total: false,
-        refundable: true,
-        sumProp: ["other1", "other2", "other3", "other4"],
-        mergeNumber: 4
+        total: true,
+        sumProp: ["Amount", "total"],
+        mergeNumber: 2
       },
       editSelectClientConfig: {
         editVisible: false,
         title: "",
         infomation: {}
-      }
+      },
+      productId: 1,
+      isNoProduct: true
     }
   },
   created() {
@@ -259,7 +268,6 @@
         .then((res) => {
           this.memberOptions = res.data.member
           this.repositoryOptions = res.data.repository
-          // this.currencyOptions = res.data.currency
           this.statusOptions = res.data.salesReturnStatus
         })
         .catch((err) => {
@@ -282,30 +290,42 @@
       this.$refs[formName].validate((valid) => {
         if (valid) {
           console.log(this.editConfig.infomation)
-          const params = this.saveParams()
-          console.log(params)
-          if (this.editConfig.title === "鏂板缓") {
-            getAddSalesReturn(params).then((res) => {
-              console.log(res)
-              this.editConfig.visible = false
-              if (res.code === 200) {
-                this.$message.success("娣诲姞鎴愬姛")
-                this.$parent.getData()
-              }
-            })
+          for (let i = 0; i < this.tableData.length; i++) {
+            if (this.tableData[i].name.length === 0) {
+              this.isNoProduct = true
+              break
+            } else {
+              this.isNoProduct = false
+            }
+          }
+          if (this.isNoProduct) {
+            this.$message.error("浜у搧鍚嶇О涓嶈兘涓虹┖")
           } else {
-            getUpdateSalesReturn(params).then((res) => {
-              console.log(res)
-              this.editConfig.visible = false
-              if (res.code === 200) {
-                this.$message.success("缂栬緫鎴愬姛")
-                this.$message({
-                  message: "缂栬緫鎴愬姛",
-                  type: "success"
-                })
-                this.$parent.getData()
-              }
-            })
+            const params = this.saveParams()
+            console.log(params)
+            if (this.editConfig.title === "鏂板缓") {
+              getAddSalesReturn(params).then((res) => {
+                console.log(res)
+                this.editConfig.visible = false
+                if (res.code === 200) {
+                  this.$message.success("娣诲姞鎴愬姛")
+                  this.$parent.getData()
+                }
+              })
+            } else {
+              getUpdateSalesReturn(params).then((res) => {
+                console.log(res)
+                this.editConfig.visible = false
+                if (res.code === 200) {
+                  this.$message.success("缂栬緫鎴愬姛")
+                  this.$message({
+                    message: "缂栬緫鎴愬姛",
+                    type: "success"
+                  })
+                  this.$parent.getData()
+                }
+              })
+            }
           }
         } else {
           console.log("error submit")
@@ -375,26 +395,83 @@
     // 璁剧疆鍏佽涓婁紶鏂囦欢鏍煎紡
     setFormatClick() {},
     setTableForm() {
+      if (this.editConfig.title === "鏂板缓") {
+        this.tableData = [
+          {
+            productId: this.productId,
+            id: 0,
+            amount: 0,
+            desc: "",
+            name: "",
+            number: "",
+            price: 0,
+            total: 0
+          }
+        ]
+      } else {
+        this.tableData = this.editConfig.infomation.products
+        this.tableData.map((item, index) => {
+          item.productId = index + 1
+        })
+      }
       this.productTableList = {
-        tableData: [],
+        tableData: this.tableData,
         tableColumn: [
-          { label: "#", prop: "id", width: 40 },
-          { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
-          { label: "浜у搧缂栧彿", prop: "other0" },
-          { label: "婧愬崟绫诲瀷", prop: "other5" },
-          { label: "婧愬崟", prop: "other6" },
-          { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
-          { label: "鍚◣鍗曚环", prop: "other9", input: true },
-          { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
-          { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
-          { label: "鎶樻墸棰�", prop: "other2" },
-          { label: "绋�(閿�鍞�)", prop: "other7", input: true },
-          { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
-          { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
-          { label: "浠风◣鍚堣", prop: "other3", input: true },
-          { label: "鎻忚堪", prop: "other8" }
+          { label: "#", prop: "productId", width: 40 },
+          { label: "浜у搧鍚嶇О", prop: "name", productName: true, isRequird: true },
+          { label: "浜у搧缂栧彿", prop: "number" },
+          { label: "鏁伴噺", prop: "amount", inputNumber: true, isRequird: true },
+          { label: "閿�鍞崟浠�", prop: "price", inputFloat: true },
+          { label: "浠风◣鍚堣", prop: "total", inputFloat: true }
         ]
       }
+    },
+    // 浜у搧鍒楄〃杈撳叆
+    inputContent(val, prop, row) {
+      this.productId = row.productId
+      this.tableData.map((item) => {
+        if (item.productId === row.productId) {
+          item[prop] = val
+        }
+      })
+    },
+    // 浜у搧鏂板
+    addProductClick() {
+      this.productId++
+      this.tableData.push({
+        productId: this.productId,
+        id: 0,
+        amount: 0,
+        desc: "",
+        name: "",
+        number: "",
+        price: 0,
+        total: 0
+      })
+      this.showSummary.show = true
+    },
+    //  浜у搧娓呯┖
+    emptyProductClick() {
+      this.productId = 1
+      this.tableData = [
+        {
+          productId: this.productId,
+          id: 0,
+          amount: 0,
+          desc: "",
+          name: "",
+          number: "",
+          price: 0,
+          total: 0
+        }
+      ]
+      this.productTableList.tableData = this.tableData
+    },
+    // 浜у搧閲嶇畻
+    recalculateProductClick() {},
+    clearupProduct(data) {
+      this.tableData = data
+      this.productTableList.tableData = this.tableData
     }
   }
 }
diff --git a/src/views/sales/salesReturn/DetailReturn.vue b/src/views/sales/salesReturn/DetailReturn.vue
index c47b0c1..24b03ca 100644
--- a/src/views/sales/salesReturn/DetailReturn.vue
+++ b/src/views/sales/salesReturn/DetailReturn.vue
@@ -256,33 +256,13 @@
     },
     setTableForm() {
       this.productTableList = {
-        tableData: [
-          {
-            id: "1",
-            productName: "涓婃捣鏈夐檺鍏徃",
-            other0: "ZDYBD03-1",
-            other1: "12",
-            other2: "5.00",
-            other4: "3.00",
-            other3: "2.00"
-          }
-        ],
+        tableData: this.detailConfig.infomation.products,
         tableColumn: [
-          { label: "#", prop: "id", width: 40 },
-          { label: "鍚◣鍗曚环", prop: "other9", input: true },
-          { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
-          { label: "浜у搧缂栧彿", prop: "other0" },
-          { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
-          { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
-          { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
-          { label: "鎶樻墸棰�", prop: "other2" },
-          { label: "绋�(閿�鍞�)", prop: "other7", input: true },
-          { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
-          { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
-          { label: "浠风◣鍚堣", prop: "other3", input: true },
-          { label: "鎻忚堪", prop: "other8" },
-          { label: "婧愬崟绫诲瀷", prop: "other5" },
-          { label: "婧愬崟", prop: "other6" }
+          { label: "浜у搧鍚嶇О", prop: "name", productName: true, isRequird: true },
+          { label: "浜у搧缂栧彿", prop: "number" },
+          { label: "鏁伴噺", prop: "amount", inputNumber: true, isRequird: true },
+          { label: "閿�鍞崟浠�", prop: "price", inputFloat: true },
+          { label: "浠风◣鍚堣", prop: "total", inputFloat: true }
         ]
       }
     }
diff --git a/src/views/sales/subOrder/AddSubOrderDialog.vue b/src/views/sales/subOrder/AddSubOrderDialog.vue
index bbd4601..2003554 100644
--- a/src/views/sales/subOrder/AddSubOrderDialog.vue
+++ b/src/views/sales/subOrder/AddSubOrderDialog.vue
@@ -126,70 +126,14 @@
           </div>
           <div class="product-view">
             <CommonFormTableView
+              :show-summary="showSummary"
               :product-table-list="productTableList"
               @inputContent="inputContent"
               @addProductClick="addProductClick"
               @emptyProductClick="emptyProductClick"
               @recalculateProductClick="recalculateProductClick"
+              @clearupProduct="clearupProduct"
             />
-          </div>
-          <!-- 鍚堣 -->
-          <div class="basic-info-view">
-            <el-row>
-              <el-col :span="7" :offset="17">
-                <el-form-item prop="discount">
-                  <template slot="label">
-                    <span>鏁村崟鎶樻墸</span>
-                    <el-select
-                      v-model="discount"
-                      placeholder="璇烽�夋嫨"
-                      size="mini"
-                      style="width: 104px; margin-left: 3px"
-                      disabled
-                    >
-                      <el-option
-                        v-for="item in discountOptions"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value"
-                      >
-                      </el-option>
-                    </el-select>
-                  </template>
-                  <el-input v-model="editConfig.infomation.discount" disabled></el-input>
-                </el-form-item>
-              </el-col>
-              <el-col :span="7" :offset="17">
-                <el-form-item prop="discount">
-                  <template slot="label">
-                    <span>璋冩暣</span>
-                    <el-select
-                      v-model="adjust"
-                      placeholder="璇烽�夋嫨"
-                      size="mini"
-                      style="width: 74px; margin-left: 3px"
-                      disabled
-                    >
-                      <el-option
-                        v-for="item in adjustOptions"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value"
-                      >
-                      </el-option>
-                    </el-select>
-                  </template>
-                  <el-input v-model="editConfig.infomation.discount" disabled></el-input>
-                </el-form-item>
-              </el-col>
-              <el-col :span="7" :offset="17">
-                <el-form-item label="鍚堣" prop="total">
-                  <el-button type="text" v-model="editConfig.infomation.total" style="color: #555; font-size: 13px">{{
-                    editConfig.infomation.total ? editConfig.infomation.total : "0.00"
-                  }}</el-button>
-                </el-form-item>
-              </el-col>
-            </el-row>
           </div>
         </div>
       </el-form>
@@ -266,9 +210,9 @@
       productTableList: {},
       showSummary: {
         show: true,
-        total: false,
-        sumProp: ["other1", "other7"],
-        mergeNumber: 7
+        total: true,
+        sumProp: ["Amount", "total"],
+        mergeNumber: 2
       },
       editSelectClientConfig: {
         editVisible: false,
@@ -319,26 +263,38 @@
       this.$refs[formName].validate((valid) => {
         if (valid) {
           console.log(this.editConfig.infomation)
-          const params = this.saveParams()
-          console.log(params)
-          if (this.editConfig.title === "鏂板缓") {
-            getAddSubOrder(params).then((res) => {
-              console.log(res)
-              this.editConfig.visible = false
-              if (res.code === 200) {
-                this.$message.success("娣诲姞鎴愬姛")
-                this.$parent.getData()
-              }
-            })
+          for (let i = 0; i < this.tableData.length; i++) {
+            if (this.tableData[i].name.length === 0) {
+              this.isNoProduct = true
+              break
+            } else {
+              this.isNoProduct = false
+            }
+          }
+          if (this.isNoProduct) {
+            this.$message.error("浜у搧鍚嶇О涓嶈兘涓虹┖")
           } else {
-            getUpdateSubOrder(params).then((res) => {
-              console.log(res)
-              this.editConfig.visible = false
-              if (res.code === 200) {
-                this.$message.success("缂栬緫鎴愬姛")
-                this.$parent.getData()
-              }
-            })
+            const params = this.saveParams()
+            console.log(params)
+            if (this.editConfig.title === "鏂板缓") {
+              getAddSubOrder(params).then((res) => {
+                console.log(res)
+                this.editConfig.visible = false
+                if (res.code === 200) {
+                  this.$message.success("娣诲姞鎴愬姛")
+                  this.$parent.getData()
+                }
+              })
+            } else {
+              getUpdateSubOrder(params).then((res) => {
+                console.log(res)
+                this.editConfig.visible = false
+                if (res.code === 200) {
+                  this.$message.success("缂栬緫鎴愬姛")
+                  this.$parent.getData()
+                }
+              })
+            }
           }
         } else {
           console.log("error submit")
@@ -369,11 +325,6 @@
       } else if (value === "master") {
         restaurants = this.masterOrderList
       }
-      // else if (value === "chance") {
-      //   restaurants = this.saleChancelist
-      // } else {
-      //   restaurants = this.saleLeadlist
-      // }
       var results = queryString ? restaurants.filter(this.createStateFilter(queryString, value)) : restaurants
       cb(results)
     },
@@ -433,83 +384,81 @@
       if (this.editConfig.title === "鏂板缓") {
         this.tableData = [
           {
-            id: 1,
-            Amount: 0,
-            IsSale: true,
-            MaterialMode: "",
-            MinInventory: 0,
-            Name: "",
-            Number: "",
-            PurchaseType: "",
-            SalePrice: 0,
-            Unit: ""
+            productId: this.productId,
+            id: 0,
+            amount: 0,
+            desc: "",
+            name: "",
+            number: "",
+            price: 0,
+            total: 0
           }
         ]
       } else {
         this.tableData = this.editConfig.infomation.products
+        this.tableData.map((item, index) => {
+          item.productId = index + 1
+        })
       }
       this.productTableList = {
         tableData: this.tableData,
         tableColumn: [
-          { label: "#", prop: "id", width: 40 },
-          { label: "浜у搧鍚嶇О", prop: "Name", input: true, isRequird: true },
-          { label: "浜у搧缂栧彿", prop: "Number" },
-          { label: "鏁伴噺", prop: "Amount", input: true, isRequird: true },
-          { label: "閿�鍞崟浠�", prop: "Unit", input: true },
-          { label: "浠风◣鍚堣", prop: "total", input: true },
-          { label: "鎻忚堪", prop: "other8" }
+          { label: "#", prop: "productId", width: 40 },
+          { label: "浜у搧鍚嶇О", prop: "name", productName: true, isRequird: true },
+          { label: "浜у搧缂栧彿", prop: "number" },
+          { label: "鏁伴噺", prop: "amount", inputNumber: true, isRequird: true },
+          { label: "閿�鍞崟浠�", prop: "price", inputFloat: true },
+          { label: "浠风◣鍚堣", prop: "total", inputFloat: true }
         ]
       }
     },
     // 浜у搧鍒楄〃杈撳叆
     inputContent(val, prop, row) {
-      console.log("aaaaaaaa")
-      console.log(val, prop)
-      this.productId = row.id
+      this.productId = row.productId
       this.tableData.map((item) => {
-        if (item.id === row.id) {
+        if (item.productId === row.productId) {
           item[prop] = val
         }
       })
-      console.log(this.tableData)
     },
     // 浜у搧鏂板
     addProductClick() {
       this.productId++
       this.tableData.push({
-        id: this.productId,
-        Amount: 0,
-        IsSale: true,
-        MaterialMode: "",
-        MinInventory: 0,
-        Name: "",
-        Number: "",
-        PurchaseType: "",
-        SalePrice: 0,
-        Unit: ""
+        productId: this.productId,
+        id: 0,
+        amount: 0,
+        desc: "",
+        name: "",
+        number: "",
+        price: 0,
+        total: 0
       })
+      this.showSummary.show = true
     },
     //  浜у搧娓呯┖
     emptyProductClick() {
       this.productId = 1
       this.tableData = [
         {
-          id: 1,
-          Amount: 0,
-          IsSale: true,
-          MaterialMode: "",
-          MinInventory: 0,
-          Name: "",
-          Number: "",
-          PurchaseType: "",
-          SalePrice: 0,
-          Unit: ""
+          productId: this.productId,
+          id: 0,
+          amount: 0,
+          desc: "",
+          name: "",
+          number: "",
+          price: 0,
+          total: 0
         }
       ]
       this.productTableList.tableData = this.tableData
     },
     // 浜у搧閲嶇畻
-    recalculateProductClick() {}
+    recalculateProductClick() {},
+    clearupProduct(data) {
+      this.tableData = data
+      this.productTableList.tableData = this.tableData
+    }
   }
 }
 </script>
diff --git a/src/views/sales/subOrder/DetailSubOrder.vue b/src/views/sales/subOrder/DetailSubOrder.vue
index 5e47425..277c4a7 100644
--- a/src/views/sales/subOrder/DetailSubOrder.vue
+++ b/src/views/sales/subOrder/DetailSubOrder.vue
@@ -202,33 +202,13 @@
     },
     setTableForm() {
       this.productTableList = {
-        tableData: [
-          {
-            id: "1",
-            productName: "涓婃捣鏈夐檺鍏徃",
-            other0: "ZDYBD03-1",
-            other1: "12",
-            other2: "5.00",
-            other4: "3.00",
-            other3: "2.00"
-          }
-        ],
+        tableData: this.detailConfig.infomation.products,
         tableColumn: [
-          { label: "#", prop: "id", width: 40 },
-          { label: "鍚◣鍗曚环", prop: "other9", input: true },
-          { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
-          { label: "浜у搧缂栧彿", prop: "other0" },
-          { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
-          { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
-          { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
-          { label: "鎶樻墸棰�", prop: "other2" },
-          { label: "绋�(閿�鍞�)", prop: "other7", input: true },
-          { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
-          { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
-          { label: "浠风◣鍚堣", prop: "other3", input: true },
-          { label: "鎻忚堪", prop: "other8" },
-          { label: "婧愬崟绫诲瀷", prop: "other5" },
-          { label: "婧愬崟", prop: "other6" }
+          { label: "浜у搧鍚嶇О", prop: "name", productName: true, isRequird: true },
+          { label: "浜у搧缂栧彿", prop: "number" },
+          { label: "鏁伴噺", prop: "amount", inputNumber: true, isRequird: true },
+          { label: "閿�鍞崟浠�", prop: "price", inputFloat: true },
+          { label: "浠风◣鍚堣", prop: "total", inputFloat: true }
         ]
       }
     }
diff --git a/src/views/service/clientServiceOrder/DetailClientServiceOrder.vue b/src/views/service/clientServiceOrder/DetailClientServiceOrder.vue
index 8eaf37b..6ca36fb 100644
--- a/src/views/service/clientServiceOrder/DetailClientServiceOrder.vue
+++ b/src/views/service/clientServiceOrder/DetailClientServiceOrder.vue
@@ -17,7 +17,7 @@
         <div class="tab-view">
           <el-tabs v-model="activeName" @tab-click="tabsClick">
             <el-tab-pane label="璇︽儏" name="first"></el-tab-pane>
-            <el-tab-pane label="闄勪欢绠$悊" name="annex"></el-tab-pane>
+            <!-- <el-tab-pane label="闄勪欢绠$悊" name="annex"></el-tab-pane> -->
             <el-tab-pane label="鏈嶅姟鍥炶鍗�" name="followup">
               <!-- <template slot="label">
                 <div>璺熻繘璁板綍<el-badge type="primary" :value="2"> </el-badge></div>
diff --git a/src/views/service/serviceContract/AddServiceContractDialog.vue b/src/views/service/serviceContract/AddServiceContractDialog.vue
index ff2b7dc..52743f7 100644
--- a/src/views/service/serviceContract/AddServiceContractDialog.vue
+++ b/src/views/service/serviceContract/AddServiceContractDialog.vue
@@ -312,6 +312,7 @@
               @addProductClick="addProductClick"
               @emptyProductClick="emptyProductClick"
               @recalculateProductClick="recalculateProductClick"
+              @clearupProduct="clearupProduct"
             />
           </div>
           <!-- 閫夋嫨瀹℃壒娴佺▼ -->
@@ -480,7 +481,8 @@
       contractId: this.editCommonConfig.infomation.salesDetailsId,
       quotationId: this.editCommonConfig.infomation.quotationId,
       tableData: [],
-      productId: 1
+      productId: 1,
+      isNoProduct: true
     }
   },
   created() {
@@ -512,26 +514,38 @@
       this.$refs[formName].validate((valid) => {
         if (valid) {
           console.log(this.editConfig.infomation)
-          const params = this.saveParams()
-          console.log(params)
-          if (this.editConfig.title === "鏂板缓") {
-            getAddServiceContract(params).then((res) => {
-              console.log(res)
-              this.editConfig.visible = false
-              if (res.code === 200) {
-                this.$message.success("娣诲姞鎴愬姛")
-                this.$parent.getData()
-              }
-            })
+          for (let i = 0; i < this.tableData.length; i++) {
+            if (this.tableData[i].name.length === 0) {
+              this.isNoProduct = true
+              break
+            } else {
+              this.isNoProduct = false
+            }
+          }
+          if (this.isNoProduct) {
+            this.$message.error("浜у搧鍚嶇О涓嶈兘涓虹┖")
           } else {
-            getUpdateServiceContract(params).then((res) => {
-              console.log(res)
-              this.editConfig.visible = false
-              if (res.code === 200) {
-                this.$message.success("缂栬緫鎴愬姛")
-                this.$parent.getData()
-              }
-            })
+            const params = this.saveParams()
+            console.log(params)
+            if (this.editConfig.title === "鏂板缓") {
+              getAddServiceContract(params).then((res) => {
+                console.log(res)
+                this.editConfig.visible = false
+                if (res.code === 200) {
+                  this.$message.success("娣诲姞鎴愬姛")
+                  this.$parent.getData()
+                }
+              })
+            } else {
+              getUpdateServiceContract(params).then((res) => {
+                console.log(res)
+                this.editConfig.visible = false
+                if (res.code === 200) {
+                  this.$message.success("缂栬緫鎴愬姛")
+                  this.$parent.getData()
+                }
+              })
+            }
           }
         } else {
           console.log("error submit")
@@ -676,79 +690,71 @@
       if (this.editConfig.title === "鏂板缓") {
         this.tableData = [
           {
-            id: 1,
-            Amount: 0,
-            IsSale: true,
-            MaterialMode: "",
-            MinInventory: 0,
-            Name: "",
-            Number: "",
-            PurchaseType: "",
-            SalePrice: 0,
-            Unit: ""
+            productId: this.productId,
+            id: 0,
+            amount: 0,
+            desc: "",
+            name: "",
+            number: "",
+            price: 0,
+            total: 0
           }
         ]
       } else {
         this.tableData = this.editConfig.infomation.products
+        this.tableData.map((item, index) => {
+          item.productId = index + 1
+        })
       }
       this.productTableList = {
         tableData: this.tableData,
         tableColumn: [
-          { label: "#", prop: "id", width: 40 },
-          { label: "浜у搧鍚嶇О", prop: "Name", input: true, isRequird: true },
-          { label: "浜у搧缂栧彿", prop: "Number" },
-          { label: "鏈嶅姟寮�濮嬫棩", prop: "other5", date: true, isRequird: true, min: 100 },
-          { label: "鏈嶅姟鍒版湡鏃�", prop: "other6", date: true, isRequird: true, min: 100 },
-          { label: "鏁伴噺", prop: "Amount", input: true, isRequird: true },
-          { label: "閿�鍞崟浠�", prop: "Unit", input: true },
-          { label: "浠风◣鍚堣", prop: "total", input: true },
-          { label: "鎻忚堪", prop: "other8" }
+          { label: "#", prop: "productId", width: 40 },
+          { label: "浜у搧鍚嶇О", prop: "name", productName: true, isRequird: true },
+          { label: "浜у搧缂栧彿", prop: "number" },
+          { label: "鏁伴噺", prop: "amount", inputNumber: true, isRequird: true },
+          { label: "閿�鍞崟浠�", prop: "price", inputFloat: true },
+          { label: "浠风◣鍚堣", prop: "total", inputFloat: true }
         ]
       }
     },
     // 浜у搧鍒楄〃杈撳叆
     inputContent(val, prop, row) {
-      console.log("aaaaaaaa")
-      console.log(val, prop)
-      this.productId = row.id
+      this.productId = row.productId
       this.tableData.map((item) => {
-        if (item.id === row.id) {
+        if (item.productId === row.productId) {
           item[prop] = val
         }
       })
-      console.log(this.tableData)
     },
     // 浜у搧鏂板
     addProductClick() {
       this.productId++
       this.tableData.push({
-        id: this.productId,
-        Amount: 0,
-        IsSale: true,
-        MaterialMode: "",
-        MinInventory: 0,
-        Name: "",
-        Number: "",
-        PurchaseType: "",
-        SalePrice: 0,
-        Unit: ""
+        productId: this.productId,
+        id: 0,
+        amount: 0,
+        desc: "",
+        name: "",
+        number: "",
+        price: 0,
+        total: 0
       })
+      this.showSummary.show = true
     },
     //  浜у搧娓呯┖
     emptyProductClick() {
       this.productId = 1
       this.tableData = [
         {
-          id: 1,
-          Amount: 0,
-          IsSale: true,
-          MaterialMode: "",
-          MinInventory: 0,
-          Name: "",
-          Number: "",
-          PurchaseType: "",
-          SalePrice: 0,
-          Unit: ""
+          productId: this.productId,
+          id: 0,
+          amount: 0,
+          desc: "",
+          name: "",
+          number: "",
+          price: 0,
+          total: 0
         }
       ]
       this.productTableList.tableData = this.tableData
diff --git a/src/views/service/serviceContract/DetailServiceContract.vue b/src/views/service/serviceContract/DetailServiceContract.vue
index 2e0123b..403dc17 100644
--- a/src/views/service/serviceContract/DetailServiceContract.vue
+++ b/src/views/service/serviceContract/DetailServiceContract.vue
@@ -328,33 +328,13 @@
     },
     setTableForm() {
       this.productTableList = {
-        tableData: [
-          {
-            id: "1",
-            productName: "涓婃捣鏈夐檺鍏徃",
-            other0: "ZDYBD03-1",
-            other1: "12",
-            other2: "5.00",
-            other4: "3.00",
-            other3: "2.00"
-          }
-        ],
+        tableData: this.detailConfig.infomation.products,
         tableColumn: [
-          { label: "#", prop: "id", width: 40 },
-          { label: "鍚◣鍗曚环", prop: "other9", input: true },
-          { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
-          { label: "浜у搧缂栧彿", prop: "other0" },
-          { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
-          { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
-          { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
-          { label: "鎶樻墸棰�", prop: "other2" },
-          { label: "绋�(閿�鍞�)", prop: "other7", input: true },
-          { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
-          { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
-          { label: "浠风◣鍚堣", prop: "other3", input: true },
-          { label: "鎻忚堪", prop: "other8" },
-          { label: "婧愬崟绫诲瀷", prop: "other5" },
-          { label: "婧愬崟", prop: "other6" }
+          { label: "浜у搧鍚嶇О", prop: "name", productName: true, isRequird: true },
+          { label: "浜у搧缂栧彿", prop: "number" },
+          { label: "鏁伴噺", prop: "amount", inputNumber: true, isRequird: true },
+          { label: "閿�鍞崟浠�", prop: "price", inputFloat: true },
+          { label: "浠风◣鍚堣", prop: "total", inputFloat: true }
         ]
       }
     }
diff --git a/src/views/service/serviceFollowup/DetailServiceFollowup.vue b/src/views/service/serviceFollowup/DetailServiceFollowup.vue
index 0891623..d27b411 100644
--- a/src/views/service/serviceFollowup/DetailServiceFollowup.vue
+++ b/src/views/service/serviceFollowup/DetailServiceFollowup.vue
@@ -17,11 +17,11 @@
         <div class="tab-view">
           <el-tabs v-model="activeName" @tab-click="tabsClick">
             <el-tab-pane label="璇︽儏" name="first"></el-tab-pane>
-            <el-tab-pane label="闄勪欢绠$悊" name="annex">
-              <!-- <template slot="label">
+            <!-- <el-tab-pane label="闄勪欢绠$悊" name="annex"> -->
+            <!-- <template slot="label">
                 <div>璺熻繘璁板綍<el-badge type="primary" :value="2"> </el-badge></div>
               </template> -->
-            </el-tab-pane>
+            <!-- </el-tab-pane> -->
           </el-tabs>
         </div>
         <div v-if="activeName === 'first'" class="detail">

--
Gitblit v1.8.0