| 123456789101112131415161718192021222324252627282930313233343536373839 |
- 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: '/files', component: () => import('./views/FilesView.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 } })
- }
|