fix: 付款申请结算单号误跳预付结算单过滤-1占位id
This commit is contained in:
@@ -1296,9 +1296,11 @@ export default {
|
|||||||
this.form = {
|
this.form = {
|
||||||
...emptyForm(),
|
...emptyForm(),
|
||||||
...data,
|
...data,
|
||||||
|
// 后端可能返回 -1 占位预付 id,统一归一为 null,防止点击结算单号误跳预付
|
||||||
|
preSettlementId: this.isValidReferenceId(data.preSettlementId) ? data.preSettlementId : null,
|
||||||
preSettlementIds: data.preSettlementIds?.length
|
preSettlementIds: data.preSettlementIds?.length
|
||||||
? data.preSettlementIds
|
? data.preSettlementIds
|
||||||
: data.preSettlementId
|
: this.isValidReferenceId(data.preSettlementId)
|
||||||
? [data.preSettlementId]
|
? [data.preSettlementId]
|
||||||
: [],
|
: [],
|
||||||
attachments: this.parse(data.attachmentsJson),
|
attachments: this.parse(data.attachmentsJson),
|
||||||
@@ -1344,9 +1346,13 @@ export default {
|
|||||||
this.form = {
|
this.form = {
|
||||||
...emptyForm(),
|
...emptyForm(),
|
||||||
...data,
|
...data,
|
||||||
|
// 后端可能返回 -1 占位预付 id,统一归一为 null,防止点击结算单号误跳预付
|
||||||
|
preSettlementId: this.isValidReferenceId(data.preSettlementId)
|
||||||
|
? data.preSettlementId
|
||||||
|
: null,
|
||||||
preSettlementIds: data.preSettlementIds?.length
|
preSettlementIds: data.preSettlementIds?.length
|
||||||
? data.preSettlementIds
|
? data.preSettlementIds
|
||||||
: data.preSettlementId
|
: this.isValidReferenceId(data.preSettlementId)
|
||||||
? [data.preSettlementId]
|
? [data.preSettlementId]
|
||||||
: [],
|
: [],
|
||||||
attachments: this.parse(data.attachmentsJson),
|
attachments: this.parse(data.attachmentsJson),
|
||||||
@@ -1587,17 +1593,22 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
clearFormalReferenceWhenPreOnly() {
|
clearFormalReferenceWhenPreOnly() {
|
||||||
|
// 纯预付引用才收敛为预付;-1 占位 id 不得充当预付关联
|
||||||
const progressAdvance = this.form.paymentType === 'progress_advance';
|
const progressAdvance = this.form.paymentType === 'progress_advance';
|
||||||
const onlyPre =
|
const onlyPre =
|
||||||
progressAdvance ||
|
progressAdvance ||
|
||||||
(this.referenceRows.length > 0 &&
|
(this.referenceRows.length > 0 &&
|
||||||
this.referenceRows.every(item => item.referenceType === 'pre'));
|
this.referenceRows.every(item => item.referenceType === 'pre'));
|
||||||
if (!onlyPre) return;
|
if (!onlyPre) return;
|
||||||
if (!this.form.preSettlementId) {
|
if (!this.isValidReferenceId(this.form.preSettlementId)) {
|
||||||
const preId =
|
const preId =
|
||||||
this.referenceRows.find(item => item.referenceType === 'pre')?.id ||
|
this.referenceRows.find(
|
||||||
(progressAdvance ? this.form.settlementId : null);
|
item => item.referenceType === 'pre' && this.isValidReferenceId(item.id)
|
||||||
if (preId) {
|
)?.id ||
|
||||||
|
(progressAdvance && this.isValidReferenceId(this.form.settlementId)
|
||||||
|
? this.form.settlementId
|
||||||
|
: null);
|
||||||
|
if (this.isValidReferenceId(preId)) {
|
||||||
this.form.preSettlementId = preId;
|
this.form.preSettlementId = preId;
|
||||||
this.form.preSettlementIds = [preId];
|
this.form.preSettlementIds = [preId];
|
||||||
}
|
}
|
||||||
@@ -1608,13 +1619,16 @@ export default {
|
|||||||
},
|
},
|
||||||
restoreReferenceRows(data, fallbackRow) {
|
restoreReferenceRows(data, fallbackRow) {
|
||||||
const relations = Array.isArray(data?.settlements) ? data.settlements : [];
|
const relations = Array.isArray(data?.settlements) ? data.settlements : [];
|
||||||
|
// 行级预付/正式类型以过滤占位 id 后的关联为准,决定点击结算单号的跳转目标
|
||||||
const rows = relations
|
const rows = relations
|
||||||
.map(item => {
|
.map(item => {
|
||||||
const isPre = Boolean(item.preSettlementId || item.preSettlementNo);
|
// 后端用 -1 占位空 id,必须先过滤再判预付,否则正式结算行会被误标为预付
|
||||||
|
const preId = this.isValidReferenceId(item.preSettlementId) ? item.preSettlementId : null;
|
||||||
|
const isPre = Boolean(preId || item.preSettlementNo);
|
||||||
const settlementNo = item.preSettlementNo || item.formalSettlementNo || '';
|
const settlementNo = item.preSettlementNo || item.formalSettlementNo || '';
|
||||||
if (!settlementNo) return null;
|
if (!settlementNo) return null;
|
||||||
return {
|
return {
|
||||||
id: isPre ? item.preSettlementId || item.formalSettlementId : item.formalSettlementId,
|
id: isPre ? preId || item.formalSettlementId : item.formalSettlementId,
|
||||||
settlementNo,
|
settlementNo,
|
||||||
referenceType: isPre ? 'pre' : 'formal',
|
referenceType: isPre ? 'pre' : 'formal',
|
||||||
settlementAmount: Number(Number(item.settlementAmount || 0).toFixed(2)),
|
settlementAmount: Number(Number(item.settlementAmount || 0).toFixed(2)),
|
||||||
@@ -1642,9 +1656,10 @@ export default {
|
|||||||
},
|
},
|
||||||
createReferenceRow(row) {
|
createReferenceRow(row) {
|
||||||
const settlementAmount = Number(row.settlementAmount || 0);
|
const settlementAmount = Number(row.settlementAmount || 0);
|
||||||
|
// 后端以 -1 占位空预付 id,必须先校验否则正式结算行会被误判为预付
|
||||||
const isPre = Boolean(
|
const isPre = Boolean(
|
||||||
row.preSettlementNo ||
|
row.preSettlementNo ||
|
||||||
row.preSettlementId ||
|
this.isValidReferenceId(row.preSettlementId) ||
|
||||||
row.referenceType === 'pre' ||
|
row.referenceType === 'pre' ||
|
||||||
row.paymentType === 'progress_advance'
|
row.paymentType === 'progress_advance'
|
||||||
);
|
);
|
||||||
@@ -2770,23 +2785,26 @@ export default {
|
|||||||
},
|
},
|
||||||
async openSettlementDetail(row = {}) {
|
async openSettlementDetail(row = {}) {
|
||||||
const settlementNo = String(row.settlementNo || '').trim();
|
const settlementNo = String(row.settlementNo || '').trim();
|
||||||
|
// 行上 referenceType 优先;发票行等只带单号的,按单号回查引用行;都缺省才回落表单级推断
|
||||||
|
const matchedReference = this.referenceRows.find(
|
||||||
|
item => String(item.settlementNo || '').trim() === settlementNo
|
||||||
|
);
|
||||||
|
const referenceType = row.referenceType || matchedReference?.referenceType;
|
||||||
const isPre =
|
const isPre =
|
||||||
row.referenceType === 'pre' ||
|
referenceType === 'pre' ||
|
||||||
this.form.paymentType === 'progress_advance' ||
|
(!referenceType &&
|
||||||
Boolean(this.form.preSettlementId || this.form.preSettlementNo);
|
(this.form.paymentType === 'progress_advance' ||
|
||||||
|
Boolean(
|
||||||
|
this.isValidReferenceId(this.form.preSettlementId) || this.form.preSettlementNo
|
||||||
|
)));
|
||||||
let id =
|
let id =
|
||||||
row.id ||
|
row.id ||
|
||||||
row.preSettlementId ||
|
row.preSettlementId ||
|
||||||
row.settlementId ||
|
row.settlementId ||
|
||||||
|
matchedReference?.id ||
|
||||||
(isPre
|
(isPre
|
||||||
? this.form.preSettlementId || this.form.preSettlementIds?.[0]
|
? this.form.preSettlementId || this.form.preSettlementIds?.[0]
|
||||||
: this.form.settlementId || this.form.settlementIds?.[0]);
|
: this.form.settlementId || this.form.settlementIds?.[0]);
|
||||||
if (!id && settlementNo) {
|
|
||||||
const matched = this.referenceRows.find(
|
|
||||||
item => String(item.settlementNo || '').trim() === settlementNo
|
|
||||||
);
|
|
||||||
id = matched?.id;
|
|
||||||
}
|
|
||||||
if (!id && settlementNo) {
|
if (!id && settlementNo) {
|
||||||
try {
|
try {
|
||||||
const listApi = isPre ? preApi.getList : formalApi.getList;
|
const listApi = isPre ? preApi.getList : formalApi.getList;
|
||||||
|
|||||||
Reference in New Issue
Block a user