|  |  | 
 |  |  | <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" | 
 |  |  |         ref="fromTable" | 
 |  |  |         :border="isBorder" | 
 |  |  |         :data="tableList.tableData" | 
 |  |  |         :show-summary="showSummary.show" | 
 |  |  |         :summary-method="getSummaries" | 
 |  |  |         :span-method="arraySpanMethod" | 
 |  |  |         style="width: 100%" | 
 |  |  |         @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 | 
 |  |  |           v-for="(item, i) in productTableList.tableColumn" | 
 |  |  |           v-for="(item, i) in tableList.tableColumn" | 
 |  |  |           :key="i" | 
 |  |  |           :prop="item.prop" | 
 |  |  |           :label="item.label" | 
 |  |  | 
 |  |  |                   v-model.trim="scope.row[item.prop]" | 
 |  |  |                   maxlength="50" | 
 |  |  |                   size="mini" | 
 |  |  |                   :disabled="!isOperate" | 
 |  |  |                   @change=" | 
 |  |  |                     (val) => { | 
 |  |  |                       commonInputChange(val, item.prop, scope.row) | 
 |  |  |                       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" | 
 |  |  | 
 |  |  |                 :rules="[{ required: item.isRequird ? true : false, message: '输入不能为空' }]" | 
 |  |  |               > | 
 |  |  |                 <!-- <el-input v-model.trim="scope.row[item.prop]" maxlength="50" size="mini"></el-input> --> | 
 |  |  |                 <el-date-picker v-model="scope.row[item.prop]" type="date" size="mini" style="width: 110px"> | 
 |  |  |                 <el-date-picker | 
 |  |  |                   :disabled="!isOperate" | 
 |  |  |                   v-model="scope.row[item.prop]" | 
 |  |  |                   type="date" | 
 |  |  |                   size="mini" | 
 |  |  |                   style="width: 110px" | 
 |  |  |                 > | 
 |  |  |                 </el-date-picker> | 
 |  |  |               </el-form-item> | 
 |  |  |               <span v-else>{{ scope.row[item.prop] }}</span> | 
 |  |  |               <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> | 
 |  |  |               <span v-else> | 
 |  |  |                 <template> | 
 |  |  |                   {{ scope.row[item.prop] }} | 
 |  |  |                 </template> | 
 |  |  |               </span> | 
 |  |  |             </template> | 
 |  |  |             <span v-else>{{ scope.row[item.prop] }}</span> | 
 |  |  |             <el-form-item | 
 |  |  |                 v-else-if="item.inputFloat" | 
 |  |  |                 label=" " | 
 |  |  |                 :prop="'tableData.' + scope.$index + '.' + item.prop" | 
 |  |  |                 :rules="[{ required: item.isRequird ? true : false, message: '输入不能为空' }]" | 
 |  |  |               > | 
 |  |  |                 <el-input-number | 
 |  |  |                   v-model="scope.row[item.prop]" | 
 |  |  |                   placeholder="" | 
 |  |  |                   :min="0" | 
 |  |  |                   :precision="2" | 
 |  |  |                   :disabled="!isOperate" | 
 |  |  |                   :controls="false" | 
 |  |  |                   size="mini" | 
 |  |  |                   style="width: 100%; margin-right: 5px" | 
 |  |  |                   @change=" | 
 |  |  |                     (val) => { | 
 |  |  |                       commonInputChange(val, item.prop, scope.row, scope) | 
 |  |  |                     } | 
 |  |  |                   " | 
 |  |  |                 ></el-input-number> | 
 |  |  |               </el-form-item> | 
 |  |  |             <el-form-item | 
 |  |  |               v-else-if="item.inputNumber && selectBox" | 
 |  |  |               label=" " | 
 |  |  |               :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> | 
 |  |  |             <span v-else style="text-align: right">{{ scope.row[item.prop] }}</span> | 
 |  |  |           </template> | 
 |  |  |         </el-table-column> | 
 |  |  |         <el-table-column label="操作" width="40" v-if="!detailEnter" align="center"> | 
 |  |  |           <template slot-scope="scope"> | 
 |  |  |             <el-button type="text" size="small" :disabled="!isOperate" @click="deleteClick(scope)">删除</el-button> | 
 |  |  |           </template> | 
 |  |  |         </el-table-column> | 
 |  |  |         <slot name="tableButton" /> | 
 |  |  |       </el-table> | 
 |  |  |     </el-form> | 
 |  |  |     <div v-if="!detailEnter" style="margin: 10px"> | 
 |  |  |       <el-button size="small" type="primary" @click="add">新增</el-button> | 
 |  |  |       <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" @click="empty">清空</el-button> | 
 |  |  |       <el-button size="small" type="primary" @click="recalculate">重算</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="showSummary.total || showSummary.refundable" style="height: 42px; line-height: 42px"> | 
 |  |  |     <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="2" :offset="22"> | 
 |  |  |         <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="2" :offset="22"> | 
 |  |  |         <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" | 
 |  |  |       :quotationNumber="quotationNumber" | 
 |  |  |       @selClient="selClient" | 
 |  |  |       @getSelectArray="getSelectArray" | 
 |  |  |     /> | 
 |  |  |   </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, | 
 |  |  |       default: false | 
 |  |  |     }, | 
 |  |  |     selectBox: { | 
 |  |  |       type: Boolean, | 
 |  |  |       default: false | 
 |  |  |     }, | 
 |  |  |     // 那个页面 用来判断计算方式 | 
 |  |  |     pageName: { | 
 |  |  |       type: String, | 
 |  |  |       default: "" | 
 |  |  |     }, | 
 |  |  |     // 列表新增是否多选 | 
 |  |  |     addTypeIdMultiple: { | 
 |  |  |       type: Boolean, | 
 |  |  |       default: false | 
 |  |  |     }, | 
 |  |  |     // 根据报价单查询产品 | 
 |  |  |     quotationNumber: { | 
 |  |  |       type: [String, Number], | 
 |  |  |       default: "" | 
 |  |  |     }, | 
 |  |  |     // 是否可以操作 添加等 | 
 |  |  |     isOperate: { | 
 |  |  |       type: Boolean, | 
 |  |  |       default: true | 
 |  |  |     }, | 
 |  |  |     isBorder:{ | 
 |  |  |       type: Boolean, | 
 |  |  |       default: false | 
 |  |  |     }, | 
 |  |  | 
 |  |  |       default: () => { | 
 |  |  |         return { | 
 |  |  |           tableData: [], // 接口返回数据 | 
 |  |  |           isReturn: false, | 
 |  |  |           tableColumn: [ | 
 |  |  |             // table表单 | 
 |  |  |             { label: "", prop: "", min: 200, tooltip: true } | 
 |  |  | 
 |  |  |   }, | 
 |  |  |   data() { | 
 |  |  |     return { | 
 |  |  |       total: 0 | 
 |  |  |       total: 0, | 
 |  |  |       productList: [], | 
 |  |  |       tableList: [], | 
 |  |  |       editSelCommonConfig: { | 
 |  |  |         editVisible: false, | 
 |  |  |         isSelectBox: false, | 
 |  |  |         title: "", | 
 |  |  |         infomation: {} | 
 |  |  |       }, | 
 |  |  |       productIndex: 0, | 
 |  |  |       isRecalculate: true | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   created() { | 
 |  |  |     if (!this.selectBox) { | 
 |  |  |       this.getProductList() | 
 |  |  |     } | 
 |  |  |     this.getTableInfo() | 
 |  |  |   }, | 
 |  |  |   watch:{ | 
 |  |  |     "productTableList": { | 
 |  |  |       handler() { | 
 |  |  |         this.getTableInfo() | 
 |  |  |       }, | 
 |  |  |       immediate: true | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   computed: {}, | 
 |  |  |   methods: { | 
 |  |  |     getTableInfo(){ | 
 |  |  |       this.tableList = this.productTableList | 
 |  |  |       if (this.tableList.tableData.length === 1 && this.tableList.tableData[0].name === "") { | 
 |  |  |         this.isRecalculate = false | 
 |  |  |       } else { | 
 |  |  |         this.isRecalculate = true | 
 |  |  |       } | 
 |  |  |     }, | 
 |  |  |     // 产品名称 | 
 |  |  |     async getProductList() { | 
 |  |  |       await getProductList({ | 
 |  |  |         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) | 
 |  |  |     }, | 
 |  |  | 
 |  |  |     }, | 
 |  |  |     // 合计 | 
 |  |  |     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 | 
 |  |  |         } | 
 |  |  |         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)) | 
 |  |  |             } | 
 |  |  |             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) { | 
 |  |  | 
 |  |  |     }, | 
 |  |  |     // 新增 | 
 |  |  |     add() { | 
 |  |  |       this.$emit("addProductClick") | 
 |  |  |       if (this.addTypeIdMultiple) { | 
 |  |  |         this.productIndex = this.tableList.tableData.length | 
 |  |  |         this.editSelCommonConfig.title = "产品名称" | 
 |  |  |         this.editSelCommonConfig.isSelectBox = true | 
 |  |  |         this.editSelCommonConfig.editVisible = true | 
 |  |  |       } else { | 
 |  |  |         this.$emit("addProductClick") | 
 |  |  |       } | 
 |  |  |     }, | 
 |  |  |     commonInputChange(val, prop, row) { | 
 |  |  |       console.log(val, prop) | 
 |  |  |       console.log(row) | 
 |  |  |       this.$emit("inputContent", val, prop, row) | 
 |  |  |     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() { | 
 |  |  | 
 |  |  |       }) | 
 |  |  |         .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> | 
 |  |  | 
 |  |  | .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 { | 
 |  |  | 
 |  |  |   } | 
 |  |  |   .el-table__footer-wrapper tbody td.el-table__cell { | 
 |  |  |     background-color: #fff; | 
 |  |  |     text-align: right; | 
 |  |  |     // text-align: right; | 
 |  |  |     font-weight: bold; | 
 |  |  |   } | 
 |  |  |   .el-input--suffix .el-input__inner { | 
 |  |  | 
 |  |  |   .el-table th.el-table__cell > .cell { | 
 |  |  |     padding: 0 5px; | 
 |  |  |   } | 
 |  |  |   .el-input__inner { | 
 |  |  |     // text-align: left; | 
 |  |  |     text-align: center !important; | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | </style> |