feat: 收款认领页直连A301-2公告同步并支持A301-1认领结果查询回写
This commit is contained in:
@@ -8,6 +8,8 @@ export const getDetail = id => request({ url: `${baseUrl}/detail`, method: 'get'
|
|||||||
export const updateAttachments = data =>
|
export const updateAttachments = data =>
|
||||||
request({ url: `${baseUrl}/attachments`, method: 'post', data });
|
request({ url: `${baseUrl}/attachments`, method: 'post', data });
|
||||||
export const voidClaim = id => request({ url: `${baseUrl}/void`, method: 'post', params: { id } });
|
export const voidClaim = id => request({ url: `${baseUrl}/void`, method: 'post', params: { id } });
|
||||||
|
export const queryKingdeeResult = () =>
|
||||||
|
request({ url: `${baseUrl}/query-kingdee-result`, method: 'post' });
|
||||||
|
|
||||||
export const claimStatusOptions = [
|
export const claimStatusOptions = [
|
||||||
{ label: '已认领', value: 'claimed' },
|
{ label: '已认领', value: 'claimed' },
|
||||||
@@ -16,6 +18,8 @@ export const claimStatusOptions = [
|
|||||||
|
|
||||||
export const kingdeeBillStatusOptions = [
|
export const kingdeeBillStatusOptions = [
|
||||||
{ label: '未生成', value: 'none' },
|
{ label: '未生成', value: 'none' },
|
||||||
|
{ label: '已推送', value: 'pushed' },
|
||||||
{ label: '审核通过', value: 'approved' },
|
{ label: '审核通过', value: 'approved' },
|
||||||
|
{ label: '已收款', value: 'received' },
|
||||||
{ label: '处理失败', value: 'failed' },
|
{ label: '处理失败', value: 'failed' },
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export const getSettlementCandidates = (keyword, flowId) =>
|
|||||||
params: { keyword, flowId },
|
params: { keyword, flowId },
|
||||||
});
|
});
|
||||||
export const claim = data => request({ url: `${baseUrl}/claim`, method: 'post', data });
|
export const claim = data => request({ url: `${baseUrl}/claim`, method: 'post', data });
|
||||||
export const sync = data => request({ url: `${baseUrl}/sync`, method: 'post', data });
|
export const sync = () => request({ url: `${baseUrl}/sync`, method: 'post' });
|
||||||
|
|
||||||
export const claimStatusOptions = [
|
export const claimStatusOptions = [
|
||||||
{ label: '未认领', value: 'unclaimed' },
|
{ label: '未认领', value: 'unclaimed' },
|
||||||
|
|||||||
@@ -8,5 +8,6 @@ export const receiptFlowTableColumns = [
|
|||||||
{ prop: 'summary', label: '摘要', minWidth: 160 },
|
{ prop: 'summary', label: '摘要', minWidth: 160 },
|
||||||
{ prop: 'transactionTime', label: '交易时间', minWidth: 170 },
|
{ prop: 'transactionTime', label: '交易时间', minWidth: 170 },
|
||||||
{ prop: 'claimStatusName', label: '认领状态', minWidth: 110, status: true },
|
{ prop: 'claimStatusName', label: '认领状态', minWidth: 110, status: true },
|
||||||
|
{ prop: 'kingdeeClaimStatusName', label: '公告状态', minWidth: 110 },
|
||||||
{ prop: 'claimedAmount', label: '已认领金额', minWidth: 130, money: true },
|
{ prop: 'claimedAmount', label: '已认领金额', minWidth: 130, money: true },
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -80,6 +80,11 @@
|
|||||||
</section-card>
|
</section-card>
|
||||||
|
|
||||||
<section class="claim-record-page__table-panel">
|
<section class="claim-record-page__table-panel">
|
||||||
|
<div class="claim-record-page__toolbar">
|
||||||
|
<el-button :loading="refreshing" @click="handleRefreshKingdeeResult">
|
||||||
|
查询金蝶认领结果
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
<el-table v-loading="loading" :data="rows" border>
|
<el-table v-loading="loading" :data="rows" border>
|
||||||
<el-table-column type="index" label="序号" width="64" fixed="left" align="center" />
|
<el-table-column type="index" label="序号" width="64" fixed="left" align="center" />
|
||||||
<el-table-column
|
<el-table-column
|
||||||
@@ -167,6 +172,7 @@ export default {
|
|||||||
columns: receiptClaimRecordTableColumns,
|
columns: receiptClaimRecordTableColumns,
|
||||||
rows: [],
|
rows: [],
|
||||||
loading: false,
|
loading: false,
|
||||||
|
refreshing: false,
|
||||||
page: { current: 1, size: 10, total: 0 },
|
page: { current: 1, size: 10, total: 0 },
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -237,6 +243,16 @@ export default {
|
|||||||
this.$message.success(`作废成功,金蝶冲单号:${kingdeeBillNo}`);
|
this.$message.success(`作废成功,金蝶冲单号:${kingdeeBillNo}`);
|
||||||
await this.loadTable();
|
await this.loadTable();
|
||||||
},
|
},
|
||||||
|
async handleRefreshKingdeeResult() {
|
||||||
|
this.refreshing = true;
|
||||||
|
try {
|
||||||
|
const updated = Number(this.unwrapData(await api.queryKingdeeResult()) || 0);
|
||||||
|
this.$message.success(`金蝶认领结果回写完成,更新${updated}条`);
|
||||||
|
await this.loadTable();
|
||||||
|
} finally {
|
||||||
|
this.refreshing = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
hasPermission(code) {
|
hasPermission(code) {
|
||||||
return this.isAdmin || this.validData(this.permission?.[code], false);
|
return this.isAdmin || this.validData(this.permission?.[code], false);
|
||||||
},
|
},
|
||||||
@@ -281,6 +297,13 @@ export default {
|
|||||||
.claim-record-page__table-panel {
|
.claim-record-page__table-panel {
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
}
|
}
|
||||||
|
.claim-record-page__toolbar {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 12px 0;
|
||||||
|
}
|
||||||
.claim-record-page__pagination {
|
.claim-record-page__pagination {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
|
|||||||
@@ -194,64 +194,6 @@ import { mapGetters } from 'vuex';
|
|||||||
import * as api from '@/api/payment/receiptFlow';
|
import * as api from '@/api/payment/receiptFlow';
|
||||||
import { receiptFlowTableColumns } from '@/option/payment/receiptFlow';
|
import { receiptFlowTableColumns } from '@/option/payment/receiptFlow';
|
||||||
|
|
||||||
const receiptFlowMockTemplates = [
|
|
||||||
{
|
|
||||||
receiptNoticeNo: 'SKTZ20260827001',
|
|
||||||
payerName: '华东供应链管理有限公司',
|
|
||||||
receiptAmount: 48000,
|
|
||||||
counterpartyName: '上海安捷运输有限公司',
|
|
||||||
counterpartyAccount: '310000000000001001',
|
|
||||||
counterpartyBank: '中国工商银行上海分行',
|
|
||||||
summary: '运输服务款',
|
|
||||||
transactionTime: '2026-08-27 09:30:00',
|
|
||||||
detailSerialNo: 'MOCK-RF-20260827-001',
|
|
||||||
sourceUpdatedTime: '2026-08-27 09:30:00',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
receiptNoticeNo: 'SKTZ20260827002',
|
|
||||||
payerName: '华东供应链管理有限公司',
|
|
||||||
receiptAmount: 26500,
|
|
||||||
counterpartyName: '江苏联运物流有限公司',
|
|
||||||
counterpartyAccount: '320100000000002002',
|
|
||||||
counterpartyBank: '中国建设银行南京分行',
|
|
||||||
summary: '物流服务款',
|
|
||||||
transactionTime: '2026-08-27 13:45:00',
|
|
||||||
detailSerialNo: 'MOCK-RF-20260827-002',
|
|
||||||
sourceUpdatedTime: '2026-08-27 13:45:00',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const randomDigits = length =>
|
|
||||||
Array.from({ length }, () => Math.floor(Math.random() * 10)).join('');
|
|
||||||
|
|
||||||
const formatMockDateTime = date => {
|
|
||||||
const pad = value => String(value).padStart(2, '0');
|
|
||||||
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(
|
|
||||||
date.getHours()
|
|
||||||
)}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
|
|
||||||
};
|
|
||||||
|
|
||||||
const createReceiptFlowMockRows = () => {
|
|
||||||
const count = 20 + Math.floor(Math.random() * 31);
|
|
||||||
return Array.from({ length: count }, (_, index) => {
|
|
||||||
const template = receiptFlowMockTemplates[index % receiptFlowMockTemplates.length];
|
|
||||||
const transactionDate = new Date();
|
|
||||||
transactionDate.setDate(transactionDate.getDate() - Math.floor(Math.random() * 7));
|
|
||||||
transactionDate.setHours(8 + Math.floor(Math.random() * 10), Math.floor(Math.random() * 60), 0);
|
|
||||||
const transactionTime = formatMockDateTime(transactionDate);
|
|
||||||
const dateCode = transactionTime.slice(0, 10).replaceAll('-', '');
|
|
||||||
return {
|
|
||||||
...template,
|
|
||||||
receiptNoticeNo: `SKTZ${dateCode}${randomDigits(5)}`,
|
|
||||||
receiptAmount: Math.floor(10000 + Math.random() * 90000),
|
|
||||||
counterpartyAccount: `${template.counterpartyAccount.slice(0, -6)}${randomDigits(6)}`,
|
|
||||||
transactionTime,
|
|
||||||
detailSerialNo: `MOCK-RF-${dateCode}-${index + 1}${randomDigits(4)}`,
|
|
||||||
sourceUpdatedTime: transactionTime,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const emptyQuery = () => ({
|
const emptyQuery = () => ({
|
||||||
receiptNoticeNo: '',
|
receiptNoticeNo: '',
|
||||||
counterpartyName: '',
|
counterpartyName: '',
|
||||||
@@ -329,9 +271,8 @@ export default {
|
|||||||
async handleSync() {
|
async handleSync() {
|
||||||
this.syncing = true;
|
this.syncing = true;
|
||||||
try {
|
try {
|
||||||
const mockRows = createReceiptFlowMockRows();
|
const syncedCount = Number(this.unwrapData(await api.sync()) || 0);
|
||||||
const syncedCount = Number(this.unwrapData(await api.sync({ flows: mockRows })) || 0);
|
this.$message.success(`流水同步完成,共同步${syncedCount}条认领公告`);
|
||||||
this.$message.success(`流水同步完成,共同步${syncedCount}条`);
|
|
||||||
await this.loadTable();
|
await this.loadTable();
|
||||||
} finally {
|
} finally {
|
||||||
this.syncing = false;
|
this.syncing = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user