const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
router.beforeEach((to, from, next) => {
const token = sessionStorage.getItem('access_token')
// 存在 token 說明已經登錄
if (token) {
// 登錄過就不能訪問登錄界面,需要中斷這一次路由守衛,執行下一次路由守衛,並且下一次守衛的to是主頁'
if (to.path === '/login') {
next({ path: '/' })
}
// 保存在store中路由不為空則放行 (如果執行了刷新操作,則 store 里的路由為空,此時需要重新添加路由)
if (store.getters.getRoutes.length || to.name != null) {
//放行
next()
} else {
// 將路由添加到 store 中,用來標記已添加動態路由
store.commit('ADD_ROUTER', '需要添加的路由')
router.addRoutes('需要添加的路由')
// 如果 addRoutes 並未完成,路由守衛會一層一層的執行執行,直到 addRoutes 完成,找到對應的路由
next({ ...to, replace: true })
}
} else {
// 未登錄時,注意 :在這里也許你的項目不只有 logon 不需要登錄 ,register 等其他不需要登錄的頁面也需要處理
// if (to.path !== '/logon') {
// next({ path: '/logon' })
// } else {
// next()
// }
if (whiteList.indexOf(to.path) !== -1) {
// 在免登錄白名單,直接進入
next()
} else {
next(`/login?redirect=${to.fullPath}`) // 否則全部重定向到登錄頁
NProgress.done()
}
}
router.afterEach((to, from) => {
if(to.meta.checked){
if (to.meta.title) {
document.title = to.meta.title
}
}
NProgress.done()
})