From 4672d108e701bb4ff380ac9373504ee7cb85919b Mon Sep 17 00:00:00 2001
From: charles <981744753@qq.com>
Date: 星期四, 11 七月 2024 14:44:48 +0800
Subject: [PATCH] feat:纤度登记表重构

---
 src/views/productManage/silkRegisterForm/addPage.vue                  |   39 ++
 src/views/productManage/silkRegisterForm/components/FormTableView.vue |  801 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 832 insertions(+), 8 deletions(-)

diff --git a/src/views/productManage/silkRegisterForm/addPage.vue b/src/views/productManage/silkRegisterForm/addPage.vue
index 17c5680..0260ee3 100644
--- a/src/views/productManage/silkRegisterForm/addPage.vue
+++ b/src/views/productManage/silkRegisterForm/addPage.vue
@@ -171,8 +171,8 @@
                             @selTableCol="selTableCol">
                         </TableCommonView> -->
             <!-- 淇敼涓鸿緭鍏� -->
-            <CommonFormTableView
-              ref="commonFormTableView"
+            <FormTableView
+              ref="formTableView"
               :detail-enter="isView ? true : false"
               :selectBox="false"
               :detailEnter="true"
@@ -181,7 +181,7 @@
               :product-table-list="tableList"
               @inputContent="inputContent"
               @addProductClick="addProductClick"
-            ></CommonFormTableView>
+            ></FormTableView>
           </div>
         </div>
         <div class="body-r">
@@ -437,8 +437,9 @@
   saveCheck
 } from "@/api/productManage/silkInspectForm.js";
 import pageMixin from "@/components/makepager/pager/mixin/pageMixin";
-import CommonFormTableView from "@/components/makepager/CommonFormTableView";
+//import CommonFormTableView from "@/components/makepager/CommonFormTableView";
 import { getWorkshopManageGroup } from "@/api/productManage/productRegisterForm.js";
