import { useState } from 'react'; import { ChevronDown, ChevronUp, AlertTriangle, TrendingUp, Info } from 'lucide-react'; import type { ButlerPainPoint } from '../../lib/viking-client'; interface InsightsSectionProps { painPoints: ButlerPainPoint[]; } function SeverityBadge({ severity }: { severity: ButlerPainPoint['severity'] }) { const config = { low: { bg: 'bg-blue-100 dark:bg-blue-900/30', text: 'text-blue-700 dark:text-blue-300', label: '低' }, medium: { bg: 'bg-amber-100 dark:bg-amber-900/30', text: 'text-amber-700 dark:text-amber-300', label: '中' }, high: { bg: 'bg-red-100 dark:bg-red-900/30', text: 'text-red-700 dark:text-red-300', label: '高' }, }; const c = config[severity]; return {c.label}; } function StatusBadge({ status }: { status: ButlerPainPoint['status'] }) { const config = { detected: { bg: 'bg-gray-100 dark:bg-gray-800', text: 'text-gray-600 dark:text-gray-400', label: '已检测' }, confirmed: { bg: 'bg-amber-100 dark:bg-amber-900/30', text: 'text-amber-700 dark:text-amber-300', label: '已确认' }, solving: { bg: 'bg-blue-100 dark:bg-blue-900/30', text: 'text-blue-700 dark:text-blue-300', label: '解决中' }, solved: { bg: 'bg-emerald-100 dark:bg-emerald-900/30', text: 'text-emerald-700 dark:text-emerald-300', label: '已解决' }, dismissed: { bg: 'bg-gray-100 dark:bg-gray-800', text: 'text-gray-500 dark:text-gray-500', label: '已忽略' }, }; const c = config[status]; return {c.label}; } export function InsightsSection({ painPoints }: InsightsSectionProps) { const [expandedId, setExpandedId] = useState(null); if (painPoints.length === 0) { return (

暂无洞察

管家会在对话中自动发现您遇到的反复困难

); } return (
{painPoints.map((pp) => { const isExpanded = expandedId === pp.id; return (
{isExpanded && (
分类: {pp.category}
证据链:
{pp.evidence.map((e, i) => (
“{e.user_said}”
{e.why_flagged}
))}
首次: {new Date(pp.first_seen).toLocaleDateString()} | 最近: {new Date(pp.last_seen).toLocaleDateString()}
)}
); })}
); }