mirror of
https://github.com/zuiidea/antd-admin
synced 2026-10-22 16:03:53 +00:00
81 lines
2.2 KiB
JavaScript
81 lines
2.2 KiB
JavaScript
import React from 'react'
|
|
import PropTypes from 'prop-types'
|
|
import { Menu, Icon } from 'antd'
|
|
import { Link } from 'dva/router'
|
|
import { menu } from '../../utils'
|
|
|
|
const topMenus = menu.map(item => item.key)
|
|
const getMenus = function (menuArray, siderFold, parentPath = '/') {
|
|
return menuArray.map(item => {
|
|
const linkTo = parentPath + item.key
|
|
if (item.child) {
|
|
return (
|
|
<Menu.SubMenu key={linkTo} title={<span>{item.icon ? <Icon type={item.icon} /> : ''}{siderFold && topMenus.indexOf(item.key) >= 0 ? '' : item.name}</span>}>
|
|
{getMenus(item.child, siderFold, `${linkTo}/`)}
|
|
</Menu.SubMenu>
|
|
)
|
|
}
|
|
return (
|
|
<Menu.Item key={linkTo}>
|
|
<Link to={linkTo}>
|
|
{item.icon ? <Icon type={item.icon} /> : ''}
|
|
{siderFold && topMenus.indexOf(item.key) >= 0 ? '' : item.name}
|
|
</Link>
|
|
</Menu.Item>
|
|
)
|
|
})
|
|
}
|
|
|
|
function Menus ({ siderFold, darkTheme, location, handleClickNavMenu, navOpenKeys, changeOpenKeys }) {
|
|
const menuItems = getMenus(menu, siderFold)
|
|
|
|
const getAncestorKeys = (key) => {
|
|
const map = {
|
|
'/navigation/navigation2': ['/navigation'],
|
|
}
|
|
return map[key] || []
|
|
}
|
|
|
|
const onOpenChange = (openKeys) => {
|
|
const latestOpenKey = openKeys.find(key => !(navOpenKeys.indexOf(key) > -1))
|
|
const latestCloseKey = navOpenKeys.find(key => !(openKeys.indexOf(key) > -1))
|
|
let nextOpenKeys = []
|
|
if (latestOpenKey) {
|
|
nextOpenKeys = getAncestorKeys(latestOpenKey).concat(latestOpenKey)
|
|
}
|
|
if (latestCloseKey) {
|
|
nextOpenKeys = getAncestorKeys(latestCloseKey)
|
|
}
|
|
changeOpenKeys(nextOpenKeys)
|
|
}
|
|
|
|
let menuProps = !siderFold ? {
|
|
onOpenChange,
|
|
openKeys: navOpenKeys,
|
|
} : {}
|
|
|
|
return (
|
|
<Menu
|
|
{...menuProps}
|
|
mode={siderFold ? 'vertical' : 'inline'}
|
|
theme={darkTheme ? 'dark' : 'light'}
|
|
onClick={handleClickNavMenu}
|
|
defaultSelectedKeys={[location.pathname !== '/' ? location.pathname : '/dashboard']}
|
|
>
|
|
{menuItems}
|
|
</Menu>
|
|
)
|
|
}
|
|
|
|
Menus.propTypes = {
|
|
siderFold: PropTypes.bool,
|
|
darkTheme: PropTypes.bool,
|
|
location: PropTypes.object,
|
|
isNavbar: PropTypes.bool,
|
|
handleClickNavMenu: PropTypes.func,
|
|
navOpenKeys: PropTypes.array,
|
|
changeOpenKeys: PropTypes.func,
|
|
}
|
|
|
|
export default Menus
|