| <template> | 
|   <div class="add-sales-return"> | 
|     <el-dialog | 
|       :title="editCommonConfig.title + '销售退货单'" | 
|       :visible.sync="editConfig.visible" | 
|       :width="dialogWidth" | 
|       :before-close="handleClose" | 
|       append-to-body | 
|       custom-class="iframe-dialog" | 
|     > | 
|       <el-form | 
|         ref="form" | 
|         :model="editConfig.infomation" | 
|         :rules="rules" | 
|         label-position="right" | 
|         label-width="30%" | 
|         size="mini" | 
|         style="height: 60vh; overflow-x: hidden" | 
|       > | 
|         <!-- 信息 --> | 
|         <div class="basic-info"> | 
|           <!-- 基本信息 --> | 
|           <div class="basic-info-title">基本信息</div> | 
|           <div class="basic-info-view"> | 
|             <el-row> | 
|               <el-col :span="12"> | 
|                 <el-form-item label="客户名称" prop="client_name"> | 
|                   <div class="custom-name"> | 
|                     <el-autocomplete | 
|                       style="width:100%" | 
|                       v-model="editConfig.infomation.client_name" | 
|                       :fetch-suggestions=" | 
|                         (queryString, callback) => { | 
|                           querySearchAsync(queryString, callback, 'client') | 
|                         } | 
|                       " | 
|                       value-key="name" | 
|                       @select="handleSelectClient('client', $event)" | 
|                     ></el-autocomplete> | 
|                     <div class="common-select-btn" @click="selClientClick('client')"> | 
|                       <i class="el-icon-circle-plus-outline" title="选择"></i> | 
|                     </div> | 
|                     <div | 
|                       v-if="editConfig.infomation.client_name && editConfig.infomation.client_name.length > 0" | 
|                       class="common-select-btn" | 
|                       @click="clearupClient('client')" | 
|                     > | 
|                       <i class="el-icon-remove-outline" title="清除"></i> | 
|                     </div> | 
|                   </div> | 
|                 </el-form-item> | 
|               </el-col> | 
|               <el-col :span="12"> | 
|                 <el-form-item label="销售退货单编号" prop="number"> | 
|                   <el-input v-model="editConfig.infomation.number" style="width:100%"></el-input> | 
|                 </el-form-item> | 
|               </el-col> | 
|               <el-col :span="12"> | 
|                 <el-form-item label="合同订单"> | 
|                   <div class="custom-name"> | 
|                     <el-autocomplete | 
|                     style="width:100%" | 
|                       v-model="editConfig.infomation.salesDetailNumber" | 
|                       :fetch-suggestions=" | 
|                         (queryString, callback) => { | 
|                           querySearchAsync(queryString, callback, 'contract') | 
|                         } | 
|                       " | 
|                       value-key="number" | 
|                       @select="handleSelectClient('contract', $event)" | 
|                     ></el-autocomplete> | 
|                     <div class="common-select-btn" @click="selClientClick('contract')"> | 
|                       <i class="el-icon-circle-plus-outline" title="选择"></i> | 
|                     </div> | 
|                     <div | 
|                       v-if="editConfig.infomation.number && editConfig.infomation.number.length > 0" | 
|                       class="common-select-btn" | 
|                       @click="clearupClient('contract')" | 
|                     > | 
|                       <i class="el-icon-remove-outline" title="清除"></i> | 
|                     </div> | 
|                   </div> | 
|                 </el-form-item> | 
|               </el-col> | 
|               <el-col :span="12"> | 
|                 <el-form-item label="退入仓库" prop="repository"> | 
|                   <el-select v-model="editConfig.infomation.repository" size="mini" style="width: 100%"> | 
|                     <el-option v-for="item in repositoryOptions" :key="item.id" :label="item.name" :value="item.name"> | 
|                     </el-option> | 
|                   </el-select> | 
|                 </el-form-item> | 
|               </el-col> | 
|               <el-col :span="12"> | 
|                 <el-form-item label="销售负责人" prop="memberId"> | 
|                   <el-select | 
|                     v-model="editConfig.infomation.memberId" | 
|                     placeholder="请选择" | 
|                     size="mini" | 
|                     style="width: 100%" | 
|                   > | 
|                     <el-option v-for="item in memberOptions" :key="item.id" :label="item.username" :value="item.id"> | 
|                     </el-option> | 
|                   </el-select> | 
|                 </el-form-item> | 
|               </el-col> | 
|               <el-col :span="12"> | 
|                 <el-form-item label="退货日期" prop="returnDate"> | 
|                   <el-date-picker | 
|                     v-model="editConfig.infomation.returnDate" | 
|                     value-format="yyyy-MM-dd" | 
|                     type="date" | 
|                     placeholder="选择日期" | 
|                     style="width:100%" | 
|                   > | 
|                   </el-date-picker> | 
|                 </el-form-item> | 
|               </el-col> | 
|             </el-row> | 
|           </div> | 
|           <!-- 动态信息 --> | 
|           <div class="basic-info-title">动态信息</div> | 
|           <div class="basic-info-view"> | 
|             <el-row> | 
|               <el-col :span="12"> | 
|                 <el-form-item label="状态" prop="salesReturnStatusId"> | 
|                   <div class="common-select"> | 
|                     <el-select | 
|                     style="width:100%" | 
|                       v-model="editConfig.infomation.salesReturnStatusId" | 
|                       placeholder="请选择" | 
|                       class="common-select-sel" | 
|                       size="mini" | 
|                     > | 
|                       <el-option v-for="item in statusOptions" :key="item.id" :label="item.name" :value="item.id"> | 
|                       </el-option> | 
|                     </el-select> | 
|                     <!-- <div class="common-select-btn"><i class="el-icon-setting"></i></div> --> | 
|                   </div> | 
|                 </el-form-item> | 
|               </el-col> | 
|             </el-row> | 
|           </div> | 
|           <!-- 备注信息 --> | 
|           <div class="basic-info-title">备注信息</div> | 
|           <div class="basic-info-view"> | 
|             <el-row> | 
|               <el-col :span="24"> | 
|                 <el-form-item label="退货原因" prop="reason" label-width="15%"> | 
|                   <el-input | 
|                   style="width:100%" | 
|                     type="textarea" | 
|                     :autosize="{ minRows: 2 }" | 
|                     v-model="editConfig.infomation.reason" | 
|                   ></el-input> | 
|                 </el-form-item> | 
|               </el-col> | 
|             </el-row> | 
|           </div> | 
|           <!-- 附件信息 --> | 
|           <!-- <div class="basic-info-title">附件信息</div> | 
|           <div class="basic-info-view"> | 
|             <el-row> | 
|               <el-col :span="12"> | 
|                 <el-form-item label="附件" prop=""> | 
|                   <template slot="label"> | 
|                     <div style="display: flex; float: right"> | 
|                       <div style="font-size: 16px"> | 
|                         <i class="el-icon-warning-outline" title="最多上传20个附件,最大限制5MB"></i> | 
|                       </div> | 
|                       <span style="margin-left: 5px">附件</span> | 
|                     </div> | 
|                   </template> | 
|                   <div class="annex-view"> | 
|                     <div @click="addAnnexClick"> | 
|                       <div style="display: flex; float: right"> | 
|                         <div style="font-size: 16px"><i class="el-icon-paperclip"></i></div> | 
|                         <span>添加</span> | 
|                       </div> | 
|                     </div> | 
|                     <div class="setFormat" @click="setFormatClick">设置允许上传的文件格式</div> | 
|                   </div> | 
|                 </el-form-item> | 
|               </el-col> | 
|             </el-row> | 
|           </div> --> | 
|           <!-- 产品管理 --> | 
|           <div class="basic-info-title" style="display: flex"> | 
|             产品管理 | 
|             <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.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" | 
|               @inputContent="inputContent" | 
|               @addProductClick="addProductClick" | 
|               @emptyProductClick="emptyProductClick" | 
|               @recalculateProductClick="recalculateProductClick" | 
|               @clearupProduct="clearupProduct" | 
|             /> | 
|           </div> | 
|         </div> | 
|       </el-form> | 
|       <div slot="footer" class="dialog-footer"> | 
|         <el-button type="primary" size="small" @click="saveClick('form')">保存</el-button> | 
|         <el-button size="small" @click="editConfig.visible = false">取消</el-button> | 
|       </div> | 
|       <!-- 选择客户 --> | 
|       <SelectClientDialog | 
|         v-if="editSelectClientConfig.editVisible" | 
|         :edit-common-config="editSelectClientConfig" | 
|         @selClient="selClient" | 
|       /> | 
|       <!-- 选择合同订单 --> | 
|       <SelectCommonDialog | 
|         v-if="editSelCommonConfig.editVisible" | 
|         :edit-common-config="editSelCommonConfig" | 
|         @selClient="selClient" | 
|       /> | 
|     </el-dialog> | 
|   </div> | 
| </template> | 
|   | 
| <script> | 
| import CommonFormTableView from "@/components/makepager/CommonFormTableView" | 
| import { getAllData } from "@/api/client/client" | 
| import { getAddSalesReturn, getUpdateSalesReturn } from "@/api/sales/salesReturn" | 
| import SelectClientDialog from "@/views/other/commonDialog/SelectClientDialog" | 
| import { getProductList } from "@/api/common/other" | 
| import SelectCommonDialog from "@/views/other/commonDialog/SelectCommonDialog" | 
| export default { | 
|   name: "AddSalesReturnDialog", | 
|   props: { | 
|     editCommonConfig: { | 
|       type: Object, | 
|       default: () => { | 
|         return { | 
|           visible: false, | 
|           title: "新建", | 
|           infomation: {} | 
|         } | 
|       } | 
|     } | 
|   }, | 
|   components: { CommonFormTableView, SelectClientDialog, SelectCommonDialog }, | 
|   computed: { | 
|     clientList() { | 
|       return this.$store.state.getClientName.clientList | 
|     }, | 
|     salesDetailsList() { | 
|       return this.$store.state.getClientName.salesDetailsList | 
|     } | 
|   }, | 
|   data() { | 
|     return { | 
|       dialogWidth: "50%", | 
|       editConfig: this.editCommonConfig, | 
|       rules: { | 
|         number: [{ required: true, message: "请输入", trigger: "blur" }], | 
|         repository: [{ required: true, message: "请选择", trigger: "change" }], | 
|         memberId: [{ required: true, message: "请选择负责人", trigger: "change" }] | 
|       }, | 
|       memberOptions: [], | 
|       selSourceOrderOptions: [], // 选择源单 | 
|       repositoryOptions: [], // 退入仓库 | 
|       statusOptions: [], // 状态 | 
|       currencyOptions: [{ id: 1, name: "人民币" }], // 币种 | 
|       productTableList: {}, | 
|       showSummary: { | 
|         show: true, | 
|         total: true, | 
|         sumProp: ["Amount", "total"], | 
|         mergeNumber: 2 | 
|       }, | 
|       editSelectClientConfig: { | 
|         editVisible: false, | 
|         title: "", | 
|         infomation: {} | 
|       }, | 
|       editSelCommonConfig: { | 
|         editVisible: false, | 
|         title: "", | 
|         infomation: {} | 
|       }, | 
|       productId: 1, | 
|       isNoProduct: true, | 
|       clientId: this.editCommonConfig.infomation.clientId, | 
|       SalesDetailsId: this.editCommonConfig.infomation.SalesDetailsId | 
|     } | 
|   }, | 
|   created() { | 
|     this.$store.dispatch("geClient") | 
|     this.$store.dispatch("geSalesDetails") | 
|     this.setTableForm() | 
|     this.getCommonData() | 
|     this.getProductList() | 
|   }, | 
|   methods: { | 
|     getCommonData() { | 
|       getAllData() | 
|         .then((res) => { | 
|           this.memberOptions = res.data.member | 
|           this.repositoryOptions = res.data.repository | 
|           this.statusOptions = res.data.salesReturnStatus | 
|         }) | 
|         .catch((err) => { | 
|           console.log(err) | 
|         }) | 
|     }, | 
|     // 获取产品列表 | 
|     async getProductList() { | 
|       await getProductList({ | 
|         page: 0, | 
|         pageSize: 0, | 
|         productName: "", | 
|         productNumber: "" | 
|       }).then((res) => { | 
|         console.log(res) | 
|       }) | 
|     }, | 
|     // 保存 | 
|     saveClick(formName) { | 
|       this.$refs[formName].validate((valid) => { | 
|         if (valid) { | 
|           console.log(this.editConfig.infomation) | 
|           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() | 
|             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.$parent.getData() | 
|                 } | 
|               }) | 
|             } | 
|           } | 
|         } else { | 
|           console.log("error submit") | 
|           return false | 
|         } | 
|       }) | 
|     }, | 
|     saveParams() { | 
|       let data = this.editConfig.infomation | 
|       let params = { | 
|         id: this.editConfig.title === "新建" ? 0 : data.id, | 
|         salesReturn: { | 
|           clientId: this.clientId || 0, | 
|           memberId: data.memberId || 0, | 
|           number: data.number || "", | 
|           products: this.tableData, | 
|           reason: data.reason || "", | 
|           repository: data.repository || "", | 
|           returnDate: data.returnDate || "", | 
|           salesReturnStatusId: data.salesReturnStatusId || 0, | 
|           sourceId: this.SalesDetailsId, | 
|           sourceType: 1 | 
|         } | 
|       } | 
|       return params | 
|     }, | 
|     handleClose() { | 
|       this.editConfig.visible = false | 
|     }, | 
|     // 选择用户相关方法 | 
|     querySearchAsync(queryString, cb, value) { | 
|       var restaurants = [] | 
|       if (value === "client") { | 
|         restaurants = this.clientList | 
|       } else if (value === "contract") { | 
|         restaurants = this.salesDetailsList | 
|       } | 
|       var results = queryString ? restaurants.filter(this.createStateFilter(queryString, value)) : restaurants | 
|       cb(results) | 
|     }, | 
|     createStateFilter(queryString, value) { | 
|       return (state) => { | 
|         if (value === "contract") { | 
|           return state.number.toLowerCase().indexOf(queryString.toLowerCase()) === 0 | 
|         } else { | 
|           return state.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0 | 
|         } | 
|       } | 
|     }, | 
|     handleSelectClient(value, item) { | 
|       if (value === "client") { | 
|         this.clientId = item.id | 
|       } else if (value === "contract") { | 
|         this.SalesDetailsId = item.id | 
|       } | 
|     }, | 
|     selClientClick(value) { | 
|       console.log(value) | 
|       if (value === "client") { | 
|         this.editSelectClientConfig.editVisible = true | 
|       } else if (value === "contract") { | 
|         this.editSelCommonConfig.title = "销售明细单" | 
|         this.editSelCommonConfig.editVisible = true | 
|       } | 
|     }, | 
|     selClient(row, value) { | 
|       console.log(row, value) | 
|       if (value === "client") { | 
|         this.editConfig.infomation.client_name = row.name | 
|         this.clientId = row.id | 
|       } else if (value === "contract") { | 
|         this.editConfig.infomation.salesDetailNumber = row.number | 
|         this.SalesDetailsId = row.id | 
|       } | 
|     }, | 
|     // 清除已选择用户 | 
|     clearupClient(value) { | 
|       if (value === "client") { | 
|         this.editConfig.infomation.client_name = "" | 
|         this.clientId = 0 | 
|       } else if (value === "contract") { | 
|         this.editConfig.infomation.salesDetailNumber = "" | 
|         this.SalesDetailsId = 0 | 
|       } | 
|     }, | 
|     // 添加附件 | 
|     addAnnexClick() {}, | 
|     // 设置允许上传文件格式 | 
|     setFormatClick() {}, | 
|     setTableForm() { | 
|       if (this.editConfig.title === "新建" || this.editConfig.infomation.products.length === 0) { | 
|         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: this.tableData, | 
|         tableColumn: [ | 
|           { 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 | 
|     } | 
|   } | 
| } | 
| </script> | 
|   | 
| <!-- Add "scoped" attribute to limit CSS to this component only --> | 
| <style lang="scss" scoped> | 
| ::v-deep { | 
|   .iframe-dialog .el-dialog__body { | 
|     .basic-info { | 
|       .basic-info-title { | 
|         background-color: #f4f8fe; | 
|         padding-left: 10px; | 
|         font-size: 15px; | 
|         font-weight: bold; | 
|         color: #666; | 
|         height: 42px; | 
|         line-height: 42px; | 
|       } | 
|       .basic-info-view { | 
|         margin-top: 10px; | 
|         padding-right: 40px; | 
|         .custom-name, | 
|         .common-select { | 
|           display: flex; | 
|           .common-select-sel { | 
|             width: 270px; | 
|           } | 
|           .common-select-btn { | 
|             margin-left: 5px; | 
|             font-size: 16px; | 
|             cursor: pointer; | 
|           } | 
|         } | 
|       } | 
|       .annex-view { | 
|         display: flex; | 
|         color: #6166d3; | 
|         .setFormat { | 
|           margin-left: 10px; | 
|         } | 
|       } | 
|     } | 
|     .unflod-collapse { | 
|       display: flex; | 
|       height: 30px; | 
|       justify-content: center; | 
|       align-items: center; | 
|       color: #6166d3; | 
|     } | 
|     .dialog-footer { | 
|       background-color: #f5f5f5; | 
|       height: 55px; | 
|       line-height: 55px; | 
|     } | 
|   } | 
| } | 
| </style> |