import { createRouter, createWebHistory } from 'vue-router' import { getToken } from '@/api/client' const router = createRouter({ history: createWebHistory(), routes: [ { path: '/login', name: 'login', component: () => import('@/views/LoginView.vue'), meta: { public: true }, }, { path: '/', component: () => import('@/layouts/AdminLayout.vue'), children: [ { path: '', redirect: { name: 'dashboard' } }, { path: 'dashboard', name: 'dashboard', component: () => import('@/views/DashboardView.vue'), }, { path: 'site', name: 'site', component: () => import('@/views/SiteSettingsView.vue'), }, { path: 'portfolio', name: 'portfolio', component: () => import('@/views/PortfolioListView.vue'), }, { path: 'portfolio-edit/:id?', name: 'portfolio-edit', component: () => import('@/views/PortfolioEditView.vue'), }, { path: 'services', name: 'services', component: () => import('@/views/ServicesListView.vue'), }, { path: 'service-edit/:id', name: 'service-edit', component: () => import('@/views/ServiceEditView.vue'), }, { path: 'clients', name: 'clients', component: () => import('@/views/ClientsView.vue'), }, { path: 'blog', name: 'blog', component: () => import('@/views/BlogListView.vue'), }, { path: 'blog-edit/:id?', name: 'blog-edit', component: () => import('@/views/BlogEditView.vue'), }, { path: 'media', name: 'media', component: () => import('@/views/MediaView.vue'), }, ], }, ], }) router.beforeEach((to) => { const isPublic = to.meta.public === true const token = getToken() if (!isPublic && !token) { return { name: 'login', query: { redirect: to.fullPath } } } if (to.name === 'login' && token) { return { name: 'dashboard' } } }) export default router