个人资料和岗位列表联调,简历优化部分页面
This commit is contained in:
+25
-5
@@ -1,6 +1,7 @@
|
||||
import { createRouter, createWebHistory } from 'vue-router'
|
||||
import type { RouteRecordRaw } from 'vue-router'
|
||||
import store from '@/stores'
|
||||
import { checkLogin } from '@/api/auth'
|
||||
|
||||
/**
|
||||
* 静态路由 — 不需要权限,应用启动就注册
|
||||
@@ -30,8 +31,10 @@ const router = createRouter({
|
||||
* 全局前置守卫 — 核心逻辑:
|
||||
*
|
||||
* 1. 动态路由未加载 → 先拉取并注册,再重新进入当前路由
|
||||
* 2. 需要鉴权的路由没有 token → 回首页
|
||||
* 3. 其他情况 → 直接放行
|
||||
* 2. 需要鉴权的路由 → 调 checkLogin 接口验证 Cookie 是否有效
|
||||
* - 有效:同步 isAuthenticated = true,放行
|
||||
* - 无效:同步 isAuthenticated = false,弹登录框,阻止导航
|
||||
* 3. 不需要鉴权的路由 → 直接放行
|
||||
*/
|
||||
router.beforeEach(async (to, _from, next) => {
|
||||
// 动态路由只需加载一次,与登录状态无关
|
||||
@@ -46,9 +49,26 @@ router.beforeEach(async (to, _from, next) => {
|
||||
return
|
||||
}
|
||||
|
||||
// 需要鉴权的路由,未登录则回首页
|
||||
if (to.meta?.requiresAuth && !store.state.isAuthenticated) {
|
||||
next({ name: 'Home' })
|
||||
// 需要鉴权的路由,每次都通过接口校验登录状态
|
||||
if (to.meta?.requiresAuth) {
|
||||
try {
|
||||
const res = await checkLogin()
|
||||
if (res.code === '0' && res.data === true) {
|
||||
// Cookie 有效,同步前端状态并放行
|
||||
store.commit('SET_AUTHENTICATED', true)
|
||||
next()
|
||||
} else {
|
||||
// 未登录或 Cookie 失效
|
||||
store.commit('SET_AUTHENTICATED', false)
|
||||
store.dispatch('openLogin', to.fullPath)
|
||||
next(false)
|
||||
}
|
||||
} catch {
|
||||
// 请求异常(网络错误等),也视为未登录
|
||||
store.commit('SET_AUTHENTICATED', false)
|
||||
store.dispatch('openLogin', to.fullPath)
|
||||
next(false)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user