diff --git a/web2/src/pages/KnowledgeBase.tsx b/web2/src/pages/KnowledgeBase.tsx
index 3aed705..0b2d577 100644
--- a/web2/src/pages/KnowledgeBase.tsx
+++ b/web2/src/pages/KnowledgeBase.tsx
@@ -57,6 +57,8 @@ const DOC_TYPES = [
{ value: 'emotion', label: '情绪疏导', icon: Heart },
{ value: 'life', label: '生活常识', icon: Coffee },
{ value: 'element_template', label: '要素表模板', icon: FileText },
+ { value: 'debt_collection_template', label: '催收文书', icon: FileText },
+ { value: 'contract_risk_clause', label: '合同风险库', icon: FileText },
]
/** 来源英文 → 中文映射 */
@@ -313,10 +315,13 @@ export function KnowledgeBase() {
相关度 {doc.score}
)}
- {doc.doc_type !== 'element_template' && (
+ {doc.doc_type !== 'element_template' && doc.doc_type !== 'debt_collection_template' && doc.doc_type !== 'contract_risk_clause' && (
{doc.content}
)}
- {doc.doc_type === 'element_template' && (() => {
+ {(() => {
+ /** 结构化模板预览:element_template / debt_collection_template / contract_risk_clause */
+ const STRUCTURED_TYPES = ['element_template', 'debt_collection_template', 'contract_risk_clause']
+ if (!STRUCTURED_TYPES.includes(doc.doc_type)) return null
try {
const tmpl = JSON.parse(doc.content)
const TYPE_LABELS: Record = {
@@ -328,34 +333,88 @@ export function KnowledgeBase() {
date: '日期',
number: '数字',
}
- return (
-
-
案由:{tmpl.cause_of_action}
-
适用:{tmpl.applicable}
-
要素清单({tmpl.elements?.length || 0}项)
-
- {tmpl.elements?.map((e: Record
, i: number) => (
-
- {e.label}
-
- {TYPE_LABELS[String(e.type)] || String(e.type)}
- {e.required === true || e.required === '是' ? ' ·必填' : ''}
-
-
- ))}
+ // 文书模板(element_template / debt_collection_template)
+ if (doc.doc_type === 'element_template' || doc.doc_type === 'debt_collection_template') {
+ const titleField = tmpl.cause_of_action || tmpl.name || tmpl.title
+ const stageLabel = tmpl.stage ? ` · 阶段${tmpl.stage}:${tmpl.stage_name || ''}` : ''
+ return (
+
+
{doc.doc_type === 'debt_collection_template' ? '文书' : '案由'}:{titleField}{stageLabel}
+ {tmpl.applicable &&
适用:{tmpl.applicable}
}
+ {tmpl.elements?.length > 0 && (
+ <>
+
要素清单({tmpl.elements.length}项)
+
+ {tmpl.elements.map((e: Record
, i: number) => (
+
+ {e.label}
+
+ {TYPE_LABELS[String(e.type)] || String(e.type)}
+ {e.required === true || e.required === '是' ? ' ·必填' : ''}
+
+
+ ))}
+
+ >
+ )}
+ {tmpl.claims?.length > 0 && (
+ <>
+
诉讼请求
+
+ {tmpl.claims.map((c: string, i: number) => (
+ {c}
+ ))}
+
+ >
+ )}
- {tmpl.claims?.length > 0 && (
- <>
- 诉讼请求
-
- {tmpl.claims.map((c: string, i: number) => (
-
{c}
- ))}
+ )
+ }
+ // 合同风险条款库(contract_risk_clause)
+ if (doc.doc_type === 'contract_risk_clause') {
+ return (
+
+
合同类型:{tmpl.contract_type}
+ {tmpl.high_risk_clauses?.length > 0 && (
+
+
高风险条款({tmpl.high_risk_clauses.length}项)
+
+ {tmpl.high_risk_clauses.map((c: Record
, i: number) => (
+
+ {c.risk}
+ - {c.description}
+
+ ))}
+
- >
- )}
-
- )
+ )}
+ {tmpl.medium_risk_clauses?.length > 0 && (
+
+
中风险条款({tmpl.medium_risk_clauses.length}项)
+
+ {tmpl.medium_risk_clauses.map((c: Record
, i: number) => (
+
+ {c.risk}
+ - {c.description}
+
+ ))}
+
+
+ )}
+ {tmpl.missing_clauses?.length > 0 && (
+
+
缺失条款提醒
+
+ {tmpl.missing_clauses.map((c: string, i: number) => (
+ {c}
+ ))}
+
+
+ )}
+
+ )
+ }
+ return null
} catch { return null }
})()}