'use client'; import { useEffect, useRef, useState } from 'react'; import { useRouter } from 'next/navigation'; import { Diamond, ChevronDown, LogOut, Crown } from 'lucide-react'; import { useAdminStore } from '@/store/adminStore'; import { Badge } from '@/components/ui/badge'; import { Avatar } from './Avatar'; /** * 全局顶栏:左侧品牌 + 右侧用户菜单(头像 + 下拉含退出登录)。 * 在所有 /admin/* 路由(除 /admin/login)渲染。 */ export function TopBar() { const router = useRouter(); const admin = useAdminStore((s) => s.admin); const [menuOpen, setMenuOpen] = useState(false); const menuRef = useRef(null); // 下拉打开时:监听外部点击 + Esc 键关闭 useEffect(() => { if (!menuOpen) return; const onMouseDown = (e: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(e.target as Node)) { setMenuOpen(false); } }; const onKeyDown = (e: KeyboardEvent) => { if (e.key === 'Escape') setMenuOpen(false); }; document.addEventListener('mousedown', onMouseDown); document.addEventListener('keydown', onKeyDown); return () => { document.removeEventListener('mousedown', onMouseDown); document.removeEventListener('keydown', onKeyDown); }; }, [menuOpen]); const handleLogout = () => { setMenuOpen(false); useAdminStore.getState().logout(); router.replace('/admin/login'); }; const nickname = admin?.nickname ?? admin?.username ?? '管理员'; const username = admin?.username ?? 'admin'; const isSuperAdmin = admin?.role === 'super_admin'; return (
企业官网后台
{menuOpen && (

{nickname}

@{username}

{isSuperAdmin ? ( 超级管理员 ) : ( 普通管理员 )}
)}
); }