'use client' import { useState, useEffect, useRef, useCallback } from 'react' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table' import { Switch } from '@/components/ui/switch' import { Button } from '@/components/ui/button' import { authenticatedFetch } from '@/lib/auth' import type { DomainStatsResult } from '@/types/admin' // 表格组件,用于显示域名统计数据 const DomainStatsTable = ({ title, data, loading }: { title: string; data: DomainStatsResult[] | null; loading: boolean }) => { const formatNumber = (num: number) => { return num.toLocaleString() } if (loading) { return ( {title}
加载中...
) } return ( {title} {!data || data.length === 0 ? (

暂无数据

) : ( 排名 域名 访问次数 {data.map((item, index) => ( {index + 1} {item.domain === 'direct' ? '直接访问' : item.domain === 'unknown' ? '未知来源' : item.domain} {formatNumber(item.count)} ))}
)}
) } export default function DomainStatsTab() { // 状态管理 const [loading, setLoading] = useState(false) const [refreshing, setRefreshing] = useState(false) const [stats24h, setStats24h] = useState(null) const [statsTotal, setStatsTotal] = useState(null) const [error, setError] = useState(null) const [autoRefresh, setAutoRefresh] = useState(true) const [lastUpdateTime, setLastUpdateTime] = useState(null) const intervalRef = useRef(null) // 加载域名统计数据 const loadDomainStats = useCallback(async (isInitialLoad = false) => { try { if (isInitialLoad) { setLoading(true) } else { setRefreshing(true) } setError(null) const response = await authenticatedFetch('/api/admin/domain-stats') if (response.ok) { const data = await response.json() if (data.data) { setStats24h(data.data.top_24_hours || []) setStatsTotal(data.data.top_total || []) setLastUpdateTime(new Date()) } } else { throw new Error('获取域名统计失败') } } catch (error) { console.error('Failed to load domain stats:', error) setError('获取域名统计失败') } finally { setLoading(false) setRefreshing(false) } }, []) // 初始加载 useEffect(() => { loadDomainStats(true) }, [loadDomainStats]) // 自动刷新设置 useEffect(() => { if (autoRefresh) { // 设置自动刷新定时器 intervalRef.current = setInterval(() => { loadDomainStats(false) }, 5000) // 每5秒刷新一次 } else { // 清除定时器 if (intervalRef.current) { clearInterval(intervalRef.current) intervalRef.current = null } } // 清理函数 return () => { if (intervalRef.current) { clearInterval(intervalRef.current) } } }, [autoRefresh, loadDomainStats]) // 格式化更新时间 const formatUpdateTime = (time: Date | null) => { if (!time) return '' return time.toLocaleTimeString() } // 显示错误状态 if (error && !stats24h && !statsTotal) { return (
{error}
) } return (

域名访问统计

{lastUpdateTime && (

最后更新: {formatUpdateTime(lastUpdateTime)} {refreshing && 刷新中...}

)}
) }