import { Outlet, Navigate, useNavigate, Link, useLocation } from 'react-router-dom'; import { useAuthStore } from '../store/authStore'; import { logoutApi } from '../api/auth'; import { LayoutDashboard, ListMusic, Mic2, Disc3, FolderOpen, LogOut, User as UserIcon, ChevronDown, Crown } from 'lucide-react'; import { Button } from '../components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "../components/ui/dropdown-menu" import { Avatar, AvatarFallback, AvatarImage } from "../components/ui/avatar" export default function AdminLayout() { const token = useAuthStore((state) => state.token); const userInfo = useAuthStore((state) => state.userInfo); const logout = useAuthStore((state) => state.logout); const navigate = useNavigate(); const location = useLocation(); if (!token) { return ; } const handleLogout = async () => { try { await logoutApi(); } catch (e) { console.warn('登出失败'); } logout(); navigate('/login'); }; const navItems = [ { name: '工作台', path: '/', icon: LayoutDashboard }, { name: '频道分类', path: '/radio/category', icon: ListMusic }, { name: '频道管理', path: '/radio/channel', icon: Mic2 }, { name: '节目管理', path: '/radio/program', icon: Disc3 }, { name: 'VIP配置', path: '/radio/vip', icon: Crown }, { name: '文件管理', path: '/system/oss', icon: FolderOpen }, ]; return (
{/* Sidebar */} {/* Main Area */}
{/* Navbar */}
logo

电台工作台

{navItems.find(i => i.path === location.pathname)?.name || '控制台'}

系统在线

{userInfo?.nickName || '管理员'}

{userInfo?.account || 'admin'}

安全退出系统
{/* Page Content */}
); }