From 945a439c03fc288468a4664b68a5c52da52e7815 Mon Sep 17 00:00:00 2001 From: M_Kececi Date: Mon, 16 Mar 2026 01:02:40 +0300 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ui/src/pages/ProductStockByAttributes.vue | 38 +++++++++++++++++++++-- ui/src/pages/ProductStockQuery.vue | 38 +++++++++++++++++++++-- 2 files changed, 72 insertions(+), 4 deletions(-) diff --git a/ui/src/pages/ProductStockByAttributes.vue b/ui/src/pages/ProductStockByAttributes.vue index f1c7c43..d69e1b5 100644 --- a/ui/src/pages/ProductStockByAttributes.vue +++ b/ui/src/pages/ProductStockByAttributes.vue @@ -275,6 +275,7 @@ arrows height="100%" class="product-card-carousel rounded-borders" + @update:model-value="onProductCardSlideChange" > String(x || '').trim() === value)) productImageFullscreenSlide.value = idx + setGalleryHashIndex(idx) productImageFullscreenZoom.value = 1 productImageFullscreenOffsetX.value = 0 productImageFullscreenOffsetY.value = 0 @@ -1414,12 +1440,17 @@ function onFullscreenMouseUp() { } function onFullscreenSlideChange() { + setGalleryHashIndex(productImageFullscreenSlide.value) productImageFullscreenZoom.value = 1 productImageFullscreenOffsetX.value = 0 productImageFullscreenOffsetY.value = 0 productImageFullscreenDragging.value = false } +function onProductCardSlideChange() { + setGalleryHashIndex(productCardSlide.value) +} + function resetForm() { filters.value = createEmptyFilters() rawRows.value = [] @@ -1452,11 +1483,14 @@ onMounted(() => { void loadFilterOptions(true) window.addEventListener('mousemove', onFullscreenMouseMove) window.addEventListener('mouseup', onFullscreenMouseUp) + window.addEventListener('hashchange', applyGalleryHashIndex) + applyGalleryHashIndex() }) onUnmounted(() => { window.removeEventListener('mousemove', onFullscreenMouseMove) window.removeEventListener('mouseup', onFullscreenMouseUp) + window.removeEventListener('hashchange', applyGalleryHashIndex) if (filterOptionsDebounceTimer) { clearTimeout(filterOptionsDebounceTimer) filterOptionsDebounceTimer = null diff --git a/ui/src/pages/ProductStockQuery.vue b/ui/src/pages/ProductStockQuery.vue index c4b1798..e3b7289 100644 --- a/ui/src/pages/ProductStockQuery.vue +++ b/ui/src/pages/ProductStockQuery.vue @@ -260,6 +260,7 @@ arrows height="100%" class="product-card-carousel rounded-borders" + @update:model-value="onProductCardSlideChange" > String(x || '').trim() === value)) productImageFullscreenSlide.value = idx + setGalleryHashIndex(idx) productImageFullscreenZoom.value = 1 productImageFullscreenOffsetX.value = 0 productImageFullscreenOffsetY.value = 0 @@ -1224,12 +1250,17 @@ function onFullscreenMouseUp() { } function onFullscreenSlideChange() { + setGalleryHashIndex(productImageFullscreenSlide.value) productImageFullscreenZoom.value = 1 productImageFullscreenOffsetX.value = 0 productImageFullscreenOffsetY.value = 0 productImageFullscreenDragging.value = false } +function onProductCardSlideChange() { + setGalleryHashIndex(productCardSlide.value) +} + function resetForm() { selectedProductCode.value = '' rawRows.value = [] @@ -1259,6 +1290,7 @@ function resetForm() { onUnmounted(() => { window.removeEventListener('mousemove', onFullscreenMouseMove) window.removeEventListener('mouseup', onFullscreenMouseUp) + window.removeEventListener('hashchange', applyGalleryHashIndex) for (const url of productImageBlobUrls.value) { try { URL.revokeObjectURL(url) } catch {} } @@ -1269,6 +1301,8 @@ onMounted(() => { loadProductOptions() window.addEventListener('mousemove', onFullscreenMouseMove) window.addEventListener('mouseup', onFullscreenMouseUp) + window.addEventListener('hashchange', applyGalleryHashIndex) + applyGalleryHashIndex() })