|
|
|
@ -24,6 +24,9 @@ class BasicLayout extends React.PureComponent { |
|
|
|
super(props); |
|
|
|
// 把一级 Layout 的 children 作为菜单项
|
|
|
|
this.menus = getNavData().reduce((arr, current) => arr.concat(current.children), []); |
|
|
|
this.state = { |
|
|
|
openKeys: this.getDefaultCollapsedSubMenus(props), |
|
|
|
}; |
|
|
|
} |
|
|
|
state = { |
|
|
|
mode: 'inline', |
|
|
|
@ -48,13 +51,13 @@ class BasicLayout extends React.PureComponent { |
|
|
|
this.props.dispatch(routerRedux.push('/user/login')); |
|
|
|
} |
|
|
|
} |
|
|
|
getDefaultCollapsedSubMenus() { |
|
|
|
const currentMenuSelectedKeys = [...this.getCurrentMenuSelectedKeys()]; |
|
|
|
getDefaultCollapsedSubMenus(props) { |
|
|
|
const currentMenuSelectedKeys = [...this.getCurrentMenuSelectedKeys(props)]; |
|
|
|
currentMenuSelectedKeys.splice(-1, 1); |
|
|
|
return currentMenuSelectedKeys; |
|
|
|
} |
|
|
|
getCurrentMenuSelectedKeys() { |
|
|
|
const { location: { pathname } } = this.props; |
|
|
|
getCurrentMenuSelectedKeys(props) { |
|
|
|
const { location: { pathname } } = props || this.props; |
|
|
|
const keys = pathname.split('/').slice(1); |
|
|
|
if (keys.length === 1 && keys[0] === '') { |
|
|
|
return [this.menus[0].key]; |
|
|
|
@ -132,6 +135,12 @@ class BasicLayout extends React.PureComponent { |
|
|
|
}); |
|
|
|
return groupBy(newNotices, 'type'); |
|
|
|
} |
|
|
|
handleOpenChange = (openKeys) => { |
|
|
|
const latestOpenKey = openKeys.find(key => this.state.openKeys.find(key)); |
|
|
|
this.setState({ |
|
|
|
openKeys: latestOpenKey ? [latestOpenKey] : [], |
|
|
|
}); |
|
|
|
} |
|
|
|
toggle = () => { |
|
|
|
const { collapsed } = this.props; |
|
|
|
this.props.dispatch({ |
|
|
|
@ -189,7 +198,8 @@ class BasicLayout extends React.PureComponent { |
|
|
|
<Menu |
|
|
|
theme="dark" |
|
|
|
mode="inline" |
|
|
|
defaultOpenKeys={this.getDefaultCollapsedSubMenus()} |
|
|
|
openKeys={this.state.openKeys} |
|
|
|
onOpenChange={this.handleOpenChange} |
|
|
|
selectedKeys={this.getCurrentMenuSelectedKeys()} |
|
|
|
style={{ margin: '24px 0', width: '100%' }} |
|
|
|
inlineIndent={32} |
|
|
|
|