feat: 收款流水页面适配A301-1数据源并下线推送金蝶相关交互

This commit is contained in:
刘泉佳
2026-10-29 11:20:18 +08:00
parent 698f808f0b
commit acfe9bdd74
10 changed files with 24 additions and 141 deletions
-8
View File
@@ -8,20 +8,12 @@ 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' },
{ label: '已作废', value: 'voided' }, { label: '已作废', value: 'voided' },
]; ];
export const pushStatusOptions = [
{ label: '未推送', value: 'none' },
{ label: '已推送', value: 'pushed' },
{ label: '推送失败', value: 'failed' },
];
export const kingdeeBillStatusOptions = [ export const kingdeeBillStatusOptions = [
{ label: '未生成', value: 'none' }, { label: '未生成', value: 'none' },
{ label: '已推送', value: 'pushed' }, { label: '已推送', value: 'pushed' },
-8
View File
@@ -13,8 +13,6 @@ export const getSettlementCandidates = (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 = () => request({ url: `${baseUrl}/sync`, method: 'post' }); export const sync = () => request({ url: `${baseUrl}/sync`, method: 'post' });
export const pushKingdee = flowId =>
request({ url: `${baseUrl}/push-kingdee`, method: 'post', params: { flowId } });
export const claimStatusOptions = [ export const claimStatusOptions = [
{ label: '未认领', value: 'unclaimed' }, { label: '未认领', value: 'unclaimed' },
@@ -22,12 +20,6 @@ export const claimStatusOptions = [
{ label: '认领完成', value: 'claimed' }, { label: '认领完成', value: 'claimed' },
]; ];
export const pushStatusOptions = [
{ label: '未推送', value: 'none' },
{ label: '已推送', value: 'pushed' },
{ label: '推送失败', value: 'failed' },
];
export const kingdeeBillStatusOptions = [ export const kingdeeBillStatusOptions = [
{ label: '已推送', value: 'pushed' }, { label: '已推送', value: 'pushed' },
{ label: '审核通过', value: 'approved' }, { label: '审核通过', value: 'approved' },
+2 -2
View File
@@ -1,7 +1,7 @@
export const receiptClaimRecordTableColumns = [ export const receiptClaimRecordTableColumns = [
{ prop: 'receiptNoticeNo', label: '认领通知单', minWidth: 150, link: true }, { prop: 'receiptNoticeNo', label: '收款单号', minWidth: 150, link: true },
{ prop: 'payerName', label: '付款人', minWidth: 130 }, { prop: 'payerName', label: '付款人', minWidth: 130 },
{ prop: 'receiptAmount', label: '付款金额', minWidth: 130, money: true }, { prop: 'receiptAmount', label: '收款金额', minWidth: 130, money: true },
{ prop: 'counterpartyName', label: '对方户名', minWidth: 150 }, { prop: 'counterpartyName', label: '对方户名', minWidth: 150 },
{ prop: 'counterpartyAccount', label: '对方账号', minWidth: 170 }, { prop: 'counterpartyAccount', label: '对方账号', minWidth: 170 },
{ prop: 'counterpartyBank', label: '对方开户行', minWidth: 150 }, { prop: 'counterpartyBank', label: '对方开户行', minWidth: 150 },
+3 -7
View File
@@ -1,18 +1,14 @@
export const receiptFlowTableColumns = [ export const receiptFlowTableColumns = [
{ prop: 'receiptNoticeNo', label: '认领通知单', minWidth: 150, link: true }, { prop: 'receiptNoticeNo', label: '收款单号', minWidth: 150, link: true },
{ prop: 'payerName', label: '付款人', minWidth: 130 }, { prop: 'payerName', label: '付款人', minWidth: 130 },
{ prop: 'receiptAmount', label: '付款金额', minWidth: 130, money: true }, { prop: 'receiptAmount', label: '收款金额', minWidth: 130, money: true },
{ prop: 'counterpartyName', label: '对方户名', minWidth: 150 }, { prop: 'counterpartyName', label: '对方户名', minWidth: 150 },
{ prop: 'counterpartyAccount', label: '对方账号', minWidth: 170 }, { prop: 'counterpartyAccount', label: '对方账号', minWidth: 170 },
{ prop: 'counterpartyBank', label: '对方开户行', minWidth: 150 }, { prop: 'counterpartyBank', label: '对方开户行', minWidth: 150 },
{ 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 },
{ prop: 'unclaimedAmount', label: '金蝶未认领金额', minWidth: 140, money: true }, { prop: 'unclaimedAmount', label: '未匹配金额', minWidth: 140, money: true },
{ prop: 'pushStatusName', label: '推送状态', minWidth: 110, status: true },
{ prop: 'pushFailReason', label: '推送失败原因', minWidth: 160 },
{ prop: 'kingdeeBillNo', label: '金蝶收款单号', minWidth: 150 },
{ prop: 'kingdeeBillStatusName', label: '金蝶状态', minWidth: 110 }, { prop: 'kingdeeBillStatusName', label: '金蝶状态', minWidth: 110 },
]; ];
@@ -4,7 +4,7 @@
<section-card title="收款信息"> <section-card title="收款信息">
<el-row :gutter="32"> <el-row :gutter="32">
<el-col :span="6"> <el-col :span="6">
<el-form-item label="认领通知单"> <el-form-item label="收款单号">
<el-input v-model="form.receiptNoticeNo" disabled /> <el-input v-model="form.receiptNoticeNo" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
+4 -34
View File
@@ -3,7 +3,7 @@
<section-card v-if="searchVisible" class="claim-record-page__search"> <section-card v-if="searchVisible" class="claim-record-page__search">
<el-form :model="query" label-position="right" label-width="88px" @submit.prevent> <el-form :model="query" label-position="right" label-width="88px" @submit.prevent>
<div class="claim-record-page__search-grid"> <div class="claim-record-page__search-grid">
<el-form-item label="认领通知单"> <el-form-item label="收款单号">
<el-input v-model="query.receiptNoticeNo" clearable placeholder="请输入" /> <el-input v-model="query.receiptNoticeNo" clearable placeholder="请输入" />
</el-form-item> </el-form-item>
<el-form-item label="对方户名"> <el-form-item label="对方户名">
@@ -56,16 +56,6 @@
<el-form-item v-show="searchExpanded" label="所属组织"> <el-form-item v-show="searchExpanded" label="所属组织">
<el-input v-model="query.claimerDeptName" clearable placeholder="请输入" /> <el-input v-model="query.claimerDeptName" clearable placeholder="请输入" />
</el-form-item> </el-form-item>
<el-form-item v-show="searchExpanded" label="推送状态">
<el-select v-model="query.pushStatus" clearable placeholder="请选择">
<el-option
v-for="item in pushStatusOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item v-show="searchExpanded" label="金蝶单据状态"> <el-form-item v-show="searchExpanded" label="金蝶单据状态">
<el-select v-model="query.kingdeeBillStatus" clearable placeholder="请选择"> <el-select v-model="query.kingdeeBillStatus" clearable placeholder="请选择">
<el-option <el-option
@@ -93,9 +83,6 @@
<section class="claim-record-page__table-panel"> <section class="claim-record-page__table-panel">
<div class="claim-record-page__toolbar"> <div class="claim-record-page__toolbar">
<el-button :loading="refreshing" @click="handleRefreshKingdeeResult">
查询金蝶认领结果
</el-button>
<table-header-tools <table-header-tools
:columns="columns" :columns="columns"
v-model:visible-column-keys="visibleColumnKeys" v-model:visible-column-keys="visibleColumnKeys"
@@ -131,11 +118,7 @@
<el-table-column label="操作" width="120" fixed="right" align="center"> <el-table-column label="操作" width="120" fixed="right" align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-link <el-link
v-if=" v-if="hasPermission('receipt_claim_record_void') && row.claimStatus === 'claimed'"
hasPermission('receipt_claim_record_void') &&
row.claimStatus === 'claimed' &&
row.pushStatus !== 'pushed'
"
type="danger" type="danger"
@click="handleVoid(row)" @click="handleVoid(row)"
>作废</el-link >作废</el-link
@@ -181,7 +164,6 @@ const emptyQuery = () => ({
claimDateRange: [], claimDateRange: [],
claimerDeptName: '', claimerDeptName: '',
kingdeeBillStatus: '', kingdeeBillStatus: '',
pushStatus: '',
}); });
export default { export default {
@@ -195,17 +177,15 @@ export default {
searchExpanded: false, searchExpanded: false,
// 与 avue-crud 一致:搜索项数量超过 searchIndex(默认一行 4 项)时才显示“展开/收起” // 与 avue-crud 一致:搜索项数量超过 searchIndex(默认一行 4 项)时才显示“展开/收起”
searchIndex: 4, searchIndex: 4,
searchItemCount: 11, searchItemCount: 10,
searchVisible: true, searchVisible: true,
tableSize: 'default', tableSize: 'default',
claimStatusOptions: api.claimStatusOptions, claimStatusOptions: api.claimStatusOptions,
kingdeeBillStatusOptions: api.kingdeeBillStatusOptions, kingdeeBillStatusOptions: api.kingdeeBillStatusOptions,
pushStatusOptions: api.pushStatusOptions,
columns: receiptClaimRecordTableColumns, columns: receiptClaimRecordTableColumns,
visibleColumnKeys: receiptClaimRecordTableColumns.map(column => column.prop), visibleColumnKeys: receiptClaimRecordTableColumns.map(column => column.prop),
rows: [], rows: [],
loading: false, loading: false,
refreshing: false,
page: { current: 1, size: 10, total: 0 }, page: { current: 1, size: 10, total: 0 },
}; };
}, },
@@ -272,7 +252,7 @@ export default {
}, },
async handleVoid(row) { async handleVoid(row) {
await this.$confirm( await this.$confirm(
'作废后将回退本次认领金额,是否继续?', '作废后将回退本次认领金额,并同步作废合同合规系统认领记录,是否继续?',
'作废认领记录', '作废认领记录',
{ type: 'warning', confirmButtonText: '确定', cancelButtonText: '取消' } { type: 'warning', confirmButtonText: '确定', cancelButtonText: '取消' }
); );
@@ -280,16 +260,6 @@ export default {
this.$message.success('作废成功'); this.$message.success('作废成功');
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);
}, },
@@ -7,7 +7,7 @@
<el-table-column type="index" label="序号" width="64" align="center" /> <el-table-column type="index" label="序号" width="64" align="center" />
<el-table-column <el-table-column
prop="receiptNoticeNo" prop="receiptNoticeNo"
label="认领通知单" label="收款单号"
min-width="160" min-width="160"
show-overflow-tooltip show-overflow-tooltip
/> />
@@ -96,7 +96,7 @@
formatMoney(row.settlement.claimedReceiptAmount) formatMoney(row.settlement.claimedReceiptAmount)
}}</template> }}</template>
</el-table-column> </el-table-column>
<el-table-column label="认领通知单" min-width="180"> <el-table-column label="收款单号" min-width="180">
<template #default="{ row }">{{ row.flow.receiptNoticeNo || '-' }}</template> <template #default="{ row }">{{ row.flow.receiptNoticeNo || '-' }}</template>
</el-table-column> </el-table-column>
<el-table-column label="收款金额" min-width="140" align="right"> <el-table-column label="收款金额" min-width="140" align="right">
@@ -360,7 +360,7 @@ export default {
0 0
); );
if (total > remaining + 0.001) { if (total > remaining + 0.001) {
this.$message.warning(`流水${flow.receiptNoticeNo}的累计认领金额不能超过公告未认领金额`); this.$message.warning(`流水${flow.receiptNoticeNo}的累计认领金额不能超过未匹配金额`);
return; return;
} }
} }
+2 -2
View File
@@ -12,7 +12,7 @@
<section-card title="收款信息"> <section-card title="收款信息">
<el-row :gutter="32"> <el-row :gutter="32">
<el-col :span="6" <el-col :span="6"
><el-form-item label="认领通知单" ><el-form-item label="收款单号"
><el-input v-model="form.receiptNoticeNo" disabled /></el-form-item ><el-input v-model="form.receiptNoticeNo" disabled /></el-form-item
></el-col> ></el-col>
<el-col :span="6" <el-col :span="6"
@@ -48,7 +48,7 @@
><el-input :model-value="formatMoney(form.claimedAmount)" disabled /></el-form-item ><el-input :model-value="formatMoney(form.claimedAmount)" disabled /></el-form-item
></el-col> ></el-col>
<el-col :span="6" <el-col :span="6"
><el-form-item label="金蝶未认领金额" ><el-form-item label="未匹配金额"
><el-input :model-value="formatMoney(form.unclaimedAmount)" disabled /></el-form-item ><el-input :model-value="formatMoney(form.unclaimedAmount)" disabled /></el-form-item
></el-col> ></el-col>
<el-col :span="6" <el-col :span="6"
+8 -75
View File
@@ -3,7 +3,7 @@
<section v-if="searchVisible" class="receipt-flow-page__search"> <section v-if="searchVisible" class="receipt-flow-page__search">
<el-form :model="query" label-position="right" label-width="88px" @submit.prevent> <el-form :model="query" label-position="right" label-width="88px" @submit.prevent>
<div class="receipt-flow-page__search-grid"> <div class="receipt-flow-page__search-grid">
<el-form-item label="认领通知单"> <el-form-item label="收款单号">
<el-input v-model="query.receiptNoticeNo" clearable placeholder="请输入" /> <el-input v-model="query.receiptNoticeNo" clearable placeholder="请输入" />
</el-form-item> </el-form-item>
<el-form-item label="对方户名"> <el-form-item label="对方户名">
@@ -15,16 +15,6 @@
<el-form-item label="对方账号"> <el-form-item label="对方账号">
<el-input v-model="query.counterpartyAccount" clearable placeholder="请输入" /> <el-input v-model="query.counterpartyAccount" clearable placeholder="请输入" />
</el-form-item> </el-form-item>
<el-form-item label="推送状态">
<el-select v-model="query.pushStatus" clearable placeholder="请选择">
<el-option
v-for="item in pushStatusOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="认领状态"> <el-form-item label="认领状态">
<el-select v-model="query.claimStatus" clearable placeholder="请选择"> <el-select v-model="query.claimStatus" clearable placeholder="请选择">
<el-option <el-option
@@ -159,23 +149,10 @@
<span v-else>{{ displayValue(row[column.prop]) }}</span> <span v-else>{{ displayValue(row[column.prop]) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="170" fixed="right" align="center"> <el-table-column label="操作" width="100" fixed="right" align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-link <el-link v-if="canClaim(row)" type="primary" @click="openClaim(row)">认领</el-link>
v-if="canClaim(row)" <span v-else>-</span>
type="primary"
:disabled="pushingId === row.id"
@click="openClaim(row)"
>认领</el-link
>
<el-link
v-if="canPush(row)"
type="warning"
:disabled="pushingId === row.id"
@click="handlePush(row)"
>推送金蝶</el-link
>
<span v-if="!canClaim(row) && !canPush(row)">-</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -201,7 +178,7 @@
> >
<div v-loading="detailDialog.loading"> <div v-loading="detailDialog.loading">
<el-descriptions :column="3" border> <el-descriptions :column="3" border>
<el-descriptions-item label="认领通知单"> <el-descriptions-item label="收款单号">
{{ displayValue(detailDialog.data.receiptNoticeNo) }} {{ displayValue(detailDialog.data.receiptNoticeNo) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="付款人"> <el-descriptions-item label="付款人">
@@ -236,23 +213,15 @@
<el-descriptions-item label="剩余可认领金额"> <el-descriptions-item label="剩余可认领金额">
{{ formatMoney(detailDialog.data.remainingAmount) }} {{ formatMoney(detailDialog.data.remainingAmount) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="金蝶未认领金额"> <el-descriptions-item label="未匹配金额">
{{ formatMoney(detailDialog.data.unclaimedAmount) }} {{ formatMoney(detailDialog.data.unclaimedAmount) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="推送状态">
<el-tag :type="statusType(detailDialog.data, { prop: 'pushStatusName' })">
{{ displayValue(detailDialog.data.pushStatusName) }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="金蝶收款单号"> <el-descriptions-item label="金蝶收款单号">
{{ displayValue(detailDialog.data.kingdeeBillNo) }} {{ displayValue(detailDialog.data.kingdeeBillNo) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="金蝶状态"> <el-descriptions-item label="金蝶状态">
{{ displayValue(detailDialog.data.kingdeeBillStatusName) }} {{ displayValue(detailDialog.data.kingdeeBillStatusName) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="推送失败原因">
{{ displayValue(detailDialog.data.pushFailReason) }}
</el-descriptions-item>
<el-descriptions-item label="摘要"> <el-descriptions-item label="摘要">
{{ displayValue(detailDialog.data.summary) }} {{ displayValue(detailDialog.data.summary) }}
</el-descriptions-item> </el-descriptions-item>
@@ -267,9 +236,7 @@
</el-table-column> </el-table-column>
<el-table-column prop="operatorName" label="认领人" min-width="120" align="center" /> <el-table-column prop="operatorName" label="认领人" min-width="120" align="center" />
<el-table-column label="状态变化" min-width="170" align="center"> <el-table-column label="状态变化" min-width="170" align="center">
<template #default="{ row }"> <template #default="{ row }">{{ claimStatusChange(row) }}</template>
{{ row.actionType === 'push' ? row.actionName : claimStatusChange(row) }}
</template>
</el-table-column> </el-table-column>
<el-table-column prop="content" label="认领说明" min-width="220" /> <el-table-column prop="content" label="认领说明" min-width="220" />
</el-table> </el-table>
@@ -297,7 +264,6 @@ const emptyQuery = () => ({
summary: '', summary: '',
detailSerialNo: '', detailSerialNo: '',
claimStatus: '', claimStatus: '',
pushStatus: '',
kingdeeBillStatus: '', kingdeeBillStatus: '',
receiptAmountStart: undefined, receiptAmountStart: undefined,
receiptAmountEnd: undefined, receiptAmountEnd: undefined,
@@ -314,7 +280,6 @@ export default {
ArrowUp, ArrowUp,
query: emptyQuery(), query: emptyQuery(),
claimStatusOptions: api.claimStatusOptions, claimStatusOptions: api.claimStatusOptions,
pushStatusOptions: api.pushStatusOptions,
kingdeeBillStatusOptions: api.kingdeeBillStatusOptions, kingdeeBillStatusOptions: api.kingdeeBillStatusOptions,
columns: receiptFlowTableColumns, columns: receiptFlowTableColumns,
visibleColumnKeys: receiptFlowTableColumns.map(column => column.prop), visibleColumnKeys: receiptFlowTableColumns.map(column => column.prop),
@@ -324,7 +289,6 @@ export default {
selectedRows: [], selectedRows: [],
loading: false, loading: false,
syncing: false, syncing: false,
pushingId: null,
searchExpanded: false, searchExpanded: false,
// 与 avue-crud 一致:搜索项数量超过 searchIndex(默认一行 4 项)时才显示“展开/收起” // 与 avue-crud 一致:搜索项数量超过 searchIndex(默认一行 4 项)时才显示“展开/收起”
searchIndex: 4, searchIndex: 4,
@@ -389,7 +353,7 @@ export default {
this.syncing = true; this.syncing = true;
try { try {
const syncedCount = Number(this.unwrapData(await api.sync()) || 0); const syncedCount = Number(this.unwrapData(await api.sync()) || 0);
this.$message.success(`流水同步完成,共同步${syncedCount}条认领公告`); this.$message.success(`流水同步完成,共同步${syncedCount}条收款流水`);
await this.loadTable(); await this.loadTable();
} finally { } finally {
this.syncing = false; this.syncing = false;
@@ -448,38 +412,7 @@ export default {
canClaim(row) { canClaim(row) {
return this.hasPermission('receipt_flow_claim') && Number(row.remainingAmount || 0) > 0; return this.hasPermission('receipt_flow_claim') && Number(row.remainingAmount || 0) > 0;
}, },
canPush(row) {
return (
this.hasPermission('receipt_flow_push') &&
!!row.billId &&
row.claimStatus === 'claimed' &&
row.pushStatus !== 'pushed'
);
},
async handlePush(row) {
try {
await this.$confirm(
`确认将流水【${row.receiptNoticeNo || row.detailSerialNo || ''}】推送金蝶生成收款单?`,
'推送金蝶',
{ type: 'warning' }
);
} catch {
return;
}
this.pushingId = row.id;
try {
const data = this.unwrapData(await api.pushKingdee(row.id));
const billNo = data?.kingdeeBillNo;
this.$message.success(billNo ? `推送成功,金蝶收款单号:${billNo}` : '推送成功');
await this.loadTable();
} finally {
this.pushingId = null;
}
},
statusType(row, column) { statusType(row, column) {
if (column?.prop === 'pushStatusName') {
return { pushed: 'success', failed: 'danger' }[row.pushStatus] || 'info';
}
return ( return (
{ claimed: 'success', partial: 'warning', unclaimed: 'info' }[row.claimStatus] || '' { claimed: 'success', partial: 'warning', unclaimed: 'info' }[row.claimStatus] || ''
); );
@@ -559,7 +559,7 @@
<el-table-column type="index" label="序号" width="64" align="center" /> <el-table-column type="index" label="序号" width="64" align="center" />
<el-table-column <el-table-column
prop="receiptNoticeNo" prop="receiptNoticeNo"
label="认领通知单" label="收款单号"
min-width="160" min-width="160"
align="center" align="center"
/> />