119 lines
2.7 KiB
TypeScript
119 lines
2.7 KiB
TypeScript
import { createRouter, createWebHistory } from 'vue-router'
|
|
import HomeView from './views/HomeView.vue'
|
|
|
|
const routes = [
|
|
{
|
|
path: '/login',
|
|
name: 'login',
|
|
component: () => import('./views/LoginView.vue'),
|
|
meta: { requiresAuth: false }
|
|
},
|
|
{
|
|
path: '/',
|
|
redirect: '/home'
|
|
},
|
|
{
|
|
path: '/home',
|
|
name: 'home',
|
|
component: HomeView,
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/search',
|
|
name: 'search',
|
|
component: () => import('./views/SearchView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/persons',
|
|
name: 'persons',
|
|
component: () => import('./views/PersonsView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/traces',
|
|
name: 'traces',
|
|
component: () => import('./views/FaceCandidatesView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/files',
|
|
name: 'files',
|
|
component: () => import('./views/FilesView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/settings',
|
|
name: 'settings',
|
|
component: () => import('./views/SettingsView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/file/:file_uuid',
|
|
name: 'file-detail',
|
|
component: () => import('./views/VideoDetailView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/chunk-detail/:file_uuid/:chunk_id',
|
|
name: 'chunk-detail',
|
|
component: () => import('./views/ChunkDetailView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/identity/:identity_uuid',
|
|
name: 'identity-detail',
|
|
component: () => import('./views/IdentityDetailView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/jobs',
|
|
name: 'pipeline-progress',
|
|
component: () => import('./views/PipelineProgressView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/traces/:file_uuid/:trace_id',
|
|
name: 'trace-detail',
|
|
component: () => import('./views/TraceDetailView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/trace-viz/:file_uuid',
|
|
name: 'trace-viz',
|
|
component: () => import('./views/TraceVizView.vue'),
|
|
meta: { requiresAuth: false }
|
|
},
|
|
{
|
|
path: '/:pathMatch(.*)*',
|
|
name: 'not-found',
|
|
component: () => import('./views/NotFoundView.vue'),
|
|
meta: { requiresAuth: false }
|
|
}
|
|
]
|
|
|
|
const router = createRouter({
|
|
history: createWebHistory(),
|
|
routes,
|
|
scrollBehavior() {
|
|
return { top: 0 }
|
|
}
|
|
})
|
|
|
|
router.beforeEach((to, _from, next) => {
|
|
const user = localStorage.getItem('momentry_user')
|
|
|
|
// If route requires auth and user is not logged in, redirect to login
|
|
if (to.meta.requiresAuth !== false && !user) {
|
|
next('/login')
|
|
}
|
|
// If user is logged in and trying to access login, redirect to home
|
|
else if (to.path === '/login' && user) {
|
|
next('/home')
|
|
} else {
|
|
next()
|
|
}
|
|
})
|
|
|
|
export default router
|