import AppLayout from '@/layout/AppLayout.vue'; import { createRouter, createWebHistory } from 'vue-router'; import axios from 'axios'; import Cookies from 'js-cookie'; const loginGuard = async (to, from, next) => { const token = Cookies.get('bm-token'); if (!token) { next('/auth/login'); // Redirect to log in if no token return; } try { const response = await axios.get('/api/users/user/get-self', { headers: { Authorization: `Bearer ${token}` }, withCredentials: true }); next(); } catch (error) { console.log('Authentication error:', error); next('/auth/login'); } }; const router = createRouter({ history: createWebHistory(), routes: [ { path: '/', component: AppLayout, beforeEnter: loginGuard, children: [ { path: '/', name: 'dashboard', component: () => import('@/views/Dashboard.vue') }, { path: '/property/create-property', name: 'create-property', component: () => import('@/views/pages/Property/CreateProperty.vue') }, { path: '/property/edit-property/:propertyId', name: 'edit-property', component: () => import('@/views/pages/Property/CreateProperty.vue') }, { path: '/property/list-properties', name: 'list-properties', component: () => import('@/views/pages/Property/ListProperties.vue') }, // Aliases for backward compatibility { path: '/belonging/create-belonging', name: 'create-belonging', component: () => import('@/views/pages/Property/CreateProperty.vue') }, { path: '/belonging/edit-belonging/:belongingId', name: 'edit-belonging', component: () => import('@/views/pages/Property/CreateProperty.vue') }, { path: '/belonging/list-belongings', name: 'list-belongings', component: () => import('@/views/pages/Property/ListProperties.vue') }, { path: '/categories/list-categories', name: 'list-categories', component: () => import('@/views/pages/Category/ListCategories.vue') }, { path: '/features/list-features', name: 'list-features', component: () => import('@/views/pages/Features/ListFeatures.vue') }, { path: '/transactions/list-transactions', name: 'list-transactions', component: () => import('@/views/pages/Transaction/ListTransactions.vue') }, // ─── Warehouse Items ────────────────────────────────────────── { path: '/warehouse-items/list', name: 'list-warehouse-items', component: () => import('@/views/pages/WarehouseItems/ListWarehouseItems.vue') }, { path: '/warehouse-items/stock/:itemId', name: 'warehouse-item-stock', component: () => import('@/views/pages/WarehouseItems/WarehouseItemStockView.vue') }, { path: '/warehouse-items/create-transaction', name: 'create-warehouse-transaction', component: () => import('@/views/pages/WarehouseItems/CreateWarehouseTransaction.vue') }, { path: '/warehouse-items/transactions', name: 'warehouse-item-transactions', component: () => import('@/views/pages/WarehouseItems/ListWarehouseItemTransactions.vue') }, { path: '/warehouse-items/warehouses', name: 'list-warehouses', component: () => import('@/views/pages/WarehouseItems/ListWarehouses.vue') }, // ─── Users & Roles ─────────────────────────────────────────── { path: '/users/list-users', name: 'list-users', component: () => import('@/views/pages/Users/ListUsers.vue') }, { path: '/roles/list-roles', name: 'list-roles', component: () => import('@/views/pages/Roles/ListRoles.vue') }, { path: '/uikit/formlayout', name: 'formlayout', component: () => import('@/views/uikit/FormLayout.vue') }, { path: '/uikit/input', name: 'input', component: () => import('@/views/uikit/InputDoc.vue') }, { path: '/uikit/button', name: 'button', component: () => import('@/views/uikit/ButtonDoc.vue') }, { path: '/uikit/table', name: 'table', component: () => import('@/views/uikit/TableDoc.vue') }, { path: '/uikit/list', name: 'list', component: () => import('@/views/uikit/ListDoc.vue') }, { path: '/uikit/tree', name: 'tree', component: () => import('@/views/uikit/TreeDoc.vue') }, { path: '/uikit/panel', name: 'panel', component: () => import('@/views/uikit/PanelsDoc.vue') }, { path: '/uikit/overlay', name: 'overlay', component: () => import('@/views/uikit/OverlayDoc.vue') }, { path: '/uikit/media', name: 'media', component: () => import('@/views/uikit/MediaDoc.vue') }, { path: '/uikit/message', name: 'message', component: () => import('@/views/uikit/MessagesDoc.vue') }, { path: '/uikit/file', name: 'file', component: () => import('@/views/uikit/FileDoc.vue') }, { path: '/uikit/menu', name: 'menu', component: () => import('@/views/uikit/MenuDoc.vue') }, { path: '/uikit/charts', name: 'charts', component: () => import('@/views/uikit/ChartDoc.vue') }, { path: '/uikit/misc', name: 'misc', component: () => import('@/views/uikit/MiscDoc.vue') }, { path: '/uikit/timeline', name: 'timeline', component: () => import('@/views/uikit/TimelineDoc.vue') }, { path: '/pages/empty', name: 'empty', component: () => import('@/views/pages/Empty.vue') }, { path: '/pages/crud', name: 'crud', component: () => import('@/views/pages/Crud.vue') }, { path: '/documentation', name: 'documentation', component: () => import('@/views/pages/Documentation.vue') } ] }, { path: '/landing', name: 'landing', component: () => import('@/views/pages/Landing.vue') }, { path: '/pages/notfound', name: 'notfound', component: () => import('@/views/pages/NotFound.vue') }, { path: '/auth/login', name: 'login', component: () => import('@/views/pages/auth/Login.vue') }, { path: '/auth/access', name: 'accessDenied', component: () => import('@/views/pages/auth/Access.vue') }, { path: '/auth/error', name: 'error', component: () => import('@/views/pages/auth/Error.vue') } ] }); export default router;