59 lines
1.7 KiB
JavaScript
59 lines
1.7 KiB
JavaScript
import { createRouter, createWebHashHistory, createWebHistory } from "vue-router"
|
||
import { useUserStore } from "@/store"
|
||
import NProgress from "nprogress"
|
||
import tool from "@/utils/tool"
|
||
import "nprogress/nprogress.css"
|
||
|
||
import routes from "./webRouter.js"
|
||
|
||
const title = import.meta.env.VITE_APP_TITLE
|
||
const defaultRoutePath = "/"
|
||
const whiteRoute = ["login", "mineDoc", "interfaceList", "interfaceCode", "signature"]
|
||
|
||
const router = createRouter({
|
||
history: createWebHistory(),
|
||
routes
|
||
})
|
||
|
||
router.beforeEach(async (to, from, next) => {
|
||
NProgress.start()
|
||
const userStore = useUserStore()
|
||
let toTitle = to.meta.title ? to.meta.title : to.name
|
||
document.title = `${toTitle} - ${title}`
|
||
const token = tool.local.get(import.meta.env.VITE_APP_TOKEN_PREFIX)
|
||
|
||
// 登录状态下
|
||
if (token) {
|
||
// 如果访问的是login直接跳转'/'
|
||
if (to.name === "login") {
|
||
next({ path: defaultRoutePath })
|
||
return
|
||
}
|
||
// 如果没有pinia/userStore.user数据且不是undefined,则获取data然后跳转
|
||
if (!userStore.user && userStore.user == undefined) {
|
||
const data = await userStore.requestUserInfo()
|
||
data && next({ path: to.path, query: to.query })
|
||
} else {
|
||
next()
|
||
}
|
||
} else {
|
||
// 如果没有token,则看访问路径是否在白名单,如果在白名单则跳转访问,如果不在白名单跳转login页面
|
||
if (!whiteRoute.includes(to.name)) {
|
||
next({ name: "login", query: { redirect: to.fullPath } })
|
||
} else {
|
||
next()
|
||
}
|
||
}
|
||
})
|
||
|
||
router.afterEach((to, from) => {
|
||
NProgress.done()
|
||
})
|
||
|
||
router.onError((error) => {
|
||
console.log(error)
|
||
NProgress.done()
|
||
})
|
||
|
||
export default router
|