'use client'; import { useCallback } from 'react'; import { useParams, useRouter } from 'next/navigation'; import { useUser, useUpdateUser } from '@/hooks/use-users'; import { User } from '@/lib/user-api'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Separator } from '@/components/ui/separator'; import { Skeleton } from '@/components/ui/skeleton'; import { ArrowLeft, Pencil, Shield, Ban, CheckCircle, } from 'lucide-react'; import { toast } from 'sonner'; type UserStatus = 'active' | 'inactive' | 'locked'; function getUserStatus(user: User): UserStatus { if (!user.isActive) return 'inactive'; return 'active'; } function StatusBadge({ status }: { status: UserStatus }) { const config: Record = { active: { label: '活跃', className: 'bg-green-100 text-green-700 hover:bg-green-100' }, inactive: { label: '禁用', className: 'bg-gray-100 text-gray-700 hover:bg-gray-100' }, locked: { label: '锁定', className: 'bg-red-100 text-red-700 hover:bg-red-100' }, }; const { label, className } = config[status]; return {label}; } function DetailSkeleton() { return (
{Array.from({ length: 6 }).map((_, i) => (
))}
); } export default function UserDetailPage() { const params = useParams(); const router = useRouter(); const userId = params.id as string; const { data, isLoading } = useUser(userId); const updateUser = useUpdateUser(); const user = (data?.data?.data as User) ?? null; const handleToggleActive = useCallback(() => { if (!user) return; const action = user.isActive ? '禁用' : '启用'; updateUser.mutate( { id: user.id, data: { isActive: !user.isActive } }, { onSuccess: () => toast.success(`已${action}用户 ${user.username}`), onError: () => toast.error(`${action}用户失败,请重试`), }, ); }, [user, updateUser]); if (isLoading) { return (
); } if (!user) { return (

用户详情

用户不存在或已被删除
); } return (

用户详情

{user.avatar && } {user.firstName?.[0] || user.username[0]}
{user.username}

用户名

{user.username}

手机号

{user.phone || '-'}

邮箱

{user.email || '-'}

状态

角色

-

创建时间

{new Date(user.createdAt).toLocaleString('zh-CN')}

最后登录时间

{user.lastLoginAt ? new Date(user.lastLoginAt).toLocaleString('zh-CN') : '-'}

); }