From 5fbb1b338ae595989650e8cdf9e42d657e17bb0c Mon Sep 17 00:00:00 2001 From: zuiidea Date: Tue, 25 Apr 2017 12:09:20 +0800 Subject: [PATCH] Menu defaultSelected --- src/components/Layout/Menu.js | 27 +++++++++++++++++++++++++-- src/models/app.js | 2 +- src/routes/app.js | 3 ++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/components/Layout/Menu.js b/src/components/Layout/Menu.js index b050659..e0fa19b 100644 --- a/src/components/Layout/Menu.js +++ b/src/components/Layout/Menu.js @@ -2,7 +2,8 @@ import React from 'react' import PropTypes from 'prop-types' import { Menu, Icon } from 'antd' import { Link } from 'dva/router' -import { arrayToTree } from '../../utils' +import { arrayToTree, queryArray } from '../../utils' +import pathToRegexp from 'path-to-regexp' const Menus = ({ siderFold, darkTheme, location, handleClickNavMenu, navOpenKeys, changeOpenKeys, menu }) => { // 生成树状 @@ -76,13 +77,35 @@ const Menus = ({ siderFold, darkTheme, location, handleClickNavMenu, navOpenKeys openKeys: navOpenKeys, } : {} + + // 寻找选中路由 + let currentMenu + for (let item of menu) { + if (item.router && pathToRegexp(item.router).exec(location.pathname)) { + currentMenu = item + break + } + } + const getPathArray = (array, current, pid, id) => { + let result = [String(current[id])] + const getPath = (item) => { + if (item[pid]) { + result.unshift(String(item[pid])) + getPath(queryArray(array, item[pid], id)) + } + } + getPath(current) + return result + } + const defaultSelectedKeys = getPathArray(menu, currentMenu, 'mpid', 'id') + return ( {menuItems} diff --git a/src/models/app.js b/src/models/app.js index 0dca356..f7f47ca 100644 --- a/src/models/app.js +++ b/src/models/app.js @@ -13,7 +13,7 @@ export default { siderFold: localStorage.getItem(`${prefix}siderFold`) === 'true', darkTheme: localStorage.getItem(`${prefix}darkTheme`) === 'true', isNavbar: document.body.clientWidth < 769, - navOpenKeys: [], + navOpenKeys: JSON.parse(localStorage.getItem(`${prefix}navOpenKeys`)) || [], }, subscriptions: { setup ({ dispatch }) { diff --git a/src/routes/app.js b/src/routes/app.js index c5857d3..a91fa67 100644 --- a/src/routes/app.js +++ b/src/routes/app.js @@ -5,6 +5,7 @@ import { Layout } from '../components' import { classnames, config, menu } from '../utils' import { Helmet } from 'react-helmet' import '../themes/index.less' +const { prefix } = config const { Header, Bread, Footer, Sider, styles } = Layout @@ -43,7 +44,7 @@ const App = ({ children, location, dispatch, app }) => { dispatch({ type: 'app/changeTheme' }) }, changeOpenKeys (openKeys) { - localStorage.setItem('navOpenKeys', JSON.stringify(openKeys)) + localStorage.setItem(`${prefix}navOpenKeys`, JSON.stringify(openKeys)) dispatch({ type: 'app/handleNavOpenKeys', payload: { navOpenKeys: openKeys } }) }, }