mirror of https://github.com/openspug/spug
优化Layout
parent
129d5726af
commit
4cb86923d6
|
@ -1,13 +1,13 @@
|
||||||
import React, { useState } from 'react';
|
import React, { useState, useEffect } from 'react';
|
||||||
import { Layout, Menu } from 'antd';
|
import { Layout, Menu } from 'antd';
|
||||||
import { hasPermission, history } from 'libs';
|
import { hasPermission, history } from 'libs';
|
||||||
import styles from './layout.module.less';
|
import styles from './layout.module.less';
|
||||||
import menus from '../routes';
|
import routes from '../routes';
|
||||||
import logo from './logo-spug-white.png';
|
import logo from './logo-spug-white.png';
|
||||||
|
|
||||||
let selectedKey = window.location.pathname;
|
let selectedKey = window.location.pathname;
|
||||||
const OpenKeysMap = {};
|
const OpenKeysMap = {};
|
||||||
for (let item of menus) {
|
for (let item of routes) {
|
||||||
if (item.child) {
|
if (item.child) {
|
||||||
for (let sub of item.child) {
|
for (let sub of item.child) {
|
||||||
if (sub.title) OpenKeysMap[sub.path] = item.title
|
if (sub.title) OpenKeysMap[sub.path] = item.title
|
||||||
|
@ -19,28 +19,30 @@ for (let item of menus) {
|
||||||
|
|
||||||
export default function Sider(props) {
|
export default function Sider(props) {
|
||||||
const [openKeys, setOpenKeys] = useState([]);
|
const [openKeys, setOpenKeys] = useState([]);
|
||||||
|
const [menus, setMenus] = useState([]);
|
||||||
|
|
||||||
function makeMenu(menu) {
|
useEffect(() => {
|
||||||
if (menu.auth && !hasPermission(menu.auth)) return null;
|
const tmp = []
|
||||||
if (!menu.title) return null;
|
for (let item of routes) {
|
||||||
return menu.child ? _makeSubMenu(menu) : _makeItem(menu)
|
const menu = handleRoute(item)
|
||||||
|
tmp.push(menu)
|
||||||
}
|
}
|
||||||
|
setMenus(tmp)
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
}, [])
|
||||||
|
|
||||||
function _makeSubMenu(menu) {
|
function handleRoute(item) {
|
||||||
return (
|
if (item.auth && !hasPermission(item.auth)) return
|
||||||
<Menu.SubMenu key={menu.title} title={<span>{menu.icon}<span>{menu.title}</span></span>}>
|
if (!item.title) return;
|
||||||
{menu.child.map(menu => makeMenu(menu))}
|
const menu = {label: item.title, key: item.path, icon: item.icon}
|
||||||
</Menu.SubMenu>
|
if (item.child) {
|
||||||
)
|
menu.children = []
|
||||||
|
for (let sub of item.child) {
|
||||||
|
const subMenu = handleRoute(sub)
|
||||||
|
menu.children.push(subMenu)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
function _makeItem(menu) {
|
return menu
|
||||||
return (
|
|
||||||
<Menu.Item key={menu.path}>
|
|
||||||
{menu.icon}
|
|
||||||
<span>{menu.title}</span>
|
|
||||||
</Menu.Item>
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const tmp = window.location.pathname;
|
const tmp = window.location.pathname;
|
||||||
|
@ -60,13 +62,12 @@ export default function Sider(props) {
|
||||||
<Menu
|
<Menu
|
||||||
theme="dark"
|
theme="dark"
|
||||||
mode="inline"
|
mode="inline"
|
||||||
|
items={menus}
|
||||||
className={styles.menus}
|
className={styles.menus}
|
||||||
selectedKeys={[selectedKey]}
|
selectedKeys={[selectedKey]}
|
||||||
openKeys={openKeys}
|
openKeys={openKeys}
|
||||||
onOpenChange={setOpenKeys}
|
onOpenChange={setOpenKeys}
|
||||||
onSelect={menu => history.push(menu.key)}>
|
onSelect={menu => history.push(menu.key)}/>
|
||||||
{menus.map(menu => makeMenu(menu))}
|
|
||||||
</Menu>
|
|
||||||
</div>
|
</div>
|
||||||
</Layout.Sider>
|
</Layout.Sider>
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue