diff --git a/docker-compose.yaml b/docker-compose.yaml index b7109c0..e857489 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -7,6 +7,7 @@ services: - "./scripts:/scripts" - "./module:/module" - "./build:/build" + - "/Users/nikitakiselev/code/italy-moda/image/catalog:/web/upload/image/catalog" ports: - "8000:80" restart: always diff --git a/frontend/spa/src/App.vue b/frontend/spa/src/App.vue index f37d938..f78e082 100644 --- a/frontend/spa/src/App.vue +++ b/frontend/spa/src/App.vue @@ -12,7 +12,7 @@ - + diff --git a/frontend/spa/src/components/SingleProductImageSwiper.vue b/frontend/spa/src/components/SingleProductImageSwiper.vue index 67adca7..9e26f7f 100644 --- a/frontend/spa/src/components/SingleProductImageSwiper.vue +++ b/frontend/spa/src/components/SingleProductImageSwiper.vue @@ -34,6 +34,7 @@ import FullScreenImageViewer from "@/components/FullScreenImageViewer.vue"; import {useHapticFeedback} from "@/composables/useHapticFeedback.js"; import {onMounted, onUnmounted, ref} from "vue"; import {useHapticScroll} from "@/composables/useHapticScroll.js"; +import {useRouter} from "vue-router"; const emit = defineEmits(['onLoad']); @@ -44,6 +45,7 @@ const props = defineProps({ } }); +const router = useRouter(); const haptic = useHapticFeedback(); const hapticScroll = useHapticScroll(); const pagination = { diff --git a/frontend/spa/src/router.js b/frontend/spa/src/router.js index d1984e6..0dd1325 100644 --- a/frontend/spa/src/router.js +++ b/frontend/spa/src/router.js @@ -35,6 +35,22 @@ export const router = createRouter({ history: createWebHashHistory('/image/catalog/tgshopspa/'), routes, scrollBehavior(to, from, savedPosition) { + // Для страницы товара всегда скроллим наверх мгновенно + if (to.name === 'product.show') { + return {top: 0, behavior: 'instant'}; + } + + // Для страницы категории скролл будет восстановлен в компоненте через onActivated + // Здесь просто предотвращаем автоматический скролл наверх + if (to.name === 'product.categories.show') { + // Если возвращаемся назад на категорию - используем savedPosition + if (savedPosition) { + return savedPosition; + } + return false; // Не скроллить автоматически + } + + // Для остальных страниц используем savedPosition если есть, иначе наверх if (savedPosition) { return savedPosition; } diff --git a/frontend/spa/src/stores/ProductsStore.js b/frontend/spa/src/stores/ProductsStore.js index db4022f..658a5de 100644 --- a/frontend/spa/src/stores/ProductsStore.js +++ b/frontend/spa/src/stores/ProductsStore.js @@ -20,6 +20,8 @@ export const useProductsStore = defineStore('products', { loadFinished: false, savedScrollY: 0, currentLoadedParamsHash: null, + lastCategoryId: null, + scrollPositions: {}, // Сохраняем позиции скролла для каждой категории }), getters: { @@ -118,5 +120,16 @@ export const useProductsStore = defineStore('products', { }, }; }, + + saveScrollPosition(categoryId, position) { + if (categoryId) { + this.scrollPositions[categoryId] = position; + this.savedScrollY = position; + } + }, + + getScrollPosition(categoryId) { + return this.scrollPositions[categoryId] || 0; + }, }, }); diff --git a/frontend/spa/src/views/Product.vue b/frontend/spa/src/views/Product.vue index 0acde54..8e87d03 100644 --- a/frontend/spa/src/views/Product.vue +++ b/frontend/spa/src/views/Product.vue @@ -305,6 +305,9 @@ function setQuantity(newQuantity) { } onMounted(async () => { + // Явно сбрасываем скролл наверх при открытии страницы товара + window.scrollTo({ top: 0, behavior: 'instant' }); + isLoading.value = true; imagesLoaded.value = false; diff --git a/frontend/spa/src/views/Products.vue b/frontend/spa/src/views/Products.vue index 9214f65..1d0f41f 100644 --- a/frontend/spa/src/views/Products.vue +++ b/frontend/spa/src/views/Products.vue @@ -13,7 +13,7 @@ diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/bastion/Handlers/ImageHandler.php b/module/oc_telegram_shop/upload/oc_telegram_shop/bastion/Handlers/ImageHandler.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/bastion/ScheduledTasks/TeleCartPulseSendEventsTask.php b/module/oc_telegram_shop/upload/oc_telegram_shop/bastion/ScheduledTasks/TeleCartPulseSendEventsTask.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/console/Commands/PulseSendEventsCommand.php b/module/oc_telegram_shop/upload/oc_telegram_shop/console/Commands/PulseSendEventsCommand.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/framework/Exceptions/HttpNotFoundException.php b/module/oc_telegram_shop/upload/oc_telegram_shop/framework/Exceptions/HttpNotFoundException.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/framework/ImageTool/ImageFactory.php b/module/oc_telegram_shop/upload/oc_telegram_shop/framework/ImageTool/ImageFactory.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/framework/ImageTool/ImageNotFoundException.php b/module/oc_telegram_shop/upload/oc_telegram_shop/framework/ImageTool/ImageNotFoundException.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/framework/ImageTool/ImageToolServiceProvider.php b/module/oc_telegram_shop/upload/oc_telegram_shop/framework/ImageTool/ImageToolServiceProvider.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/framework/ImageTool/ImageUtils.php b/module/oc_telegram_shop/upload/oc_telegram_shop/framework/ImageTool/ImageUtils.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/framework/OpenCart/Currency.php b/module/oc_telegram_shop/upload/oc_telegram_shop/framework/OpenCart/Currency.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/framework/OpenCart/PriceCalculator.php b/module/oc_telegram_shop/upload/oc_telegram_shop/framework/OpenCart/PriceCalculator.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/framework/OpenCart/PriceFormatter.php b/module/oc_telegram_shop/upload/oc_telegram_shop/framework/OpenCart/PriceFormatter.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/framework/Support/DateUtils.php b/module/oc_telegram_shop/upload/oc_telegram_shop/framework/Support/DateUtils.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/phpstan.neon b/module/oc_telegram_shop/upload/oc_telegram_shop/phpstan.neon old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/src/Services/BlocksService.php b/module/oc_telegram_shop/upload/oc_telegram_shop/src/Services/BlocksService.php index 27138f8..46c2f26 100755 --- a/module/oc_telegram_shop/upload/oc_telegram_shop/src/Services/BlocksService.php +++ b/module/oc_telegram_shop/upload/oc_telegram_shop/src/Services/BlocksService.php @@ -41,7 +41,7 @@ class BlocksService { $blockType = $block['type']; $cacheKey = "block_{$blockType}_" . md5(serialize($block['data'])); - $cacheTtlSeconds = 60; + $cacheTtlSeconds = 3600; $data = $this->cache->get($cacheKey); if (! $data) { diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/stubs/config.php b/module/oc_telegram_shop/upload/oc_telegram_shop/stubs/config.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/stubs/currency.php b/module/oc_telegram_shop/upload/oc_telegram_shop/stubs/currency.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/tests/Unit/Framework/ImageTool/ImageFactoryTest.php b/module/oc_telegram_shop/upload/oc_telegram_shop/tests/Unit/Framework/ImageTool/ImageFactoryTest.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/tests/Unit/Framework/Scheduler/JobTest.php b/module/oc_telegram_shop/upload/oc_telegram_shop/tests/Unit/Framework/Scheduler/JobTest.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/tests/Unit/Framework/Scheduler/ScheduleJobRegistryTest.php b/module/oc_telegram_shop/upload/oc_telegram_shop/tests/Unit/Framework/Scheduler/ScheduleJobRegistryTest.php old mode 100644 new mode 100755 diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/tests/Unit/Framework/Scheduler/SchedulerResultTest.php b/module/oc_telegram_shop/upload/oc_telegram_shop/tests/Unit/Framework/Scheduler/SchedulerResultTest.php old mode 100644 new mode 100755