From 222242dccca1c6fd691991a1ac5f5c80707f5109 Mon Sep 17 00:00:00 2001 From: "zhigang.li@tendcloud.com" Date: Thu, 27 Sep 2018 18:19:10 +0800 Subject: [PATCH] update --- src/router/index.js | 22 +++++++++++++++++----- src/store/module/user.js | 31 ++++++++++++++++++++----------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/router/index.js b/src/router/index.js index 3459174a..76acfdf8 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -12,6 +12,11 @@ const router = new Router({ }) const LOGIN_PAGE_NAME = 'login' +const turnTo = (to, access, next) => { + if (canTurnTo(to.name, access, routes)) next() // 有权限,可访问 + else next({ replace: true, name: 'error_401' }) // 无权限,重定向到401页面 +} + router.beforeEach((to, from, next) => { iView.LoadingBar.start() const token = getToken() @@ -29,11 +34,18 @@ router.beforeEach((to, from, next) => { name: 'home' // 跳转到home页 }) } else { - store.dispatch('getUserInfo').then(user => { - // 拉取用户信息,通过用户权限和跳转的页面的name来判断是否有权限访问;access必须是一个数组,如:['super_admin'] ['super_admin', 'admin'] - if (canTurnTo(to.name, user.access, routes)) next() // 有权限,可访问 - else next({ replace: true, name: 'error_401' }) // 无权限,重定向到401页面 - }) + if (store.state.user.hasGetInfo) { + turnTo(to, store.state.user.access, next) + } else { + store.dispatch('getUserInfo').then(user => { + // 拉取用户信息,通过用户权限和跳转的页面的name来判断是否有权限访问;access必须是一个数组,如:['super_admin'] ['super_admin', 'admin'] + turnTo(to, user.access, next) + }).catch(() => { + next({ + name: 'login' + }) + }) + } } }) diff --git a/src/store/module/user.js b/src/store/module/user.js index 145c5674..c44bad00 100644 --- a/src/store/module/user.js +++ b/src/store/module/user.js @@ -7,7 +7,8 @@ export default { userId: '', avatorImgPath: '', token: getToken(), - access: '' + access: '', + hasGetInfo: false }, mutations: { setAvator (state, avatorPath) { @@ -25,6 +26,9 @@ export default { setToken (state, token) { state.token = token setToken(token) + }, + setHasGetInfo (state, status) { + state.hasGetInfo = status } }, actions: { @@ -63,16 +67,21 @@ export default { // 获取用户相关信息 getUserInfo ({ state, commit }) { return new Promise((resolve, reject) => { - getUserInfo(state.token).then(res => { - const data = res.data - commit('setAvator', data.avator) - commit('setUserName', data.user_name) - commit('setUserId', data.user_id) - commit('setAccess', data.access) - resolve(data) - }).catch(err => { - reject(err) - }) + try { + getUserInfo(state.token).then(res => { + const data = res.data + commit('setAvator', data.avator) + commit('setUserName', data.user_name) + commit('setUserId', data.user_id) + commit('setAccess', data.access) + commit('setHasGetInfo', true) + resolve(data) + }).catch(err => { + reject(err) + }) + } catch (error) { + reject(error) + } }) } }