import { useState, useEffect } from 'react'; import { Bug, CalendarPlus, TrendingUp, AlertTriangle } from 'lucide-react'; import { getStats, type DashboardStats } from '../api'; const SOURCE_LABELS: Record = { runtime: '运行时', cicd: 'CI/CD', deployment: '部署', }; const STATUS_LABELS: Record = { NEW: '新发现', VERIFYING: '验证中', CANNOT_REPRODUCE: '无法复现', PENDING_FIX: '等待审核', FIXING: '修复中', FIXED: '已修复', VERIFIED: '已验证', DEPLOYED: '已部署', FIX_FAILED: '修复失败', }; export default function Dashboard() { const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { const fetchStats = async () => { try { const response = await getStats(); setStats(response.data); } catch (error) { console.error('Failed to fetch stats:', error); } finally { setLoading(false); } }; fetchStats(); }, []); if (loading) { return (
); } if (!stats) { return
加载统计数据失败
; } return (

仪表盘

错误追踪系统概览

缺陷总数
{stats.total_bugs}
今日新增
{stats.today_bugs}
修复率
{stats.fix_rate}%
待修复
{(stats.status_distribution['NEW'] || 0) + (stats.status_distribution['PENDING_FIX'] || 0)}

状态分布

{Object.entries(stats.status_distribution).map(([status, count]) => ( ))}
状态 数量
{STATUS_LABELS[status] || status} {count}
{stats.source_distribution && (

来源分布

{Object.entries(stats.source_distribution).map(([source, count]) => ( ))}
来源 数量
{SOURCE_LABELS[source] || source} {count}
)}
); }