You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

231 lines
6.6 KiB
JavaScript

2 months ago
// router/index.js
2 months ago
import { createRouter, createWebHistory } from 'vue-router'
import Login from '../views/Login.vue'
2 months ago
import WebPage from '../components/WebPage.vue'
2 months ago
import NotFound from '../views/NotFound.vue'
2 months ago
import { useUserStore } from '../store/user'
2 months ago
import { useAuthStore as usePostulanteStore } from '../store/postulanteStore'
2 months ago
const routes = [
2 months ago
2 months ago
{ path: '/', component: WebPage },
2 months ago
2 months ago
{ path: '/account/auth/login', component: Login, meta: { guest: true } },
2 months ago
2 months ago
{
2 months ago
path: '/login-postulante',
name: 'login-postulante',
component: () => import('../views/postulante/LoginView.vue'),
meta: { guest: true },
2 months ago
},
2 months ago
2 months ago
{
path: '/:pathMatch(.*)*',
name: 'NotFound',
component: NotFound
},
2 months ago
{
path: '/resultados',
name: 'Resultados',
component: () => import('../components/WebPageSections/navbarcontent/Resultados.vue')
},
{
path: '/modalidades/cepreuna',
name: 'cepreuna',
component: () => import('../components/WebPageSections/navbarcontent/Cepreuna.vue')
},
{
path: '/modalidades/extraordinario',
name: 'extraordinario',
component: () => import('../components/WebPageSections/navbarcontent/Extraordinario.vue')
},
{
path: '/modalidades/general',
name: 'general',
component: () => import('../components/WebPageSections/navbarcontent/General.vue')
},
2 months ago
2 months ago
{
2 months ago
path: '/portal-postulante',
name: 'portal-postulante',
component: () => import('../views/postulante/PortalView.vue'),
meta: { requiresAuth: true },
children: [
{
path: '',
name: 'DashboardPostulante',
component: () => import('../views/postulante/Dashboard.vue'),
meta: { requiresAuth: true}
2 months ago
},
{
path: '/portal-postulante/test',
name: 'TestPostulante',
component: () => import('../views/postulante/Test.vue'),
meta: { requiresAuth: true}
2 months ago
},
{
path: '/portal-postulante/examen/:examenId',
name: 'PanelExamen',
component: () => import('../views/postulante/PreguntasExamen.vue'),
meta: { requiresAuth: true }
},
{
path: '/portal-postulante/resultados/:examenId',
name: 'PanelResultados',
component: () => import('../views/postulante/Resultados.vue'),
meta: { requiresAuth: true }
},
{
path: '/portal-postulante/pagos',
name: 'PanelPagos',
component: () => import('../views/postulante/Pagos.vue'),
meta: { requiresAuth: true }
},
2 months ago
{
path: '/portal-postulante/mis-procesos',
name: 'PanelProcesos',
component: () => import('../views/postulante/MisProcesos.vue'),
meta: { requiresAuth: true }
},
2 months ago
]
2 months ago
},
2 months ago
2 months ago
2 months ago
{
path: '/usuario/dashboard',
name: 'dashboard',
component: () => import('../views/usuario/Dashboard.vue'),
meta: { requiresAuth: true, role: 'usuario' }
},
2 months ago
2 months ago
2 months ago
{
path: '/admin/dashboard',
2 months ago
component: () => import('../views/administrador/layout/Layout.vue'),
meta: { requiresAuth: true, role: 'administrador' },
children: [
{
path: '/admin/dashboard',
name: 'Dashboard',
component: () => import('../views/administrador/Dashboard.vue'),
meta: { requiresAuth: true, role: 'administrador' }
},
{
path: '/admin/dashboard/areas',
name: 'Areas',
component: () => import('../views/administrador/areas/AreasList.vue'),
meta: { requiresAuth: true, role: 'administrador' }
},
{
path: '/admin/dashboard/cursos',
name: 'Cursos',
component: () => import('../views/administrador/cursos/CursosList.vue'),
meta: { requiresAuth: true, role: 'administrador' }
},
{
path: '/admin/dashboard/cursos/:id/preguntas',
name: 'CursoPreguntas',
component: () => import('../views/administrador/cursos/PreguntasCursoView.vue'),
2 months ago
meta: { requiresAuth: true, role: 'administrador' }
2 months ago
},
{
path: '/admin/dashboard/procesos',
name: 'Procesos',
component: () => import('../views/administrador/Procesos/ProcesosList.vue'),
2 months ago
meta: { requiresAuth: true, role: 'administrador' }
2 months ago
},
{
path: '/admin/dashboard/reglas',
name: 'Reglas',
component: () => import('../views/administrador/Procesos/ReglasList.vue'),
meta: { requiresAuth: true, role: 'administrador' }
2 months ago
},
{
path: '/admin/dashboard/procesos-admision',
name: 'ProcesosAdmisionList',
component: () => import('../views/administrador/procesoadmision/ProcesosAdmisionList.vue')
},
{
path: '/admin/dashboard/procesos/:id/detalles',
name: 'ProcesoAdmisionDetalles',
component: () => import('../views/administrador/procesoadmision/ProcesoAdmisionDetalles.vue')
2 months ago
},
{
path: '/admin/dashboard/lista-calificacion',
name: 'CalificacionList',
component: () => import('../views/administrador/Procesos/CalificacionTest.vue')
},
{
path: '/admin/dashboard/lista-postulantes',
name: 'PostulantesList',
component: () => import('../views/administrador/estudiantes/ListPostulantes.vue')
2 months ago
},
{
path: '/admin/dashboard/noticias',
name: 'NoticiasAdmisionList',
component: () => import('../views/administrador/procesoadmision/NoticiasAdmin.vue')
2 months ago
}
2 months ago
2 months ago
]
2 months ago
},
2 months ago
2 months ago
2 months ago
{
path: '/superadmin/dashboard',
name: 'superadmin-dashboard',
component: () => import('../views/superadmin/Dashboard.vue'),
meta: { requiresAuth: true, role: 'superadmin' }
},
2 months ago
2 months ago
2 months ago
{ path: '/unauthorized', name: 'Unauthorized', component: () => import('../views/403.vue') },
{ path: '/403', name: 'forbidden', component: () => import('../views/403.vue') }
2 months ago
]
const router = createRouter({
history: createWebHistory(),
routes
})
router.beforeEach((to, from, next) => {
const userStore = useUserStore()
2 months ago
const postulanteStore = usePostulanteStore()
2 months ago
2 months ago
if (to.meta.requiresAuth && !to.path.startsWith('/portal-postulante') && !userStore.isAuth) {
2 months ago
return next('/login')
}
2 months ago
2 months ago
if (to.meta.requiresAuth && to.path.startsWith('/portal-postulante') && !postulanteStore.isAuthenticated) {
return next('/login-postulante')
}
2 months ago
2 months ago
if (to.meta.guest && !to.path.startsWith('/login-postulante') && userStore.isAuth) {
2 months ago
userStore.redirectByRole()
return
}
2 months ago
if (to.meta.guest && to.path === '/login-postulante' && postulanteStore.isAuthenticated) {
return next('/portal-postulante')
}
2 months ago
if (to.meta.role && !userStore.hasRole(to.meta.role)) {
return next('/403')
}
next()
})
export default router