🐛 修复收款流水继续认领预填与付款申请预结算引用提交

部分认领打开时预填历史关联结算单,可认领上限按公告未认领与收款金额取小;付款申请提交前清理误存正式结算单引用。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-19 17:12:24 +08:00
parent 5cb7eb16d5
commit 0e57de5c71
3 changed files with 35 additions and 10 deletions
+16 -2
View File
@@ -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,
@@ -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);
+15 -7
View File
@@ -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)