Initial commit: admin dashboard for GameNo.

Vue 3 + Vite dashboard with PrimeVue, i18n, and API integration for institution management.
This commit is contained in:
2026-08-09 04:18:09 +02:00
commit 1a34c3b133
94 changed files with 12016 additions and 0 deletions
+197
View File
@@ -0,0 +1,197 @@
// /src/router/routes.js
import DashboardLayout from '@/layouts/DashboardLayout.vue';
import AuthLayout from '@/layouts/AuthLayout.vue';
export const routes = [
{
path: '/login',
component: AuthLayout,
children: [
{
path: '',
name: 'Login',
component: () => import('@/views/auth/LoginView.vue'),
meta: { requiresAuth: false }
}
]
},
{
path: '/',
component: DashboardLayout,
meta: { requiresAuth: true },
children: [
{
path: '',
name: 'DashboardHome',
component: () => import('@/views/dashboard/DashboardHomeView.vue')
},
// Users
{
path: 'users',
name: 'UserList',
component: () => import('@/views/users/UserListView.vue')
},
{
path: 'users/create',
name: 'UserCreate',
component: () => import('@/views/users/UserFormView.vue')
},
{
path: 'users/edit/:id',
name: 'UserEdit',
component: () => import('@/views/users/UserFormView.vue')
},
// Professors
{
path: 'professors',
name: 'ProfessorList',
component: () => import('@/views/professors/ProfessorListView.vue')
},
{
path: 'professors/create',
name: 'ProfessorCreate',
component: () => import('@/views/professors/ProfessorFormView.vue')
},
{
path: 'professors/edit/:id',
name: 'ProfessorEdit',
component: () => import('@/views/professors/ProfessorFormView.vue')
},
// Courses
{
path: 'courses',
name: 'CourseList',
component: () => import('@/views/courses/CourseListView.vue')
},
{
path: 'courses/create',
name: 'CourseCreate',
component: () => import('@/views/courses/CourseFormView.vue')
},
{
path: 'courses/edit/:id',
name: 'CourseEdit',
component: () => import('@/views/courses/CourseFormView.vue')
},
{
path: 'courses/view/:id',
name: 'CourseDetail',
component: () => import('@/views/courses/CourseDetailView.vue')
},
// Classes
{
path: 'classes',
name: 'ClassList',
component: () => import('@/views/classes/ClassListView.vue')
},
{
path: 'classes/create',
name: 'ClassCreate',
component: () => import('@/views/classes/ClassFormView.vue')
},
{
path: 'classes/edit/:id',
name: 'ClassEdit',
component: () => import('@/views/classes/ClassFormView.vue')
},
{
path: 'classes/view/:id',
name: 'ClassDetail',
component: () => import('@/views/classes/ClassDetailView.vue')
},
// Sessions
{
path: 'sessions',
name: 'SessionList',
component: () => import('@/views/sessions/SessionListView.vue')
},
{
path: 'sessions/create',
name: 'SessionCreate',
component: () => import('@/views/sessions/SessionFormView.vue')
},
{
path: 'sessions/edit/:id',
name: 'SessionEdit',
component: () => import('@/views/sessions/SessionFormView.vue')
},
{
path: 'sessions/attendance/:id',
name: 'AttendanceEntry',
component: () => import('@/views/attendances/AttendanceEntryView.vue')
},
// Payments
{
path: 'payments',
name: 'PaymentList',
component: () => import('@/views/payments/PaymentListView.vue')
},
{
path: 'payments/view/:id',
name: 'PaymentDetail',
component: () => import('@/views/payments/PaymentDetailView.vue')
},
// Roles
{
path: 'roles',
name: 'RoleList',
component: () => import('@/views/roles/RoleListView.vue')
},
{
path: 'roles/create',
name: 'RoleCreate',
component: () => import('@/views/roles/RoleFormView.vue')
},
{
path: 'roles/edit/:id',
name: 'RoleEdit',
component: () => import('@/views/roles/RoleFormView.vue')
},
// Notifications
{
path: 'notifications',
name: 'NotificationList',
component: () => import('@/views/notifications/NotificationListView.vue')
},
// Contact inquiries
{
path: 'contact-inquiries',
name: 'ContactInquiryList',
component: () => import('@/views/contactInquiries/ContactInquiryListView.vue')
},
{
path: 'contact-inquiries/view/:id',
name: 'ContactInquiryDetail',
component: () => import('@/views/contactInquiries/ContactInquiryDetailView.vue')
},
{
path: 'logs',
name: 'LogList',
component: () => import('@/views/logs/LogListView.vue'),
meta: { permission: 'logs:read' }
},
// Errors
{
path: '403',
name: 'Forbidden',
component: () => import('@/views/errors/ForbiddenView.vue')
}
]
},
{
path: '/:pathMatch(.*)*',
name: 'NotFound',
component: () => import('@/views/errors/NotFoundView.vue')
}
];