1
0

Исправления фронта

Множество оптимизаций по фронту
This commit is contained in:
2026-01-16 10:15:33 +07:00
parent cb075e56be
commit 3258fa9137
30 changed files with 1797 additions and 2584 deletions

View File

@@ -5,16 +5,48 @@ import TeamPage from './views/TeamPage.vue'
import ArchivePage from './views/ArchivePage.vue'
import { authApi } from './api'
// Проверка авторизации
const checkAuth = async () => {
// Кэш авторизации (чтобы не делать запрос при каждой навигации)
let authCache = {
isAuthenticated: null, // null = не проверяли, true/false = результат
lastCheck: 0
}
// Время жизни кэша авторизации (5 минут)
const AUTH_CACHE_TTL = 5 * 60 * 1000
// Проверка авторизации (с кэшированием)
const checkAuth = async (forceCheck = false) => {
const now = Date.now()
// Используем кэш если он валиден и не форсируем проверку
if (!forceCheck && authCache.isAuthenticated !== null && (now - authCache.lastCheck) < AUTH_CACHE_TTL) {
return authCache.isAuthenticated
}
try {
const data = await authApi.check()
return data.success === true
authCache.isAuthenticated = data.success === true
authCache.lastCheck = now
return authCache.isAuthenticated
} catch {
// При ошибке сети — используем кэш если есть, иначе false
if (authCache.isAuthenticated !== null) {
return authCache.isAuthenticated
}
return false
}
}
// Сброс кэша (вызывать при logout)
export const clearAuthCache = () => {
authCache = { isAuthenticated: null, lastCheck: 0 }
}
// Установка кэша (вызывать при успешном login)
export const setAuthCache = (isAuth) => {
authCache = { isAuthenticated: isAuth, lastCheck: Date.now() }
}
const routes = [
{
path: '/',
@@ -48,9 +80,17 @@ const router = createRouter({
// Navigation guard — проверка авторизации
router.beforeEach(async (to, from, next) => {
const isAuth = await checkAuth()
// Если переходим между защищёнными страницами и кэш валиден — не проверяем сеть
const needsAuth = to.meta.requiresAuth
const fromProtected = from.meta?.requiresAuth
if (to.meta.requiresAuth && !isAuth) {
// Форсируем проверку только при переходе на защищённую страницу извне
// или при переходе на /login (чтобы редиректнуть если уже авторизован)
const forceCheck = (needsAuth && !fromProtected) || to.path === '/login'
const isAuth = await checkAuth(forceCheck)
if (needsAuth && !isAuth) {
// Не авторизован — на логин
next('/login')
} else if (to.path === '/login' && isAuth) {