108 lines
3.2 KiB
JavaScript
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
|