38 lines
1.4 KiB
TypeScript
38 lines
1.4 KiB
TypeScript
import { createRouter, createWebHistory } from 'vue-router';
|
|
import HomeView from '@/views/HomeView.vue';
|
|
import { useAuthStore } from '@/stores/auth';
|
|
|
|
const router = createRouter({
|
|
history: createWebHistory(),
|
|
routes: [
|
|
{ path: '/login', name: 'login', component: () => import('@/views/LoginView.vue'), meta: { public: true } },
|
|
{ path: '/', name: 'home', component: HomeView },
|
|
{ path: '/screener', name: 'screener', component: () => import('@/views/ScreenerView.vue') },
|
|
{ path: '/stocks', name: 'stocks', component: () => import('@/views/StocksView.vue') },
|
|
{ path: '/etfs', name: 'etfs', component: () => import('@/views/EtfsView.vue') },
|
|
{ path: '/indexes', name: 'indexes', component: () => import('@/views/IndexesView.vue') },
|
|
{ path: '/indexes/:code', name: 'index-detail', component: () => import('@/views/IndexDetailView.vue') },
|
|
{ path: '/backtest', name: 'backtest', component: () => import('@/views/BacktestView.vue') },
|
|
{ path: '/:pathMatch(.*)*', redirect: '/' },
|
|
],
|
|
});
|
|
|
|
router.beforeEach(async (to) => {
|
|
const auth = useAuthStore();
|
|
await auth.restore();
|
|
|
|
if (to.meta.public) {
|
|
if (to.name === 'login' && auth.isAuthenticated) {
|
|
return typeof to.query.redirect === 'string' ? to.query.redirect : '/';
|
|
}
|
|
return true;
|
|
}
|
|
|
|
if (!auth.isAuthenticated) {
|
|
return { name: 'login', query: { redirect: to.fullPath } };
|
|
}
|
|
return true;
|
|
});
|
|
|
|
export default router;
|