From f52575db9c0cb42cdb5c27f984ee77939b20099b Mon Sep 17 00:00:00 2001 From: adonis Date: Sat, 12 Sep 2026 11:54:55 +0330 Subject: [PATCH 1/3] Show the price-alert action on the account page when enabled. Co-authored-by: Cursor --- src/views/base/user/composables/useUserPage.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/views/base/user/composables/useUserPage.ts b/src/views/base/user/composables/useUserPage.ts index 485721c..c97ab3b 100644 --- a/src/views/base/user/composables/useUserPage.ts +++ b/src/views/base/user/composables/useUserPage.ts @@ -119,6 +119,13 @@ export function useUserPage() { onClick: () => router.push({ name: 'physicalReceive' }), visible: true, }, + { + id: 'notifyTrigger', + label: 'هشدار قیمت', + icon: 'vuesax-linear:bill', + onClick: () => router.push({ name: 'notifyTrigger' }), + visible: settingsStore.isSettingTruthy('has_page_price_trigger'), + }, { id: 'piggy', label: 'قلک‌ها', From f6b1044a17a8a0ed4a3e68a3f356f0b40b537dc6 Mon Sep 17 00:00:00 2001 From: adonis Date: Sat, 12 Sep 2026 13:25:29 +0330 Subject: [PATCH 2/3] Drive the account menu from settings and show notification/permission actions. Co-authored-by: Cursor --- src/utils/superAdminMenuGates.ts | 1 + .../base/user/composables/useUserPage.ts | 14 +++ src/views/base/user/mobile/MobileUserView.vue | 108 +----------------- 3 files changed, 21 insertions(+), 102 deletions(-) diff --git a/src/utils/superAdminMenuGates.ts b/src/utils/superAdminMenuGates.ts index 5f2defc..a011a3f 100644 --- a/src/utils/superAdminMenuGates.ts +++ b/src/utils/superAdminMenuGates.ts @@ -22,6 +22,7 @@ export const MENU_ID_FEATURE_SETTING: Record = { giftCard: 'has_page_gift_card', notify: 'has_page_price_trigger', notifyTrigger: 'has_page_price_trigger', + appNotifications: 'has_page_notification', conditionalOrder: 'enable_conditional_order', permissions: 'permision__enabled', } diff --git a/src/views/base/user/composables/useUserPage.ts b/src/views/base/user/composables/useUserPage.ts index c97ab3b..c9044ea 100644 --- a/src/views/base/user/composables/useUserPage.ts +++ b/src/views/base/user/composables/useUserPage.ts @@ -126,6 +126,13 @@ export function useUserPage() { onClick: () => router.push({ name: 'notifyTrigger' }), visible: settingsStore.isSettingTruthy('has_page_price_trigger'), }, + { + id: 'appNotifications', + label: 'اعلان‌ها', + icon: 'vuesax-linear:notification', + onClick: () => router.push({ name: 'appNotifications' }), + visible: settingsStore.isSettingTruthy('has_page_notification'), + }, { id: 'piggy', label: 'قلک‌ها', @@ -178,6 +185,13 @@ export function useUserPage() { onClick: () => router.push({ name: 'rules' }), visible: true, }, + { + id: 'permissions', + label: 'مجوز ها', + icon: 'vuesax-linear:archive-book', + onClick: () => router.push({ name: 'permissions' }), + visible: settingsStore.isSettingTruthy('permision__enabled'), + }, ].filter((action) => action.visible !== false), ) diff --git a/src/views/base/user/mobile/MobileUserView.vue b/src/views/base/user/mobile/MobileUserView.vue index 4e899d1..b4962a9 100644 --- a/src/views/base/user/mobile/MobileUserView.vue +++ b/src/views/base/user/mobile/MobileUserView.vue @@ -66,112 +66,19 @@
- -
تغییر رمز عبور
+ +
{{ action.label }}
- -
- -
قیمت روز طلا
-
-
- - -
- -
تحویل فیزیکی
-
-
- -
- -
درباره ما
-
-
- -
- -
سایت‌های ری‌گیری
-
-
- -
- -
قوانین و مقررات
-
-
- - - - - - - - - - - - - From 6f725bc0efc7dfa27124a5a2abd5593fe82d627a Mon Sep 17 00:00:00 2001 From: adonis Date: Sun, 13 Sep 2026 16:32:37 +0330 Subject: [PATCH 3/3] fix some bugs from ghatreh --- src/app/setupRouter.ts | 5 +- src/assets/css/main.less | 4 + src/composables/useProductsCatalog.ts | 14 +- .../composables/useMobileScrollReset.ts | 6 + src/layouts/mobile/MobileAppLayout.vue | 1 + src/layouts/mobile/MobileOverflowMenu.vue | 7 +- src/layouts/styles/mobile-page-common.less | 3 + src/utils/productPrice.ts | 5 + src/utils/productTradeOpen.ts | 6 +- .../home/components/LogoutConfirmDialog.vue | 2 +- src/views/base/home/index.vue | 17 +-- .../base/products/components/ProductItem.vue | 19 ++- .../components/ProductItemVertical.vue | 19 ++- .../composables/useProductsPageData.ts | 32 ++-- src/views/base/products/index.vue | 3 +- .../composables/useProductDetailPage.ts | 26 +++- .../desktop/DesktopProductDetailView.vue | 6 +- .../mobile/MobileProductDetailView.vue | 142 +++++++++++++----- .../base/user/composables/useUserPage.ts | 8 +- 19 files changed, 219 insertions(+), 106 deletions(-) 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 @@
-
+
- +