Files
Nilai_Clock/src/router/index.js
T
2025-09-29 15:25:11 +08:00

108 lines
3.2 KiB
JavaScript

import { createRouter, createWebHashHistory } from 'vue-router'
import Login from '../views/Login.vue'
import WorkerDashboard from '../views/WorkerDashboard.vue'
import ManagerDashboard from '../views/ManagerDashboard.vue'
import WorkerHistory from '../views/WorkerHistory.vue'
import ManagerAttendanceRecord from '../views/ManagerAttendanceRecord.vue'
import ManagerPermissions from '../components/ManagerPermissions.vue'
import WorkerChangePassword from '../views/WorkerChangePassword.vue'
import WorkerSettings from '../views/WorkerSettings.vue'
const router = createRouter({
history: createWebHashHistory(),
routes: [
{ path: '/', name: 'login', component: Login },
{
path: '/worker/dashboard',
name: 'worker-dashboard',
component: WorkerDashboard,
meta: { requiresAuth: true, role: 'worker' },
},
{
path: '/worker/history',
name: 'worker-history',
component: WorkerHistory,
meta: { requiresAuth: true, role: 'worker' },
},
{
path: '/worker/change-password',
name: 'worker-change-password',
component: WorkerChangePassword,
meta: { requiresAuth: true, role: 'worker' },
},
{
path: '/worker/settings',
name: 'worker-settings',
component: WorkerSettings,
meta: { requiresAuth: true, role: 'worker' },
},
{
path: '/manager/dashboard',
name: 'manager-dashboard',
component: ManagerDashboard,
meta: { requiresAuth: true, role: 'manager' },
},
{
path: '/manager/attendance/:workerId',
name: 'manager-attendance-record',
component: ManagerAttendanceRecord,
meta: { requiresAuth: true, role: 'manager' },
},
{
path: '/manager/permissions',
name: 'manager-permissions',
component: ManagerPermissions,
meta: { requiresAuth: true, role: 'manager' },
},
{
path: '/worker/manual-guide',
name: 'ManualGuide',
component: () => import('@/views/ManualGuide.vue'),
meta: { requiresAuth: true, role: 'worker' }
},
],
})
// Updated navigation guard to support both worker and manager roles
router.beforeEach((to, from, next) => {
const isLoggedIn = !!sessionStorage.getItem('userId')
const userRole = sessionStorage.getItem('userRole')
if (to.meta.requiresAuth) {
if (isLoggedIn) {
// Allow both worker and manager roles
if (userRole === to.meta.role || userRole === 'manager') {
next()
} else {
// Redirect to appropriate dashboard based on role
if (userRole === 'worker') {
next('/worker/dashboard')
} else if (userRole === 'manager') {
next('/manager/dashboard')
} else {
sessionStorage.clear()
next('/')
}
}
} else {
// User is not logged in, redirect to login page
next('/')
}
} else if (to.name === 'login' && isLoggedIn) {
// If a logged-in user tries to visit the login page, redirect to their dashboard
if (userRole === 'worker') {
next('/worker/dashboard')
} else if (userRole === 'manager') {
next('/manager/dashboard')
} else {
next('/')
}
} else {
// For public routes
next()
}
})
export default router