import { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { motion } from 'framer-motion'; import { Activity, Users, Key, BarChart3, ArrowRight, CheckCircle2, XCircle } from 'lucide-react'; import { useAuth } from '../context/AuthContext'; export default function Dashboard() { const { token } = useAuth(); const [stats, setStats] = useState({ keys: 0, tokens: 0, keyRequests: 0, tokenEnabled: 0, tokenDisabled: 0, todayRequests: 0 }); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const fetchData = async () => { try { const headers = { 'X-Admin-Token': token }; const [keysRes, tokensRes, keyStatsRes, tokenStatsRes, todayReqRes] = await Promise.all([ fetch('/admin/keys', { headers }), fetch('/admin/tokens', { headers }), fetch('/admin/keys/stats', { headers }), fetch('/admin/tokens/stats', { headers }), fetch('/admin/today-requests', { headers }) ]); const keys = await keysRes.json(); const tokens = await tokensRes.json(); const keyStats = await keyStatsRes.json(); const tokenStats = await tokenStatsRes.json(); const todayReq = await todayReqRes.json(); setStats({ keys: keys.length, tokens: tokens.length, keyRequests: keyStats.totalRequests || 0, tokenEnabled: tokenStats.enabled || 0, tokenDisabled: tokenStats.disabled || 0, todayRequests: todayReq.todayRequests || 0 }); } catch (error) { console.error('Failed to fetch dashboard data', error); } finally { setIsLoading(false); } }; fetchData(); }, [token]); const container = { hidden: { opacity: 0 }, show: { opacity: 1, transition: { staggerChildren: 0.1 } } }; const item = { hidden: { opacity: 0, y: 20 }, show: { opacity: 1, y: 0 } }; return ( {/* Welcome Section */}

欢迎回来, 管理员

Antigravity API 网关正在平稳运行。这里是您的控制中心,您可以管理 Token、密钥并监控系统状态。

{/* Stats Grid */}
{stats.tokenEnabled} {stats.tokenDisabled}
} />
{/* Quick Start */}

快速开始指南

); } function StatsCard({ title, value, icon: Icon, color, bg, subtext }) { return (

{title}

{value}
{subtext}
); } function QuickStartStep({ number, title, desc, link }) { return (
{number}

{title}

{desc}

); }