feat: 合同客商风险管控前端接入——风险提示条与特批说明附件类型
1. 合同表单甲乙方选择后风险提示移至基本信息备注后(橙黄提示条+红色风险客商提示文案,按设计稿),改用后端 risky 统一判定(修复原 fdRiskLevel 等级值匹配不中的问题),展示后端 riskTip 完整风险明细 2. 合同详情基本信息备注后新增风险客商提示行(按推送留痕 hcs_risk_level/hcs_black_status 判定) 3. 附件类型兜底选项增加特批说明(高风险/黑名单客商合同必传,与后端 fileType 校验对齐;正式选项需在业务字典 contract_attachment_type 配置)
This commit is contained in:
@@ -176,6 +176,8 @@ const CONTRACT_ATTACHMENT_TYPE_OTHER = '其他文件';
|
|||||||
export const defaultContractAttachmentTypeOptions = [
|
export const defaultContractAttachmentTypeOptions = [
|
||||||
{ label: '合同文件', value: '合同文件' },
|
{ label: '合同文件', value: '合同文件' },
|
||||||
{ label: '双章归档文件', value: '双章归档文件' },
|
{ label: '双章归档文件', value: '双章归档文件' },
|
||||||
|
// 高风险/黑名单客商合同必传,后端按 fileType=特批说明 校验与转传特批(与后端 HcsSyncConstant.ATTACHMENT_TYPE_SPEC_EXPLANATION 对齐)
|
||||||
|
{ label: '特批说明', value: '特批说明' },
|
||||||
{ label: '其他文件', value: CONTRACT_ATTACHMENT_TYPE_OTHER },
|
{ label: '其他文件', value: CONTRACT_ATTACHMENT_TYPE_OTHER },
|
||||||
];
|
];
|
||||||
/** @deprecated 兼容旧引用,实际选项由业务字典 contract_attachment_type 动态加载 */
|
/** @deprecated 兼容旧引用,实际选项由业务字典 contract_attachment_type 动态加载 */
|
||||||
|
|||||||
@@ -184,6 +184,9 @@
|
|||||||
<el-descriptions-item label="备注" :span="3">{{
|
<el-descriptions-item label="备注" :span="3">{{
|
||||||
detailValue('remark')
|
detailValue('remark')
|
||||||
}}</el-descriptions-item>
|
}}</el-descriptions-item>
|
||||||
|
<el-descriptions-item v-if="detailRiskTipText" label="风险客商提示" :span="3">
|
||||||
|
<span style="color: #f56c6c">{{ detailRiskTipText }}</span>
|
||||||
|
</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -480,14 +483,6 @@
|
|||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="partyRiskText" label=" " label-width="24">
|
|
||||||
<el-alert
|
|
||||||
:title="partyRiskText"
|
|
||||||
type="warning"
|
|
||||||
:closable="false"
|
|
||||||
class="contract-manage-form__risk-alert"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="签订日期" prop="signDate">
|
<el-form-item label="签订日期" prop="signDate">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="form.signDate"
|
v-model="form.signDate"
|
||||||
@@ -612,6 +607,11 @@
|
|||||||
placeholder="请输入备注"
|
placeholder="请输入备注"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<!-- 风险客商提示(基本信息备注后):外部客商高风险/黑名单时展示,文案由后端 riskTip 拼装 -->
|
||||||
|
<div v-if="partyRiskText" class="contract-manage-form__risk-tip">
|
||||||
|
<div class="contract-manage-form__risk-tip-title">风险客商提示:</div>
|
||||||
|
<div class="contract-manage-form__risk-tip-content">{{ partyRiskText }}</div>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<contract-attachment-section
|
<contract-attachment-section
|
||||||
@@ -1493,20 +1493,31 @@ export default {
|
|||||||
const endDate = this.detailRow.endDate || '-';
|
const endDate = this.detailRow.endDate || '-';
|
||||||
return `${startDate} 至 ${endDate}`;
|
return `${startDate} 至 ${endDate}`;
|
||||||
},
|
},
|
||||||
// 高风险/黑名单客商签约提示(C101-1,签约前提示;强制拦截在合规推送链路)
|
// 高风险/黑名单客商签约提示(C101-1,签约前提示;强制拦截在后端提交校验与推送链路)
|
||||||
partyRiskText() {
|
partyRiskText() {
|
||||||
const parts = [];
|
const parts = [];
|
||||||
['partyA', 'partyB'].forEach(prop => {
|
['partyA', 'partyB'].forEach(prop => {
|
||||||
const risk = this.partyRisk[prop];
|
const risk = this.partyRisk[prop];
|
||||||
if (!risk) return;
|
if (!risk?.risky) return;
|
||||||
const name = this.form[prop] || '';
|
// riskTip 由后端按风险项拼装(【公司名称】:黑名单;涉诉;被执行人等),缺失时兜底通用提示
|
||||||
const label = prop === 'partyA' ? '甲方' : '乙方';
|
parts.push(
|
||||||
if (risk.blacklist) parts.push(`${label}[${name}]为黑名单客商`);
|
risk.riskTip ||
|
||||||
else if (['高', '高风险', 'high'].includes(String(risk.riskLevel).trim()))
|
`${prop === 'partyA' ? '甲方' : '乙方'}[${this.form[prop] || ''}]为高风险/黑名单客商`
|
||||||
parts.push(`${label}[${name}]为高风险客商`);
|
);
|
||||||
});
|
});
|
||||||
if (!parts.length) return '';
|
if (!parts.length) return '';
|
||||||
return `${parts.join(';')},按集团规定不可直接签约,审批通过后需在合同详情发起特批`;
|
return `${parts.join(';')},按集团规定不可直接签约,提交前须上传「特批说明」类型附件,审批通过后将自动发起合同特批`;
|
||||||
|
},
|
||||||
|
// 详情风险客商提示(基本信息备注后展示):按推送留痕 hcs_risk_level/hcs_black_status 判定(甲乙取高/任一),文案与后端 riskTip 一致
|
||||||
|
detailRiskTipText() {
|
||||||
|
const riskLevel = String(this.detailRow.hcsRiskLevel || '').trim();
|
||||||
|
const blacklist = String(this.detailRow.hcsBlackStatus || '').toLowerCase() === 'yes';
|
||||||
|
if (riskLevel !== '2' && !blacklist) return '';
|
||||||
|
const parties = [this.detailRow.partyA, this.detailRow.partyB]
|
||||||
|
.map(name => String(name || '').trim())
|
||||||
|
.filter(Boolean)
|
||||||
|
.join('、');
|
||||||
|
return `【${parties || '相对方'}】:被列入外部黑名单;涉贪污受贿裁判相关提及方(3年以上及其他);被执行人信息;买卖合同纠纷;劳动纠纷;重大纠纷`;
|
||||||
},
|
},
|
||||||
detailLegalSealText() {
|
detailLegalSealText() {
|
||||||
const value = this.detailRow.legalSealFlag;
|
const value = this.detailRow.legalSealFlag;
|
||||||
@@ -2227,7 +2238,7 @@ export default {
|
|||||||
if (requestId === this.contractPartyRequestId) this.contractPartyLoading = false;
|
if (requestId === this.contractPartyRequestId) this.contractPartyLoading = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
// C101-1 客商风险查询(展示用,强校验在后端推送/付款链路):失败静默不阻塞填写
|
// C101-1 客商风险查询(展示用,强校验在后端提交/推送链路):失败静默不阻塞填写
|
||||||
queryPartyRisk(prop) {
|
queryPartyRisk(prop) {
|
||||||
const name = this.form[prop];
|
const name = this.form[prop];
|
||||||
const code = name ? this.contractPartyCodeMap[name] : null;
|
const code = name ? this.contractPartyCodeMap[name] : null;
|
||||||
@@ -2241,8 +2252,10 @@ export default {
|
|||||||
this.partyRisk = {
|
this.partyRisk = {
|
||||||
...this.partyRisk,
|
...this.partyRisk,
|
||||||
[prop]: {
|
[prop]: {
|
||||||
riskLevel: risk.fdRiskLevel || '',
|
customerKind: risk.customerKind || '',
|
||||||
blacklist: String(risk.fdBlackStatus || '').toLowerCase() === 'yes',
|
// risky 由后端统一判定:外部客商高风险(等级=2)或黑名单;内部组织客商默认无风险恒为 false
|
||||||
|
risky: risk.risky === true,
|
||||||
|
riskTip: risk.riskTip || '',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
@@ -3088,6 +3101,25 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 风险客商提示条(基本信息备注后):橙黄背景 + 红色文字(设计稿 2026-10)
|
||||||
|
.contract-manage-form__risk-tip {
|
||||||
|
margin: 0 0 18px;
|
||||||
|
padding: 10px 16px;
|
||||||
|
background: #faecd8;
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
.contract-manage-form__risk-tip-title {
|
||||||
|
color: #f56c6c;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contract-manage-form__risk-tip-content {
|
||||||
|
color: #f56c6c;
|
||||||
|
line-height: 22px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.contract-manage-page {
|
.contract-manage-page {
|
||||||
&__expiry-search {
|
&__expiry-search {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
Reference in New Issue
Block a user