diff --git a/src/common/router.js b/src/common/router.js index eeef241be811b5fc6d9b2716145e26813a4c1734..98cc6d8b8551c4d16e060a4b022f4b4148b3a949 100644 --- a/src/common/router.js +++ b/src/common/router.js @@ -70,6 +70,22 @@ function getFlatMenuData(menus) { return keys; } +function findMenuKey(menuData, path) { + const menuKey = Object.keys(menuData).find(key => pathToRegexp(path).test(key)); + if (menuKey == null) { + if (path === '/') { + return null; + } + const lastIdx = path.lastIndexOf('/'); + if (lastIdx < 0) { + return null; + } + // 如果没有,使用上一层的配置 + return findMenuKey(menuData, path.substr(0, lastIdx)); + } + return menuKey; +} + export const getRouterData = app => { const routerConfig = { '/': { @@ -185,8 +201,7 @@ export const getRouterData = app => { Object.keys(routerConfig).forEach(path => { // Regular match item name // eg. router /user/:id === /user/chen - const pathRegexp = pathToRegexp(path); - const menuKey = Object.keys(menuData).find(key => pathRegexp.test(`${key}`)); + const menuKey = findMenuKey(menuData, path); let menuItem = {}; // If menuKey is not empty if (menuKey) {