You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.3 KiB
JavaScript

import { createRouter, createWebHistory } from 'vue-router'
import { useUserStore } from '@/stores/user'
const routes = [
{
path: '/login',
name: 'Login',
component: () => import('@/views/login/index.vue'),
meta: { title: '登录' }
},
{
path: '/register',
name: 'Register',
component: () => import('@/views/register/index.vue'),
meta: { title: '注册' }
},
{
path: '/',
component: () => import('@/layout/index.vue'),
redirect: '/home',
children: [
{
path: 'home',
name: 'Home',
component: () => import('@/views/home/index.vue'),
meta: { title: '首页', requiresAuth: true }
},
{
path: 'detail',
name: 'Detail',
component: () => import('@/views/detail/index.vue'),
meta: { title: '设备详情', requiresAuth: true }
},
{
path: 'drone-detail',
name: 'DroneDetail',
component: () => import('@/views/detail/drone.vue'),
meta: { title: '无人机详情', requiresAuth: true }
},
{
path: 'dataset',
name: 'Dataset',
component: () => import('@/views/dataset/index.vue'),
meta: { title: '数据集', requiresAuth: true }
},
{
path: 'face-recognition',
name: 'FaceRecognition',
component: () => import('@/views/face-recognition/index.vue'),
meta: { title: '人脸识别', requiresAuth: true }
},
{
path: 'personnel',
name: 'Personnel',
component: () => import('@/views/personnel/index.vue'),
meta: { title: '人员管理', requiresAuth: true }
}
]
},
{
path: '/:pathMatch(.*)*',
redirect: '/login'
}
]
const router = createRouter({
history: createWebHistory(),
routes
})
router.beforeEach((to, from, next) => {
document.title = to.meta.title ? `${to.meta.title} - 视觉管理平台` : '视觉管理平台'
const userStore = useUserStore()
const token = userStore.token
if (to.meta.requiresAuth) {
if (!token) {
next({ name: 'Login', query: { redirect: to.fullPath } })
} else {
next()
}
} else {
if (token && (to.name === 'Login' || to.name === 'Register')) {
next({ name: 'Home' })
} else {
next()
}
}
})
export default router