本地 RAG 知识库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

48 lines
1.2 KiB

<template>
<!-- 未登录 登录页 -->
<LoginPage v-if="!auth.loggedIn" @login-success="onLoginSuccess" />
<!-- 已登录 → 管理后台 -->
<MainLayout v-else />
</template>
<script setup lang="ts">
import { onMounted } from 'vue'
import { useAuthStore } from '@/stores/auth'
import LoginPage from '@/views/LoginPage.vue'
import MainLayout from '@/layouts/MainLayout.vue'
import { isLoggedIn, clearTokens } from '@/utils/token'
import { toast } from '@/utils/toast'
const auth = useAuthStore()
function onLoginSuccess(user: any) {
auth.onLoginSuccess(user)
}
onMounted(async () => {
// 启动时验证登录态
if (isLoggedIn()) {
const ok = await auth.fetchUser()
if (!ok) {
// 尝试刷新 Token
const refreshed = await auth.tryRefreshToken()
if (refreshed) {
await auth.fetchUser().catch(() => {})
} else {
auth.logout()
}
}
}
// 监听 401 事件
window.addEventListener('auth:unauthorized', async () => {
const refreshed = await auth.tryRefreshToken()
if (refreshed) {
await auth.fetchUser().catch(() => {})
} else {
auth.logout()
toast('登录已过期,请重新登录', 'error')
}
})
})
</script>