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 @@ /> - - - + +
+
风险客商提示:
+
{{ partyRiskText }}
+
{ 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;