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