'use client'; import { Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { TooltipContent, TooltipProvider, TooltipTrigger, Tooltip } from "@/components/ui/tooltip"; import { useUserList } from "@/hooks/admin/user/use-user-list"; import { useState } from "react"; import { UserInfoEditor } from "./components/user-info-editor"; import { User } from "@/lib/types/user"; import { CreateUserEditor } from "./components/create-user-editor"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog"; import { AdminApi } from "@/lib/api"; import { toast } from "sonner"; import { ApiError } from "next/dist/server/api-utils"; export default function Page() { const { users, isLoading, error, mutate, refresh } = useUserList(); const [editorUserId, setEditorUserId] = useState(""); const handleUserUpdateLocal = async (newUser: User) => { await mutate( (data) => { if (!data) return data; return { ...data, items: data.items.map((user) => user.userId === newUser.userId ? newUser : user ), }; }, { revalidate: false, } ) } const handleUserDeleteLocal = async (userId: string, soft: boolean) => { await mutate( (data) => { if (!data) return data; return soft ? { ...data, items: data.items.map(u => u.userId === userId ? { ...u, deletedAt: new Date().toLocaleString() } : u) } : { ...data, items: data.items.filter((user) => user.userId !== userId), }; }, { revalidate: false, } ) } const [deletedUserId, setDeletedUserId] = useState(''); const handleUserDelete = async (userId: string) => { try { await AdminApi.user.remove(userId, false); toast.success('删除成功'); handleUserDeleteLocal(userId, false); setDeletedUserId(''); } catch (error) { toast.error((error as ApiError).message || '删除失败'); } } return ( <>
refresh()}>
{error && {error.message}} userId 账户 昵称 邮箱 手机号 操作 { users.map((user) => (
{user.userId}

{user.userId}

{user.username} {user.nickname} {user.email} {user.phone} {user.deletedAt ? : }
)) } {isLoading && ( { Array.from({ length: 6 }).map((_, index) => ( )) } )}
setEditorUserId('')} userId={editorUserId} onUserUpdate={handleUserUpdateLocal} onUserSoftDelete={userId => handleUserDeleteLocal(userId, true)} /> !o && setDeletedUserId('')}> 是否要彻底删除账号? 该操作无法撤销,会彻底删除该账号相关连的所有数据 取消 handleUserDelete(deletedUserId)}>删除 ) }