diff --git a/src/api/payment/invoiceReceipt.js b/src/api/payment/invoiceReceipt.js index c78b5c9..883f131 100644 --- a/src/api/payment/invoiceReceipt.js +++ b/src/api/payment/invoiceReceipt.js @@ -26,7 +26,8 @@ export const approve = data => request({ url: `${baseUrl}/approve`, method: 'pos export const returnBill = data => request({ url: `${baseUrl}/return`, method: 'post', data }); export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data }); export const pushKingdee = ids => - request({ url: `${baseUrl}/push-kingdee`, method: 'post', data: ids }); + // 推送联带 A902 附件上传(登记附件 + 镜像发票文件下载回传),耗时较普通接口长,放宽到 120s + request({ url: `${baseUrl}/push-kingdee`, method: 'post', data: ids, timeout: 120000 }); export const approvalStatusOptions = [ { label: '草稿', value: 'draft' }, diff --git a/src/option/payment/invoiceApplication.js b/src/option/payment/invoiceApplication.js index a2cef3c..2e7d138 100644 --- a/src/option/payment/invoiceApplication.js +++ b/src/option/payment/invoiceApplication.js @@ -13,6 +13,7 @@ export const invoiceApplicationTableColumns = [ { prop: 'currentProcessor', label: '当前处理人', minWidth: 130 }, { prop: 'kingdeeBillNo', label: '金蝶单据号', minWidth: 150 }, { prop: 'kingdeeStatusName', label: '金蝶单据状态', minWidth: 140 }, + { prop: 'attachmentSyncStatusName', label: '附件同步', minWidth: 100 }, ]; export const invoiceApplicationDetailColumns = [ diff --git a/src/option/payment/invoiceReceipt.js b/src/option/payment/invoiceReceipt.js index 8a65835..add059a 100644 --- a/src/option/payment/invoiceReceipt.js +++ b/src/option/payment/invoiceReceipt.js @@ -14,4 +14,5 @@ export const invoiceReceiptTableColumns = [ { prop: 'kingdeeReceivedInvoiceNo', label: '金蝶单据号', minWidth: 150 }, { prop: 'kingdeePushStatusName', label: '金蝶状态', minWidth: 130 }, { prop: 'kingdeePushMsg', label: '失败原因', minWidth: 160 }, + { prop: 'attachmentSyncStatusName', label: '附件同步', minWidth: 100 }, ]; diff --git a/src/option/payment/paymentApplication.js b/src/option/payment/paymentApplication.js index ed650f7..fdb7227 100644 --- a/src/option/payment/paymentApplication.js +++ b/src/option/payment/paymentApplication.js @@ -17,4 +17,5 @@ export const paymentApplicationTableColumns = [ { prop: 'currentProcessor', label: '当前处理人', minWidth: 120 }, { prop: 'kingdeeBillNo', label: '金蝶单据号', minWidth: 130 }, { prop: 'kingdeeStatusName', label: '金蝶单据状态', minWidth: 130 }, + { prop: 'attachmentSyncStatusName', label: '附件同步', minWidth: 100 }, ]; diff --git a/src/option/settlement/formalSettlementTable.js b/src/option/settlement/formalSettlementTable.js index c3562c2..4cb9012 100644 --- a/src/option/settlement/formalSettlementTable.js +++ b/src/option/settlement/formalSettlementTable.js @@ -21,6 +21,7 @@ export const formalSettlementTableColumns = [ { label: '当前处理人', prop: 'currentProcessor', minWidth: 130 }, { label: '金蝶单据号', prop: 'kingdeeBillNo', minWidth: 150 }, { label: '金蝶单据状态', prop: 'kingdeeSyncStatus', minWidth: 135 }, + { label: '附件同步', prop: 'attachmentSyncStatusName', minWidth: 100 }, { label: '创建人', prop: 'createUserName', minWidth: 110 }, { label: '创建时间', prop: 'createTime', minWidth: 170 }, ]; diff --git a/src/views/payment/invoice-application.vue b/src/views/payment/invoice-application.vue index b701546..b62ea09 100644 --- a/src/views/payment/invoice-application.vue +++ b/src/views/payment/invoice-application.vue @@ -406,7 +406,18 @@ export default { } await Promise.all(rows.map(row => api.syncKingdee(row.id))); this.$message.success(`已同步${rows.length}条开票申请`); - this.loadTable(); + await this.loadTable(); + // 附件联带同步提示:同步成功但附件未全部上传时追加 warning,重推即自动补传 + const idSet = new Set(rows.map(row => String(row.id))); + const pendingCount = (this.rows || []).filter(row => idSet.has(String(row.id)) + && ['pending', 'partial'].includes(row.attachmentSyncStatus)).length; + if (pendingCount) { + this.$message({ + type: 'warning', + message: `其中${pendingCount}单附件未全部上传,可重推补传`, + duration: 8000, + }); + } }, async handleExport() { const data = this.unwrapData(await api.getList(1, 100000, this.query)); diff --git a/src/views/payment/invoice-receipt.vue b/src/views/payment/invoice-receipt.vue index a0774f6..e8cea4c 100644 --- a/src/views/payment/invoice-receipt.vue +++ b/src/views/payment/invoice-receipt.vue @@ -373,8 +373,13 @@ export default { type: 'warning', }); const summary = this.unwrapData(await api.pushKingdee(rows.map(row => row.id))); - this.$alert(summary || '推送完成', '推送结果', { confirmButtonText: '知道了' }); - this.loadTable(); + await this.loadTable(); + // 附件联带同步提示:推送成功但附件未全部上传时在结果弹窗追加说明,重推即自动补传 + const idSet = new Set(rows.map(row => String(row.id))); + const pendingCount = (this.rows || []).filter(row => idSet.has(String(row.id)) + && ['pending', 'partial'].includes(row.attachmentSyncStatus)).length; + const attachmentTip = pendingCount ? `\n其中${pendingCount}单附件未全部上传,可重推补传` : ''; + this.$alert((summary || '推送完成') + attachmentTip, '推送结果', { confirmButtonText: '知道了' }); }, async handleExport() { const data = this.unwrapData(await api.getList(1, 100000, this.query)); diff --git a/src/views/payment/payment-application.vue b/src/views/payment/payment-application.vue index 42bffc8..2328865 100644 --- a/src/views/payment/payment-application.vue +++ b/src/views/payment/payment-application.vue @@ -395,7 +395,8 @@ export default { async handleSyncRow(row) { const data = this.unwrapData(await api.syncKingdee(row.id)); this.$message.success(`已生成金蝶付款单:${data}`); - this.loadTable(); + await this.loadTable(); + this.warnAttachmentNotUploaded([row.id]); }, async handleSync() { const rows = this.selection.filter(row => row.approvalStatus === 'approved'); @@ -414,7 +415,21 @@ export default { } else { this.$message.success(`已同步${data.length}条付款申请`); } - this.loadTable(); + await this.loadTable(); + this.warnAttachmentNotUploaded(rows.map(row => row.id)); + }, + // 附件联带同步提示:同步成功但附件未全部上传时追加 warning,重推即自动补传 + warnAttachmentNotUploaded(ids) { + const idSet = new Set(ids.map(String)); + const pendingCount = (this.rows || []).filter(row => idSet.has(String(row.id)) + && ['pending', 'partial'].includes(row.attachmentSyncStatus)).length; + if (pendingCount) { + this.$message({ + type: 'warning', + message: `其中${pendingCount}单附件未全部上传,可重推补传`, + duration: 8000, + }); + } }, async handleSyncResult() { const data = this.unwrapData(await api.syncKingdeeResult()); diff --git a/src/views/settlement/formal-settlement.vue b/src/views/settlement/formal-settlement.vue index 002b5d5..e588155 100644 --- a/src/views/settlement/formal-settlement.vue +++ b/src/views/settlement/formal-settlement.vue @@ -379,7 +379,16 @@ export default { const response = await api.syncKingdee(row.id); const data = this.unwrapData(response); this.$message.success(`同步成功,金蝶单据号:${data}`); - this.loadTable(); + await this.loadTable(); + // 附件联带同步提示:同步成功但附件未全部上传时追加 warning,重推即自动补传 + const freshRow = (this.rows || []).find(item => String(item.id) === String(row.id)); + if (freshRow && ['pending', 'partial'].includes(freshRow.attachmentSyncStatus)) { + this.$message({ + type: 'warning', + message: '该单附件未全部上传,可重推补传', + duration: 8000, + }); + } }, async openPaymentDialog() { if (!this.selection.length) return this.$message.warning('请至少选择一条正式结算单');