|
@@ -1,15 +1,28 @@
|
|
|
import './index.css';
|
|
|
-import { Outlet } from 'react-router-dom';
|
|
|
-import { Menu, Button } from 'antd';
|
|
|
+import { Outlet, Link } from 'react-router-dom';
|
|
|
+import { Menu, Button, Space, Breadcrumb } from 'antd';
|
|
|
+import {
|
|
|
+ MenuUnfoldOutlined,
|
|
|
+ MenuFoldOutlined,
|
|
|
+ HomeOutlined,
|
|
|
+} from '@ant-design/icons';
|
|
|
import { useSelector } from 'react-redux';
|
|
|
import { useNavigate } from 'react-router-dom';
|
|
|
+import { useState } from 'react';
|
|
|
|
|
|
export default function Layout() {
|
|
|
+ // 菜单收起和展开状态的数据
|
|
|
+ let [collapsed, setCollapsed] = useState(false);
|
|
|
+ // 面包屑的二级显示名称
|
|
|
+ let [subMenuTitle, setSubMenuTitle] = useState('');
|
|
|
const items = useSelector(({ system }) => system.menus);
|
|
|
const navigate = useNavigate();
|
|
|
- function selectMenu({ key }) {
|
|
|
+ function selectMenu({ item, key }) {
|
|
|
+ console.log(item);
|
|
|
+ setSubMenuTitle(item.props.title);
|
|
|
navigate(key);
|
|
|
}
|
|
|
+
|
|
|
return (
|
|
|
<div className="layout">
|
|
|
<aside>
|
|
@@ -23,13 +36,37 @@ export default function Layout() {
|
|
|
<Menu
|
|
|
defaultSelectedKeys={['/']}
|
|
|
mode="inline"
|
|
|
- inlineCollapsed={false}
|
|
|
+ inlineCollapsed={collapsed}
|
|
|
items={items}
|
|
|
onClick={selectMenu}
|
|
|
/>
|
|
|
</aside>
|
|
|
<main>
|
|
|
- <header></header>
|
|
|
+ <header>
|
|
|
+ <Space style={{ height: '100%' }}>
|
|
|
+ <Button
|
|
|
+ ghost
|
|
|
+ type="text"
|
|
|
+ icon={
|
|
|
+ collapsed ? (
|
|
|
+ <MenuUnfoldOutlined style={{ fontSize: '20px' }} />
|
|
|
+ ) : (
|
|
|
+ <MenuFoldOutlined style={{ fontSize: '20px' }} />
|
|
|
+ )
|
|
|
+ }
|
|
|
+ onClick={() => {
|
|
|
+ setCollapsed(!collapsed);
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ {/* 面包屑 */}
|
|
|
+ <Breadcrumb>
|
|
|
+ <Breadcrumb.Item href="/">
|
|
|
+ <HomeOutlined />
|
|
|
+ </Breadcrumb.Item>
|
|
|
+ <Breadcrumb.Item>{subMenuTitle}</Breadcrumb.Item>
|
|
|
+ </Breadcrumb>
|
|
|
+ </Space>
|
|
|
+ </header>
|
|
|
<div className="main-page">
|
|
|
<Outlet />
|
|
|
</div>
|