mirror of
https://github.com/Dadechin/XRoomDashboardFront.git
synced 2025-07-16 23:24:34 +00:00
155 lines
4.4 KiB
JavaScript
155 lines
4.4 KiB
JavaScript
import { createRouter, createWebHistory } from 'vue-router'
|
||
import SignupPage from '../pages/SignupPage.vue'
|
||
import LoginPage from '../pages/LoginPage.vue'
|
||
import ResetPassword from '../pages/ResetPassword.vue'
|
||
import SmsVerification from '../pages/SmsVerification.vue'
|
||
import DashboardPage from '../pages/dashboard/index.vue'
|
||
import FilesPage from '@/pages/dashboard/files.vue';
|
||
import TeamsPage from '@/pages/dashboard/team.vue';
|
||
import DownloadPage from '@/pages/dashboard/Download.vue';
|
||
import spacesPage from '@/pages/dashboard/Spaces.vue';
|
||
import MeetingPage from '@/pages/dashboard/Meeting.vue';
|
||
import axios from '@/axios';
|
||
|
||
const routes = [
|
||
{
|
||
path: '/signup',
|
||
name: 'SignupPage',
|
||
component: SignupPage
|
||
},
|
||
{
|
||
path: '/',
|
||
name: 'LoginPage',
|
||
component: LoginPage
|
||
},
|
||
{
|
||
path: '/resetPassword',
|
||
name: 'ResetPassword',
|
||
component: ResetPassword
|
||
},
|
||
{
|
||
path: '/SmsVerification',
|
||
name: 'SmsVerification',
|
||
component: SmsVerification
|
||
},
|
||
{
|
||
path: '/dashboard',
|
||
name: 'DashboardPage',
|
||
component: DashboardPage,
|
||
meta: { requiresAuth: true , title : 'از این داشبورد، کار با XRoom را آغاز کنید.'}
|
||
},
|
||
{
|
||
path: '/dashboard/files',
|
||
name: 'files',
|
||
component: FilesPage,
|
||
meta: { requiresAuth: true , title : 'فایل ها'}
|
||
},
|
||
{
|
||
path: '/dashboard/download',
|
||
name: 'download',
|
||
component: DownloadPage,
|
||
meta: { requiresAuth: true , title : 'دانلود ها'}
|
||
},
|
||
{
|
||
path: '/dashboard/spaces',
|
||
name: 'spaces',
|
||
component: spacesPage,
|
||
meta: { requiresAuth: true , title : 'فضاها'}
|
||
},
|
||
{
|
||
path: '/dashboard/meetings',
|
||
name: 'meetings',
|
||
component: MeetingPage,
|
||
meta: { requiresAuth: true , title : 'جلسات'}
|
||
},
|
||
{
|
||
path: '/dashboard/teams',
|
||
name: 'teams',
|
||
component: TeamsPage,
|
||
meta: { requiresAuth: true , title : 'تیم ها'}
|
||
},
|
||
{
|
||
path: '/dashboard/edit-profile',
|
||
name: 'EditProfile',
|
||
component: () => import('@/pages/dashboard/EditProfile.vue'),
|
||
meta: { requiresAuth: true , title : 'ویرایش پروفایل'}
|
||
},
|
||
{
|
||
path: '/dashboard/readyPlayer',
|
||
name: 'ReadyPlayer',
|
||
component: () => import('@/pages/dashboard/readyPlayer.vue'),
|
||
meta: { requiresAuth: true , title : 'انتخاب آواتار'}
|
||
},
|
||
{
|
||
path: '/dashboard/ChangeAvatar',
|
||
name: 'ChangeAvatar',
|
||
component: () => import('@/pages/dashboard/ChangeAvatar.vue'),
|
||
meta: { requiresAuth: true , title : 'انتخاب آواتار'}
|
||
}
|
||
]
|
||
|
||
const router = createRouter({
|
||
history: createWebHistory(process.env.BASE_URL),
|
||
routes
|
||
})
|
||
|
||
router.beforeEach(async (to, from, next) => {
|
||
const token = localStorage.getItem('token');
|
||
|
||
// Check if the route requires authentication
|
||
const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
|
||
|
||
// If route doesn't require auth, continue
|
||
if (!requiresAuth) {
|
||
return next();
|
||
}
|
||
|
||
// If route requires auth but no token, redirect to login
|
||
if (requiresAuth && !token) {
|
||
return next('/');
|
||
}
|
||
|
||
// If we have a token and it's an auth route, verify it
|
||
if (token) {
|
||
try {
|
||
// Make getInfo request
|
||
let response = await axios.get('/getInfo');
|
||
response = response.data;
|
||
// Save customer and user data to localStorage
|
||
if (response.data?.customer) {
|
||
localStorage.setItem('customer', JSON.stringify(response.data.customer));
|
||
}
|
||
if (response.data?.user) {
|
||
localStorage.setItem('user', JSON.stringify(response.data.user));
|
||
}
|
||
localStorage.setItem('baseUrl','http://194.62.43.230:8000');
|
||
|
||
// If trying to access login page while authenticated, redirect to dashboard
|
||
if (to.path === '/') {
|
||
return next('/dashboard');
|
||
}
|
||
|
||
// Check if profile_glb is empty and not already going to ChangeAvatar
|
||
const customer = response.data.customer || JSON.parse(localStorage.getItem('customer') || '{}');
|
||
|
||
if (!customer.is_sms_verified && to.name !== 'SmsVerification') {
|
||
return next('/SmsVerification');
|
||
}
|
||
else if (!customer.profile_glb && to.name !== 'ReadyPlayer') {
|
||
return next('/dashboard/readyPlayer');
|
||
}
|
||
|
||
|
||
return next();
|
||
} catch (err) {
|
||
// Invalid token, clear storage and redirect to login
|
||
localStorage.removeItem('token');
|
||
localStorage.removeItem('user');
|
||
localStorage.removeItem('customer');
|
||
return next('/');
|
||
}
|
||
}
|
||
|
||
next();
|
||
});
|
||
export default router |