diff --git a/src/permission.js b/src/permission.js index c5e41fa..0d85223 100644 --- a/src/permission.js +++ b/src/permission.js @@ -1,76 +1,115 @@ -import router from './router' -import store from './store' -import { Message } from 'element-ui' -import NProgress from 'nprogress' // progress bar -import 'nprogress/nprogress.css' // progress bar style -import { getToken } from '@/utils/auth' // get token from cookie -import getPageTitle from '@/utils/get-page-title' - -NProgress.configure({ showSpinner: false }) // NProgress Configuration - -const whiteList = ['/login'] // no redirect whitelist - -router.beforeEach(async(to, from, next) => { - // start progress bar - NProgress.start() - - // set page title - document.title = getPageTitle(to.meta.title) - - // determine whether the user has logged in - const hasToken = getToken() - - if (hasToken) { - if (to.path === '/login') { - // if is logged in, redirect to the home page - next({ path: '/' }) - NProgress.done() +import router from './router' +import store from './store' +import { + Message +} from 'element-ui' +import { deepCopy } from '@/utils' +import NProgress from 'nprogress' // progress bar +import 'nprogress/nprogress.css' // progress bar style +import { + getToken +} from '@/utils/auth' // get token from cookie +import getPageTitle from '@/utils/get-page-title' + +NProgress.configure({ + showSpinner: false +}) // NProgress Configuration + +const whiteList = ['/login'] // no redirect whitelist + +router.beforeEach(async (to, from, next) => { + // start progress bar + NProgress.start() + + // set page title + document.title = getPageTitle(to.meta.title) + + // determine whether the user has logged in + const hasToken = getToken() + + console.log("hasToken", hasToken) + if (hasToken) { + if (to.path === '/login') { + // if is logged in, redirect to the home page + + await store.dispatch('user/resetToken'); + next(to.fullPath); + + NProgress.done() + } else { + // determine whether the user has obtained his permission roles through getInfo + const hasRoles = store.getters.roles && store.getters.roles.length > 0 + if (hasRoles) { + to.query.tourl ? next(to.query.tourl) : next() + } else { + try { + // get user info + // note: roles must be a object array! such as: ['admin'] or ,['developer','editor'] + const { + roles + } = await store.dispatch('user/getInfo') + + // generate accessible routes map based on roles + const accessRoutes = await store.dispatch('permission/generateRoutes', roles) + + // dynamically add accessible routes + router.addRoutes(accessRoutes) + + // hack method to ensure that addRoutes is complete + // set the replace: true, so the navigation will not leave a history record + let resetTo = deepCopy(to) + resetTo.path = to.query.tourl || to.path + resetTo.replace = true + console.log(resetTo) + next(resetTo) + } catch (error) { + console.log(error) + // remove token and go to login page to re-login + await store.dispatch('user/resetToken') + Message.error(error || 'Has Error') + next(`/login?redirect=${to.path}`) + NProgress.done() + } + } + } + } else { + /* has no token*/ + + if (whiteList.indexOf(to.path) !== -1) { + // in the free login whitelist, go directly + next() } else { - // determine whether the user has obtained his permission roles through getInfo - const hasRoles = store.getters.roles && store.getters.roles.length > 0 - if (hasRoles) { - next() - } else { - try { - // get user info - // note: roles must be a object array! such as: ['admin'] or ,['developer','editor'] - const { roles } = await store.dispatch('user/getInfo') - - // generate accessible routes map based on roles - const accessRoutes = await store.dispatch('permission/generateRoutes', roles) - - //console.log(accessRoutes) - // dynamically add accessible routes - router.addRoutes(accessRoutes) - - // hack method to ensure that addRoutes is complete - // set the replace: true, so the navigation will not leave a history record - next({ ...to, replace: true }) - } catch (error) { - console.log(error) - // remove token and go to login page to re-login - await store.dispatch('user/resetToken') - Message.error(error || 'Has Error') - next(`/login?redirect=${to.path}`) - NProgress.done() - } - } - } - } else { - /* has no token*/ - - if (whiteList.indexOf(to.path) !== -1) { - // in the free login whitelist, go directly - next() - } else { - // other pages that do not have permission to access are redirected to the login page. - next(`/login?redirect=${to.path}`) - NProgress.done() - } - } -}) - -router.afterEach(() => { - // finish progress bar - NProgress.done() + console.log("to",to) + // other pages that do not have permission to access are redirected to the login page. + if (to.query.token && to.query.tp) { + try { + await store.dispatch('user/loginskip', { + token: to.query.token, + tp: to.query.tp, + loginId: to.query.loginId + }) + console.log("to.path",to.path) + if(to.query.tourl){ + next(to.query.tourl || '/') + }else{ + next(to.path || '/') + } + } catch (e) { + console.log("/login",e) + next('/login') + } + } else { + // other pages that do not have permission to access are redirected to the login page. + next(`/login?redirect=${to.path}`) + NProgress.done() + } + // next(`/login?redirect=${to.path}`) + // NProgress.done() + } + } +}) + +router.afterEach(() => { + // finish progress bar + NProgress.done() })