| | |
| | | prefix-icon="Search" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="客户合同号"> |
| | | <el-input |
| | | v-model="searchForm.customerContractNo" |
| | | placeholder="请输入" |
| | | @change="handleQuery" |
| | | clearable |
| | | prefix-icon="Search" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="项目名称"> |
| | | <el-input |
| | | v-model="searchForm.projectName" |
| | | placeholder="请输入" |
| | | @change="handleQuery" |
| | | clearable |
| | | prefix-icon="Search" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-checkbox |
| | | v-model="searchForm.status" |
| | |
| | | <div></div> |
| | | <div> |
| | | <el-button type="primary" @click="openForm('add')"> |
| | | 新增回款 |
| | | 回款登记 |
| | | </el-button> |
| | | <el-button icon="Download" @click="handleOut"> 导出 </el-button> |
| | | </div> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="登记人" prop="registrant" width="90"/> |
| | | <el-table-column label="登记日期" prop="createTime" width="130"/> |
| | | <el-table-column label="操作" width="150" align="center"> |
| | | <template #default="scope"> |
| | | <el-button |
| | |
| | | size="small" |
| | | @click="changeEditType(scope.row)" |
| | | v-if="!scope.row.editType" |
| | | :disabled="scope.row.registrant !== userStore.nickName" |
| | | >编辑</el-button |
| | | > |
| | | <el-button |
| | |
| | | size="small" |
| | | @click="saveReceiptPayment(scope.row)" |
| | | v-if="scope.row.editType" |
| | | :disabled="scope.row.registrant !== userStore.nickName" |
| | | >保存</el-button |
| | | > |
| | | <el-button |
| | |
| | | type="primary" |
| | | size="small" |
| | | @click="delReceiptRecord(scope.row)" |
| | | :disabled="scope.row.registrant !== userStore.nickName" |
| | | >删除</el-button |
| | | > |
| | | </template> |
| | |
| | | width="240" |
| | | /> |
| | | <el-table-column |
| | | label="客户合同号" |
| | | prop="customerContractNo" |
| | | show-overflow-tooltip |
| | | width="240" |
| | | |
| | | /> |
| | | <el-table-column |
| | | label="客户名称" |
| | | prop="customerName" |
| | | show-overflow-tooltip |
| | | width="240" |
| | | /> |
| | | <el-table-column |
| | | label="项目名称" |
| | | prop="projectName" |
| | | show-overflow-tooltip |
| | | width="340" |
| | | /> |
| | | <el-table-column |
| | | label="回款状态" |
| | |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="产品大类" |
| | | prop="productCategory" |
| | | show-overflow-tooltip |
| | | width="100" |
| | | /> |
| | | <!-- <el-table-column--> |
| | | <!-- label="产品大类"--> |
| | | <!-- prop="productCategory"--> |
| | | <!-- show-overflow-tooltip--> |
| | | <!-- width="100"--> |
| | | <!-- />--> |
| | | <el-table-column |
| | | label="发票号" |
| | | prop="invoiceNo" |
| | |
| | | </div> |
| | | <el-dialog |
| | | v-model="dialogFormVisible" |
| | | draggable |
| | | title="新增回款页面" |
| | | width="70%" |
| | | width="90%" |
| | | @close="closeDia" |
| | | > |
| | | <el-alert |
| | | v-if="selectedRows.length > 1" |
| | | :title="`已选择 ${selectedRows.length} 条合同(客户:${selectedRows[0]?.customerName})`" |
| | | type="info" |
| | | :closable="false" |
| | | style="margin-bottom: 15px;" |
| | | /> |
| | | <el-table |
| | | :data="form.paymentList" |
| | | border |
| | | style="margin-top: 20px;" |
| | | > |
| | | <el-table-column label="销售合同号" prop="salesContractNo" width="200" /> |
| | | <el-table-column label="客户名称" prop="customerName" width="200" /> |
| | | <el-table-column label="发票号" prop="invoiceNo" width="180" /> |
| | | <el-table-column label="发票金额(元)" prop="invoiceTotal" width="150" /> |
| | | <el-table-column label="待回款金额(元)" prop="noReceiptAmount" width="150" /> |
| | | <el-table-column label="本次回款金额(元)"> |
| | | <template #default="scope"> |
| | | <el-input-number |
| | | :step="0.01" |
| | | :min="0" |
| | | :max="scope.row.noReceiptAmount" |
| | | style="width: 100%" |
| | | :precision="2" |
| | | v-model="scope.row.receiptPaymentAmount" |
| | | placeholder="请输入" |
| | | clearable |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="回款方式" width="150"> |
| | | <template #default="scope"> |
| | | <el-select |
| | | v-model="scope.row.receiptPaymentType" |
| | | placeholder="请选择" |
| | | clearable |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="item in receipt_payment_type" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="回款日期" width="180"> |
| | | <template #default="scope"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="scope.row.receiptPaymentDate" |
| | | value-format="YYYY-MM-DD" |
| | | format="YYYY-MM-DD" |
| | | type="date" |
| | | placeholder="请选择" |
| | | clearable |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-form |
| | | :model="form" |
| | | label-width="140px" |
| | |
| | | > |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="销售合同号:" prop="salesContractNo"> |
| | | <el-form-item label="登记人:" prop="registrant"> |
| | | <el-input |
| | | v-model="form.salesContractNo" |
| | | placeholder="自动填充" |
| | | disabled |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="客户名称:" prop="customerName"> |
| | | <el-input |
| | | v-model="form.customerName" |
| | | placeholder="自动填充" |
| | | disabled |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="发票号:" prop="invoiceNo"> |
| | | <el-input |
| | | v-model="form.invoiceNo" |
| | | placeholder="自动填充" |
| | | disabled |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="发票金额(元):" prop="invoiceTotal"> |
| | | <el-input |
| | | type="number" |
| | | v-model="form.invoiceTotal" |
| | | placeholder="自动填充" |
| | | :step="0.01" |
| | | disabled |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="税率:" prop="taxRate"> |
| | | <el-input |
| | | type="number" |
| | | v-model="form.taxRate" |
| | | placeholder="自动填充" |
| | | :step="0.01" |
| | | disabled |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="本次回款金额:" prop="receiptPaymentAmount"> |
| | | <el-input-number :step="0.01" :min="0" style="width: 100%" |
| | | :precision="2" |
| | | v-model="form.receiptPaymentAmount" |
| | | v-model="form.registrant" |
| | | placeholder="请输入" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="回款形式:" prop="receiptPaymentType"> |
| | | <el-select |
| | | v-model="form.receiptPaymentType" |
| | | placeholder="请选择" |
| | | clearable |
| | | > |
| | | <el-option |
| | | v-for="item in receipt_payment_type" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="回款日期:" prop="receiptPaymentDate"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="form.receiptPaymentDate" |
| | | value-format="YYYY-MM-DD" |
| | | format="YYYY-MM-DD" |
| | | type="date" |
| | | placeholder="请选择" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="登记人:" prop="registrant"> |
| | | <el-input |
| | | v-model="form.registrant" |
| | | placeholder="请输入" |
| | | clearable |
| | | disabled |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <template #footer> |
| | |
| | | projectName: "", |
| | | }, |
| | | form: { |
| | | salesContractNo: "", |
| | | customerName: "", |
| | | invoiceNo: "", |
| | | invoiceTotal: "", |
| | | taxRate: "", |
| | | receiptPaymentAmount: "", |
| | | receiptPaymentType: "", |
| | | registrant: "", |
| | | receiptPaymentDate: "", |
| | | paymentList: [], |
| | | }, |
| | | rules: { |
| | | salesContractNo: [{ required: true, message: "请选择", trigger: "change" }], |
| | | customerName: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | invoiceNo: [{ required: true, message: "请选择", trigger: "change" }], |
| | | invoiceTotal: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | taxRate: [{ required: true, message: "请选择", trigger: "change" }], |
| | | receiptPaymentAmount: [ |
| | | { required: true, message: "请选择", trigger: "change" }, |
| | | ], |
| | | receiptPaymentType: [ |
| | | { required: true, message: "请选择", trigger: "change" }, |
| | | ], |
| | | registrant: [{ required: true, message: "请选择", trigger: "change" }], |
| | | receiptPaymentDate: [ |
| | | { required: true, message: "请选择", trigger: "change" }, |
| | | ], |
| | | }, |
| | | }); |
| | | const { form, rules } = toRefs(data); |
| | |
| | | // 表格选择数据 |
| | | const handleSelectionChange = (selection) => { |
| | | console.log("selection", selection); |
| | | selectedRows.value = selection.filter( |
| | | (item) => item.customerContractNo !== null |
| | | ); |
| | | selectedRows.value = selection |
| | | }; |
| | | // 主表合计方法 |
| | | const summarizeMainTable = (param) => { |
| | |
| | | // 打开弹框 |
| | | const openForm = () => { |
| | | form.value = {}; |
| | | if (selectedRows.value.length !== 1) { |
| | | proxy.$modal.msgError("请选择一条数据"); |
| | | if (selectedRows.value.length < 1) { |
| | | proxy.$modal.msgError("请至少选择一条数据"); |
| | | return; |
| | | } |
| | | if (selectedRows.value[0].noReceiptAmount == 0) { |
| | | proxy.$modal.msgWarning("无需再回款"); |
| | | const firstRow = selectedRows.value[0]; |
| | | const isSameCustomer = selectedRows.value.every(row => row.customerName === firstRow.customerName); |
| | | if (!isSameCustomer) { |
| | | proxy.$modal.msgError("请选择相同客户名称的合同"); |
| | | return; |
| | | } |
| | | invoiceInfo({ id: selectedRows.value[0].id }).then((res) => { |
| | | form.value = { ...res.data }; |
| | | form.value.invoiceLedgerId = form.value.id; |
| | | form.value.id = ""; |
| | | form.value.registrant = userStore.nickName; |
| | | }); |
| | | const hasZeroAmount = selectedRows.value.some(row => row.noReceiptAmount == 0); |
| | | if (hasZeroAmount) { |
| | | proxy.$modal.msgWarning("所选数据中存在无需再回款的记录"); |
| | | return; |
| | | } |
| | | form.value.registrant = userStore.nickName; |
| | | form.value.paymentList = selectedRows.value.map(row => ({ |
| | | invoiceLedgerId: row.id, |
| | | salesContractNo: row.salesContractNo, |
| | | customerName: row.customerName, |
| | | invoiceNo: row.invoiceNo, |
| | | invoiceTotal: row.invoiceTotal, |
| | | noReceiptAmount: row.noReceiptAmount, |
| | | taxRate: row.taxRate, |
| | | receiptPaymentAmount: row.noReceiptAmount, |
| | | receiptPaymentType: "", |
| | | receiptPaymentDate: new Date().toISOString().split('T')[0], |
| | | })); |
| | | dialogFormVisible.value = true; |
| | | }; |
| | | // 提交表单 |
| | | const submitForm = () => { |
| | | proxy.$refs["formRef"].validate((valid) => { |
| | | if (valid) { |
| | | receiptPaymentSaveOrUpdate(form.value).then((res) => { |
| | | const submitList = form.value.paymentList.map(item => ({ |
| | | invoiceLedgerId: item.invoiceLedgerId, |
| | | invoiceNo: item.invoiceNo, |
| | | invoiceTotal: item.invoiceTotal, |
| | | noReceiptAmount: item.noReceiptAmount, |
| | | customerName: item.customerName, |
| | | salesContractNo: item.salesContractNo, |
| | | taxRate: item.taxRate, |
| | | receiptPaymentAmount: item.receiptPaymentAmount, |
| | | receiptPaymentType: item.receiptPaymentType, |
| | | receiptPaymentDate: item.receiptPaymentDate, |
| | | registrant: form.value.registrant, |
| | | })); |
| | | |
| | | const invalidItems = submitList.filter(item => |
| | | !item.receiptPaymentAmount || |
| | | !item.receiptPaymentType || |
| | | !item.receiptPaymentDate |
| | | ); |
| | | |
| | | if (invalidItems.length > 0) { |
| | | proxy.$modal.msgError("请完善每条合同的回款信息"); |
| | | return; |
| | | } |
| | | |
| | | receiptPaymentSaveOrUpdate(submitList).then((res) => { |
| | | proxy.$modal.msgSuccess("提交成功"); |
| | | closeDia(); |
| | | getList(); |