From b4cd4bb204ee6821d75a9dacc2940c36edeb02f2 Mon Sep 17 00:00:00 2001 From: selfrelease Date: Mon, 31 Aug 2026 15:12:32 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=94=BB=E5=83=8Fkey=5Ffacts?= =?UTF-8?q?=E5=88=86=E7=BB=84(=E7=94=BB=E5=83=8F=E7=89=B9=E5=BE=81+?= =?UTF-8?q?=E4=B8=AA=E6=A1=88=E4=BA=8B=E5=AE=9E=E6=8A=98=E5=8F=A0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 画像特征(地区/公司类型/团队/财务等稳定属性)直接展示 - 个案事实(工伤详情/合同条款/解除原因等案件细节)默认折叠 - 点击"个案事实(N)"可展开查看 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- web2/src/pages/MyProfile.tsx | 77 +++++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 14 deletions(-) diff --git a/web2/src/pages/MyProfile.tsx b/web2/src/pages/MyProfile.tsx index f6f3910..add0d81 100644 --- a/web2/src/pages/MyProfile.tsx +++ b/web2/src/pages/MyProfile.tsx @@ -1,5 +1,5 @@ import { useEffect, useState, useCallback } from 'react' -import { UserCircle, History, ChevronRight, ArrowLeft } from 'lucide-react' +import { UserCircle, History, ChevronRight, ArrowLeft, ChevronDown } from 'lucide-react' import { PageLayout } from '@/components/common/PageLayout' import { EmptyState } from '@/components/common/EmptyState' import { LoadingState } from '@/components/common/LoadingState' @@ -341,7 +341,23 @@ const SOURCE_LABELS: Record = { manual: '用户确认', } -/** 常问话题中文映射 */ +/** 画像特征 key(稳定的用户属性,直接展示) */ +const PROFILE_FACT_KEYS = new Set([ + 'region', 'company_type', 'team_ability', 'industry', 'company_size', + 'role', 'risk_tolerance', 'communication_style', 'decision_style', + 'market_potential', 'financial_status', 'financial_situation', + 'cash_flow', 'asset_status', 'liability', 'revenue', 'profit_status', + 'business_model', 'funding_stage', 'expansion_plan', 'competitor', + 'customer_concentration', 'supply_chain', 'employee_count', + 'shareholder_structure', 'partnership', +]) + +/** 判断 key 属于画像特征还是个案事实 */ +function isProfileFact(key: string): boolean { + return PROFILE_FACT_KEYS.has(key.toLowerCase()) +} + + const TOPIC_LABELS: Record = { 'contract review': '合同审查', 'work-life balance': '工作生活平衡', @@ -407,6 +423,7 @@ export function MyProfile() { const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [currentHistory, setCurrentHistory] = useState(null) + const [showCaseFacts, setShowCaseFacts] = useState(false) const load = useCallback(async () => { setLoading(true) @@ -545,19 +562,51 @@ export function MyProfile() { )} - {profile.key_facts && Object.keys(profile.key_facts).length > 0 && ( -
-

关键事实

-
- {Object.entries(profile.key_facts).map(([k, v]) => ( -
- {translateFactKey(k)} - {translateFactValue(v)} + {profile.key_facts && Object.keys(profile.key_facts).length > 0 && (() => { + const entries = Object.entries(profile.key_facts) + const profileFacts = entries.filter(([k]) => isProfileFact(k)) + const caseFacts = entries.filter(([k]) => !isProfileFact(k)) + return ( + <> + {/* 画像特征:直接展示 */} + {profileFacts.length > 0 && ( +
+

画像特征

+
+ {profileFacts.map(([k, v]) => ( +
+ {translateFactKey(k)} + {translateFactValue(v)} +
+ ))} +
- ))} -
-
- )} + )} + {/* 个案事实:折叠展示 */} + {caseFacts.length > 0 && ( +
+ + {showCaseFacts && ( +
+ {caseFacts.map(([k, v]) => ( +
+ {translateFactKey(k)} + {translateFactValue(v)} +
+ ))} +
+ )} +
+ )} + + ) + })()} {profile.common_scenes && profile.common_scenes.length > 0 && (