| | |
| | | <template> |
| | | <el-dialog :title="modalOptions.title" v-model="visible" width="70%"> |
| | | <el-dialog :title="modalOptions.title" v-model="visible" width="70%" draggable> |
| | | <el-form |
| | | ref="formRef" |
| | | :model="form" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="销售合同号:" prop="salesContractNo"> |
| | | <el-input |
| | | v-model="form.salesContractNo" |
| | | placeholder="自动填充" |
| | | clearable |
| | | disabled |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="供应商名称:" prop="supplierName"> |
| | | <el-input |
| | | v-model="form.supplierName" |
| | |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <!-- <el-col :span="12">--> |
| | | <!-- <el-form-item label="项目名称:" prop="projectName">--> |
| | | <!-- <el-input--> |
| | | <!-- v-model="form.projectName"--> |
| | | <!-- placeholder="自动填充"--> |
| | | <!-- clearable--> |
| | | <!-- disabled--> |
| | | <!-- />--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-col>--> |
| | | <el-col :span="12"> |
| | | <el-form-item label="发票号:" prop="invoiceNumber"> |
| | | <el-input |
| | |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="未来票数" |
| | | prop="futureTickets" |
| | | :formatter="formattedNumber" |
| | | /> |
| | | <el-table-column |
| | | label="本次来票金额(元)" |
| | | prop="ticketsAmount" |
| | | :formatter="formattedNumber" |
| | | /> |
| | | <el-table-column |
| | | label="未来票数" |
| | | prop="futureTickets" |
| | | :formatter="formattedNumber" |
| | | /> |
| | | <el-table-column |
| | | label="未来票金额(元)" |
| | | prop="futureTicketsAmount" |
| | | :formatter="formattedNumber" |
| | | /> |
| | | </el-table> |
| | | </el-form> |
| | | <template #footer> |
| | |
| | | purchaseLedgerNo: undefined, // 采购合同号 |
| | | salesContractNo: undefined, // 销售合同号 |
| | | supplierName: undefined, // 供应商名称 |
| | | projectName: undefined, // 项目名称 |
| | | invoiceNumber: undefined, // 发票号 |
| | | invoiceAmount: undefined, // 发票金额(元) |
| | | issUerId: userStore.id, // 录入人 |
| | |
| | | id: contractId, // 明确设置合同ID |
| | | purchaseLedgerNo: contract.purchaseContractNumber, // 添加采购合同号 |
| | | supplierName: contract.supplierName, // 添加供应商名称 |
| | | projectName: contract.projectName // 添加项目名称 |
| | | }); |
| | | }); |
| | | } |
| | |
| | | |
| | | // 设置表单数据(使用第一个合同的基本信息,采购合同号留空) |
| | | form.purchaseLedgerNo = ""; // 采购合同号留空,因为会在产品表格中分别显示 |
| | | form.invoiceAmount = 0; |
| | | form.invoiceNumber = ""; |
| | | form.entryDate = dayjs().format("YYYY-MM-DD"); |
| | | form.enterDate = dayjs().format("YYYY-MM-DD"); |
| | | form.salesContractNo = results[0].data.salesContractNo; |
| | | form.projectName = results[0].data.projectName; |
| | | form.supplierName = results[0].data.supplierName; |
| | | // 保留录入人信息 |
| | | form.issUerId = userStore.id; |
| | | form.issUer = userStore.nickName; |
| | | |
| | | // 设置产品数据,并初始化开票数量和金额 |
| | | allProductData.forEach(item => { |
| | | // 本次开票数默认为总数量 |
| | | item.ticketsNum = Number(item.quantity || 0); |
| | | // 本次开票金额默认为含税总价 |
| | | item.ticketsAmount = Number(item.taxInclusiveTotalPrice || 0); |
| | | // 保存原始未来票数和金额(用于计算) |
| | | item.tempFutureTickets = Number(item.quantity || 0); |
| | | item.tempFutureTicketsAmount = Number(item.taxInclusiveTotalPrice || 0); |
| | | // 未来票数和金额初始为0(因为全部开票) |
| | | item.futureTickets = 0; |
| | | item.futureTicketsAmount = 0; |
| | | }); |
| | | |
| | | form.productData = allProductData; |
| | | |
| | | // 计算发票金额:所有产品的含税总价之和 |
| | | const totalAmount = allProductData.reduce((sum, item) => { |
| | | return sum + (Number(item.taxInclusiveTotalPrice) || 0); |
| | | }, 0); |
| | | form.invoiceAmount = totalAmount.toFixed(2); |
| | | |
| | | // 存储选中的合同数据 |
| | | selectedContracts.value = selectedRows; |
| | |
| | | if (Array.isArray(selectedRows) && selectedRows.length > 1) { |
| | | modalOptions.title = `批量新增 (${selectedRows.length}条)`; |
| | | } else { |
| | | modalOptions.title = type == "add" ? "新增" : "编辑"; |
| | | modalOptions.title = type === "add" ? "新增" : "编辑"; |
| | | } |
| | | |
| | | // 如果是单个操作,获取id |
| | |
| | | const submitForm = () => { |
| | | proxy.$refs["formRef"].validate((valid) => { |
| | | if (valid) { |
| | | // 统一将所有合同的数据放在一个数组里,单个和批量都使用数组格式 |
| | | const submitData = selectedContracts.value.map(contract => { |
| | | // 如果是批量操作,将所有合同的数据放在一个数组里,只调用一次接口 |
| | | if (selectedContracts.value.length > 1) { |
| | | // 创建包含所有合同数据的数组 |
| | | const batchData = selectedContracts.value.map(contract => { |
| | | // 筛选出属于当前合同的产品数据 |
| | | const contractProductData = form.productData.filter(item => |
| | | item.id === contract.id |
| | |
| | | purchaseContractNumber: contract.purchaseContractNumber, // 使用实际的采购合同号 |
| | | salesContractNo: contract.salesContractNo, // 使用实际的销售合同号 |
| | | supplierName: contract.supplierName, // 使用实际的供应商名称 |
| | | projectName: contract.projectName, // 使用实际的项目名称 |
| | | |
| | | // 产品数据 |
| | | productData: proxy.HaveJson(contractProductData), |
| | | |
| | | // 批量标识 |
| | | isBatch: selectedContracts.value.length > 1, |
| | | isBatch: true, |
| | | type: 4 |
| | | }; |
| | | }); |
| | | |
| | | // 统一调用接口,传递数组格式的数据 |
| | | // 只调用一次接口,传递包含所有合同数据的数组 |
| | | modalLoading.value = true; |
| | | addOrUpdateRegistration(submitData).then((res) => { |
| | | addOrUpdateRegistration(batchData).then((res) => { |
| | | modalLoading.value = false; |
| | | if (res.code === 200) { |
| | | proxy.$modal.msgSuccess(selectedContracts.value.length > 1 ? "批量登记成功" : "登记成功"); |
| | | proxy.$modal.msgSuccess("批量登记成功"); |
| | | closeAndRefresh(); |
| | | } |
| | | }).catch(() => { |
| | | modalLoading.value = false; |
| | | proxy.$modal.msgError(selectedContracts.value.length > 1 ? "批量登记失败" : "登记失败"); |
| | | proxy.$modal.msgError("批量登记失败"); |
| | | }); |
| | | } else { |
| | | // 单个合同提交逻辑 - 以数组格式传递 |
| | | const singleContract = selectedContracts.value[0]; |
| | | const singleFormArray = [{ |
| | | // 基础表单数据 |
| | | invoiceNumber: form.invoiceNumber, |
| | | invoiceAmount: form.invoiceAmount, |
| | | entryDate: form.entryDate, |
| | | enterDate: form.enterDate, |
| | | issUerId: form.issUerId, // 录入人id |
| | | issUer: form.issUer, // 录入人 |
| | | tempFileIds: form.tempFileIds, |
| | | |
| | | // 合同实际信息 |
| | | purchaseLedgerId: singleContract.id, // 使用id作为字段名,值为purchaseLedgerId |
| | | purchaseContractNumber: singleContract.purchaseContractNumber, // 使用实际的采购合同号 |
| | | salesContractNo: singleContract.salesContractNo, // 使用实际的销售合同号 |
| | | supplierName: singleContract.supplierName, // 使用实际的供应商名称 |
| | | projectName: singleContract.projectName, // 使用实际的项目名称 |
| | | |
| | | // 产品数据 |
| | | productData: proxy.HaveJson(form.productData), |
| | | |
| | | // 批量标识 |
| | | isBatch: false, |
| | | type: 4 |
| | | }]; |
| | | |
| | | modalLoading.value = true; |
| | | addOrUpdateRegistration(singleFormArray).then((res) => { |
| | | modalLoading.value = false; |
| | | if (res.code === 200) { |
| | | proxy.$modal.msgSuccess("登记成功"); |
| | | closeAndRefresh(); |
| | | } |
| | | }).catch(() => { |
| | | modalLoading.value = false; |
| | | proxy.$modal.msgError("登记失败"); |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | }; |