Untitled
unknown
plain_text
10 months ago
5.4 kB
13
Indexable
// src/router/index.ts
import { createRouter, createWebHistory } from 'vue-router'
import { useAuthStore } from '@/components/store/authStore'
import LandingPage from '../views/LandingPage.vue'
import LoginPage from '../views/LoginPage.vue'
import Dashboard from '../views/Dashboard.vue'
import SettingsPage from '../views/SettingPage.vue'
import IncomingDocuments from '../components/Dashboard/IncomingDocuments/IncomingDocuments.vue'
import InternalDocuments from '../components/Dashboard/InternalDocuments(approval)/InternalDocuments.vue'
import FinancialDocuments from '../components/Dashboard/FinancialDocuments/FinancialDocuments.vue'
import ActivityReports from '../components/Dashboard/InternalDocuments(activity)/InternalDocuments.vue'
import ActedCases from '../components/Dashboard/ActedCases/actedcases.vue'
import ManageUsers from '../components/Dashboard/Admin/Manageusers/ManageUsers.vue'
import SearchPage from '../components/Dashboard/SearchPage/SearchResults.vue'
import GenerateReports from '../components/Dashboard/GenerateReports/GenerateReports.vue'
const routes = [
{
path: '/LandingPage',
name: 'LandingPage',
component: LandingPage,
meta: { requiresGuest: true } // Only accessible when not authenticated
},
{
path: '/login',
name: 'LoginPage',
component: LoginPage,
meta: { requiresGuest: true } // Only accessible when not authenticated
},
{
path: '/Dashboard',
name: 'Dashboard',
component: Dashboard,
meta: { requiresAuth: true } // Requires authentication
},
{
path: '/settings',
component: SettingsPage,
redirect: '/settings/profile',
meta: { requiresAuth: true },
children: [
{
path: 'profile',
name: 'ProfileSettings',
component: () => import('@/components/Dashboard/Settings/Profile.vue')
},
{
path: 'password',
name: 'Password',
component: () => import('@/components/Dashboard/Settings/Password.vue')
}
]
},
{
path: '/Search-Results',
name: 'SearchResults',
component: SearchPage,
meta: { requiresAuth: true }
},
{
path: '/Manage-users',
name: 'ManageUsers',
component: ManageUsers,
meta: { requiresAuth: true }
},
{
path: '/Incoming-documents',
name: 'IncomingDocuments',
component: IncomingDocuments,
meta: { requiresAuth: true }
},
{
path: '/Internal-documents',
name: 'InternalDocuments',
component: InternalDocuments,
meta: { requiresAuth: true }
},
{
path: '/Financial-documents',
name: 'FinancialDocuments',
component: FinancialDocuments,
meta: { requiresAuth: true }
},
{
path: '/Activity-reports',
name: 'ActivityReports',
component: ActivityReports,
meta: { requiresAuth: true }
},
{
path: '/Acted-cases',
name: 'ActedCases',
component: ActedCases,
meta: { requiresAuth: true }
},
{
path: '/Generate-reports',
name: 'GenerateReports',
component: GenerateReports,
redirect: '/Generate-reports/Summary-Incoming-Documents',
meta: { requiresAuth: true },
children: [
{
path: 'Summary-Incoming-Documents',
name: 'SummaryIncomingDocuments',
component: () => import('@/components/Dashboard/GenerateReports/SummaryIncomingDocuments.vue'),
},
{
path: 'Incoming-Documents-Received',
name: 'IncomingDocumentsReceived',
component: () => import('@/components/Dashboard/GenerateReports/IncomingDocumentsReceived.vue'),
},
{
path: 'Time-Motion-Incoming-Documents-Referral',
name: 'TimeMotionIncomingDocumentsReferral',
component: () => import('@/components/Dashboard/GenerateReports/TimeMotionIncomingDocumentsReferral.vue'),
},
{
path: 'Time-Motion-Incoming-Documents-Final-Action',
name: 'TimeMotionIncomingDocumentsFinalAction',
component: () => import('@/components/Dashboard/GenerateReports/TimeMotionIncomingDocumentsFinalAction.vue'),
},
{
path: 'Download-Summary',
name: 'DownloadSummary',
component: () => import('@/components/Dashboard/GenerateReports/DownloadSummary.vue'),
},
]
},
{
path: '/',
redirect: '/LandingPage',
},
]
const router = createRouter({
history: createWebHistory(),
routes,
})
// Global navigation guard
router.beforeEach(async (to, from, next) => {
const authStore = useAuthStore()
// Wait for auth initialization if not already done
if (!authStore.isAuthenticated.value && !authStore.loading.value) {
await authStore.initAuth()
}
const isAuthenticated = authStore.isAuthenticated.value
const requiresAuth = to.matched.some(record => record.meta.requiresAuth)
const requiresGuest = to.matched.some(record => record.meta.requiresGuest)
if (requiresAuth && !isAuthenticated) {
// Redirect to landing page if trying to access protected route without auth
next('/LandingPage')
} else if (requiresGuest && isAuthenticated) {
// Only redirect from landing page if authenticated, not from login page
if (to.name === 'LandingPage') {
next('/Dashboard')
} else {
next()
}
} else {
next()
}
})
export default routerEditor is loading...
Leave a Comment