"use client" import {useEffect, useState} from "react" import {Button} from "@/components/ui/button" import {Switch} from "@/components/ui/switch" import {Table, TableBody, TableCell, TableHead, TableHeader, TableRow} from "@/components/ui/table" import {Badge} from "@/components/ui/badge" import {Avatar, AvatarFallback, AvatarImage} from "@/components/ui/avatar" import {Eye, Layers, Pencil, Plus, UserRound, UserX,} from "lucide-react" import {Tooltip, TooltipContent, TooltipProvider, TooltipTrigger} from "@/components/ui/tooltip" import type {AdminUser} from "@/lib/services/admin" import {formatDateTime} from "@/lib/utils" import {EmptyStateWithBorder} from "@/components/layout/empty" import {LoadingStateWithBorder} from "@/components/layout/loading" import {ErrorInline} from "@/components/layout/error" import {useAdminUsers} from "@/contexts/admin-users-context" import {CreateUserModal} from "./components/create-user-modal" import {UserFilterBar} from "./components/user-filter-bar" import {UserDetailSheet} from "./components/user-detail-sheet" import {EditUserModal} from "./components/edit-user-modal" export default function UsersPage() { const { users, loading, error, fetchUsers, getUserDetail, updateUserStatus } = useAdminUsers() const [selectedUser, setSelectedUser] = useState(null) const [detailOpen, setDetailOpen] = useState(false) const [detailLoading, setDetailLoading] = useState(false) const [createModalOpen, setCreateModalOpen] = useState(false) const [editTarget, setEditTarget] = useState(null) useEffect(() => { fetchUsers() }, [fetchUsers]) const handleStatusToggle = async (user: AdminUser) => { await updateUserStatus(user) if (selectedUser?.id === user.id) { setSelectedUser(prev => prev ? { ...prev, is_active: !prev.is_active } : null) } } const handleShowDetail = async (user: AdminUser) => { setSelectedUser(user) setDetailOpen(true) setDetailLoading(true) try { const detail = await getUserDetail(user.id) setSelectedUser(detail) } catch { setSelectedUser(user) } finally { setDetailLoading(false) } } return (
{/* 顶部标题栏 */}

用户管理

{/* 筛选与分页栏 (已拆分为独立自治组件) */} {error ? (
fetchUsers(true)} className="justify-center" />
) : loading && users.length === 0 ? ( ) : users.length === 0 ? ( ) : (
ID 用户 邮箱 上次登陆 注册时间 上次更新 操作 {users.map((user) => ( handleShowDetail(user)} > {user.id}
{user.username.substring(0, 2).toUpperCase()}
{user.nickname} {user.is_admin && ( ADM )}
@{user.username}
{user.email || "-"} {formatDateTime(user.last_login_at)} {formatDateTime(user.created_at)} {formatDateTime(user.updated_at)} e.stopPropagation()}>
handleStatusToggle(user)} disabled={user.is_admin} className="scale-75" />
{user.is_admin ? '管理员账户' : user.is_active ? '禁用账户' : '启用账户'}
查看详情 编辑用户
))}
)} {/* 用户详情侧拉抽屉 (已拆分为独立子组件) */} {/* 编辑用户弹窗 */} setEditTarget(null)} /> {/* 新建用户模态弹窗 */} setCreateModalOpen(false)} />
) }