import { createRouter, createWebHistory } from 'vue-router' import { admin } from './lib/api' export const router = createRouter({ history: createWebHistory('/admin/'), routes: [ { path: '/', redirect: '/playground' }, { path: '/login', component: () => import('./views/LoginView.vue'), meta: { public: true } }, { path: '/playground/:sessionId?', name: 'playground', component: () => import('./views/PlaygroundView.vue') }, { path: '/sessions/:sessionId?', name: 'sessions', component: () => import('./views/SessionsView.vue') }, { path: '/overview', component: () => import('./views/OverviewView.vue') }, { path: '/profiles/:id?', name: 'profiles', component: () => import('./views/ProfilesView.vue') }, { path: '/knowledge', component: () => import('./views/KnowledgeView.vue') }, { path: '/plugins', component: () => import('./views/PluginsView.vue') }, { path: '/mcp', component: () => import('./views/McpView.vue') }, { path: '/api-keys', component: () => import('./views/ApiKeysView.vue') }, { path: '/api-docs', component: () => import('./views/ApiDocsView.vue') }, { path: '/audit', component: () => import('./views/AuditView.vue') }, { path: '/settings', component: () => import('./views/SettingsView.vue') }, { path: '/:pathMatch(.*)*', redirect: '/playground' }, ], }) let checked = false router.beforeEach(async to => { if (to.meta.public) return true if (checked) return true const { loggedIn } = await admin.me().catch(() => ({ loggedIn: false })) if (!loggedIn) return { path: '/login', query: { next: to.fullPath } } checked = true return true }) /** 接口返回 401 时回到登录页 */ export function requireLogin() { checked = false void router.push({ path: '/login', query: { next: router.currentRoute.value.fullPath } }) }