From 2f64abfc838a59f1dbbdf89254089e0b581be76c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Thu, 22 Oct 2026 12:06:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=A1=E6=A0=B8=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E7=BB=9F=E4=B8=8030=E7=A7=92=E8=B6=85=E6=97=B6=E5=B9=B6?= =?UTF-8?q?=E5=8A=A0=E9=81=AE=E7=BD=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/common.js | 3 +++ src/api/payment/invoiceApplication.js | 4 +++- src/api/payment/invoiceReceipt.js | 4 +++- src/api/payment/paymentApplication.js | 4 +++- src/api/settlement/formalSettlement.js | 4 +++- src/api/settlement/preSettlement.js | 4 +++- src/views/payment/invoice-application.vue | 23 +++++++++++++++------- src/views/payment/invoice-receipt.vue | 23 +++++++++++++++------- src/views/payment/payment-application.vue | 6 ++++++ src/views/settlement/formal-settlement.vue | 23 +++++++++++++++------- src/views/settlement/pre-settlement.vue | 15 +++++++++++--- 11 files changed, 84 insertions(+), 29 deletions(-) diff --git a/src/api/common.js b/src/api/common.js index 854e4d2..7e03551 100644 --- a/src/api/common.js +++ b/src/api/common.js @@ -1,6 +1,9 @@ import request from '@/axios'; import { ElLoading, ElMessage } from 'element-plus'; +/** 审核按钮统一超时:审批通过后可能同步推送金蝶等耗时操作,覆盖全局 10s */ +export const APPROVE_TIMEOUT = 30000; + /** * 文件流返回 * @param url 接口地址 diff --git a/src/api/payment/invoiceApplication.js b/src/api/payment/invoiceApplication.js index 717703d..af6fb87 100644 --- a/src/api/payment/invoiceApplication.js +++ b/src/api/payment/invoiceApplication.js @@ -1,4 +1,5 @@ import request from '@/axios'; +import { APPROVE_TIMEOUT } from '@/api/common'; const baseUrl = '/blade-transport/invoice-application'; @@ -18,7 +19,8 @@ export const getReceiverInformation = settlementIds => export const save = data => request({ url: `${baseUrl}/save`, method: 'post', data }); export const remove = id => request({ url: `${baseUrl}/remove`, method: 'post', params: { id } }); export const submit = data => request({ url: `${baseUrl}/submit`, method: 'post', data }); -export const approve = data => request({ url: `${baseUrl}/approve`, method: 'post', data }); +export const approve = data => + request({ url: `${baseUrl}/approve`, method: 'post', data, timeout: APPROVE_TIMEOUT }); export const returnBill = data => request({ url: `${baseUrl}/return`, method: 'post', data }); export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data }); export const syncKingdee = id => diff --git a/src/api/payment/invoiceReceipt.js b/src/api/payment/invoiceReceipt.js index 071eff1..8db2dfb 100644 --- a/src/api/payment/invoiceReceipt.js +++ b/src/api/payment/invoiceReceipt.js @@ -1,4 +1,5 @@ import request from '@/axios'; +import { APPROVE_TIMEOUT } from '@/api/common'; const baseUrl = '/blade-transport/invoice-receipt'; @@ -31,7 +32,8 @@ export const getReferenceInformation = settlementIds => export const save = data => request({ url: `${baseUrl}/save`, method: 'post', data }); export const remove = id => request({ url: `${baseUrl}/remove`, method: 'post', params: { id } }); export const submit = data => request({ url: `${baseUrl}/submit`, method: 'post', data }); -export const approve = data => request({ url: `${baseUrl}/approve`, method: 'post', data }); +export const approve = data => + request({ url: `${baseUrl}/approve`, method: 'post', data, timeout: APPROVE_TIMEOUT }); 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 => diff --git a/src/api/payment/paymentApplication.js b/src/api/payment/paymentApplication.js index 59c9aa1..e464552 100644 --- a/src/api/payment/paymentApplication.js +++ b/src/api/payment/paymentApplication.js @@ -1,4 +1,5 @@ import request from '@/axios'; +import { APPROVE_TIMEOUT } from '@/api/common'; const baseUrl = '/blade-transport/payment-application'; export const getList = (current, size, params) => @@ -20,7 +21,8 @@ export const getProjectAdvanceWriteOffOptions = params => export const save = data => request({ url: `${baseUrl}/save`, method: 'post', data }); export const remove = id => request({ url: `${baseUrl}/remove`, method: 'post', params: { id } }); export const submit = data => request({ url: `${baseUrl}/submit`, method: 'post', data }); -export const approve = data => request({ url: `${baseUrl}/approve`, method: 'post', data }); +export const approve = data => + request({ url: `${baseUrl}/approve`, method: 'post', data, timeout: APPROVE_TIMEOUT }); export const returnBill = data => request({ url: `${baseUrl}/return`, method: 'post', data }); export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data }); // 同步金蝶涉及多次金蝶远程接口调用(A103-2 预检 + A103-1/A103-3 推送),单笔可达 20s+,覆盖全局 10s 超时 diff --git a/src/api/settlement/formalSettlement.js b/src/api/settlement/formalSettlement.js index ea4cb14..2d980d4 100644 --- a/src/api/settlement/formalSettlement.js +++ b/src/api/settlement/formalSettlement.js @@ -1,4 +1,5 @@ import request from '@/axios'; +import { APPROVE_TIMEOUT } from '@/api/common'; const baseUrl = '/blade-transport/formal-settlement'; @@ -27,7 +28,8 @@ export const getCandidateDetails = (current, size, params) => export const save = data => request({ url: `${baseUrl}/save`, method: 'post', data }); export const remove = id => request({ url: `${baseUrl}/remove`, method: 'post', params: { id } }); export const submit = data => request({ url: `${baseUrl}/submit`, method: 'post', data }); -export const approve = data => request({ url: `${baseUrl}/approve`, method: 'post', data }); +export const approve = data => + request({ url: `${baseUrl}/approve`, method: 'post', data, timeout: APPROVE_TIMEOUT }); export const returnBill = data => request({ url: `${baseUrl}/return`, method: 'post', data }); export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data }); // 同步金蝶涉及多次金蝶远程接口调用(A102-4 预检 + A102-2 保存),可达 20s+,覆盖全局 10s 超时 diff --git a/src/api/settlement/preSettlement.js b/src/api/settlement/preSettlement.js index e35f2a6..9aa2755 100644 --- a/src/api/settlement/preSettlement.js +++ b/src/api/settlement/preSettlement.js @@ -1,4 +1,5 @@ import request from '@/axios'; +import { APPROVE_TIMEOUT } from '@/api/common'; const baseUrl = '/blade-transport/pre-settlement'; @@ -42,7 +43,8 @@ export const removeDetail = (id, detailId) => export const submit = data => request({ url: `${baseUrl}/submit`, method: 'post', data }); -export const approve = data => request({ url: `${baseUrl}/approve`, method: 'post', data }); +export const approve = data => + request({ url: `${baseUrl}/approve`, method: 'post', data, timeout: APPROVE_TIMEOUT }); export const returnBill = data => request({ url: `${baseUrl}/return`, method: 'post', data }); diff --git a/src/views/payment/invoice-application.vue b/src/views/payment/invoice-application.vue index 969c41a..3d3294d 100644 --- a/src/views/payment/invoice-application.vue +++ b/src/views/payment/invoice-application.vue @@ -409,14 +409,23 @@ export default { }, async handleApprove(row) { await this.$confirm('确认审批通过该开票申请?', '提示', { type: 'warning' }); - const res = await api.approve({ id: row.id }); - // data=false 表示审批已通过但自动同步金蝶失败,msg 带具体原因 - if (res.data.data === false) { - this.$message.warning(res.data.msg); - } else { - this.$message.success(res.data.msg || '审批通过'); + const loading = this.$loading({ + lock: true, + text: '审批处理中,请稍候…', + background: 'rgba(255, 255, 255, 0.6)', + }); + try { + const res = await api.approve({ id: row.id }); + // data=false 表示审批已通过但自动同步金蝶失败,msg 带具体原因 + if (res.data.data === false) { + this.$message.warning(res.data.msg); + } else { + this.$message.success(res.data.msg || '审批通过'); + } + this.loadTable(); + } finally { + loading.close(); } - this.loadTable(); }, async handleReturn(row) { const { value } = await this.$prompt('请输入驳回原因', '审批驳回'); diff --git a/src/views/payment/invoice-receipt.vue b/src/views/payment/invoice-receipt.vue index 8710449..c0cea3d 100644 --- a/src/views/payment/invoice-receipt.vue +++ b/src/views/payment/invoice-receipt.vue @@ -366,14 +366,23 @@ export default { }, async handleApprove(row) { await this.$confirm('确认审批通过该收票登记?', '提示', { type: 'warning' }); - const res = await api.approve({ id: row.id }); - // data=false 表示审批已通过但自动同步金蝶失败,msg 带具体原因 - if (res.data.data === false) { - this.$message.warning(res.data.msg); - } else { - this.$message.success(res.data.msg || '审批通过'); + const loading = this.$loading({ + lock: true, + text: '审批处理中,请稍候…', + background: 'rgba(255, 255, 255, 0.6)', + }); + try { + const res = await api.approve({ id: row.id }); + // data=false 表示审批已通过但自动同步金蝶失败,msg 带具体原因 + if (res.data.data === false) { + this.$message.warning(res.data.msg); + } else { + this.$message.success(res.data.msg || '审批通过'); + } + this.loadTable(); + } finally { + loading.close(); } - this.loadTable(); }, async handleReturn(row) { const { value } = await this.$prompt('请输入驳回原因', '审批驳回'); diff --git a/src/views/payment/payment-application.vue b/src/views/payment/payment-application.vue index baf454c..45b8fe6 100644 --- a/src/views/payment/payment-application.vue +++ b/src/views/payment/payment-application.vue @@ -331,6 +331,11 @@ export default { // 防止重复点击:请求进行中忽略后续点击 if (this.approveLoading) return; this.approveLoading = true; + const loading = this.$loading({ + lock: true, + text: '审批处理中,请稍候…', + background: 'rgba(255, 255, 255, 0.6)', + }); try { const res = await api.approve({ id: row.id }); // data=false 表示审批已通过但自动同步金蝶失败,msg 带具体原因 @@ -341,6 +346,7 @@ export default { } this.refreshChange(); } finally { + loading.close(); this.approveLoading = false; } }, diff --git a/src/views/settlement/formal-settlement.vue b/src/views/settlement/formal-settlement.vue index 742cdb7..b2c090f 100644 --- a/src/views/settlement/formal-settlement.vue +++ b/src/views/settlement/formal-settlement.vue @@ -376,14 +376,23 @@ export default { '提示', { type: 'warning' } ); - const res = await api.approve({ id: row.id }); - // data=false 表示审批已通过但自动同步金蝶失败,msg 带具体原因 - if (res.data.data === false) { - this.$message.warning(res.data.msg); - } else { - this.$message.success(res.data.msg || '审批通过'); + const loading = this.$loading({ + lock: true, + text: '审批处理中,请稍候…', + background: 'rgba(255, 255, 255, 0.6)', + }); + try { + const res = await api.approve({ id: row.id }); + // data=false 表示审批已通过但自动同步金蝶失败,msg 带具体原因 + if (res.data.data === false) { + this.$message.warning(res.data.msg); + } else { + this.$message.success(res.data.msg || '审批通过'); + } + this.onLoad(this.page); + } finally { + loading.close(); } - this.onLoad(this.page); }, async handleReturn(row) { const { value } = await this.$prompt('请输入驳回原因', '审批驳回', { diff --git a/src/views/settlement/pre-settlement.vue b/src/views/settlement/pre-settlement.vue index dda0871..d13597e 100644 --- a/src/views/settlement/pre-settlement.vue +++ b/src/views/settlement/pre-settlement.vue @@ -692,9 +692,18 @@ export default { }, async handleApprove(row) { await this.$confirm('确认审批通过该预付结算单?', '提示', { type: 'warning' }); - await approve({ id: row.id }); - this.$message.success('审批通过'); - this.loadTable(); + const loading = this.$loading({ + lock: true, + text: '审批处理中,请稍候…', + background: 'rgba(255, 255, 255, 0.6)', + }); + try { + await approve({ id: row.id }); + this.$message.success('审批通过'); + this.loadTable(); + } finally { + loading.close(); + } }, async handleReturn(row) { const { value } = await this.$prompt('请输入驳回原因', '审批驳回', {