v4
This commit is contained in:
@@ -3,96 +3,87 @@ import {
|
||||
createMemoryHistory,
|
||||
createRouter,
|
||||
createWebHashHistory,
|
||||
createWebHistory,
|
||||
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.
|
||||
*/
|
||||
declare module 'vue-router' {
|
||||
interface RouteMeta {
|
||||
public?: boolean
|
||||
guestOnly?: boolean
|
||||
hideBackButton?: boolean
|
||||
backRoute?: string
|
||||
requiresAuth?: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export default defineRouter(function (/* { store, ssrContext } */) {
|
||||
const createHistory = process.env.SERVER
|
||||
? createMemoryHistory
|
||||
: (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory)
|
||||
: 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),
|
||||
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 (to.meta.guestOnly && authStore.isAuthenticated) {
|
||||
return { name: 'projects' }
|
||||
}
|
||||
|
||||
if (to.meta.requiresAuth && !authStore.isAuthenticated) {
|
||||
return {
|
||||
name: 'login',
|
||||
replace: true
|
||||
}
|
||||
}
|
||||
|
||||
// Редирект авторизованных пользователей с публичных маршрутов
|
||||
if (publicPaths.includes(to.path) && authStore.isAuthenticated) {
|
||||
return { path: '/' }
|
||||
|
||||
if (to.meta.public) {
|
||||
return true
|
||||
}
|
||||
|
||||
if (!to.meta.public && !authStore.isAuthenticated) {
|
||||
return {
|
||||
name: 'login',
|
||||
replace: true
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
const handleBackButton = async () => {
|
||||
const currentRoute = Router.currentRoute.value
|
||||
if (currentRoute.meta.backRoute) {
|
||||
await Router.push(currentRoute.meta.backRoute);
|
||||
await Router.push({ name: currentRoute.meta.backRoute })
|
||||
} else {
|
||||
if (window.history.length > 1) {
|
||||
Router.go(-1)
|
||||
} else {
|
||||
await Router.push('/projects')
|
||||
}
|
||||
if (window.history.length > 1) Router.go(-1)
|
||||
else await Router.push({ name: 'projects' })
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Router.afterEach((to) => {
|
||||
const BackButton = window.Telegram?.WebApp?.BackButton;
|
||||
if (BackButton) {
|
||||
// Управление видимостью
|
||||
if (to.meta.hideBackButton) {
|
||||
BackButton.hide()
|
||||
} else {
|
||||
BackButton.show()
|
||||
}
|
||||
const BackButton = window.Telegram?.WebApp?.BackButton
|
||||
if (BackButton) {
|
||||
BackButton[to.meta.hideBackButton ? 'hide' : 'show']()
|
||||
BackButton.offClick(handleBackButton as () => void)
|
||||
BackButton.onClick(handleBackButton as () => void)
|
||||
}
|
||||
|
||||
// Обновляем обработчик клика
|
||||
BackButton.offClick(handleBackButton as () => void)
|
||||
BackButton.onClick(handleBackButton as () => void)
|
||||
}
|
||||
|
||||
if (!to.params.id) {
|
||||
const projectsStore = useProjectsStore()
|
||||
projectsStore.setCurrentProjectId(null)
|
||||
useProjectsStore().setCurrentProjectId(null)
|
||||
}
|
||||
})
|
||||
|
||||
return Router
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user