import { defineRouter } from '#q-app/wrappers' import { createMemoryHistory, createRouter, createWebHashHistory, createWebHistory, } from 'vue-router' import routes from './routes' import { useAuthStore } from 'stores/auth' import { useProjectsStore } from 'stores/projects' /* * If not building with SSR mode, you can * directly export the Router instantiation; * * The function below can be async too; either use * async/await or return a Promise which resolves * with the Router instance. */ export default defineRouter(function (/* { store, ssrContext } */) { const createHistory = process.env.SERVER ? createMemoryHistory : (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory) const Router = createRouter({ scrollBehavior: () => ({ left: 0, top: 0 }), routes, // Leave this as is and make changes in quasar.conf.js instead! // quasar.conf.js -> build -> vueRouterMode // quasar.conf.js -> build -> publicPath history: createHistory(process.env.VUE_ROUTER_BASE), }) const publicPaths = ['/login', '/create-account', '/recovery-password'] Router.beforeEach(async (to) => { const authStore = useAuthStore() // Инициализация хранилища перед проверкой if (!authStore.isInitialized) { await authStore.initialize() } // Проверка авторизации для непубличных маршрутов if (!publicPaths.includes(to.path)) { if (!authStore.isAuthenticated) { return { path: '/login', query: { redirect: to.fullPath } } } } // Редирект авторизованных пользователей с публичных маршрутов if (publicPaths.includes(to.path) && authStore.isAuthenticated) { return { path: '/' } } }) const handleBackButton = async () => { const currentRoute = Router.currentRoute.value if (currentRoute.meta.backRoute) { await Router.push(currentRoute.meta.backRoute); } else { if (window.history.length > 1) { Router.go(-1) } else { await Router.push('/projects') } } } Router.afterEach((to) => { const BackButton = window.Telegram?.WebApp?.BackButton; if (BackButton) { // Управление видимостью if (to.meta.hideBackButton) { BackButton.hide() } else { BackButton.show() } // Обновляем обработчик клика BackButton.offClick(handleBackButton as () => void) BackButton.onClick(handleBackButton as () => void) } if (!to.params.id) { const projectsStore = useProjectsStore() projectsStore.setCurrentProjectId(null) } }) return Router })