diff --git a/src/views/business/components/contract-attachment-section.vue b/src/views/business/components/contract-attachment-section.vue
index 10119b9..23519e3 100644
--- a/src/views/business/components/contract-attachment-section.vue
+++ b/src/views/business/components/contract-attachment-section.vue
@@ -176,6 +176,8 @@ const CONTRACT_ATTACHMENT_TYPE_OTHER = '其他文件';
export const defaultContractAttachmentTypeOptions = [
{ label: '合同文件', value: '合同文件' },
{ label: '双章归档文件', value: '双章归档文件' },
+ // 高风险/黑名单客商合同必传,后端按 fileType=特批说明 校验与转传特批(与后端 HcsSyncConstant.ATTACHMENT_TYPE_SPEC_EXPLANATION 对齐)
+ { label: '特批说明', value: '特批说明' },
{ label: '其他文件', value: CONTRACT_ATTACHMENT_TYPE_OTHER },
];
/** @deprecated 兼容旧引用,实际选项由业务字典 contract_attachment_type 动态加载 */
diff --git a/src/views/business/contract-manage.vue b/src/views/business/contract-manage.vue
index a81b6f8..4d20756 100644
--- a/src/views/business/contract-manage.vue
+++ b/src/views/business/contract-manage.vue
@@ -184,6 +184,9 @@
{{
detailValue('remark')
}}
+
+ {{ detailRiskTipText }}
+
@@ -480,14 +483,6 @@
/>
-
-
-
+
+
{
const risk = this.partyRisk[prop];
- if (!risk) return;
- const name = this.form[prop] || '';
- const label = prop === 'partyA' ? '甲方' : '乙方';
- if (risk.blacklist) parts.push(`${label}[${name}]为黑名单客商`);
- else if (['高', '高风险', 'high'].includes(String(risk.riskLevel).trim()))
- parts.push(`${label}[${name}]为高风险客商`);
+ if (!risk?.risky) return;
+ // riskTip 由后端按风险项拼装(【公司名称】:黑名单;涉诉;被执行人等),缺失时兜底通用提示
+ parts.push(
+ risk.riskTip ||
+ `${prop === 'partyA' ? '甲方' : '乙方'}[${this.form[prop] || ''}]为高风险/黑名单客商`
+ );
});
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() {
const value = this.detailRow.legalSealFlag;
@@ -2227,7 +2238,7 @@ export default {
if (requestId === this.contractPartyRequestId) this.contractPartyLoading = false;
});
},
- // C101-1 客商风险查询(展示用,强校验在后端推送/付款链路):失败静默不阻塞填写
+ // C101-1 客商风险查询(展示用,强校验在后端提交/推送链路):失败静默不阻塞填写
queryPartyRisk(prop) {
const name = this.form[prop];
const code = name ? this.contractPartyCodeMap[name] : null;
@@ -2241,8 +2252,10 @@ export default {
this.partyRisk = {
...this.partyRisk,
[prop]: {
- riskLevel: risk.fdRiskLevel || '',
- blacklist: String(risk.fdBlackStatus || '').toLowerCase() === 'yes',
+ customerKind: risk.customerKind || '',
+ // risky 由后端统一判定:外部客商高风险(等级=2)或黑名单;内部组织客商默认无风险恒为 false
+ risky: risk.risky === true,
+ riskTip: risk.riskTip || '',
},
};
})
@@ -3088,6 +3101,25 @@ export default {
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 {
&__expiry-search {
display: flex;