import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; async function getData() { const DB = "/home/fzq1228/polyscout/data/polyscout.db"; const { execSync } = await import("child_process"); const q = (sql: string) => { const py = `import sqlite3,json; conn=sqlite3.connect('${DB}'); c=conn.cursor(); c.execute("""${sql}"""); print(json.dumps(c.fetchall(), ensure_ascii=False, default=str)); conn.close()`; try { return JSON.parse(execSync(`python3 -c ${JSON.stringify(py)}`, { encoding: "utf8" })); } catch { return []; } }; const mCount = q("SELECT COUNT(*) FROM markets")[0]?.[0] ?? 0; const sCount = q("SELECT COUNT(*) FROM signals")[0]?.[0] ?? 0; const lastSync = q("SELECT fetched_at FROM markets ORDER BY fetched_at DESC LIMIT 1")[0]?.[0] ?? "N/A"; const topSignals = q("SELECT market_id, score, expected_edge, risk, created_at FROM signals ORDER BY score DESC LIMIT 5"); return { mCount, sCount, lastSync, topSignals }; } const riskMap: Record = { low: "低", medium: "中", high: "高" }; const riskVariant: Record = { low: "default", medium: "secondary", high: "destructive" }; export default async function DashboardPage() { const { mCount, sCount, lastSync, topSignals } = await getData(); return (

仪表盘

PolyScout 实时套利信号监控

监控市场数
{mCount}
信号总数
{sCount}
最后同步
{String(lastSync).slice(0, 16)}

最新高分信号 (Top 5)

{topSignals.length === 0 ? ( ) : topSignals.map((r: any[], i: number) => ( ))}
市场 评分 预期收益 风险
暂无信号
{String(r[0]).slice(0, 16)} {r[1]} +{r[2]}% {riskMap[r[3]] ?? r[3]}
); }