'use client' export const runtime = 'edge' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Settings, Menu, Database, Folders, FolderTree, Globe, RefreshCw } from 'lucide-react' import Link from 'next/link' import { useEffect, useState } from 'react' export default function AdminDashboard() { // 添加状态来存储统计数据 const [stats, setStats] = useState({ parentCategories: 0, subCategories: 0, totalCategories: 0, totalSites: 0, }) const [isRefreshing, setIsRefreshing] = useState(false) // 获取统计数据 const fetchStats = async (showLoading = false) => { try { if (showLoading) setIsRefreshing(true) console.log('Fetching stats...') const response = await fetch('/api/admin/stats') const data = await response.json() console.log('Received stats:', data) setStats(data) } catch (error) { console.error('Failed to fetch stats:', error) } finally { if (showLoading) setIsRefreshing(false) } } useEffect(() => { fetchStats() }, []) // 页面获得焦点时刷新统计数据 useEffect(() => { const handleFocus = () => { fetchStats() } window.addEventListener('focus', handleFocus) return () => { window.removeEventListener('focus', handleFocus) } }, []) // 统计卡片数据 const statsItems = [ { title: '分类总数', value: stats.totalCategories, icon: Database, description: '所有分类数量' }, { title: '一级分类数量', value: stats.parentCategories, icon: Folders, description: '网站一级分类总数' }, { title: '二级分类数量', value: stats.subCategories, icon: FolderTree, description: '网站二级分类总数' }, { title: '站点总数', value: stats.totalSites, icon: Globe, description: '收录的网站总数' }, ] const dashboardItems = [ { title: '站点设置', icon: Settings, href: '/admin/site', description: '管理网站的基本信息,如标题、描述、Logo等' }, { title: '导航管理', icon: Menu, href: '/admin/navigation', description: '管理网站的导航菜单分类和子项目' }, { title: '资源管理', icon: Database, href: '/admin/resources', description: '管理网站的资源内容和分类' } ] return (

控制台

{/* 统计卡片 */}
{statsItems.map((item, index) => ( {item.title}
{item.value}

{item.description}

))}
{/* 原有的功能卡片 */}
{dashboardItems.map(item => ( {item.title}

{item.description}

))}
) }