From 333b5e1a8e2cb279568e2a44806824f2c397603a Mon Sep 17 00:00:00 2001 From: chenhao Date: Fri, 5 Dec 2025 16:35:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(finance):=20=E4=BC=98=E5=8C=96=E4=BB=98?= =?UTF-8?q?=E6=AC=BE=E8=AE=A1=E5=88=92=E9=80=89=E6=8B=A9=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=B9=B6=E4=BF=AE=E6=AD=A3=E8=AE=A1=E7=AE=97=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除重复的付款计划验证逻辑 - 修正订单当前付款比例的计算方法,使用含税总价替代未付金额 - 新增 handleChooseConfirm 方法处理付款计划的选择确认逻辑 - 在 PaymentPlan 组件中支持传入选中的付款计划,并初始化表格选中状态 - 更新 MergePaymentDialog 中对 PaymentPlanSelector 组件的引用及事件绑定 - 调整付款比例计算条件,允许未付金额为零的情况 --- .../payable/components/MergePaymentDialog.vue | 52 +++++++++++++++---- .../payable/components/PaymentPlan.vue | 15 +++++- 2 files changed, 57 insertions(+), 10 deletions(-) diff --git a/oms_web/oms_vue/src/views/finance/payable/components/MergePaymentDialog.vue b/oms_web/oms_vue/src/views/finance/payable/components/MergePaymentDialog.vue index c1b83c8d..d98b0cdf 100644 --- a/oms_web/oms_vue/src/views/finance/payable/components/MergePaymentDialog.vue +++ b/oms_web/oms_vue/src/views/finance/payable/components/MergePaymentDialog.vue @@ -59,7 +59,7 @@ @@ -90,13 +90,15 @@ @@ -205,6 +207,43 @@ export default { this.dialogVisible = false; this.resetForm(); }, + handleChooseConfirm() { + if (!this.$refs.planSelector || !this.$refs.planSelector.selectedPlan) { + this.$modal.msgError('无法获取计划选择器组件或其选择的计划'); + return; + } + const selectedPlans = this.$refs.planSelector.selectedPlan; + + const orderIndex = this.payableOrdersWithPlans.findIndex(o => o.id === this.choosePayable.id); + if (orderIndex === -1) { + this.$modal.msgError('找不到要更新的应付单'); + return; + } + + const currentOrder = this.payableOrdersWithPlans[orderIndex]; + + // Ensure the paymentPlans array exists + if (!currentOrder.paymentPlans) { + this.$set(currentOrder, 'paymentPlans', []); + } + + // Add new plans, checking for duplicates by plan ID + let addedCount = 0; + selectedPlans.forEach(newPlan => { + const existingPlan = currentOrder.paymentPlans.find(p => p.id === newPlan.id); + if (!existingPlan) { + currentOrder.paymentPlans.push(newPlan); + addedCount++; + } + }); + + this.isPaymentPlanSelectorOpen = false; + if (addedCount > 0) { + this.$modal.msgSuccess(`成功补充 ${addedCount} 条付款计划`); + } else { + this.$modal.msgWarning('没有新的付款计划被添加'); + } + }, handleConfirm() { // Validate main form fields if (!this.form.paymentBillType) { @@ -223,11 +262,6 @@ export default { return; } - const totalPlannedAmountForOrder = order.paymentPlans.reduce((sum, plan) => sum + (plan.planAmount || 0), 0); - if (Math.abs(totalPlannedAmountForOrder - order.unpaidAmount) > 0.01) { // Compare against unpaidAmount - this.$modal.msgError(`应付单 ${order.payableBillCode} 的计划付款总金额 (${totalPlannedAmountForOrder.toFixed(2)}) 与其未付款金额 (${order.unpaidAmount.toFixed(2)}) 不符,请检查。`); - return; - } for (const plan of order.paymentPlans) { if (!plan.planPaymentDate) { @@ -305,9 +339,9 @@ export default { }, calculateOrderCurrentPaymentRate(orderId) { const order = this.payableOrdersWithPlans.find(o => o.id === orderId); - if (order && order.paymentPlans && order.unpaidAmount > 0) { + if (order && order.paymentPlans && order.unpaidAmount >= 0) { const currentAmount = this.calculateOrderCurrentPaymentAmount(orderId); - return (currentAmount / order.unpaidAmount * 100); + return this.$calc.mul(this.$calc.div(currentAmount ,order.totalPriceWithTax,4 ),100); } return 0; }, diff --git a/oms_web/oms_vue/src/views/finance/payable/components/PaymentPlan.vue b/oms_web/oms_vue/src/views/finance/payable/components/PaymentPlan.vue index ad10131b..91099e15 100644 --- a/oms_web/oms_vue/src/views/finance/payable/components/PaymentPlan.vue +++ b/oms_web/oms_vue/src/views/finance/payable/components/PaymentPlan.vue @@ -10,7 +10,7 @@ style="margin-bottom: 10px;"> 编辑 - + @@ -97,6 +97,10 @@ export default { isInitEdit: { type: Boolean, default: false + }, + selectedPlans: { + type: Array, + default: () => [] } }, data() { @@ -153,6 +157,15 @@ export default { })); if (this.paymentPlans.length === 0) { this.initDefaultPaymentPlan(); + } else { + this.$nextTick(() => { + this.paymentPlans.forEach(plan => { + const isSelected = this.selectedPlans.some(selected => selected.id === plan.id); + if (isSelected) { + this.$refs.paymentPlanTable.toggleRowSelection(plan, true); + } + }); + }); } }) } else {