From 0e57de5c718e0f2a7c7a1b9dc102d08029fb1cfd Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Mon, 19 Oct 2026 17:12:24 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E6=94=B6=E6=AC=BE?= =?UTF-8?q?=E6=B5=81=E6=B0=B4=E7=BB=A7=E7=BB=AD=E8=AE=A4=E9=A2=86=E9=A2=84?= =?UTF-8?q?=E5=A1=AB=E4=B8=8E=E4=BB=98=E6=AC=BE=E7=94=B3=E8=AF=B7=E9=A2=84?= =?UTF-8?q?=E7=BB=93=E7=AE=97=E5=BC=95=E7=94=A8=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 部分认领打开时预填历史关联结算单,可认领上限按公告未认领与收款金额取小;付款申请提交前清理误存正式结算单引用。 Co-authored-by: Cursor --- .../payment/payment-application-form.vue | 18 +++++++++++++-- src/views/payment/receipt-flow-batch-form.vue | 5 ++++- src/views/payment/receipt-flow-form.vue | 22 +++++++++++++------ 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/views/payment/payment-application-form.vue b/src/views/payment/payment-application-form.vue index 637a2df..acec661 100644 --- a/src/views/payment/payment-application-form.vue +++ b/src/views/payment/payment-application-form.vue @@ -3097,6 +3097,8 @@ export default { }); }, payload() { + // 驳回重提前再清一次:避免历史误存的正式结算单 ID 盖过预结算引用 + this.clearFormalReferenceWhenPreOnly(); const { id, paymentType, @@ -3133,13 +3135,25 @@ export default { paymentType === 'progress_advance' || (this.referenceRows.length > 0 && this.referenceRows.every(item => item.referenceType === 'pre')); + // 进度预付 / 仅预结算引用:强制不传正式结算单 ID,并兜底恢复预结算单 ID + const resolvedPreSettlementId = + preSettlementId || + preSettlementIds?.[0] || + (usePreSettlementOnly ? settlementId : null) || + null; + const resolvedPreSettlementIds = + preSettlementIds?.length > 0 + ? preSettlementIds + : resolvedPreSettlementId + ? [resolvedPreSettlementId] + : []; return { id, paymentType, settlementId: usePreSettlementOnly ? null : settlementId, settlementIds: usePreSettlementOnly ? [] : settlementIds, - preSettlementId, - preSettlementIds, + preSettlementId: usePreSettlementOnly ? resolvedPreSettlementId : preSettlementId, + preSettlementIds: usePreSettlementOnly ? resolvedPreSettlementIds : preSettlementIds, projectId, projectName, deptId, diff --git a/src/views/payment/receipt-flow-batch-form.vue b/src/views/payment/receipt-flow-batch-form.vue index 156a5f5..547a956 100644 --- a/src/views/payment/receipt-flow-batch-form.vue +++ b/src/views/payment/receipt-flow-batch-form.vue @@ -302,7 +302,10 @@ export default { ); }, flowRemaining(flow) { - return Math.max(Number(flow.unclaimedAmount || 0) - Number(flow.claimedAmount || 0), 0); + const unclaimed = Number(flow.unclaimedAmount || 0); + const receipt = Number(flow.receiptAmount || 0); + const ceiling = unclaimed > 0 && receipt > 0 ? Math.min(unclaimed, receipt) : unclaimed || receipt; + return Math.max(ceiling - Number(flow.claimedAmount || 0), 0); }, maxAllocation(row) { const current = Number(row.settlement.allocations?.[row.flow.id] || 0); diff --git a/src/views/payment/receipt-flow-form.vue b/src/views/payment/receipt-flow-form.vue index 2171f28..8497954 100644 --- a/src/views/payment/receipt-flow-form.vue +++ b/src/views/payment/receipt-flow-form.vue @@ -252,10 +252,11 @@ export default { ); }, claimableAmount() { - return Math.max( - Number(this.form.unclaimedAmount || 0) - Number(this.form.claimedAmount || 0), - 0 - ); + const unclaimed = Number(this.form.unclaimedAmount || 0); + const receipt = Number(this.form.receiptAmount || 0); + const ceiling = + unclaimed > 0 && receipt > 0 ? Math.min(unclaimed, receipt) : unclaimed || receipt; + return Math.max(ceiling - Number(this.form.claimedAmount || 0), 0); }, }, created() { @@ -274,14 +275,21 @@ export default { } const data = this.unwrapData(await api.getDetail(this.flowId)); const userInfo = this.$store.getters.userInfo || {}; + // 部分认领继续认领:预填本流水历史关联且仍有剩余可认领金额的结算单 + const relatedSettlements = (data?.relatedSettlements || []).map(item => ({ + ...item, + formalSettlementId: item.id, + settlementId: item.id, + allocatedReceiptAmount: 0, + })); this.form = { ...emptyForm(), ...data, claimerName: userInfo.realName || userInfo.userName || data.claimerName || '', claimerDeptName: userInfo.deptName || userInfo.dept_name || data.claimerDeptName || '', claimDate: this.$dayjs().format('YYYY-MM-DD'), - settlementIds: [], - settlements: [], + settlementIds: relatedSettlements.map(item => item.formalSettlementId), + settlements: relatedSettlements, attachments: [], }; }, @@ -347,7 +355,7 @@ export default { return; } if (this.allocatedTotal > this.claimableAmount + 0.001) { - this.$message.warning('累计认领金额不能超过公告未认领金额(剩余可认领金额)'); + this.$message.warning('累计认领金额不能超过剩余可认领金额'); return; } for (const row of this.form.settlements)