feat: 合同列表新增客商风险列并抽取风险标签公共展示方法(客商页复用)
This commit is contained in:
@@ -621,6 +621,14 @@ export const option = createCrudOption([
|
|||||||
addDisplay: false,
|
addDisplay: false,
|
||||||
editDisplay: false,
|
editDisplay: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: '客商风险',
|
||||||
|
prop: 'customerRisk',
|
||||||
|
slot: true,
|
||||||
|
minWidth: 150,
|
||||||
|
addDisplay: false,
|
||||||
|
editDisplay: false,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: '金蝶合同ID',
|
label: '金蝶合同ID',
|
||||||
prop: 'kingdeeId',
|
prop: 'kingdeeId',
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* 客商/合同风险标签公共展示逻辑(黑名单=金蝶黑名单 A801-5 命中,与后端 HcsCreditCheckSupport 口径一致):
|
||||||
|
* 等级与黑名单组合展示、等级在前;内部组织客商默认无风险
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** 金蝶黑名单命中判定(客商档案行:失信类别/列入事由任一非空) */
|
||||||
|
export function isKingdeeBlack(category, reason) {
|
||||||
|
return !!(category || reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 合同行黑名单判定(推送链路按金蝶命中口径落库 kingdeeBlackStatus=yes) */
|
||||||
|
export function isContractBlack(blackStatus) {
|
||||||
|
return String(blackStatus || '').toLowerCase() === 'yes';
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 风险标签文案:riskLevel=C101-1 等级(0/1/2);isBlack=金蝶黑名单命中;customerKind=internal 显示"无风险" */
|
||||||
|
export function resolveRiskTagName(riskLevel, isBlack, customerKind) {
|
||||||
|
const levelName = { 2: '高风险', 1: '中风险', 0: '低风险' }[riskLevel] || '';
|
||||||
|
if (isBlack) return levelName ? `${levelName}、黑名单` : '黑名单';
|
||||||
|
if (levelName) return levelName;
|
||||||
|
if (customerKind === 'internal') return '无风险';
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 是否红色风险标签(黑名单命中或高风险) */
|
||||||
|
export function isRiskyTag(riskLevel, isBlack) {
|
||||||
|
return isBlack || riskLevel === '2';
|
||||||
|
}
|
||||||
@@ -92,6 +92,18 @@
|
|||||||
<span v-else>-</span>
|
<span v-else>-</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<!-- 客商风险:等级与金蝶黑名单组合展示(推送链路按金蝶命中口径落库),复用公共展示方法 -->
|
||||||
|
<template #customerRisk="{ row }">
|
||||||
|
<el-tag
|
||||||
|
v-if="contractRiskTagName(row)"
|
||||||
|
:type="isContractRisky(row) ? 'danger' : row.hcsRiskLevel === '1' ? 'warning' : 'success'"
|
||||||
|
class="status-text"
|
||||||
|
>
|
||||||
|
{{ contractRiskTagName(row) }}
|
||||||
|
</el-tag>
|
||||||
|
<span v-else>-</span>
|
||||||
|
</template>
|
||||||
|
|
||||||
<template #menu="{ row }">
|
<template #menu="{ row }">
|
||||||
<el-link
|
<el-link
|
||||||
v-if="hasPermission(`${config.permission}_view`)"
|
v-if="hasPermission(`${config.permission}_view`)"
|
||||||
@@ -1091,6 +1103,7 @@ import { exportBlob } from '@/api/common';
|
|||||||
import * as api from '@/api/business/contract-manage';
|
import * as api from '@/api/business/contract-manage';
|
||||||
import { createFromContract } from '@/api/business/contract-change';
|
import { createFromContract } from '@/api/business/contract-change';
|
||||||
import { repush as hcsRepush, repushBatch as hcsRepushBatch, getRisk } 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 { 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';
|
||||||
import { getList as getProjectList } from '@/api/business/project-apply';
|
import { getList as getProjectList } from '@/api/business/project-apply';
|
||||||
@@ -1756,6 +1769,13 @@ export default {
|
|||||||
hcsSyncLabel(value) {
|
hcsSyncLabel(value) {
|
||||||
return { unsynced: '待推送', synced: '已推送', failed: '推送失败' }[value] || value;
|
return { unsynced: '待推送', synced: '已推送', failed: '推送失败' }[value] || value;
|
||||||
},
|
},
|
||||||
|
// ==================== 客商风险(推送链路按金蝶黑名单命中口径落库,展示复用公共方法) ====================
|
||||||
|
contractRiskTagName(row) {
|
||||||
|
return resolveRiskTagName(row.hcsRiskLevel, isContractBlack(row.kingdeeBlackStatus));
|
||||||
|
},
|
||||||
|
isContractRisky(row) {
|
||||||
|
return isRiskyTag(row.hcsRiskLevel, isContractBlack(row.kingdeeBlackStatus));
|
||||||
|
},
|
||||||
hcsSyncTagType(value) {
|
hcsSyncTagType(value) {
|
||||||
return { unsynced: 'info', synced: 'success', failed: 'danger' }[value] || 'info';
|
return { unsynced: 'info', synced: 'success', failed: 'danger' }[value] || 'info';
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1598,6 +1598,7 @@ import {
|
|||||||
syncKingdee,
|
syncKingdee,
|
||||||
} from '@/api/vehicle/customer-archive';
|
} from '@/api/vehicle/customer-archive';
|
||||||
import { getRiskByName } from '@/api/business/hcs';
|
import { getRiskByName } from '@/api/business/hcs';
|
||||||
|
import { isKingdeeBlack, isRiskyTag, resolveRiskTagName } from '@/utils/risk-display';
|
||||||
import {
|
import {
|
||||||
getList as getCreditScoreQuantificationList,
|
getList as getCreditScoreQuantificationList,
|
||||||
getDetail as getCreditScoreQuantificationDetail,
|
getDetail as getCreditScoreQuantificationDetail,
|
||||||
@@ -5558,20 +5559,15 @@ export default {
|
|||||||
},
|
},
|
||||||
// 黑名单判定:仅以金蝶黑名单(A801-5)命中为准(失信类别/列入事由任一非空);C101-1 的 hcsBlackStatus 不作为黑名单依据
|
// 黑名单判定:仅以金蝶黑名单(A801-5)命中为准(失信类别/列入事由任一非空);C101-1 的 hcsBlackStatus 不作为黑名单依据
|
||||||
customerRowIsBlack(row) {
|
customerRowIsBlack(row) {
|
||||||
return !!(row.kingdeeBlackCategory || row.kingdeeBlackReason);
|
return isKingdeeBlack(row.kingdeeBlackCategory, row.kingdeeBlackReason);
|
||||||
},
|
},
|
||||||
// 客商风险名称(每日定时刷新落库字段):等级与黑名单组合展示(如"低风险、黑名单");内部组织默认无风险;未查询显示"-"
|
// 客商风险名称(每日定时刷新落库字段):等级与黑名单组合展示(如"低风险、黑名单");内部组织默认无风险;未查询显示"-"
|
||||||
customerRowRiskName(row) {
|
customerRowRiskName(row) {
|
||||||
const isBlack = this.customerRowIsBlack(row);
|
return resolveRiskTagName(row.hcsRiskLevel, this.customerRowIsBlack(row), row.customerKind);
|
||||||
const levelName = { 2: '高风险', 1: '中风险', 0: '低风险' }[row.hcsRiskLevel] || '';
|
|
||||||
if (isBlack) return levelName ? `${levelName}、黑名单` : '黑名单';
|
|
||||||
if (levelName) return levelName;
|
|
||||||
if (row.customerKind === 'internal') return '无风险';
|
|
||||||
return '';
|
|
||||||
},
|
},
|
||||||
// 高风险/黑名单判定(与列表筛选口径一致,命中显示红色标签)
|
// 高风险/黑名单判定(与列表筛选口径一致,命中显示红色标签)
|
||||||
customerRowRisky(row) {
|
customerRowRisky(row) {
|
||||||
return this.customerRowIsBlack(row) || row.hcsRiskLevel === '2';
|
return isRiskyTag(row.hcsRiskLevel, this.customerRowIsBlack(row));
|
||||||
},
|
},
|
||||||
// 客商名称风险校验(C101-1,仅展示不作为安全边界):名称失焦/回显时查询,
|
// 客商名称风险校验(C101-1,仅展示不作为安全边界):名称失焦/回显时查询,
|
||||||
// risky 在名称框下展示红色提示,悬浮见风险项明细;查询失败静默不阻断填写,提交链路由后端强校验兜底
|
// risky 在名称框下展示红色提示,悬浮见风险项明细;查询失败静默不阻断填写,提交链路由后端强校验兜底
|
||||||
|
|||||||
Reference in New Issue
Block a user