Files
jh-monitor/src/app/dashboard/components/cityNodeStats.tsx
2025-09-20 17:03:16 +08:00

86 lines
2.9 KiB
TypeScript

'use client'
import { useEffect, useState } from 'react'
import { Table, TableHeader, TableBody, TableHead, TableRow, TableCell } from '@/components/ui/table'
interface CityNode {
city: string
count: number
hash: string
label: string
offset: string
}
export default function CityNodeStats() {
const [data, setData] = useState<CityNode[]>([])
const [loading, setLoading] = useState(true)
useEffect(() => {
fetchData()
}, [])
const fetchData = async () => {
try {
const response = await fetch('/api/stats?type=city_node_count')
const result = await response.json()
setData(result)
} catch (error) {
console.error('获取城市节点数据失败:', error)
} finally {
setLoading(false)
}
}
if (loading) {
return (
<div className="bg-white rounded-lg p-6 overflow-hidden">
<h2 className="text-lg font-semibold mb-4"></h2>
<div className="text-gray-600">...</div>
</div>
)
}
return (
<div className="flex flex-col bg-white rounded-lg p-6 overflow-hidden">
<div className="flex justify-between items-center mb-4">
<h2 className="text-lg font-semibold"></h2>
<span className="text-sm text-gray-500">
{data.length}
</span>
</div>
<div className="flex overflow-hidden ">
<div className='flex w-full'>
<Table>
<TableHeader>
<TableRow className="bg-gray-50">
<TableHead className="px-4 py-2 text-left font-medium text-gray-600"></TableHead>
<TableHead className="px-4 py-2 text-left font-medium text-gray-600"></TableHead>
<TableHead className="px-4 py-2 text-left font-medium text-gray-600">Hash</TableHead>
<TableHead className="px-4 py-2 text-left font-medium text-gray-600"></TableHead>
<TableHead className="px-4 py-2 text-left font-medium text-gray-600"></TableHead>
</TableRow>
</TableHeader>
<TableBody>
{data.map((item, index) => (
<TableRow
key={index}
className={index % 2 === 0 ? 'bg-white' : 'bg-gray-50'}
>
<TableCell className="px-4 py-2">{item.city}</TableCell>
<TableCell className="px-4 py-2">{item.count}</TableCell>
<TableCell className="px-4 py-2">{item.hash}</TableCell>
<TableCell className="px-4 py-2">
<span className="bg-gray-100 px-2 py-1 rounded text-gray-700">
{item.label}</span>
</TableCell>
<TableCell className="px-4 py-2">{item.offset}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</div>
</div>
</div>
)
}