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 } })()}