Files
cunkebao_v3/SuperAdmin/app/dashboard/page.tsx

88 lines
2.6 KiB
TypeScript

"use client"
import { useState, useEffect } from "react"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
import { Building2, Users, UserCog } from "lucide-react"
import { toast } from "sonner"
interface DashboardStats {
companyCount: number
adminCount: number
customerCount: number
}
export default function DashboardPage() {
const [stats, setStats] = useState<DashboardStats>({
companyCount: 0,
adminCount: 0,
customerCount: 0
})
const [isLoading, setIsLoading] = useState(true)
useEffect(() => {
const fetchStats = async () => {
try {
const response = await fetch("http://yishi.com/dashboard/base")
const data = await response.json()
if (data.code === 200) {
setStats(data.data)
} else {
toast.error(data.msg || "获取统计信息失败")
}
} catch (error) {
toast.error("网络错误,请稍后重试")
} finally {
setIsLoading(false)
}
}
fetchStats()
}, [])
return (
<div className="space-y-6">
<h1 className="text-2xl font-bold"></h1>
<div className="grid gap-4 md:grid-cols-3">
<Card>
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
<CardTitle className="text-sm font-medium"></CardTitle>
<Building2 className="h-4 w-4 text-muted-foreground" />
</CardHeader>
<CardContent>
<div className="text-2xl font-bold">
{isLoading ? "..." : stats.companyCount}
</div>
</CardContent>
</Card>
<Card>
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
<CardTitle className="text-sm font-medium"></CardTitle>
<Users className="h-4 w-4 text-muted-foreground" />
</CardHeader>
<CardContent>
<div className="text-2xl font-bold">
{isLoading ? "..." : stats.customerCount}
</div>
</CardContent>
</Card>
<Card>
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
<CardTitle className="text-sm font-medium"></CardTitle>
<UserCog className="h-4 w-4 text-muted-foreground" />
</CardHeader>
<CardContent>
<div className="text-2xl font-bold">
{isLoading ? "..." : stats.adminCount}
</div>
</CardContent>
</Card>
</div>
</div>
)
}