first commit
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
|
||||
import AdminLayout from '../layouts/AdminLayout.vue';
|
||||
import { useAuthStore } from '../stores/auth.store';
|
||||
|
||||
const routes: RouteRecordRaw[] = [
|
||||
{
|
||||
path: '/login',
|
||||
name: 'login',
|
||||
component: () => import('../views/auth/LoginView.vue'),
|
||||
meta: { guestOnly: true },
|
||||
},
|
||||
{
|
||||
path: '/',
|
||||
component: AdminLayout,
|
||||
meta: { requiresAuth: true },
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
redirect: '/dashboard',
|
||||
},
|
||||
{
|
||||
path: 'dashboard',
|
||||
name: 'dashboard',
|
||||
component: () => import('../views/dashboard/DashboardView.vue'),
|
||||
},
|
||||
{
|
||||
path: 'campaigns',
|
||||
name: 'campaigns',
|
||||
component: () => import('../views/campaigns/CampaignListView.vue'),
|
||||
},
|
||||
{
|
||||
path: 'campaigns/create',
|
||||
name: 'campaign-create',
|
||||
component: () => import('../views/campaigns/CampaignFormView.vue'),
|
||||
},
|
||||
{
|
||||
path: 'campaigns/:id/edit',
|
||||
name: 'campaign-edit',
|
||||
component: () => import('../views/campaigns/CampaignFormView.vue'),
|
||||
},
|
||||
{
|
||||
path: 'campaigns/:campaignId/prizes',
|
||||
name: 'campaign-prizes',
|
||||
component: () => import('../views/prizes/PrizeListView.vue'),
|
||||
},
|
||||
{
|
||||
path: 'users',
|
||||
name: 'users',
|
||||
component: () => import('../views/users/UserListView.vue'),
|
||||
},
|
||||
{
|
||||
path: 'users/:id',
|
||||
name: 'user-detail',
|
||||
component: () => import('../views/users/UserDetailView.vue'),
|
||||
},
|
||||
{
|
||||
path: 'spins',
|
||||
name: 'spins',
|
||||
component: () => import('../views/spins/SpinListView.vue'),
|
||||
},
|
||||
{
|
||||
path: 'winners',
|
||||
name: 'winners',
|
||||
component: () => import('../views/winners/WinnerListView.vue'),
|
||||
},
|
||||
{
|
||||
path: 'sms',
|
||||
name: 'sms',
|
||||
component: () => import('../views/sms/SmsLogListView.vue'),
|
||||
},
|
||||
{
|
||||
path: 'reports',
|
||||
name: 'reports',
|
||||
component: () => import('../views/reports/ReportView.vue'),
|
||||
},
|
||||
{
|
||||
path: 'audit',
|
||||
name: 'audit',
|
||||
component: () => import('../views/audit/AuditLogView.vue'),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: '/:pathMatch(.*)*',
|
||||
redirect: '/dashboard',
|
||||
},
|
||||
];
|
||||
|
||||
export const router = createRouter({
|
||||
history: createWebHistory(),
|
||||
routes,
|
||||
});
|
||||
|
||||
router.beforeEach(async (to, from, next) => {
|
||||
const authStore = useAuthStore();
|
||||
const token = localStorage.getItem('admin_access_token');
|
||||
|
||||
if (to.meta.requiresAuth && !token) {
|
||||
next('/login');
|
||||
} else if (to.meta.guestOnly && token) {
|
||||
next('/dashboard');
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user