Skip to content

Commit 362a451

Browse files
committed
fix: static-router not work. #1385
1 parent f629d5a commit 362a451

File tree

7 files changed

+56
-47
lines changed

7 files changed

+56
-47
lines changed

src/config/router.config.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ export const asyncRouterMap = [
3030
meta: { title: 'menu.dashboard.analysis', keepAlive: false, permission: ['dashboard'] }
3131
},
3232
// 外部链接
33-
{
34-
path: 'https://www.baidu.com/',
35-
name: 'Monitor',
36-
meta: { title: 'menu.dashboard.monitor', target: '_blank' }
37-
},
33+
// {
34+
// path: 'https://www.baidu.com/',
35+
// name: 'Monitor',
36+
// meta: { title: 'menu.dashboard.monitor', target: '_blank' }
37+
// },
3838
{
3939
path: '/dashboard/workplace',
4040
name: 'Workplace',

src/permission.js

+4-7
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import notification from 'ant-design-vue/es/notification'
77
import { setDocumentTitle, domTitle } from '@/utils/domUtil'
88
import { ACCESS_TOKEN } from '@/store/mutation-types'
99
import { i18nRender } from '@/locales'
10-
import { generatorDynamicRouter } from '@/router/generator-routers'
1110

1211
NProgress.configure({ showSpinner: false }) // NProgress Configuration
1312

@@ -31,14 +30,12 @@ router.beforeEach((to, from, next) => {
3130
store
3231
.dispatch('GetInfo')
3332
.then(res => {
34-
// generate dynamic router
35-
generatorDynamicRouter(token).then(routers => {
36-
store.commit('SET_ROUTERS', routers)
37-
38-
// 根据roles权限生成可访问的路由表
33+
console.log('res', res)
34+
// 根据用户权限信息生成可访问的路由表
35+
store.dispatch('GenerateRoutes', { token, ...res }).then(() => {
3936
// 动态添加可访问路由表
4037
// [email protected]+ New API
41-
resetRouter() // 重置路由 防止退出重新登录或者token过期后页面未刷新,导致的路由重复添加
38+
resetRouter() // 重置路由 防止退出重新登录或者 token 过期后页面未刷新,导致的路由重复添加
4239
store.getters.addRouters.forEach(r => {
4340
router.addRoute(r)
4441
})

src/router/generator-routers.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as loginService from '@/api/login'
33
// eslint-disable-next-line
44
import { BasicLayout, BlankLayout, PageView, RouteView } from '@/layouts'
55

6-
// 前端路由表
6+
// 前端路由表 (基于动态)
77
const constantRouterComponents = {
88
// 基础页面 layout 必须引入
99
BasicLayout: BasicLayout,
@@ -75,6 +75,10 @@ const rootRouter = {
7575
children: []
7676
}
7777

78+
// export const generatorStaticRouter = () => {
79+
80+
// }
81+
7882
/**
7983
* 动态生成菜单
8084
* @param token

src/store/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import user from './modules/user'
66

77
// default router permission control
88
// 默认路由模式为静态路由 (router.config.js)
9-
import permission from './modules/permission'
9+
// import permission from './modules/static-router'
1010

1111
// dynamic router permission control (Experimental)
1212
// 动态路由模式(api请求后端生成)
13-
// import permission from './modules/async-router'
13+
import permission from './modules/async-router'
1414

1515
import getters from './getters'
1616

src/store/modules/async-router.js

+14-12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* 向后端请求用户的菜单,动态生成路由
33
*/
44
import { constantRouterMap } from '@/config/router.config'
5+
import { generatorDynamicRouter } from '@/router/generator-routers'
56

67
const permission = {
78
state: {
@@ -13,19 +14,20 @@ const permission = {
1314
state.addRouters = routers
1415
state.routers = constantRouterMap.concat(routers)
1516
}
17+
},
18+
actions: {
19+
GenerateRoutes ({ commit }, data) {
20+
return new Promise((resolve, reject) => {
21+
const { token } = data
22+
generatorDynamicRouter(token).then(routers => {
23+
commit('SET_ROUTERS', routers)
24+
resolve()
25+
}).catch(e => {
26+
reject(e)
27+
})
28+
})
29+
}
1630
}
17-
// ,
18-
// actions: {
19-
// GenerateRoutes({ commit }, data) {
20-
// return new Promise(resolve => {
21-
// const { token } = data
22-
// generatorDynamicRouter(token).then(routers => {
23-
// commit('SET_ROUTERS', routers)
24-
// resolve()
25-
// })
26-
// })
27-
// }
28-
// }
2931
}
3032

3133
export default permission

src/store/modules/permission.js renamed to src/store/modules/static-router.js

+9-5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import cloneDeep from 'lodash.clonedeep'
1010
*/
1111
function hasPermission (permission, route) {
1212
if (route.meta && route.meta.permission) {
13+
console.log('hasPermission', permission)
14+
if (permission === undefined) {
15+
return false
16+
}
1317
let flag = false
1418
for (let i = 0, len = permission.length; i < len; i++) {
1519
flag = route.meta.permission.includes(permission[i])
@@ -38,11 +42,11 @@ function hasRole(roles, route) {
3842
}
3943
}
4044

41-
function filterAsyncRouter (routerMap, roles) {
45+
function filterAsyncRouter (routerMap, role) {
4246
const accessedRouters = routerMap.filter(route => {
43-
if (hasPermission(roles.permissionList, route)) {
47+
if (hasPermission(role.permissionList, route)) {
4448
if (route.children && route.children.length) {
45-
route.children = filterAsyncRouter(route.children, roles)
49+
route.children = filterAsyncRouter(route.children, role)
4650
}
4751
return true
4852
}
@@ -65,9 +69,9 @@ const permission = {
6569
actions: {
6670
GenerateRoutes ({ commit }, data) {
6771
return new Promise(resolve => {
68-
const { roles } = data
72+
const { role } = data
6973
const routerMap = cloneDeep(asyncRouterMap)
70-
const accessedRouters = filterAsyncRouter(routerMap, roles)
74+
const accessedRouters = filterAsyncRouter(routerMap, role)
7175
commit('SET_ROUTERS', accessedRouters)
7276
resolve()
7377
})

src/store/modules/user.js

+17-15
Original file line numberDiff line numberDiff line change
@@ -52,29 +52,31 @@ const user = {
5252
// 获取用户信息
5353
GetInfo ({ commit }) {
5454
return new Promise((resolve, reject) => {
55+
// 请求后端获取用户信息 /api/user/info
5556
getInfo().then(response => {
56-
const result = response.result
57-
57+
const { result } = response
5858
if (result.role && result.role.permissions.length > 0) {
59-
const role = result.role
60-
role.permissions = result.role.permissions
61-
role.permissions.map(per => {
62-
if (per.actionEntitySet != null && per.actionEntitySet.length > 0) {
63-
const action = per.actionEntitySet.map(action => { return action.action })
64-
per.actionList = action
65-
}
59+
const role = { ...result.role }
60+
role.permissions = result.role.permissions.map(permission => {
61+
const per = {
62+
...permission,
63+
actionList: (permission.actionEntitySet || {}).map(item => item.action)
64+
}
65+
return per
6666
})
6767
role.permissionList = role.permissions.map(permission => { return permission.permissionId })
68-
commit('SET_ROLES', result.role)
68+
// 覆盖响应体的 role, 供下游使用
69+
result.role = role
70+
71+
commit('SET_ROLES', role)
6972
commit('SET_INFO', result)
73+
commit('SET_NAME', { name: result.name, welcome: welcome() })
74+
commit('SET_AVATAR', result.avatar)
75+
// 下游
76+
resolve(result)
7077
} else {
7178
reject(new Error('getInfo: roles must be a non-null array !'))
7279
}
73-
74-
commit('SET_NAME', { name: result.name, welcome: welcome() })
75-
commit('SET_AVATAR', result.avatar)
76-
77-
resolve(response)
7880
}).catch(error => {
7981
reject(error)
8082
})

0 commit comments

Comments
 (0)