import { useMemo } from "react"; import { AlertTriangle, Brain, Maximize2 } from "lucide-react"; import type { SSTCRisks } from "@/api/sstc"; import { Button } from "@/components/ui/button"; import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs"; import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; interface SSTCRiskPanelProps { risks: SSTCRisks; onJump?: (entityId: string) => void; } function formatBadgeCount(total: number): string { return total > 99 ? "99+" : String(total); } function computeRiskTotal(risks: SSTCRisks): number { return (risks.summary.conflict_count || 0) + (risks.summary.risk_count || 0); } export function SSTCRiskCenterPanel({ risks, onJump }: SSTCRiskPanelProps) { const total = useMemo( () => computeRiskTotal(risks), [risks] ); return (

项目预警中心

{formatBadgeCount(total)}
认知冲突 风险预警 {risks.conflicts.length === 0 ? (

暂无未解决冲突

) : ( risks.conflicts.map((item) => (

{item.title}

)) )}
{risks.risks.length === 0 ? (

暂无风险预警

) : ( risks.risks.map((item) => (

{item.title}

)) )}
); } export function SSTCRiskTopbarEntry({ risks, onJump }: SSTCRiskPanelProps) { const total = useMemo(() => computeRiskTotal(risks), [risks]); return ( ); }