Files
algorithm/frontend/src/router/index.ts
2026-02-18 23:39:39 +08:00

178 lines
4.0 KiB
TypeScript

import { createRouter, createWebHistory } from 'vue-router'
import type { RouteRecordRaw } from 'vue-router'
// 定义路由
const routes: Array<RouteRecordRaw> = [
{
path: '/',
name: 'Home',
component: () => import('../views/HomeView.vue'),
meta: {
title: '首页'
}
},
{
path: '/algorithms',
name: 'Algorithms',
component: () => import('../views/AlgorithmsView.vue'),
meta: {
title: '算法展示平台',
requiresAuth: true
}
},
{
path: '/algorithm/:id',
name: 'AlgorithmDetail',
component: () => import('../views/AlgorithmDetailView.vue'),
meta: {
title: '算法详情'
}
},
{
path: '/algorithm/:id/call',
name: 'AlgorithmCall',
component: () => import('../views/AlgorithmCallView.vue'),
meta: {
title: '算法调用'
}
},
{
path: '/algorithm/:id/versions',
name: 'AlgorithmVersions',
component: () => import('../views/AlgorithmVersionsView.vue'),
meta: {
title: '算法版本管理'
}
},
{
path: '/admin',
name: 'Admin',
component: () => import('../views/AdminView.vue'),
meta: {
title: '管理员中心',
requiresAuth: true,
requiresAdmin: true
},
children: [
{
path: 'algorithms',
name: 'AdminAlgorithms',
component: () => import('../views/admin/AdminAlgorithmsView.vue'),
meta: {
title: '算法仓库管理'
}
},
{
path: 'services',
name: 'AdminAlgorithmServices',
component: () => import('../views/admin/AdminAlgorithmServicesView.vue'),
meta: {
title: '算法服务管理'
}
},
{
path: 'users',
name: 'AdminUsers',
component: () => import('../views/admin/AdminUsersView.vue'),
meta: {
title: '用户管理'
}
},
{
path: 'api',
name: 'AdminApiManagement',
component: () => import('../views/admin/AdminApiManagementView.vue'),
meta: {
title: 'API管理'
}
},
{
path: 'service-registration',
name: 'AdminServiceRegistration',
component: () => import('../views/admin/AdminServiceRegistrationView.vue'),
meta: {
title: '服务注册'
}
},
{
path: 'config',
name: 'AdminConfigManagement',
component: () => import('../views/admin/AdminConfigManagementView.vue'),
meta: {
title: '配置管理'
}
}
]
},
{
path: '/login',
name: 'Login',
component: () => import('../views/LoginView.vue'),
meta: {
title: '登录'
}
},
{
path: '/register',
name: 'Register',
component: () => import('../views/RegisterView.vue'),
meta: {
title: '注册'
}
},
{
path: '/:pathMatch(.*)*',
name: 'NotFound',
component: () => import('../views/NotFoundView.vue'),
meta: {
title: '页面不存在'
}
}
]
// 创建路由器
const router = createRouter({
history: createWebHistory(),
routes
})
// 路由守卫,用于设置页面标题和权限控制
router.beforeEach((to, _from, next) => {
// 设置页面标题
if (to.meta.title) {
document.title = `${to.meta.title} - 智能算法展示平台`
}
// 权限控制
if (to.meta.requiresAuth) {
const token = localStorage.getItem('token')
const user = localStorage.getItem('user')
if (!token || !user) {
next({ name: 'Login' })
return
}
// 检查是否需要管理员权限
if (to.meta.requiresAdmin) {
try {
const userObj = JSON.parse(user)
// 检查用户是否为管理员,支持多种格式
const isAdmin = userObj.role?.name === 'admin' || userObj.role_name === 'admin'
if (!isAdmin) {
next({ name: 'Home' })
return
}
} catch {
next({ name: 'Login' })
return
}
}
}
next()
})
export default router