添加全局请求和图片优化器

This commit is contained in:
jxxghp
2025-06-30 17:37:30 +08:00
parent 999fa9d9a6
commit 60ea884fe2
7 changed files with 256 additions and 34 deletions
+17 -19
View File
@@ -1,6 +1,8 @@
import { createRouter, createWebHashHistory } from 'vue-router'
import { configureNProgress } from '@/api/nprogress'
import { useAuthStore } from '@/stores'
import { setNavigatingState as setImageNavigatingState } from '@/utils/imageOptimizer'
import { setNavigatingState as setRequestNavigatingState } from '@/utils/requestOptimizer'
// Nprogress
configureNProgress()
@@ -208,23 +210,12 @@ const router = createRouter({
],
})
const abortControllers = new Set<AbortController>()
// 注册中止控制器
function registerAbortController(controller: AbortController) {
abortControllers.add(controller)
}
// 中止所有组件的任务
function abortAllControllers() {
for (const controller of abortControllers) {
controller.abort()
}
abortControllers.clear()
}
// 路由导航守卫
router.beforeEach(async (to: any, from: any, next: any) => {
// 设置导航状态 - 同时暂停图片加载和中断API请求
setImageNavigatingState(true)
setRequestNavigatingState(true)
// 认证 Store
const authStore = useAuthStore()
// 总是记录非login路由
@@ -233,15 +224,22 @@ router.beforeEach(async (to: any, from: any, next: any) => {
if (to.meta.requiresAuth && !isAuthenticated) {
// 用户未登录,重定向到登录页
setImageNavigatingState(false)
setRequestNavigatingState(false)
next('/login')
} else {
// 清理所有中止控制器
abortAllControllers()
next()
}
})
// 路由导航完成后
router.afterEach(() => {
setTimeout(() => {
setImageNavigatingState(false)
setRequestNavigatingState(false)
}, 200)
})
// 导出默认对象
export default router
// 另行导出其他功能
export { registerAbortController }
// 延迟恢复图片加载,给页面一些初始化时间