Core Changes: - Fix SearchView to use start_frame/end_frame directly (no time*fps conversion) - Add hard_delete support to delete_trace API - VideoPlayer: Main timeline + Mark system foundation - Proxy: Add local routes for auth, media, identity-matches, cluster-results - Add .gitignore to exclude build artifacts and dependencies Design Documents: - Multi-track Mark system design (.opencode/plans/) - Video editing positioning standards research Files Modified: - src/views/SearchView.vue: Frame positioning, ensureMinDuration (240 frames) - src/views/PeopleView.vue: batchDeleteGroups with hard_delete - src/api/index.ts: delete_trace with hard_delete body - src/components/VideoPlayer.vue: Timeline + Mark UI - src-tauri/src/proxy.rs: New local routes - AGENTS.md: Update documentation
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router'
|
|
import SearchView from '../views/SearchView.vue'
|
|
import LibraryView from '../views/LibraryView.vue'
|
|
import PeopleView from '../views/PeopleView.vue'
|
|
import PersonDetailView from '../views/PersonDetailView.vue'
|
|
import AdminView from '../views/AdminView.vue'
|
|
import ClientView from '../views/ClientView.vue'
|
|
import LoginView from '../views/LoginView.vue'
|
|
|
|
const routes: RouteRecordRaw[] = [
|
|
{ path: '/', redirect: '/search' },
|
|
{ path: '/login', name: 'Login', component: LoginView },
|
|
{ path: '/search', name: 'Search', component: SearchView },
|
|
{ path: '/library', name: 'Library', component: LibraryView },
|
|
{ path: '/face', name: 'Face', component: PeopleView },
|
|
{ path: '/face/:uuid', name: 'FaceDetail', component: PersonDetailView },
|
|
{ path: '/admin', name: 'Admin', component: AdminView },
|
|
{ path: '/client', name: 'Client', component: ClientView }
|
|
]
|
|
|
|
const router = createRouter({
|
|
history: createWebHistory(),
|
|
routes
|
|
})
|
|
|
|
router.beforeEach((to, _from, next) => {
|
|
const token = localStorage.getItem('token')
|
|
const isLoggedIn = !!token
|
|
|
|
if (to.path === '/login') {
|
|
if (isLoggedIn) {
|
|
next('/search')
|
|
} else {
|
|
next()
|
|
}
|
|
} else {
|
|
if (isLoggedIn) {
|
|
next()
|
|
} else {
|
|
next('/login')
|
|
}
|
|
}
|
|
})
|
|
|
|
export default router |