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 inconst hasToken =getToken()
console.log(hasToken);if(hasToken){if(to.path ==='/login'){// if is logged in, redirect to the home pagenext({ path:'/'})
NProgress.done()}else{// determine whether the user has obtained his permission roles through getInfoconst hasRoles = store.getters.roles && store.getters.roles.length >0if(hasRoles){next()}else{try{// 这里调用 store/modules/user.js 中的 info 方法// 同样,这里的逻辑需要根据你自己的需要进行调整//******************************************//const res =await store.dispatch('user/getInfo')const roles = res.roleArray;//*******************************************//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 recordnext({...to, replace:true})}catch(error){// remove token and go to login page to re-loginawait 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 directlynext()}else{// other pages that do not have permission to access are redirected to the login page.next(`/login?redirect=${to.path}`)
NProgress.done()}}})