Files
nexus-terminal/packages/frontend/src/router/index.ts
T
2025-05-11 13:02:09 +08:00

107 lines
3.7 KiB
TypeScript

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
import { useAuthStore } from '../stores/auth.store'; // 导入 Auth Store
// 路由配置
const routes: Array<RouteRecordRaw> = [
// 首页/仪表盘 (占位符)
{
path: '/',
name: 'Dashboard',
component: () => import('../views/DashboardView.vue') // 指向实际的仪表盘组件
// component: { template: '<div>仪表盘 (建设中)</div>' } // 移除临时占位
},
// 登录页面 (占位符)
{
path: '/login',
name: 'Login',
component: () => import('../views/LoginView.vue') // 指向实际的登录组件
},
// 代理管理页面
{
path: '/proxies',
name: 'Proxies',
component: () => import('../views/ProxiesView.vue')
},
// 移除:标签管理页面路由
// {
// path: '/tags',
// name: 'Tags',
// component: () => import('../views/TagsView.vue')
// },
// 工作区页面 (不再需要 connectionId 参数)
{
path: '/workspace', // 移除动态路由段
name: 'Workspace',
component: () => import('../views/WorkspaceView.vue'),
// props: true // 不再需要传递 props
},
// 设置页面
{
path: '/settings',
name: 'Settings',
component: () => import('../views/SettingsView.vue')
},
// 通知管理页面
{
path: '/notifications',
name: 'Notifications',
component: () => import('../views/NotificationsView.vue')
},
// 审计日志页面
{
path: '/audit-logs',
name: 'AuditLogs',
component: () => import('../views/AuditLogView.vue')
},
// 初始设置页面
{
path: '/setup',
name: 'Setup',
component: () => import('../views/SetupView.vue')
},
// 其他路由...
];
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), // 使用 HTML5 History 模式
routes,
});
// 添加全局前置守卫
router.beforeEach((to, from, next) => {
// 在守卫内部获取 store 实例,确保 Pinia 已初始化
const authStore = useAuthStore();
// 定义不需要认证的路由名称列表
// 定义不需要认证的路由名称列表 (现在包括 Setup)
const publicRoutes = ['Login', 'Setup'];
const requiresAuth = !publicRoutes.includes(to.name as string);
// 假设有一个状态表示是否需要初始设置,这里暂时用一个变量模拟
// 实际应用中,这个状态应该在应用启动时通过 API 获取
const needsSetup = authStore.needsSetup; // 从 authStore 获取状态
if (needsSetup && to.name !== 'Setup') {
// 如果需要设置,但目标不是设置页面,则强制重定向到设置页面
console.log('路由守卫:需要初始设置,重定向到 /setup');
next({ name: 'Setup' });
} else if (!needsSetup && to.name === 'Setup') {
// 如果不需要设置,但尝试访问设置页面,重定向到登录页或首页
console.log('路由守卫:不需要设置,从 /setup 重定向');
next(authStore.isAuthenticated ? { name: 'Dashboard' } : { name: 'Login' });
} else if (requiresAuth && !authStore.isAuthenticated && !needsSetup) {
// 如果需要认证、用户未登录且不需要设置,重定向到登录页
console.log('路由守卫:未登录,重定向到 /login');
next({ name: 'Login' });
} else if (to.name === 'Login' && authStore.isAuthenticated && !needsSetup) {
// 如果用户已登录、不需要设置且尝试访问登录页,重定向到仪表盘
console.log('路由守卫:已登录,从 /login 重定向到 /');
next({ name: 'Dashboard' });
} else {
// 其他情况(例如访问公共页面,或已登录访问需认证页面)允许导航
next();
}
});
export default router;