- user.ts: 移除 UserProfile、UserInfoVO 的索引签名 - rosCar.ts: 移除 8 个接口的索引签名(RosLift、RosCar、RosInspectionRecord 等) - 遵循"用到就补字段声明"原则,保留完整类型检查
61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import router from './index'
|
|
import { getToken } from '@/utils/auth'
|
|
import { useUserStore } from '@/store/modules/user'
|
|
|
|
const whiteList = ['/login'] // no redirect whitelist
|
|
|
|
// const setPageTitle = function (meta) {
|
|
// let title = '海灵标'
|
|
// if (meta && meta.title) {
|
|
// title = `${meta.title}`
|
|
// }
|
|
// document.title = title
|
|
// }
|
|
// 路由守卫
|
|
router.beforeEach(async (to, from) => {
|
|
$loadingBar.start()
|
|
// setPageTitle(to.meta)
|
|
const hasToken = getToken()
|
|
const userStore = useUserStore()
|
|
if (hasToken) {
|
|
if (to.path === '/login') {
|
|
$loadingBar.finish()
|
|
return { path: '/' }
|
|
} else {
|
|
const hasGetUserInfo = userStore.name
|
|
if (hasGetUserInfo !== '') {
|
|
return
|
|
} else {
|
|
try {
|
|
// get user info
|
|
const infoVO = await userStore.getInfo()
|
|
return { ...to, replace: true }
|
|
} catch (error) {
|
|
await userStore.resetToken()
|
|
// remove token and go to login page to re-login
|
|
console.error(error)
|
|
$loadingBar.error()
|
|
return `/login?redirect=${to.path}`
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
/* has no token */
|
|
if (whiteList.indexOf(to.path) !== -1) {
|
|
// in the free login whitelist, go directly
|
|
return
|
|
} else {
|
|
$loadingBar.finish()
|
|
return `/login?redirect=${to.path}`
|
|
}
|
|
}
|
|
})
|
|
|
|
router.afterEach((to) => {
|
|
if (to.matched.length === 0) {
|
|
router.push('/404')
|
|
// fixme 不能自动跳转404, 需要引导
|
|
}
|
|
$loadingBar.finish()
|
|
})
|