'use client' import { useState } from 'react' import { User, LogOut, KeyRound } from 'lucide-react' import { DevPanel } from '@/app/(main)/dev/panel' import { ChangePasswordDialog } from '@/components/layout/change-password-dialog' import { UserProfileDialog } from '@/components/layout/user-profile-dialog' import { Button } from '@/components/ui/button' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { Badge } from '@/components/ui/badge' import { Separator } from '@/components/ui/separator' import { SidebarTrigger } from '@/components/ui/sidebar' import { signOut } from 'next-auth/react' import { useRouter, usePathname } from 'next/navigation' import { useTheme } from 'next-themes' import { ThemeToggleButton, useThemeTransition } from '@/components/common/theme-toggle-button' import { getMenuTitle } from '@/constants/menu' import type { User as AppUser } from '@/types/user' interface HeaderProps { user?: AppUser } export function Header({ user }: HeaderProps) { const router = useRouter() const pathname = usePathname() const { theme, setTheme } = useTheme() const { startTransition } = useThemeTransition() const [isChangePasswordOpen, setIsChangePasswordOpen] = useState(false) const [isUserProfileOpen, setIsUserProfileOpen] = useState(false) const pageTitle = getMenuTitle(pathname, 2) // 只匹配到第二级菜单 const handleThemeToggle = () => { startTransition(() => { setTheme(theme === 'dark' ? 'light' : 'dark') }) } const handleLogout = async () => { await signOut({ redirect: false }) router.push('/login') } // 如果没有用户信息,不显示Header(应该被中间件重定向) if (!user) { return null } return (

{pageTitle}

{/* 主题切换按钮 */} {/* 开发者工具按钮 - 仅开发环境 */} {process.env.NODE_ENV === 'development' && user.isSuperAdmin && } {/* 用户菜单 */} 我的账户 setIsUserProfileOpen(true)}> 个人资料 setIsChangePasswordOpen(true)}> 修改密码 角色 {user.isSuperAdmin ? '超级管理员' : (Array.isArray(user.roles) ? user.roles.join('、') : user.roles)} 退出登录
{/* 修改密码对话框 */} setIsChangePasswordOpen(false)} /> {/* 用户资料对话框 */} setIsUserProfileOpen(false)} />
) }