import { useEffect, useMemo, useState } from 'react'; import { Avatar, Button, Dropdown, Layout, Menu, Space, Typography, } from '@arco-design/web-react'; import { IconMenuFold, IconMenuUnfold } from '@arco-design/web-react/icon'; import { Navigate, Route, Routes, useLocation, useNavigate } from 'react-router-dom'; import type { ApiResponse, AdminProfile } from '../api/types'; import { API_BASE_URL, TOKEN_KEY, api } from '../api/client'; import { filterMenuItems, findCurrentMenu, menuItems, renderMenuItem } from './menu'; import { PermissionRoute } from './PermissionRoute'; import DashboardPage from '../Dashboard'; import DramasPage from '../Drama'; import DataPage from '../Data'; import UsersPage from '../User'; import RolesPage from '../Role'; import PersonnelPage from '../Personnel'; import ProfilePage from '../Profile'; import LogsPage from '../Log'; import './layout.css'; const { Header, Sider, Content } = Layout; const { Text } = Typography; export function AdminLayout() { const navigate = useNavigate(); const location = useLocation(); const [collapsed, setCollapsed] = useState(false); const [profile, setProfile] = useState(null); const current = useMemo(() => findCurrentMenu(location.pathname), [location.pathname]); const visibleMenuItems = useMemo(() => filterMenuItems(menuItems, profile), [profile]); const [openMenuKeys, setOpenMenuKeys] = useState(current?.parent ? [current.parent.key] : []); useEffect(() => { api.get>('/api/admin/v1/auth/profile') .then((response) => setProfile(response.data.data)) .catch(() => { localStorage.removeItem(TOKEN_KEY); navigate('/login', { replace: true }); }); }, [navigate]); useEffect(() => { if (current?.parent && !openMenuKeys.includes(current.parent.key)) { setOpenMenuKeys((keys) => [...keys, current.parent!.key]); } }, [current, openMenuKeys]); const logout = () => { localStorage.removeItem(TOKEN_KEY); navigate('/login', { replace: true }); }; return (
TK {!collapsed && TK短剧管理后台}
navigate(key)} onClickSubMenu={(_, openKeys) => setOpenMenuKeys(openKeys)} > {visibleMenuItems.map((item) => renderMenuItem(item))}
} /> } /> } /> } /> } /> } /> } /> } /> } /> } />
); }