✨ 结算付款体验优化与合同/运单导入校验
付款申请汇票筛选与提示去重、结算菜单拆分与金蝶同步弹框、应收应付详情高度、合同计费与半月结调整,以及导入运单批量删除校验。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -446,13 +446,13 @@ export default {
|
||||
openCreate() {
|
||||
this.$router.push({
|
||||
path: '/settlement/pre-settlement/form',
|
||||
query: { mode: 'add', name: '新增预结算' },
|
||||
query: { mode: 'add', name: '新增预付结算单' },
|
||||
});
|
||||
},
|
||||
openEdit(row) {
|
||||
this.$router.push({
|
||||
path: '/settlement/pre-settlement/form',
|
||||
query: { mode: 'edit', id: row.id, name: '编辑预结算' },
|
||||
query: { mode: 'edit', id: row.id, name: '编辑预付结算单' },
|
||||
});
|
||||
},
|
||||
openView(row) {
|
||||
@@ -465,7 +465,7 @@ export default {
|
||||
const records = data?.data?.records || [];
|
||||
const row = records.find(item => item.preSettlementNo === preSettlementNo);
|
||||
if (!row) {
|
||||
this.$message.warning('未找到对应的预结算单');
|
||||
this.$message.warning('未找到对应的预付结算单');
|
||||
return;
|
||||
}
|
||||
this.openView(row);
|
||||
@@ -474,30 +474,30 @@ export default {
|
||||
return ['draft', 'returned'].includes(row.approvalStatus);
|
||||
},
|
||||
async handleDelete(row) {
|
||||
await this.$confirm('确认删除该预结算草稿?', '提示', { type: 'warning' });
|
||||
await this.$confirm('确认删除该预付结算单草稿?', '提示', { type: 'warning' });
|
||||
await remove(row.id);
|
||||
this.$message.success('删除成功');
|
||||
this.loadTable();
|
||||
},
|
||||
selectedOne(operationName) {
|
||||
if (this.selection.length !== 1) {
|
||||
this.$message.warning(`${operationName}需选择一条预结算单`);
|
||||
this.$message.warning(`${operationName}需选择一条预付结算单`);
|
||||
return null;
|
||||
}
|
||||
return this.selection[0];
|
||||
},
|
||||
handleAdvanceApplication() {
|
||||
if (!this.selection.length) {
|
||||
this.$message.warning('请选择需要发起预付申请的预结算单');
|
||||
this.$message.warning('请选择需要发起预付申请的预付结算单');
|
||||
return;
|
||||
}
|
||||
if (this.selection.some(row => !row.contractId)) {
|
||||
this.$message.warning('所选预结算单缺少合同ID,无法发起预付申请');
|
||||
this.$message.warning('所选预付结算单缺少合同ID,无法发起预付申请');
|
||||
return;
|
||||
}
|
||||
const contractIds = new Set(this.selection.map(row => String(row.contractId)));
|
||||
if (contractIds.size > 1) {
|
||||
this.$message.warning('预付申请只能选择同一合同下的预结算单');
|
||||
this.$message.warning('预付申请只能选择同一合同下的预付结算单');
|
||||
return;
|
||||
}
|
||||
if (
|
||||
@@ -508,7 +508,7 @@ export default {
|
||||
row.formalSettlementNo
|
||||
)
|
||||
) {
|
||||
this.$message.warning('仅审批通过、未转正式结算的应付预结算单可发起预付');
|
||||
this.$message.warning('仅审批通过、未转付款结算的应付预付结算单可发起预付');
|
||||
return;
|
||||
}
|
||||
const sourcePreSettlements = this.selection.map(row => ({
|
||||
@@ -533,11 +533,11 @@ export default {
|
||||
},
|
||||
handleFormalSettlement() {
|
||||
if (!this.selection.length) {
|
||||
this.$message.warning('请选择需要转正式结算的预结算单');
|
||||
this.$message.warning('请选择需要转付款结算的预付结算单');
|
||||
return;
|
||||
}
|
||||
if (this.selection.some(row => row.approvalStatus !== 'approved')) {
|
||||
this.$message.warning('仅审核通过的预结算单可转正式结算');
|
||||
this.$message.warning('仅审核通过的预付结算单可转付款结算');
|
||||
return;
|
||||
}
|
||||
const hasCompleteProjectIds = this.selection.every(
|
||||
@@ -549,7 +549,7 @@ export default {
|
||||
)
|
||||
);
|
||||
if (projectKeys.size > 1) {
|
||||
this.$message.warning('尾款结算只能选择同一项目下的预结算单');
|
||||
this.$message.warning('尾款结算只能选择同一项目下的预付结算单');
|
||||
return;
|
||||
}
|
||||
const transferToken = createSettlementTransfer({
|
||||
@@ -560,14 +560,20 @@ export default {
|
||||
});
|
||||
this.$router.push({
|
||||
path: '/settlement/formal-settlement/form',
|
||||
query: { mode: 'add', name: '新增正式结算', transferToken },
|
||||
query: {
|
||||
mode: 'add',
|
||||
name: '新增付款结算单',
|
||||
settlementType: 'payable',
|
||||
listPath: '/settlement/payment-settlement',
|
||||
transferToken,
|
||||
},
|
||||
});
|
||||
},
|
||||
async openPrintDialog() {
|
||||
const row = this.selectedOne('打印结算单');
|
||||
if (!row) return;
|
||||
if (row.approvalStatus === 'voided') {
|
||||
this.$message.warning('已作废的预结算单不能打印');
|
||||
this.$message.warning('已作废的预付结算单不能打印');
|
||||
return;
|
||||
}
|
||||
this.printDialog.row = row;
|
||||
@@ -622,8 +628,8 @@ export default {
|
||||
)
|
||||
.join('');
|
||||
return `<!doctype html><html><head><meta charset="utf-8"><title>${this.escapeHtml(
|
||||
detail.preSettlementNo || '预结算单'
|
||||
)}</title><style>body{font-family:Arial,"Microsoft YaHei",sans-serif;color:#222;padding:28px}h1{text-align:center;font-size:24px}.meta{display:grid;grid-template-columns:repeat(3,1fr);gap:14px 24px;margin:24px 0}.meta div{border-bottom:1px solid #ddd;padding:7px 0}table{width:100%;border-collapse:collapse;margin-top:16px}th,td{border:1px solid #bbb;padding:9px;text-align:center;font-size:13px}th{background:#f5f5f5}.actions{text-align:center;margin-top:24px}@media print{.actions{display:none}}</style></head><body><h1>预结算单</h1><div class="meta"><div>预结算单号:${this.escapeHtml(
|
||||
detail.preSettlementNo || '预付结算单'
|
||||
)}</title><style>body{font-family:Arial,"Microsoft YaHei",sans-serif;color:#222;padding:28px}h1{text-align:center;font-size:24px}.meta{display:grid;grid-template-columns:repeat(3,1fr);gap:14px 24px;margin:24px 0}.meta div{border-bottom:1px solid #ddd;padding:7px 0}table{width:100%;border-collapse:collapse;margin-top:16px}th,td{border:1px solid #bbb;padding:9px;text-align:center;font-size:13px}th{background:#f5f5f5}.actions{text-align:center;margin-top:24px}@media print{.actions{display:none}}</style></head><body><h1>预付结算单</h1><div class="meta"><div>预付结算单号:${this.escapeHtml(
|
||||
detail.preSettlementNo
|
||||
)}</div><div>项目名称:${this.escapeHtml(
|
||||
detail.projectName
|
||||
@@ -651,7 +657,7 @@ export default {
|
||||
const params = this.buildQuery();
|
||||
if (this.selection.length) params.ids = this.selection.map(item => item.id).join(',');
|
||||
const { data } = await exportList(params);
|
||||
downloadFile(data, `预结算单${this.$dayjs().format('YYYY-MM-DD HH-mm-ss')}.xlsx`);
|
||||
downloadFile(data, `预付结算单${this.$dayjs().format('YYYY-MM-DD HH-mm-ss')}.xlsx`);
|
||||
},
|
||||
async handleSubmit(row) {
|
||||
const previousApprovalStatus = row.approvalStatus || '';
|
||||
@@ -668,7 +674,7 @@ export default {
|
||||
},
|
||||
handleMkAudit(row) {
|
||||
if (!row?.id) {
|
||||
this.$message.warning('预结算单ID为空,无法打开审核页');
|
||||
this.$message.warning('预付结算单ID为空,无法打开审核页');
|
||||
return;
|
||||
}
|
||||
getMKApprovalUrl({ bizId: String(row.id) })
|
||||
@@ -685,7 +691,7 @@ export default {
|
||||
});
|
||||
},
|
||||
async handleApprove(row) {
|
||||
await this.$confirm('确认审批通过该预结算单?', '提示', { type: 'warning' });
|
||||
await this.$confirm('确认审批通过该预付结算单?', '提示', { type: 'warning' });
|
||||
await approve({ id: row.id });
|
||||
this.$message.success('审批通过');
|
||||
this.loadTable();
|
||||
@@ -700,7 +706,7 @@ export default {
|
||||
this.loadTable();
|
||||
},
|
||||
async handleVoid(row) {
|
||||
const { value } = await this.$prompt('请输入作废原因', '作废预结算单', {
|
||||
const { value } = await this.$prompt('请输入作废原因', '作废预付结算单', {
|
||||
inputType: 'textarea',
|
||||
inputValidator: value => Boolean(value?.trim()) || '请输入作废原因',
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user