"use client" import { useState } from "react" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { Badge } from "@/components/ui/badge" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Eye, Edit, Mail, Phone, Calendar, Shield, MapPin } from "lucide-react" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" export type User = { id: string name: string email: string role: string status: "活跃" | "未激活" | "已禁用" registeredAt: string lastLogin?: string phone?: string address?: string avatar?: string permissions?: string[] loginHistory?: Array<{ date: string ip: string device: string }> } type UserDetailDialogProps = { user: User onEdit?: () => void } export function UserDetailDialog({ user, onEdit }: UserDetailDialogProps) { const [open, setOpen] = useState(false) const getStatusColor = (status: string) => { switch (status) { case "活跃": return "bg-green-500" case "未激活": return "bg-gray-500" case "已禁用": return "bg-red-500" default: return "bg-gray-500" } } const getInitials = (name: string) => { return name .split(" ") .map((part) => part[0]) .join("") .toUpperCase() .substring(0, 2) } const getAvatarColor = (name: string) => { const colors = [ "from-pink-500 to-purple-500", "from-blue-500 to-teal-500", "from-red-500 to-orange-500", "from-green-500 to-emerald-500", "from-purple-500 to-indigo-500", ] // Simple hash function to pick a color based on name const hash = name.split("").reduce((acc, char) => acc + char.charCodeAt(0), 0) return colors[hash % colors.length] } return ( 用户详情 查看用户的详细信息和活动记录
{getInitials(user.name)}

{user.name}

{user.status} {user.role}
基本信息 权限信息 活动记录
邮箱

{user.email}

电话

{user.phone || "未设置"}

注册日期

{user.registeredAt}

最后登录

{user.lastLogin || "从未登录"}

{user.address && (
地址

{user.address}

)}

角色: {user.role}

{user.permissions ? ( user.permissions.map((permission, index) => (
{permission}
)) ) : (

无权限信息

)}

登录历史

{user.loginHistory && user.loginHistory.length > 0 ? (
{user.loginHistory.map((login, index) => (

{login.date}

{login.device}

IP: {login.ip}
))}
) : (

无登录记录

)}
{onEdit && ( )}
) }