import { useState, FC } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { TeamOutlined, UserOutlined, DesktopOutlined, HomeOutlined, } from '@ant-design/icons'; import type { MenuProps } from 'antd'; import { Breadcrumb, Layout, Menu, theme } from 'antd'; import { AppRouter } from './router'; import PageFooter from './components/PageFooter'; const { Content, Sider } = Layout; type MenuItem = Required['items'][number]; type KeyRouterMap = Map; const keyRouterMap: KeyRouterMap = new Map(); function getItem( label: React.ReactNode, key: React.Key, icon?: React.ReactNode, children?: MenuItem[], ): MenuItem { return { key, icon, children, label, } as MenuItem; } function defMenu( label: React.ReactNode, key: React.Key, icon: React.ReactNode, path: string, ): MenuItem { keyRouterMap.set(key, path); return getItem(label, key, icon); } function defRootMenu( label: React.ReactNode, key: React.Key, icon: React.ReactNode, children: MenuItem[], ): MenuItem { return getItem(label, key, icon, children); } function defSubMenu( label: React.ReactNode, key: React.Key, path: string, ): MenuItem { keyRouterMap.set(key, path); return getItem(label, key); } const items: MenuItem[] = [ defMenu('主页', 'mainpage', , '/'), defRootMenu('展示信息管理', 'sub1', , [ defSubMenu('选项1', '1', '/admin/hello1'), defSubMenu('选项2', '2', '/admin/hello2'), defSubMenu('选项3', '3', '/admin/hello3'), ]), defRootMenu('值班组长', 'sub2', , [ defSubMenu('选项1', '4', '/duty/hi1'), defSubMenu('选项2', '5', '/duty/hi2'), ]), defMenu('关于我们', 'aboutpage', , '/about'), ]; interface BreadcrumbItem { href: string; title: JSX.Element; } const AppLayout: FC<{ router: JSX.Element }> = (props) => { const [collapsed, setCollapsed] = useState(false); const { colorBgContainer, borderRadiusLG } = theme.getDesignToken(); const navigate = useNavigate(); const location = useLocation(); const pathArray = location.pathname.split('/'); const currentRouteItems: BreadcrumbItem[] = [ { href: '/', title: , }, ]; for (var i = 1; i < pathArray.length; i++) { currentRouteItems.push({ href: '', title: {pathArray[i]}, }); } return ( setCollapsed(value)} >
{ console.log('path', keyRouterMap.get(info.key)); navigate(keyRouterMap.get(info.key) || '/'); }} />
{props.router}
); }; const App: FC = () => { return (
} />
); }; export default App;