"use client"; import Link from "next/link"; import { useCallback, useEffect, useMemo, useState } from "react"; import { listInviteCodesAPI, listUsersAPI, type InviteCodeItem, type UserItem } from "@/lib/api"; import { useAuth } from "@/hooks/use-auth"; export default function AdminPage() { const { user } = useAuth(); const [users, setUsers] = useState([]); const [invites, setInvites] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const loadData = useCallback(async () => { if (user?.role !== "admin") return; setLoading(true); setError(""); try { const [userRows, inviteRows] = await Promise.all([listUsersAPI(), listInviteCodesAPI()]); setUsers(userRows); setInvites(inviteRows); } catch (err) { setError(err instanceof Error ? err.message : "管理数据加载失败"); } finally { setLoading(false); } }, [user?.role]); useEffect(() => { loadData(); }, [loadData]); const stats = useMemo(() => { const activeUsers = users.filter((item) => item.is_active).length; const disabledUsers = users.length - activeUsers; const activeInvites = invites.filter((item) => item.is_active).length; const remainingInvites = invites.reduce((sum, item) => sum + Math.max(0, (item.max_uses || 0) - (item.used_count || 0)), 0); return { activeUsers, disabledUsers, activeInvites, remainingInvites }; }, [invites, users]); if (user?.role !== "admin") { return ; } return (
Admin Console

系统管理

账号访问和注册入口分开管理,减少误操作。

{error ?
{error}
: null}
); } function NoAccess() { return (
当前账号没有系统管理权限。
); } function StatCard({ label, value }: { label: string; value: string | number }) { return (
{label}
{value}
); } function AdminEntryCard({ href, title, description, primary, secondary, loading, }: { href: string; title: string; description: string; primary: string; secondary: string; loading: boolean; }) { return (

{title}

{description}

进入
当前状态
{loading ? "加载中" : primary}
补充信息
{loading ? "加载中" : secondary}
); }