food/src/permission.js
tk 22249b4ca3 【类 型】:fix 路由守卫bug 问题提
【原  因】:next() 并不返回一个 Promise 所以它后面调用 catch()会导致错误
【过  程】:
【影  响】:

# 类型 包含:
# feat:新功能(feature)
# fix:修补bug
# docs:文档(documentation)
# style: 格式(不影响代码运行的变动)
# refactor:重构(即不是新增功能,也不是修改bug的代码变动)
# test:增加测试
# chore:构建过程或辅助工具的变动
2024-09-26 15:03:35 +08:00

57 lines
1.3 KiB
JavaScript

import router from './router'
import store from './store'
import NProgress from 'nprogress' // 进度条
import 'nprogress/nprogress.css' // 进度条 style
NProgress.configure({ showSpinner: false }) // 进度条 Configuration
/**
* @description: 路由守卫
*/
router.beforeEach((to, from, next) => {
// start 进度条
NProgress.start()
// 设置title
document.title = getPageTitle(to.meta.title)
store.commit('user/initUser') // 用户信息初始化
const power = store.state.user.power
const token = store.state.user.token
if (!token) {
if (to.path === '/login') {
next()
} else {
next('/login') // 直接调用 next('/login')
}
} else {
if (to.path === '/login') {
next('/')
} else {
if (to.meta.roles && to.meta.roles.indexOf(power) >= 0) { // 确保 roles 存在
next()
} else {
next('/')
}
}
}
NProgress.done()
})
/**
* @description: 路由完成 结束进度条
*/
router.afterEach(() => {
NProgress.done() // 结束进度条
})
/**
* @description: mateTile 和 全局title 组合
* @return: title
* @param {*} pageTitle 路由mate.tiele
*/
function getPageTitle (pageTitle) {
return pageTitle ? `${pageTitle} - ${store.state.settings.title}` : store.state.settings.title
}