+import FormTableView from '@/views/productManage/silkRegisterForm/components/FormTableView.vue';
 import moment from 'moment';
 let  idValue=moment(new Date()).format('YYYYMMDDHHmmss');
 export default {
@@ -446,7 +447,7 @@
   props: {},
   mixins: [pageMixin],
   components: {
-    CommonFormTableView,
+      FormTableView,
   },
   data() {
     return {
@@ -795,13 +796,35 @@
             }).then((res) => {
               if (res.code == 200) {
                 this.tableData=[]
-                let data = res.data?JSON.parse(JSON.stringify(res.data)) : [];
+                const {startCarNumber,endCarNumber,startCarHalf,endCarHalf}=res.data;
+                for(let i=startCarNumber;i<=endCarNumber;i++){
+                   if(i===startCarNumber){
+                      if(startCarHalf===1){//宸﹀崐杞�
+                          this.tableData.push({position:i,productId:Number(i)*2-1});
+                          this.tableData.push({position:i,productId:Number(i)*2});
+                      }else{//鍙冲崐杞�
+                          this.tableData.push({position:i,productId:Number(i)*2-1});
+                      }
+                   }else if(i===endCarNumber){
+                      if(endCarHalf===1){//宸﹀崐杞�
+                          this.tableData.push({position:i,productId:Number(i)*2-1});
+                          this.tableData.push({position:i,productId:Number(i)*2});
+                      }else{//鍙冲崐杞�
+                          this.tableData.push({position:i,productId:Number(i)*2-1});
+                      }
+                   }else{
+                       this.tableData.push({position:i,productId:Number(i)*2-1});
+                       this.tableData.push({position:i,productId:Number(i)*2});
+                   }
+                }
+                /*let data = res.data?JSON.parse(JSON.stringify(res.data)) : [];
                if(Object.keys(data).length>0){
                 for(let i in data){
                     this.tableData.push({position:data[i],productId:Number(i)*2+1})
                     this.tableData.push({position:data[i],productId:Number(i)*2+2})
-                }
-               }
+                  }
+               }*/
+               console.log(this.tableData);
                this.tableList.tableData = this.tableData 
               }else{
                 this.tableData=[]
diff --git a/src/views/productManage/silkRegisterForm/components/FormTableView.vue b/src/views/productManage/silkRegisterForm/components/FormTableView.vue
new file mode 100644
index 0000000..3ea3d3b
--- /dev/null
+++ b/src/views/productManage/silkRegisterForm/components/FormTableView.vue
@@ -0,0 +1,801 @@
+<template>
+  <div class="page-view">
+    <el-form ref="form" :model="tableList" :show-message="false" label-position="right">
+      <el-table
+        ref="fromTable"
+        :border="isBorder"
+        :data="tableList.tableData"
+        :show-summary="showSummary.show"
+        :summary-method="getSummaries"
+        :span-method="arraySpanMethod"
+        style="width: 100%"
+        :header-cell-style="{ background: '#f1f3f8', color: tableList.headerColor?tableList.headerColor:'#000009', 'font-size': '14px', 'font-family': 'PingFangSC' }"
+        @selection-change="handleSelectionChange"
+        :row-key="(row) => row.productId"
+      >
+        <el-table-column v-if="selectBox" type="selection" :reserve-selection="true" width="40" align="center">
+        </el-table-column>
+        <el-table-column v-if="tableList.isReturn" type="index" label="#" width="50" align="center"></el-table-column>
+        
+        <el-table-column
+          align="center"
+          v-for="(item, i) in tableList.tableColumn"
+          :key="i"
+          :prop="item.prop"
+          :label="item.label"
+          :width="item.width"
+          :min-width="item.min"
+          show-overflow-tooltip
+          :sortable="item.sortable"
+        > 
+        <!-- 鎵�鏈夌殑琛ㄦ牸淇敼涓哄彲閰嶇疆琛ㄥご鐨勪箣鍚� v-if淇敼涓簐-if="item.isShowColumn" -->
+          <!-- 琛ㄥご鏍峰紡 -->
+          <template slot="header">
+            <span v-if="item.isRequird" style="color: #f56c6c">*</span>
+            <span>{{ item.label }}</span>
+          </template>
+          <!-- column鏍峰紡 -->
+          <template slot-scope="scope">
+            <template v-if="!detailEnter">
+              <el-form-item
+                v-if="item.input"
+                label=" "
+                :prop="'tableData.' + scope.$index + '.' + item.prop"
+                :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
+              >
+                <el-input
+                  v-model.trim="scope.row[item.prop]"
+                  maxlength="50"
+                  size="mini"
+                  :disabled="!isOperate"
+                  @change="
+                    (val) => {
+                      commonInputChange(val, item.prop, scope.row, scope)
+                    }
+                  "
+                ></el-input>
+              </el-form-item>
+              <el-form-item
+                v-else-if="item.productName"
+                label=" "
+                :prop="'tableData.' + scope.$index + '.' + item.prop"
+              >
+                <div class="custom-name">
+                  <el-autocomplete
+                    v-model="scope.row[item.prop]"
+                    :fetch-suggestions="querySearchAsync"
+                    value-key="name"
+                    :disabled="!isOperate"
+                    size="mini"
+                    @select="
+                      (val) => {
+                        handleSelectClient(val, item.prop, scope.row)
+                      }
+                    "
+                  ></el-autocomplete>
+
+                  <div
+                    v-if="scope.row[item.prop] && scope.row[item.prop].length > 0 && isOperate"
+                    class="common-select-btn"
+                    @click="handleEditClient(scope, item.prop)"
+                  >
+                    <i class="el-icon-edit" title="缂栬緫"></i>
+                  </div>
+                  <div
+                    v-if="scope.row[item.prop] && scope.row[item.prop].length > 0 && isOperate"
+                    class="common-select-btn"
+                    @click="clearupClient(scope)"
+                  >
+                    <i class="el-icon-remove-outline" title="娓呴櫎"></i>
+                  </div>
+                  <div class="common-select-btn" v-else @click="selClientClick(scope, item.prop)">
+                    <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i>
+                  </div>
+                </div>
+              </el-form-item>
+              <el-form-item
+                v-else-if="item.date"
+                label=" "
+                :prop="'tableData.' + scope.$index + '.' + item.prop"
+                :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
+              >
+                <!-- <el-input v-model.trim="scope.row[item.prop]" maxlength="50" size="mini"></el-input> -->
+                <el-date-picker
+                  :disabled="!isOperate"
+                  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"
+                  :disabled="!isOperate"
+                  size="mini"
+                  style="width: 100%; margin-right: 5px"
+                  @change="
+                    (val) => {
+                      commonInputChange(val, item.prop, scope.row, scope)
+                    }
+                  "
+                ></el-input-number>
+              </el-form-item>
+              <el-form-item
+                v-else-if="item.inputFloat"
+                label=" "
+                :prop="'tableData.' + scope.$index + '.' + item.prop"
+                :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
+              >
+                <el-input-number
+                  v-model="scope.row[item.prop]"
+                  placeholder=""
+                  :min="0"
+                  :precision="2"
+                  :disabled="!isOperate"
+                  :controls="false"
+                  size="mini"
+                  style="width: 100%; margin-right: 5px"
+                  @change="
+                    (val) => {
+                      commonInputChange(val, item.prop, scope.row, scope)
+                    }
+                  "
+                ></el-input-number>
+                
+              </el-form-item>
+              <el-form-item
+                v-else-if="item.inputInteger"
+                label=" "
+                :prop="'tableData.' + scope.$index + '.' + item.prop"
+                :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
+              >
+                <el-input
+                  v-model.number="scope.row[item.prop]"
+                  maxlength="50"
+                  size="mini"
+                  :disabled="!isOperate"
+                  :controls="false"
+                  style="width: 100%; margin-right: 5px"
+                  @change="
+                    (val) => {
+                      commonInputChange(val, item.prop, scope.row, scope)
+                    }
+                  "
+                ></el-input>
+              </el-form-item>
+              <span v-else>
+                <template>
+                  {{ scope.row[item.prop] }}
+                </template>
+              </span>
+            </template>
+            <el-form-item
+                v-else-if="item.input"
+                label=" "
+                :prop="'tableData.' + scope.$index + '.' + item.prop"
+                :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
+              >
+                <el-input
+                  v-model.trim="scope.row[item.prop]"
+                  maxlength="50"
+                  size="mini"
+                  :disabled="!isOperate"
+                  @change="
+                    (val) => {
+                      commonInputChange(val, item.prop, scope.row, scope)
+                    }
+                  "
+                ></el-input>
+              </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"
+                  :disabled="!isOperate"
+                  :controls="false"
+                  size="mini"
+                  style="width: 100%; margin-right: 5px"
+                  @change="
+                    (val) => {
+                      commonInputChange(val, item.prop, scope.row, scope)
+                    }
+                  "
+                ></el-input-number>
+              </el-form-item>
+            <el-form-item
+              v-else-if="item.inputNumber"
+              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"
+                :disabled="!isOperate"
+                size="mini"
+                style="width: 100%; margin-right: 5px"
+                @change="
+                  (val) => {
+                    commonInputChange(val, item.prop, scope.row, scope)
+                  }
+                "
+              ></el-input-number>
+            </el-form-item>
+            <el-form-item
+                v-else-if="item.inputInteger"
+                label=" "
+                :prop="'tableData.' + scope.$index + '.' + item.prop"
+                :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
+              >
+                <el-input
+                  v-model.number="scope.row[item.prop]"
+                  maxlength="50"
+                  size="mini"
+                  :disabled="!isOperate"
+                  :controls="false"
+                  style="width: 100%; margin-right: 5px"
+                  @change="
+                    (val) => {
+                      commonInputChange(val, item.prop, scope.row, scope)
+                    }
+                  "
+                ></el-input>
+              </el-form-item>
+            <span v-else style="text-align: right">{{ scope.row[item.prop] }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="鎿嶄綔" width="70" v-if="!detailEnter" align="center" fixed='right'>
+          <template slot-scope="scope">
+            
+            <el-button type="text" size="small" :disabled="!isOperate" @click="deleteClick(scope)">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+        <slot name="tableButton" />
+      </el-table>
+      <div class="styleBtn" v-if="colOpenShow">
+        <i @click="checkCol()"  class="label">...</i>
+        <el-checkbox-group v-model="showcol" v-show="iscolopen" class="checkbox-group" @change="selectCheckBoxList">
+          <el-checkbox v-for="item in tableList.allcol" :label="item" :key="item">{{ item }} </el-checkbox>
+        </el-checkbox-group>
+      </div>
+    </el-form>
+    <el-button style="margin: 10px"  size="small" type="primary"  @click="add">鏂板</el-button>
+    <div v-if="!detailEnter" style="margin: 10px" >
+      <el-button size="small" type="primary" :disabled="!isOperate" @click="add">鏂板</el-button>
+      <!-- <el-button size="small" type="primary" disabled>瀵煎叆鏄庣粏</el-button> -->
+      <el-button size="small"  type="primary" :disabled="!isOperate" @click="empty">娓呯┖</el-button>
+      <el-button size="small"  type="primary" @click="recalculate" :disabled="isRecalculate && !isOperate ? false : true"
+        >閲嶇畻</el-button
+      >
+    </div>
+    <div v-if="false && (showSummary.total || showSummary.refundable)" style="height: 42px; line-height: 42px">
+      <el-row :gutter="10">
+        <el-col v-if="showSummary.total" :span="3" :offset="21">
+          <span style="font-weight: bold">鍚堣</span>
+          <span style="margin-left: 10px">{{ total }}</span>
+        </el-col>
+        <el-col v-if="showSummary.refundable" :span="3" :offset="21">
+          <span style="font-weight: bold">搴旈��娆�</span>
+          <span style="margin-left: 10px">0.00</span>
+        </el-col>
+      </el-row>
+    </div>
+    <!-- 鍚堝悓璁㈠崟 -->
+    <!-- <SelectCommonDialog
+      v-if="editSelCommonConfig.editVisible"
+      :edit-common-config="editSelCommonConfig"
+      :selectBoxList="tableList.tableData"
+      @selClient="selClient"
+      @getSelectArray="getSelectArray"
+    /> -->
+  </div>
+</template>
+
+<script>
+// import { getProductList } from "@/api/common/other"
+// import SelectCommonDialog from "@/views/other/commonDialog/SelectCommonDialog"
+export default {
+  name: "FormTableView",
+  // components: { SelectCommonDialog },
+  props: {
+    detailEnter: {
+      type: Boolean,
+      default: false
+    },
+    // 鏄惁鍙互閰嶇疆鍒楄〃 琛ㄥご
+    colOpenShow: {
+      type: Boolean,
+      default: false,
+    },
+    selectBox: {
+      type: Boolean,
+      default: false
+    },
+    // 閭d釜椤甸潰 鐢ㄦ潵鍒ゆ柇璁$畻鏂瑰紡
+    pageName: {
+      type: String,
+      default: ""
+    },
+    // 鍒楄〃鏂板鏄惁澶氶��
+    addTypeIdMultiple: {
+      type: Boolean,
+      default: false
+    },
+    // 鏄惁鍙互鎿嶄綔 娣诲姞绛�
+    isOperate: {
+      type: Boolean,
+      default: true
+    },
+    isBorder:{
+      type: Boolean,
+      default: false
+    },
+    productTableList: {
+      type: Object,
+      default: () => {
+        return {
+          tableData: [], // 鎺ュ彛杩斿洖鏁版嵁
+          isReturn: false,
+          allcol: [],
+          showcol: [],
+          tableColumn: [
+            // table琛ㄥ崟
+            { label: "", prop: "", min: 200, tooltip: true }
+          ]
+        }
+      }
+    },
+    showSummary: {
+      type: Object,
+      default: () => {
+        return {
+          show: false,
+          total: false,
+          refundable: false,
+          sumProp: [],
+          mergeNumber: 1
+        }
+      }
+    }
+  },
+  data() {
+    return {
+      total: 0,
+      productList: [],
+      tableList: [],
+      editSelCommonConfig: {
+        editVisible: false,
+        isSelectBox: false,
+        title: "",
+        infomation: {}
+      },
+      productIndex: 0,
+      isRecalculate: true,
+      iscolopen: false,
+      showcol: [],
+      mergeNumber:1
+    }
+  },
+  created() {
+    if (!this.selectBox) {
+      this.getProductList()
+    }
+    this.getTableInfo()
+  },
+  watch:{
+    "productTableList": {
+      handler() {
+        this.showcol = this.productTableList.showcol
+        this.getTableInfo()
+      },
+      immediate: true
+    },
+    "productTableList.showcol": {
+      handler(newVal) {
+        this.showcol = newVal
+        this.getMergeNumber()
+      },
+      immediate: true
+    },
+  },
+  computed: {},
+  methods: {
+    getMergeNumber(){
+      let pattern=new RegExp("[0-9]+");
+        if(pattern.test(this.showSummary.mergeNumber)){
+          this.mergeNumber=this.showSummary.mergeNumber
+        }else{
+          for(let i in this.showcol){
+            if(this.showcol[i]==this.showSummary.mergeNumber){
+              this.mergeNumber=Number(i)+1;
+            }
+          }
+        } 
+    },
+    checkCol() {
+      this.iscolopen = !this.iscolopen
+    },
+    selectCheckBoxList(val) {
+      this.getMergeNumber()
+      this.$emit("selTableCol", val)
+    },
+    getTableInfo(){
+      this.tableList = this.productTableList
+      if (this.tableList.tableData.length === 1 && this.tableList.tableData[0].name === "") {
+        this.isRecalculate = false
+      } else {
+        this.isRecalculate = true
+      }
+    },
+    // 浜у搧鍚嶇О
+    async getProductList() {
+      // await getProductList({
+      //   productName: "",
+      //   productNumber: "",
+      //   page: 1,
+      //   pageSize: 100
+      // }).then((res) => {
+      //   console.log(res, "浜у搧鍚嶇О")
+      //   if (res.code === 200) {
+      //     if (res.data.data && res.data.data.length > 0) {
+      //       this.productList = res.data.data
+      //     }
+      //   }
+      // })
+    },
+    handleReserve(row) {
+      return row._id ? row._id : row.id
+    },
+    // 澶氶��
+    handleSelectionChange(val) {
+      this.$emit("getSelectArray", val)
+    },
+    // 琛屽悎骞�
+    arraySpanMethod() {
+      if (this.showSummary.show) {
+        this.$nextTick(() => {
+          if (this.$refs.table) {
+            var current = this.$refs.table.querySelector(".el-table__footer-wrapper").querySelector(".el-table__footer")
+            var cell = current.rows[0].cells
+            for (let i = 0; i < this.mergeNumber; i++) {
+              cell[i].style.display = "none"
+            }
+            cell[this.mergeNumber].classList.remove("is-left")
+            cell[this.mergeNumber].colSpan = this.mergeNumber.toString()
+          }
+        })
+      }
+    },
+    // 鍚堣
+    getSummaries(param) {
+      const { columns, data } = param
+      const sums = []
+      columns.forEach((column, index) => {
+        // // 鏇存敼琛屽悕绉�
+        if (index === this.mergeNumber) {
+          sums[index] = this.showSummary.totalLabel?this.showSummary.totalLabel:"灏忚:"
+          return
+        }
+        const title = ["#", "浜у搧鍚嶇О", "浜у搧缂栧彿", "鍗曚綅", "閿�鍞崟浠�", "鎴愭湰鍗曚环"]
+        // 鍘婚櫎鏌愪簺涓嶉渶瑕佽绠楃殑鏁版嵁
+        if (title.includes(column.label)) {
+          sums[index] = ""
+          return
+        }
+        if (this.pageName == "quotation" && column.label == "姣涘埄") {
+          sums[index] = ""
+          return
+        }
+        // 鎶婂綋鍓嶈〃鏍兼暟鎹腑鍚屼釜鍒嗙被鐨勬暟鎹敹闆嗚捣鏉�
+        const values = data.map((item) => Number(item[column.property]))
+        // 杩囨护鎺�
+        if (!values.every((value) => Number.isNaN(value))) {
+          sums[index] = ` ${values.reduce((prev, curr) => {
+            const value = Number(curr)
+            if (!Number.isNaN(value)) {
+              const num = prev + curr
+              return Number(num.toFixed(2))
+            } else {
+              return Number(prev.toFixed(2))
+            }
+          }, 0)}`
+        } else {
+          sums[index] = ""
+        }
+        if (column.property === "total") {
+          this.total = sums[index]
+        }
+      })
+      return sums
+    },
+    // 鏁板瓧鎹㈣涓洪噾棰濇樉绀烘牸寮�
+    number_format(number, decimals, dec_point, thousands_sep) {
+      decimals = 2 //杩欓噷榛樿璁剧疆淇濈暀涓や綅灏忔暟锛屼篃鍙互娉ㄩ噴杩欏彞閲囩敤浼犲叆鐨勫弬鏁�
+      /*
+       * 鍙傛暟璇存槑锛�
+       * number锛氳鏍煎紡鍖栫殑鏁板瓧
+       * decimals锛氫繚鐣欏嚑浣嶅皬鏁�
+       * dec_point锛氬皬鏁扮偣绗﹀彿
+       * thousands_sep锛氬崈鍒嗕綅绗﹀彿
+       * */
+      number = (number + "").replace(/[^0-9+-Ee.]/g, "")
+      var n = !isFinite(+number) ? 0 : +number,
+        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
+        sep = typeof thousands_sep === "undefined" ? "," : thousands_sep,
+        dec = typeof dec_point === "undefined" ? "." : dec_point
+      var s = n.toString().split(".")
+      var re = /(-?\d+)(\d{3})/
+      while (re.test(s[0])) {
+        s[0] = s[0].replace(re, "$1" + sep + "$2")
+      }
+      if ((s[1] || "").length < prec) {
+        s[1] = s[1] || ""
+        s[1] += new Array(prec - s[1].length + 1).join("0")
+      } else {
+        s[1] = s[1].substring(0, prec) //灏忔暟鐐逛綅鏁拌秴鍑洪暱搴︽椂鎴彇鍓嶉潰鐨勪綅鏁�
+      }
+      return s.join(dec)
+    },
+    // 鏂板
+    add() {
+      if (this.addTypeIdMultiple) {
+        this.productIndex = this.tableList.tableData.length
+        this.editSelCommonConfig.title = "浜у搧鍚嶇О"
+        this.editSelCommonConfig.isSelectBox = true
+        this.editSelCommonConfig.editVisible = true
+      } else {
+        this.$emit("addProductClick")
+      }
+    },
+    commonInputChange(val, prop, row, scope) {
+      if (prop === "amount") {
+        this.tableList.tableData.map((ite) => {
+          if (ite.name === row.name) {
+            ite.total = row.amount * row.price
+          }
+        })
+      }
+      if (this.pageName == "quotation" && prop == "cost" && scope.row.cost) {
+        let value = scope.row.cost
+        let reg2 = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
+        if (!reg2.test(value) || value == 0) {
+          this.$message.error("鎴愭湰鍗曚环闇�瑕佸~鍐欏ぇ浜�0鐨�2浣嶅皬鏁帮紒")
+          return true
+        }
+        this.$forceUpdate()
+      }
+      if (this.pageName == "quotation") {
+        if (prop == "price" || prop == "cost") {
+          if (scope.row.price && scope.row.cost) {
+            let profit = Number(scope.row.price) - Number(scope.row.cost)
+            scope.row.profit = profit + ""
+            let margin = (((Number(scope.row.price) - Number(scope.row.cost)) * 100) / Number(scope.row.cost)).toFixed(
+              2
+            )
+            scope.row.margin = margin + ""
+          }
+        }
+      }
+      this.$emit("inputContent", val, prop, row, scope)
+    },
+    // 娓呯┖
+    empty() {
+      this.isRecalculate = false
+      this.$emit("emptyProductClick")
+    },
+    // 鍒犻櫎
+    deleteClick(scope) {
+      this.tableList.tableData.splice(scope.$index, 1)
+      this.$forceUpdate()
+      this.$message.success("鍒犻櫎鎴愬姛锛�")
+      this.$emit("deleteClick", scope)
+    },
+    // 閲嶇畻
+    recalculate() {
+      this.$confirm("纭畾瑕侀噸绠楁槑缁嗘墍鏈夎?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      })
+        .then(() => {
+          this.$emit("recalculateProductClick")
+          this.tableList.tableData.map((ite) => {
+            ite.total = ite.amount ? ite.amount * ite.price : 1 * ite.price
+          })
+        })
+        .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
+      this.isRecalculate = true
+      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
+          ite.unit = item.unit
+        }
+      })
+    },
+    // 鏂板
+    selClientClick(scope, prop) {
+      console.log(scope, prop)
+      this.productIndex = scope.$index
+      this.editSelCommonConfig.title = "浜у搧鍚嶇О"
+      this.editSelCommonConfig.isSelectBox = true
+      this.editSelCommonConfig.editVisible = true
+    },
+    // 缂栬緫
+    handleEditClient(scope, prop) {
+      console.log(scope, prop)
+      this.productIndex = scope.$index
+      this.editSelCommonConfig.title = "浜у搧鍚嶇О"
+      this.editSelCommonConfig.isSelectBox = false
+      this.editSelCommonConfig.editVisible = true
+    },
+    selClient(item) {
+      let list = this.tableList.tableData.map((item) => item.number)
+      if (list.findIndex((v) => v == item.number) == -1) {
+        this.isRecalculate = true
+        // this.editConfig.infomation.client_name = row.name
+        this.tableList.tableData.map((ite, index) => {
+          if (index === this.productIndex) {
+            ite.name = item.name
+            ite.amount = item.amount || 1
+            ite.number = item.number
+            ite.price = item.price
+            ite.total = item.amount ? item.amount * item.price : 1 * item.price
+            ite.unit = item.unit
+          }
+        })
+      } else {
+        this.$message.error("涓嶈兘閫夋嫨閲嶅鐨勪骇鍝侊紝 璇烽噸鏂伴�夋嫨")
+      }
+    },
+    getSelectArray(val) {
+      this.$emit("getSelectArray", val, this.productIndex)
+    },
+    // 娓呴櫎宸查�夋嫨鐢ㄦ埛
+    clearupClient(scope) {
+      this.productIndex = scope.$index
+      this.tableList.tableData.map((ite, index) => {
+        if (index === this.productIndex) {
+          ite.name = ""
+          ite.amount = 1
+          ite.number = ""
+          ite.price = 0
+          ite.total = 0
+          ite.unit = ""
+        }
+      })
+      this.$emit("clearupProduct", this.tableList.tableData)
+    }
+    // 澶氶�夎缃凡閫変腑
+    // toggleSelection(rows) {
+    //   console.log("88888888888888888888888888888888888888888")
+    //   console.log(rows)
+    //   if (rows) {
+    //     rows.forEach((row) => {
+    //       this.$refs.fromTable.toggleRowSelection(row, true)
+    //       console.log(row)
+    //     })
+    //   }
+    // }
+  }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style lang="scss" scoped>
+.page-view {
+  position: relative;
+  .el-form{
+    height:calc(100% - 120px);
+  }
+  .el-form-item {
+    margin-bottom: 0;
+    .custom-name {
+      display: flex;
+      .common-select-btn {
+        margin-left: 5px;
+        font-size: 18px;
+        cursor: pointer;
+      }
+    }
+  }
+}
+::v-deep {
+  .el-form-item__label {
+    display: none;
+  }
+  .el-table__footer-wrapper tbody td.el-table__cell {
+    background-color: #fff;
+    // text-align: right;
+    font-weight: bold;
+  }
+  .el-input--suffix .el-input__inner {
+    padding-right: 0px;
+  }
+  .el-table th.el-table__cell{
+    padding: 6px 0 !important;
+    height: 35px;
+  }
+  .el-table td.el-table__cell{
+    padding: 6px 0 !important;
+  }
+  .el-table__fixed-footer-wrapper tbody td.el-table__cell{
+    background:#fff;
+  }
+  .el-input__inner {
+    // text-align: left;
+    text-align: center !important;
+  }
+  .styleBtn {
+    position: absolute;
+    width: 30px;
+    height: 48px;
+    // line-height: 26px;
+    // background: #06c062;
+    top: 0;
+    right: -6px;
+    z-index: 11;
+    .label {
+      position: absolute;
+      top: 11px;
+      font-size: 20px;
+      // line-height: 5px;
+      cursor: pointer;
+      color: #000;
+      transform: rotate(-90deg);
+    }
+    .checkbox-group {
+      width: 160px;
+      height: 180px;
+      overflow: auto;
+      display: flex;
+      flex-direction: column;
+      line-height: 25px;
+      background: #ffffff;
+      border-radius: 16px;
+      padding: 12px;
+      position: absolute;
+      right: 0;
+      top: 30px;
+      z-index: 99;
+      box-shadow: 0 0 2px 2px #f8f8f8;
+    }
+  }
+}
+</style>

--
Gitblit v1.8.0