Compare commits

...
2 Commits
11 changed files with 116 additions and 37 deletions
+3
View File
@@ -1,6 +1,9 @@
import request from '@/axios'; import request from '@/axios';
import { ElLoading, ElMessage } from 'element-plus'; import { ElLoading, ElMessage } from 'element-plus';
/** 审核按钮统一超时:审批通过后可能同步推送金蝶等耗时操作,覆盖全局 10s */
export const APPROVE_TIMEOUT = 30000;
/** /**
* 文件流返回 * 文件流返回
* @param url 接口地址 * @param url 接口地址
+3 -1
View File
@@ -1,4 +1,5 @@
import request from '@/axios'; import request from '@/axios';
import { APPROVE_TIMEOUT } from '@/api/common';
const baseUrl = '/blade-transport/invoice-application'; 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 save = data => request({ url: `${baseUrl}/save`, method: 'post', data });
export const remove = id => request({ url: `${baseUrl}/remove`, method: 'post', params: { id } }); 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 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 returnBill = data => request({ url: `${baseUrl}/return`, method: 'post', data });
export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data }); export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data });
export const syncKingdee = id => export const syncKingdee = id =>
+3 -1
View File
@@ -1,4 +1,5 @@
import request from '@/axios'; import request from '@/axios';
import { APPROVE_TIMEOUT } from '@/api/common';
const baseUrl = '/blade-transport/invoice-receipt'; 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 save = data => request({ url: `${baseUrl}/save`, method: 'post', data });
export const remove = id => request({ url: `${baseUrl}/remove`, method: 'post', params: { id } }); 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 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 returnBill = data => request({ url: `${baseUrl}/return`, method: 'post', data });
export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data }); export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data });
export const pushKingdee = ids => export const pushKingdee = ids =>
+3 -1
View File
@@ -1,4 +1,5 @@
import request from '@/axios'; import request from '@/axios';
import { APPROVE_TIMEOUT } from '@/api/common';
const baseUrl = '/blade-transport/payment-application'; const baseUrl = '/blade-transport/payment-application';
export const getList = (current, size, params) => 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 save = data => request({ url: `${baseUrl}/save`, method: 'post', data });
export const remove = id => request({ url: `${baseUrl}/remove`, method: 'post', params: { id } }); 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 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 returnBill = data => request({ url: `${baseUrl}/return`, method: 'post', data });
export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data }); export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data });
// 同步金蝶涉及多次金蝶远程接口调用(A103-2 预检 + A103-1/A103-3 推送),单笔可达 20s+,覆盖全局 10s 超时 // 同步金蝶涉及多次金蝶远程接口调用(A103-2 预检 + A103-1/A103-3 推送),单笔可达 20s+,覆盖全局 10s 超时
+3 -1
View File
@@ -1,4 +1,5 @@
import request from '@/axios'; import request from '@/axios';
import { APPROVE_TIMEOUT } from '@/api/common';
const baseUrl = '/blade-transport/formal-settlement'; 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 save = data => request({ url: `${baseUrl}/save`, method: 'post', data });
export const remove = id => request({ url: `${baseUrl}/remove`, method: 'post', params: { id } }); 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 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 returnBill = data => request({ url: `${baseUrl}/return`, method: 'post', data });
export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data }); export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data });
// 同步金蝶涉及多次金蝶远程接口调用(A102-4 预检 + A102-2 保存),可达 20s+,覆盖全局 10s 超时 // 同步金蝶涉及多次金蝶远程接口调用(A102-4 预检 + A102-2 保存),可达 20s+,覆盖全局 10s 超时
+3 -1
View File
@@ -1,4 +1,5 @@
import request from '@/axios'; import request from '@/axios';
import { APPROVE_TIMEOUT } from '@/api/common';
const baseUrl = '/blade-transport/pre-settlement'; 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 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 returnBill = data => request({ url: `${baseUrl}/return`, method: 'post', data });
+23 -8
View File
@@ -270,6 +270,7 @@ export default {
rows: [], rows: [],
selection: [], selection: [],
loading: false, loading: false,
approveLoading: false,
batchSyncing: false, batchSyncing: false,
page: { current: 1, size: 10, total: 0 }, page: { current: 1, size: 10, total: 0 },
mkEnabled: false, mkEnabled: false,
@@ -408,15 +409,29 @@ export default {
}); });
}, },
async handleApprove(row) { async handleApprove(row) {
await this.$confirm('确认审批通过该开票申请?', '提示', { type: 'warning' }); // 防止重复点击:请求进行中忽略后续点击,避免重复审批和重复提示
const res = await api.approve({ id: row.id }); if (this.approveLoading) return;
// data=false 表示审批已通过但自动同步金蝶失败,msg 带具体原因 this.approveLoading = true;
if (res.data.data === false) { let loading = null;
this.$message.warning(res.data.msg); try {
} else { await this.$confirm('确认审批通过该开票申请?', '提示', { type: 'warning' });
this.$message.success(res.data.msg || '审批通过'); loading = this.$loading({
lock: true,
text: '审批处理中,请稍候…',
background: 'rgba(255, 255, 255, 0.6)',
});
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.approveLoading = false;
} }
this.loadTable();
}, },
async handleReturn(row) { async handleReturn(row) {
const { value } = await this.$prompt('请输入驳回原因', '审批驳回'); const { value } = await this.$prompt('请输入驳回原因', '审批驳回');
+23 -8
View File
@@ -255,6 +255,7 @@ export default {
rows: [], rows: [],
selection: [], selection: [],
loading: false, loading: false,
approveLoading: false,
pushLoading: false, pushLoading: false,
page: { current: 1, size: 10, total: 0 }, page: { current: 1, size: 10, total: 0 },
mkEnabled: false, mkEnabled: false,
@@ -365,15 +366,29 @@ export default {
}); });
}, },
async handleApprove(row) { async handleApprove(row) {
await this.$confirm('确认审批通过该收票登记?', '提示', { type: 'warning' }); // 防止重复点击:请求进行中忽略后续点击,避免重复审批和重复提示
const res = await api.approve({ id: row.id }); if (this.approveLoading) return;
// data=false 表示审批已通过但自动同步金蝶失败,msg 带具体原因 this.approveLoading = true;
if (res.data.data === false) { let loading = null;
this.$message.warning(res.data.msg); try {
} else { await this.$confirm('确认审批通过该收票登记?', '提示', { type: 'warning' });
this.$message.success(res.data.msg || '审批通过'); loading = this.$loading({
lock: true,
text: '审批处理中,请稍候…',
background: 'rgba(255, 255, 255, 0.6)',
});
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.approveLoading = false;
} }
this.loadTable();
}, },
async handleReturn(row) { async handleReturn(row) {
const { value } = await this.$prompt('请输入驳回原因', '审批驳回'); const { value } = await this.$prompt('请输入驳回原因', '审批驳回');
@@ -331,6 +331,11 @@ export default {
// 防止重复点击:请求进行中忽略后续点击 // 防止重复点击:请求进行中忽略后续点击
if (this.approveLoading) return; if (this.approveLoading) return;
this.approveLoading = true; this.approveLoading = true;
const loading = this.$loading({
lock: true,
text: '审批处理中,请稍候…',
background: 'rgba(255, 255, 255, 0.6)',
});
try { try {
const res = await api.approve({ id: row.id }); const res = await api.approve({ id: row.id });
// data=false 表示审批已通过但自动同步金蝶失败,msg 带具体原因 // data=false 表示审批已通过但自动同步金蝶失败,msg 带具体原因
@@ -341,6 +346,7 @@ export default {
} }
this.refreshChange(); this.refreshChange();
} finally { } finally {
loading.close();
this.approveLoading = false; this.approveLoading = false;
} }
}, },
+27 -12
View File
@@ -140,6 +140,7 @@ export default {
rows: [], rows: [],
selection: [], selection: [],
loading: false, loading: false,
approveLoading: false,
syncLoading: false, syncLoading: false,
page: { currentPage: 1, pageSize: 10, pageSizes: [10, 20, 50, 100], total: 0 }, page: { currentPage: 1, pageSize: 10, pageSizes: [10, 20, 50, 100], total: 0 },
editor: { visible: false, id: null, readonly: false }, editor: { visible: false, id: null, readonly: false },
@@ -371,19 +372,33 @@ export default {
}); });
}, },
async handleApprove(row) { async handleApprove(row) {
await this.$confirm( // 防止重复点击:请求进行中忽略后续点击,避免重复审批和重复提示
`审核通过后${this.billLabel}生效,金额只能通过结算调整单处理,确认通过?`, if (this.approveLoading) return;
'提示', this.approveLoading = true;
{ type: 'warning' } let loading = null;
); try {
const res = await api.approve({ id: row.id }); await this.$confirm(
// data=false 表示审批已通过但自动同步金蝶失败,msg 带具体原因 `审核通过后${this.billLabel}生效,金额只能通过结算调整单处理,确认通过?`,
if (res.data.data === false) { '提示',
this.$message.warning(res.data.msg); { type: 'warning' }
} else { );
this.$message.success(res.data.msg || '审批通过'); loading = this.$loading({
lock: true,
text: '审批处理中,请稍候…',
background: 'rgba(255, 255, 255, 0.6)',
});
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.approveLoading = false;
} }
this.onLoad(this.page);
}, },
async handleReturn(row) { async handleReturn(row) {
const { value } = await this.$prompt('请输入驳回原因', '审批驳回', { const { value } = await this.$prompt('请输入驳回原因', '审批驳回', {
+19 -4
View File
@@ -334,6 +334,7 @@ export default {
ArrowDown, ArrowDown,
ArrowUp, ArrowUp,
loading: false, loading: false,
approveLoading: false,
query: emptyQuery(), query: emptyQuery(),
searchFields: preSettlementSearchFields, searchFields: preSettlementSearchFields,
searchExpanded: false, searchExpanded: false,
@@ -691,10 +692,24 @@ export default {
}); });
}, },
async handleApprove(row) { async handleApprove(row) {
await this.$confirm('确认审批通过该预付结算单?', '提示', { type: 'warning' }); // 防止重复点击:请求进行中忽略后续点击,避免重复审批和重复提示
await approve({ id: row.id }); if (this.approveLoading) return;
this.$message.success('审批通过'); this.approveLoading = true;
this.loadTable(); let loading = null;
try {
await this.$confirm('确认审批通过该预付结算单?', '提示', { type: 'warning' });
loading = this.$loading({
lock: true,
text: '审批处理中,请稍候…',
background: 'rgba(255, 255, 255, 0.6)',
});
await approve({ id: row.id });
this.$message.success('审批通过');
this.loadTable();
} finally {
loading?.close();
this.approveLoading = false;
}
}, },
async handleReturn(row) { async handleReturn(row) {
const { value } = await this.$prompt('请输入驳回原因', '审批驳回', { const { value } = await this.$prompt('请输入驳回原因', '审批驳回', {