diff --git a/src/app/setupRouter.ts b/src/app/setupRouter.ts index 8438964..97fd541 100644 --- a/src/app/setupRouter.ts +++ b/src/app/setupRouter.ts @@ -12,7 +12,7 @@ import { setFingerTimeOut, setHasFingerPrint } from '@/app/authBoot' -import { recoverMobileViewportAfterAuth } from '@/layouts/composables/useMobileScrollReset' +import { clearVantOverlays, recoverMobileViewportAfterAuth } from '@/layouts/composables/useMobileScrollReset' export function setupRouterGuards() { const userStore = useUserStore() @@ -180,6 +180,9 @@ export function setupRouterGuards() { }) router.afterEach((to, from) => { + if (to.name === 'login') { + clearVantOverlays() + } if (document.documentElement.classList.contains('app-layout--desktop')) return if (from.name === 'login') { recoverMobileViewportAfterAuth() diff --git a/src/assets/css/main.less b/src/assets/css/main.less index 145c7f3..d0bd717 100644 --- a/src/assets/css/main.less +++ b/src/assets/css/main.less @@ -120,6 +120,10 @@ body { pointer-events: auto !important; } +.van-dialog { + z-index: var(--app-z-dialog, 5300) !important; +} + body.van-overflow-hidden { .bottom-appbar, .app-credit-footer, diff --git a/src/composables/useProductsCatalog.ts b/src/composables/useProductsCatalog.ts index e6adedb..fd67602 100644 --- a/src/composables/useProductsCatalog.ts +++ b/src/composables/useProductsCatalog.ts @@ -1,7 +1,6 @@ import { ref } from 'vue' import { getProducts } from '@/api/products' import type { Product } from '@/models/products' -import { getLastStreamProductsList } from '@/utils/productStreamBridge' /** کش مشترک لیست محصولات — dedupe درخواست‌های polling */ const catalogProducts = ref([]) @@ -12,22 +11,11 @@ export function getProductsCatalogRef() { } export function findProductInCatalog(id: number): Product | undefined { - const cached = catalogProducts.value.find((p) => p.id === id) - if (cached) { - return cached - } - - return getLastStreamProductsList()?.find((p) => p.id === id) + return catalogProducts.value.find((p) => p.id === id) } export function getProductsCatalog(force = false): Promise { if (!force) { - const streamed = getLastStreamProductsList() - if (streamed?.length) { - catalogProducts.value = streamed - return Promise.resolve(streamed) - } - if (catalogProducts.value.length > 0) { return Promise.resolve(catalogProducts.value) } diff --git a/src/layouts/composables/useMobileScrollReset.ts b/src/layouts/composables/useMobileScrollReset.ts index aed17b6..e2b3aa4 100644 --- a/src/layouts/composables/useMobileScrollReset.ts +++ b/src/layouts/composables/useMobileScrollReset.ts @@ -41,6 +41,12 @@ function clearBodyScrollLock() { } } +/** leftover van-dialog overlay after logout/navigation — blocks all clicks */ +export function clearVantOverlays() { + document.querySelectorAll('body > .van-overlay').forEach((el) => el.remove()) + clearBodyScrollLock() +} + function resetAllScrollPositions() { window.scrollTo(0, 0) document.documentElement.scrollTop = 0 diff --git a/src/layouts/mobile/MobileAppLayout.vue b/src/layouts/mobile/MobileAppLayout.vue index 89e2a6d..66ca28c 100644 --- a/src/layouts/mobile/MobileAppLayout.vue +++ b/src/layouts/mobile/MobileAppLayout.vue @@ -47,6 +47,7 @@ const { watch( () => route.fullPath, () => { + closeOverflowMenu() resetMobileAppScroll() }, { flush: 'post' }, diff --git a/src/layouts/mobile/MobileOverflowMenu.vue b/src/layouts/mobile/MobileOverflowMenu.vue index d54d66d..558a65a 100644 --- a/src/layouts/mobile/MobileOverflowMenu.vue +++ b/src/layouts/mobile/MobileOverflowMenu.vue @@ -2,12 +2,15 @@
-
+
- +