Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c7bd4461e2 | |||
| e0a420ad08 |
@@ -8,12 +8,20 @@ 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' },
|
||||||
|
|||||||
@@ -2,9 +2,6 @@ import request from '@/axios';
|
|||||||
|
|
||||||
const baseUrl = '/blade-transport/receipt-flow';
|
const baseUrl = '/blade-transport/receipt-flow';
|
||||||
|
|
||||||
/** 收款流水同步需远程拉取金蝶收款单并逐条落库,覆盖全局 10s 超时 */
|
|
||||||
export const SYNC_TIMEOUT = 30000;
|
|
||||||
|
|
||||||
export const getList = (current, size, params) =>
|
export const getList = (current, size, params) =>
|
||||||
request({ url: `${baseUrl}/list`, method: 'get', params: { current, size, ...params } });
|
request({ url: `${baseUrl}/list`, method: 'get', params: { current, size, ...params } });
|
||||||
export const getDetail = id => request({ url: `${baseUrl}/detail`, method: 'get', params: { id } });
|
export const getDetail = id => request({ url: `${baseUrl}/detail`, method: 'get', params: { id } });
|
||||||
@@ -15,7 +12,9 @@ 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 = () => request({ url: `${baseUrl}/sync`, method: 'post', timeout: SYNC_TIMEOUT });
|
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' },
|
||||||
@@ -23,6 +22,12 @@ 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' },
|
||||||
|
|||||||
@@ -175,30 +175,6 @@ export const querySupplierCode = creditCode => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// 金蝶开户行查询(A905-3):收款信息填写开户行失焦后精确匹配带出联行号
|
|
||||||
export const queryKingdeeBank = bankName => {
|
|
||||||
return request({
|
|
||||||
url: '/blade-transport/customer-archive/query-bank',
|
|
||||||
method: 'get',
|
|
||||||
timeout: 30000,
|
|
||||||
params: {
|
|
||||||
bankName,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// 金蝶联行号校验(A905-3):收款信息保存前按联行号精确匹配,查不到不允许保存
|
|
||||||
export const queryKingdeeBankByNumber = cnapsCode => {
|
|
||||||
return request({
|
|
||||||
url: '/blade-transport/customer-archive/query-bank-by-number',
|
|
||||||
method: 'get',
|
|
||||||
timeout: 30000,
|
|
||||||
params: {
|
|
||||||
cnapsCode,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const syncKingdee = id => {
|
export const syncKingdee = id => {
|
||||||
return request({
|
return request({
|
||||||
url: '/blade-transport/customer-archive/sync-kingdee',
|
url: '/blade-transport/customer-archive/sync-kingdee',
|
||||||
|
|||||||
@@ -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 },
|
||||||
|
|||||||
@@ -1,23 +1,18 @@
|
|||||||
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: 'payeeName', label: '收款人(公司)', minWidth: 150 },
|
|
||||||
//{ prop: 'orgNumber', label: '收款公司编码', minWidth: 130 },
|
|
||||||
//{ prop: 'openOrgNumber', label: '核算组织编码', minWidth: 130 },
|
|
||||||
{ 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: 'remainingAmount', label: '剩余可认领金额', minWidth: 140, money: true },
|
{ prop: 'unclaimedAmount', label: '金蝶未认领金额', minWidth: 140, money: true },
|
||||||
{ prop: 'unmatchAmountRec', label: '未匹配金额', minWidth: 140, money: true },
|
{ prop: 'pushStatusName', label: '推送状态', minWidth: 110, status: true },
|
||||||
//{ prop: 'matchAmountRec', label: '已匹配收款金额', minWidth: 140, money: true },
|
{ prop: 'pushFailReason', label: '推送失败原因', minWidth: 160 },
|
||||||
//{ prop: 'matchAmountPay', label: '已匹配付款金额', minWidth: 140, money: true },
|
{ prop: 'kingdeeBillNo', label: '金蝶收款单号', minWidth: 150 },
|
||||||
//{ prop: 'unmatchAmountPay', label: '未匹配付款金额', minWidth: 140, money: true },
|
|
||||||
//{ prop: 'settleAmount', label: '已结算金额', minWidth: 130, money: true },
|
|
||||||
//{ prop: 'unsettleAmount', label: '未结算金额', minWidth: 130, money: true },
|
|
||||||
{ prop: 'kingdeeBillStatusName', label: '金蝶状态', minWidth: 110 },
|
{ prop: 'kingdeeBillStatusName', label: '金蝶状态', minWidth: 110 },
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import {
|
|||||||
approvalStatusOptions,
|
approvalStatusOptions,
|
||||||
invoiceStatusOptions,
|
invoiceStatusOptions,
|
||||||
kingdeeSyncStatusOptions,
|
kingdeeSyncStatusOptions,
|
||||||
|
kingdeeWriteOffStatusOptions,
|
||||||
paymentStatusOptions,
|
paymentStatusOptions,
|
||||||
} from './formalSettlementSearch';
|
} from './formalSettlementSearch';
|
||||||
import { formalSettlementTableColumns } from './formalSettlementTable';
|
import { formalSettlementTableColumns } from './formalSettlementTable';
|
||||||
@@ -87,6 +88,7 @@ const COLUMN_EXTRA = {
|
|||||||
searchPlaceholder: '请选择',
|
searchPlaceholder: '请选择',
|
||||||
},
|
},
|
||||||
kingdeeLockStatus: { slot: true },
|
kingdeeLockStatus: { slot: true },
|
||||||
|
kingdeeWriteOffStatus: { slot: true },
|
||||||
createTime: { width: 180 },
|
createTime: { width: 180 },
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -171,4 +173,5 @@ export const formalSettlementOption = () => ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const kingdeeSyncName = value => pickLabel(kingdeeSyncStatusOptions, value);
|
export const kingdeeSyncName = value => pickLabel(kingdeeSyncStatusOptions, value);
|
||||||
|
export const kingdeeWriteOffName = value => pickLabel(kingdeeWriteOffStatusOptions, value);
|
||||||
export const paymentStatusName = value => pickLabel(paymentStatusOptions, value);
|
export const paymentStatusName = value => pickLabel(paymentStatusOptions, value);
|
||||||
|
|||||||
@@ -34,6 +34,11 @@ export const kingdeeSyncStatusOptions = [
|
|||||||
{ label: '同步失败', value: 'failed' },
|
{ label: '同步失败', value: 'failed' },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
export const kingdeeWriteOffStatusOptions = [
|
||||||
|
{ label: '未冲销', value: 'unwrittenoff' },
|
||||||
|
{ label: '已冲销', value: 'writtenoff' },
|
||||||
|
];
|
||||||
|
|
||||||
export const formalSettlementSearchFields = [
|
export const formalSettlementSearchFields = [
|
||||||
{ label: '结算单号', prop: 'formalSettlementNo', type: 'input' },
|
{ label: '结算单号', prop: 'formalSettlementNo', type: 'input' },
|
||||||
{ label: '预付结算单号', prop: 'preSettlementNo', type: 'input' },
|
{ label: '预付结算单号', prop: 'preSettlementNo', type: 'input' },
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export const formalSettlementTableColumns = [
|
|||||||
{ label: '来源原单号', prop: 'originFormalSettlementNo', minWidth: 170 },
|
{ label: '来源原单号', prop: 'originFormalSettlementNo', minWidth: 170 },
|
||||||
{ label: '金蝶单据号', prop: 'kingdeeBillNo', minWidth: 150 },
|
{ label: '金蝶单据号', prop: 'kingdeeBillNo', minWidth: 150 },
|
||||||
{ label: '金蝶单据状态', prop: 'kingdeeSyncStatus', minWidth: 135 },
|
{ label: '金蝶单据状态', prop: 'kingdeeSyncStatus', minWidth: 135 },
|
||||||
|
{ label: '金蝶冲销状态', prop: 'kingdeeWriteOffStatus', minWidth: 135 },
|
||||||
{ label: '金蝶锁状态', prop: 'kingdeeLockStatus', minWidth: 150 },
|
{ label: '金蝶锁状态', prop: 'kingdeeLockStatus', minWidth: 150 },
|
||||||
{ label: '附件同步', prop: 'attachmentSyncStatusName', minWidth: 100 },
|
{ label: '附件同步', prop: 'attachmentSyncStatusName', minWidth: 100 },
|
||||||
{ label: '创建人', prop: 'createUserName', minWidth: 110 },
|
{ label: '创建人', prop: 'createUserName', minWidth: 110 },
|
||||||
|
|||||||
@@ -13,3 +13,12 @@ export const KINGDEE_STATUS_TAG_TYPES = {
|
|||||||
|
|
||||||
/** 金蝶单据状态 → el-tag 颜色类型,未映射状态返回 info */
|
/** 金蝶单据状态 → el-tag 颜色类型,未映射状态返回 info */
|
||||||
export const kingdeeStatusType = status => KINGDEE_STATUS_TAG_TYPES[status] || 'info';
|
export const kingdeeStatusType = status => KINGDEE_STATUS_TAG_TYPES[status] || 'info';
|
||||||
|
|
||||||
|
/** 金蝶冲销状态 → el-tag 颜色类型(已冲销=绿、未冲销=黄) */
|
||||||
|
export const KINGDEE_WRITEOFF_TAG_TYPES = {
|
||||||
|
writtenoff: 'success',
|
||||||
|
unwrittenoff: 'warning',
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 金蝶冲销状态 → el-tag 颜色类型,未映射状态(null=未校验)返回 info */
|
||||||
|
export const kingdeeWriteOffTagType = status => KINGDEE_WRITEOFF_TAG_TYPES[status] || 'info';
|
||||||
|
|||||||
@@ -93,24 +93,15 @@
|
|||||||
<span v-else>-</span>
|
<span v-else>-</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<!-- 客商风险:等级与金蝶黑名单组合展示(推送链路按金蝶命中口径落库),复用公共展示方法;非无风险标签悬浮见明细 -->
|
<!-- 客商风险:等级与金蝶黑名单组合展示(推送链路按金蝶命中口径落库),复用公共展示方法 -->
|
||||||
<template #customerRisk="{ row }">
|
<template #customerRisk="{ row }">
|
||||||
<el-tooltip
|
<el-tag
|
||||||
v-if="contractRiskTagName(row)"
|
v-if="contractRiskTagName(row)"
|
||||||
placement="top"
|
:type="isContractRisky(row) ? 'danger' : row.hcsRiskLevel === '1' ? 'warning' : 'success'"
|
||||||
effect="dark"
|
class="status-text"
|
||||||
popper-class="customer-risk-popper"
|
|
||||||
>
|
>
|
||||||
<template #content>
|
{{ contractRiskTagName(row) }}
|
||||||
<div>{{ row.hcsRiskDetail || contractRiskTagName(row) }}</div>
|
</el-tag>
|
||||||
</template>
|
|
||||||
<el-tag
|
|
||||||
:type="isContractRisky(row) ? 'danger' : row.hcsRiskLevel === '1' ? 'warning' : 'success'"
|
|
||||||
class="status-text"
|
|
||||||
>
|
|
||||||
{{ contractRiskTagName(row) }}
|
|
||||||
</el-tag>
|
|
||||||
</el-tooltip>
|
|
||||||
<span v-else>-</span>
|
<span v-else>-</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -1122,7 +1113,6 @@ import {
|
|||||||
repush as hcsRepush,
|
repush as hcsRepush,
|
||||||
repushBatch as hcsRepushBatch,
|
repushBatch as hcsRepushBatch,
|
||||||
} from '@/api/business/hcs';
|
} from '@/api/business/hcs';
|
||||||
import { repush as hcsRepush, repushBatch as hcsRepushBatch, getRisk } from '@/api/business/hcs';
|
|
||||||
import { isContractBlack, isRiskyTag, resolveRiskTagName } from '@/utils/risk-display';
|
import { isContractBlack, isRiskyTag, resolveRiskTagName } from '@/utils/risk-display';
|
||||||
import { Position } from '@element-plus/icons-vue';
|
import { Position } from '@element-plus/icons-vue';
|
||||||
import { getMkPublicDetail } from '@/api/mk-process';
|
import { getMkPublicDetail } from '@/api/mk-process';
|
||||||
@@ -3849,10 +3839,4 @@ export default {
|
|||||||
white-space: normal;
|
white-space: normal;
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 风险客商悬浮提示(同客商列表页):popper 挂在 body 下,约束宽度 */
|
|
||||||
.customer-risk-popper {
|
|
||||||
max-width: 360px;
|
|
||||||
line-height: 1.6;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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,6 +56,16 @@
|
|||||||
<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
|
||||||
@@ -83,6 +93,9 @@
|
|||||||
|
|
||||||
<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"
|
||||||
@@ -118,7 +131,11 @@
|
|||||||
<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="hasPermission('receipt_claim_record_void') && row.claimStatus === 'claimed'"
|
v-if="
|
||||||
|
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
|
||||||
@@ -164,6 +181,7 @@ const emptyQuery = () => ({
|
|||||||
claimDateRange: [],
|
claimDateRange: [],
|
||||||
claimerDeptName: '',
|
claimerDeptName: '',
|
||||||
kingdeeBillStatus: '',
|
kingdeeBillStatus: '',
|
||||||
|
pushStatus: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -177,15 +195,17 @@ export default {
|
|||||||
searchExpanded: false,
|
searchExpanded: false,
|
||||||
// 与 avue-crud 一致:搜索项数量超过 searchIndex(默认一行 4 项)时才显示“展开/收起”
|
// 与 avue-crud 一致:搜索项数量超过 searchIndex(默认一行 4 项)时才显示“展开/收起”
|
||||||
searchIndex: 4,
|
searchIndex: 4,
|
||||||
searchItemCount: 10,
|
searchItemCount: 11,
|
||||||
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 },
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -252,7 +272,7 @@ export default {
|
|||||||
},
|
},
|
||||||
async handleVoid(row) {
|
async handleVoid(row) {
|
||||||
await this.$confirm(
|
await this.$confirm(
|
||||||
'作废后将回退本次认领金额,并同步作废合同合规系统认领记录,是否继续?',
|
'作废后将回退本次认领金额,是否继续?',
|
||||||
'作废认领记录',
|
'作废认领记录',
|
||||||
{ type: 'warning', confirmButtonText: '确定', cancelButtonText: '取消' }
|
{ type: 'warning', confirmButtonText: '确定', cancelButtonText: '取消' }
|
||||||
);
|
);
|
||||||
@@ -260,6 +280,16 @@ 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
|
||||||
/>
|
/>
|
||||||
@@ -43,8 +43,8 @@
|
|||||||
<el-table-column label="已认领金额" min-width="130" align="right">
|
<el-table-column label="已认领金额" min-width="130" align="right">
|
||||||
<template #default="{ row }">{{ formatMoney(row.claimedAmount) }}</template>
|
<template #default="{ row }">{{ formatMoney(row.claimedAmount) }}</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">
|
||||||
<template #default="{ row }">{{ formatMoney(row.unmatchAmountRec) }}</template>
|
<template #default="{ row }">{{ formatMoney(row.unclaimedAmount) }}</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">
|
||||||
<template #default="{ row }">{{ formatMoney(flowRemaining(row)) }}</template>
|
<template #default="{ row }">{{ formatMoney(flowRemaining(row)) }}</template>
|
||||||
@@ -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">
|
||||||
@@ -302,8 +302,10 @@ export default {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
flowRemaining(flow) {
|
flowRemaining(flow) {
|
||||||
// 认领只登记本地:剩余可认领 = 收款金额 − 已认领金额
|
const unclaimed = Number(flow.unclaimedAmount || 0);
|
||||||
return Math.max(Number(flow.receiptAmount || 0) - Number(flow.claimedAmount || 0), 0);
|
const receipt = Number(flow.receiptAmount || 0);
|
||||||
|
const ceiling = unclaimed > 0 && receipt > 0 ? Math.min(unclaimed, receipt) : unclaimed || receipt;
|
||||||
|
return Math.max(ceiling - Number(flow.claimedAmount || 0), 0);
|
||||||
},
|
},
|
||||||
maxAllocation(row) {
|
maxAllocation(row) {
|
||||||
const current = Number(row.settlement.allocations?.[row.flow.id] || 0);
|
const current = Number(row.settlement.allocations?.[row.flow.id] || 0);
|
||||||
@@ -353,8 +355,12 @@ export default {
|
|||||||
}
|
}
|
||||||
for (const flow of this.flows) {
|
for (const flow of this.flows) {
|
||||||
const total = this.flowAllocatedTotal(flow.id);
|
const total = this.flowAllocatedTotal(flow.id);
|
||||||
if (total > this.flowRemaining(flow) + 0.001) {
|
const remaining = Math.max(
|
||||||
this.$message.warning(`流水${flow.receiptNoticeNo}的累计认领金额不能超过剩余可认领金额`);
|
Number(flow.unclaimedAmount || 0) - Number(flow.claimedAmount || 0),
|
||||||
|
0
|
||||||
|
);
|
||||||
|
if (total > remaining + 0.001) {
|
||||||
|
this.$message.warning(`流水${flow.receiptNoticeNo}的累计认领金额不能超过公告未认领金额`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,8 +48,8 @@
|
|||||||
><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.unmatchAmountRec)" 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"
|
||||||
><el-form-item label="剩余可认领金额"
|
><el-form-item label="剩余可认领金额"
|
||||||
@@ -205,7 +205,7 @@ const emptyForm = () => ({
|
|||||||
transactionTime: '',
|
transactionTime: '',
|
||||||
detailSerialNo: '',
|
detailSerialNo: '',
|
||||||
claimedAmount: 0,
|
claimedAmount: 0,
|
||||||
unmatchAmountRec: 0,
|
unclaimedAmount: 0,
|
||||||
claimerName: '',
|
claimerName: '',
|
||||||
claimerDeptName: '',
|
claimerDeptName: '',
|
||||||
claimDate: '',
|
claimDate: '',
|
||||||
@@ -252,10 +252,11 @@ export default {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
claimableAmount() {
|
claimableAmount() {
|
||||||
// 认领只登记本地:剩余可认领 = 收款金额 − 已认领金额
|
const unclaimed = Number(this.form.unclaimedAmount || 0);
|
||||||
const receipt = Number(this.form.receiptAmount || 0);
|
const receipt = Number(this.form.receiptAmount || 0);
|
||||||
const claimed = Number(this.form.claimedAmount || 0);
|
const ceiling =
|
||||||
return Math.max(receipt - claimed, 0);
|
unclaimed > 0 && receipt > 0 ? Math.min(unclaimed, receipt) : unclaimed || receipt;
|
||||||
|
return Math.max(ceiling - Number(this.form.claimedAmount || 0), 0);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
|
|||||||
@@ -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,6 +15,16 @@
|
|||||||
<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
|
||||||
@@ -149,10 +159,23 @@
|
|||||||
<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="100" fixed="right" align="center">
|
<el-table-column label="操作" width="170" fixed="right" align="center">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-link v-if="canClaim(row)" type="primary" @click="openClaim(row)">认领</el-link>
|
<el-link
|
||||||
<span v-else>-</span>
|
v-if="canClaim(row)"
|
||||||
|
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>
|
||||||
@@ -178,13 +201,13 @@
|
|||||||
>
|
>
|
||||||
<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="付款人">
|
||||||
{{ displayValue(detailDialog.data.payerName) }}
|
{{ displayValue(detailDialog.data.payerName) }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="收款金额">
|
<el-descriptions-item label="付款金额">
|
||||||
{{ formatMoney(detailDialog.data.receiptAmount) }}
|
{{ formatMoney(detailDialog.data.receiptAmount) }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="交易时间">
|
<el-descriptions-item label="交易时间">
|
||||||
@@ -213,8 +236,13 @@
|
|||||||
<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.unmatchAmountRec) }}
|
{{ formatMoney(detailDialog.data.unclaimedAmount) }}
|
||||||
|
</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>
|
||||||
<el-descriptions-item label="金蝶收款单号">
|
<el-descriptions-item label="金蝶收款单号">
|
||||||
{{ displayValue(detailDialog.data.kingdeeBillNo) }}
|
{{ displayValue(detailDialog.data.kingdeeBillNo) }}
|
||||||
@@ -222,6 +250,9 @@
|
|||||||
<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>
|
||||||
@@ -236,7 +267,9 @@
|
|||||||
</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 }">{{ claimStatusChange(row) }}</template>
|
<template #default="{ row }">
|
||||||
|
{{ 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>
|
||||||
@@ -264,6 +297,7 @@ const emptyQuery = () => ({
|
|||||||
summary: '',
|
summary: '',
|
||||||
detailSerialNo: '',
|
detailSerialNo: '',
|
||||||
claimStatus: '',
|
claimStatus: '',
|
||||||
|
pushStatus: '',
|
||||||
kingdeeBillStatus: '',
|
kingdeeBillStatus: '',
|
||||||
receiptAmountStart: undefined,
|
receiptAmountStart: undefined,
|
||||||
receiptAmountEnd: undefined,
|
receiptAmountEnd: undefined,
|
||||||
@@ -280,6 +314,7 @@ 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),
|
||||||
@@ -289,6 +324,7 @@ 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,
|
||||||
@@ -353,7 +389,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;
|
||||||
@@ -412,7 +448,38 @@ 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"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -72,6 +72,15 @@
|
|||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template #kingdeeWriteOffStatus="{ row }">
|
||||||
|
<el-tag
|
||||||
|
v-if="row.kingdeeSyncStatus === 'synced'"
|
||||||
|
:type="kingdeeWriteOffTagType(row.kingdeeWriteOffStatus)"
|
||||||
|
>{{ kingdeeWriteOffName(row.kingdeeWriteOffStatus) || '未校验' }}</el-tag
|
||||||
|
>
|
||||||
|
<span v-else>-</span>
|
||||||
|
</template>
|
||||||
|
|
||||||
<template #kingdeeLockStatus="{ row }">
|
<template #kingdeeLockStatus="{ row }">
|
||||||
<el-tooltip v-if="lockTag(row).show" :content="lockTag(row).tip" placement="top">
|
<el-tooltip v-if="lockTag(row).show" :content="lockTag(row).tip" placement="top">
|
||||||
<el-tag :type="lockTag(row).type" class="status-text">{{ lockTag(row).label }}</el-tag>
|
<el-tag :type="lockTag(row).type" class="status-text">{{ lockTag(row).label }}</el-tag>
|
||||||
@@ -93,8 +102,8 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { invoiceStatusName } from '@/option/settlement/formalSettlementSearch';
|
import { invoiceStatusName } from '@/option/settlement/formalSettlementSearch';
|
||||||
import { kingdeeSyncName, paymentStatusName } from '@/option/settlement/formalSettlement';
|
import { kingdeeSyncName, kingdeeWriteOffName, paymentStatusName } from '@/option/settlement/formalSettlement';
|
||||||
import { kingdeeStatusType } from '@/utils/kingdee';
|
import { kingdeeStatusType, kingdeeWriteOffTagType } from '@/utils/kingdee';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'FormalSettlementTablePanel',
|
name: 'FormalSettlementTablePanel',
|
||||||
@@ -207,6 +216,10 @@ export default {
|
|||||||
kingdeeSyncName(value) {
|
kingdeeSyncName(value) {
|
||||||
return kingdeeSyncName(value);
|
return kingdeeSyncName(value);
|
||||||
},
|
},
|
||||||
|
kingdeeWriteOffName(value) {
|
||||||
|
return kingdeeWriteOffName(value);
|
||||||
|
},
|
||||||
|
kingdeeWriteOffTagType,
|
||||||
lockTag(row) {
|
lockTag(row) {
|
||||||
if (row.kingdeeLockStatus === 'locked') {
|
if (row.kingdeeLockStatus === 'locked') {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -49,24 +49,21 @@
|
|||||||
</template>
|
</template>
|
||||||
<template #customerRisk="{ row }">
|
<template #customerRisk="{ row }">
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
v-if="customerRowRiskName(row) && customerRowRiskName(row) !== '无风险'"
|
v-if="customerRowRisky(row)"
|
||||||
placement="top"
|
placement="top"
|
||||||
effect="dark"
|
effect="dark"
|
||||||
popper-class="customer-risk-popper"
|
popper-class="customer-risk-popper"
|
||||||
>
|
>
|
||||||
<template #content>
|
<template #content>
|
||||||
<div>{{ row.hcsRiskDetail || customerRowRiskName(row) }}</div>
|
<div>{{ row.hcsRiskDetail || '该客商为高风险/黑名单客商' }}</div>
|
||||||
</template>
|
</template>
|
||||||
<el-tag
|
<el-tag type="danger" class="status-text">
|
||||||
:type="customerRowRisky(row) ? 'danger' : row.hcsRiskLevel === '1' ? 'warning' : 'success'"
|
|
||||||
class="status-text"
|
|
||||||
>
|
|
||||||
{{ customerRowRiskName(row) }}
|
{{ customerRowRiskName(row) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<el-tag
|
<el-tag
|
||||||
v-else-if="customerRowRiskName(row)"
|
v-else-if="customerRowRiskName(row)"
|
||||||
type="success"
|
:type="row.hcsRiskLevel === '1' ? 'warning' : 'success'"
|
||||||
class="status-text"
|
class="status-text"
|
||||||
>
|
>
|
||||||
{{ customerRowRiskName(row) }}
|
{{ customerRowRiskName(row) }}
|
||||||
@@ -1100,18 +1097,8 @@
|
|||||||
<el-form-item label="开户人姓名" prop="accountHolderName">
|
<el-form-item label="开户人姓名" prop="accountHolderName">
|
||||||
<el-input v-model="receiptForm.accountHolderName" maxlength="50" />
|
<el-input v-model="receiptForm.accountHolderName" maxlength="50" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="bankName">
|
<el-form-item label="开户行" prop="bankName">
|
||||||
<template #label>
|
<el-input v-model="receiptForm.bankName" maxlength="100" />
|
||||||
<span class="receipt-bank-label">
|
|
||||||
开户行
|
|
||||||
<el-tooltip placement="top" effect="dark" content="请填写银行全称,系统将自动匹配金蝶档案带出联行号">
|
|
||||||
<el-icon class="receipt-bank-help">
|
|
||||||
<el-icon-question-filled />
|
|
||||||
</el-icon>
|
|
||||||
</el-tooltip>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
<el-input v-model="receiptForm.bankName" maxlength="100" @blur="fetchReceiptCnapsCode" />
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="联行号" prop="cnapsCode">
|
<el-form-item label="联行号" prop="cnapsCode">
|
||||||
<el-input v-model="receiptForm.cnapsCode" maxlength="32" />
|
<el-input v-model="receiptForm.cnapsCode" maxlength="32" />
|
||||||
@@ -1618,8 +1605,6 @@ import {
|
|||||||
remove,
|
remove,
|
||||||
getScoreTemplate,
|
getScoreTemplate,
|
||||||
recognizeBusinessLicenseOcr,
|
recognizeBusinessLicenseOcr,
|
||||||
queryKingdeeBank,
|
|
||||||
queryKingdeeBankByNumber,
|
|
||||||
queryKingdeeCustomer,
|
queryKingdeeCustomer,
|
||||||
querySupplierCode,
|
querySupplierCode,
|
||||||
syncKingdee,
|
syncKingdee,
|
||||||
@@ -3669,50 +3654,18 @@ export default {
|
|||||||
this.receiptForm = this.emptyReceiptAccount();
|
this.receiptForm = this.emptyReceiptAccount();
|
||||||
this.$refs.receiptForm?.clearValidate();
|
this.$refs.receiptForm?.clearValidate();
|
||||||
},
|
},
|
||||||
// 开户行失焦后按行名精确匹配金蝶行名行号档案(A905-3),命中自动带出联行号,未命中提示检查
|
saveReceipt() {
|
||||||
async fetchReceiptCnapsCode() {
|
this.$refs.receiptForm.validate(valid => {
|
||||||
const bankName = String(this.receiptForm.bankName || '').trim();
|
if (!valid) return;
|
||||||
if (!bankName) return;
|
const receipt = this.normalizeReceipt(this.receiptForm);
|
||||||
try {
|
if (this.receiptIndex > -1) {
|
||||||
const res = await queryKingdeeBank(bankName);
|
this.archiveForm.receiptAccounts.splice(this.receiptIndex, 1, receipt);
|
||||||
// 防止响应返回时用户已修改开户行
|
|
||||||
if (String(this.receiptForm.bankName || '').trim() !== bankName) return;
|
|
||||||
const bank = res?.data?.data || null;
|
|
||||||
if (bank && bank.unionNumber) {
|
|
||||||
this.receiptForm.cnapsCode = bank.unionNumber;
|
|
||||||
this.$refs.receiptForm?.clearValidate('cnapsCode');
|
|
||||||
} else {
|
} else {
|
||||||
this.$message.warning('未查询到金蝶开户行信息,请检查开户行名称');
|
this.archiveForm.receiptAccounts.push(receipt);
|
||||||
|
this.handleDetailCurrentChange('receipt', this.getDetailPageCount('receipt'));
|
||||||
}
|
}
|
||||||
} catch (error) {
|
this.receiptBox = false;
|
||||||
// 忽略查询异常,联行号留空由用户手填
|
});
|
||||||
}
|
|
||||||
},
|
|
||||||
async saveReceipt() {
|
|
||||||
const valid = await this.$refs.receiptForm.validate().catch(() => false);
|
|
||||||
if (!valid) return;
|
|
||||||
// 保存前按联行号精确校验金蝶行名行号档案(A905-3),查不到不允许保存
|
|
||||||
const cnapsCode = String(this.receiptForm.cnapsCode || '').trim();
|
|
||||||
let bank = null;
|
|
||||||
try {
|
|
||||||
const res = await queryKingdeeBankByNumber(cnapsCode);
|
|
||||||
bank = res?.data?.data || null;
|
|
||||||
} catch (error) {
|
|
||||||
this.$message.warning('金蝶联行号校验失败,请稍后重试');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!bank || !bank.unionNumber) {
|
|
||||||
this.$message.warning('未查询到金蝶联行号信息,不能保存,请检查联行号');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const receipt = this.normalizeReceipt(this.receiptForm);
|
|
||||||
if (this.receiptIndex > -1) {
|
|
||||||
this.archiveForm.receiptAccounts.splice(this.receiptIndex, 1, receipt);
|
|
||||||
} else {
|
|
||||||
this.archiveForm.receiptAccounts.push(receipt);
|
|
||||||
this.handleDetailCurrentChange('receipt', this.getDetailPageCount('receipt'));
|
|
||||||
}
|
|
||||||
this.receiptBox = false;
|
|
||||||
},
|
},
|
||||||
deleteReceipt(index) {
|
deleteReceipt(index) {
|
||||||
this.$confirm('确定删除该收款信息?', '提示', {
|
this.$confirm('确定删除该收款信息?', '提示', {
|
||||||
@@ -6171,19 +6124,6 @@ export default {
|
|||||||
:deep(.el-select) {
|
:deep(.el-select) {
|
||||||
width: 60%;
|
width: 60%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.receipt-bank-label {
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.receipt-bank-help {
|
|
||||||
color: #a8abb2;
|
|
||||||
cursor: help;
|
|
||||||
font-size: 14px;
|
|
||||||
flex: none;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.receipt-dialog__footer-actions {
|
.receipt-dialog__footer-actions {
|
||||||
|
|||||||
Reference in New Issue
Block a user