"use client"; import { useState } from "react"; import { useScopeEffect } from "@/lib/company-scope"; import { CompanyNameTag } from "@/components/shared/CompanyNameTag"; import { listWeakSignals } from "@/lib/api-v2"; import { PageContainer, Badge} from "@/components/shared/PageContainer"; import { LoadingSpinner } from "@/components/shared/LoadingSpinner"; import { EmptyState } from "@/components/shared/EmptyState"; /** 弱信号项。 */ interface WeakSignal { company_id?: string; signal_type: string; content: string; confidence: number; risk_probability?: number; status: string; } const SIGNAL_TYPE_LABELS: Record = { technical: "技术", sentiment: "情绪", org: "组织", market: "市场", }; export default function WeakSignalsPage() { const [items, setItems] = useState([]); const [isLoading, setIsLoading] = useState(true); useScopeEffect(() => { listWeakSignals() .then((resp) => setItems((resp.data as WeakSignal[]) ?? [])) .catch(() => setItems([])) .finally(() => setIsLoading(false)); }); return ( {isLoading ? ( ) : items.length === 0 ? ( ) : (
{items.map((item, i) => ( ))}
企业 类型 内容 置信度 风险概率 状态
{SIGNAL_TYPE_LABELS[item.signal_type] ?? item.signal_type} {item.content} {(item.confidence * 100).toFixed(0)}% {item.risk_probability ? ( 0.6 ? "red" : item.risk_probability > 0.3 ? "amber" : "green"}> {(item.risk_probability * 100).toFixed(0)}% ) : "-"} {item.status}
)}
); }