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)