From 0461ba2ea9fd3954831261efd7c261b112eaf9f5 Mon Sep 17 00:00:00 2001 From: zoujing Date: Mon, 17 Aug 2026 20:53:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E5=A4=8D=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=9A=84=E6=BB=9A=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages-service/tickets/components/TicketHome.vue | 8 +++++++- src/pages-service/tickets/view-contract.test.mjs | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/pages-service/tickets/components/TicketHome.vue b/src/pages-service/tickets/components/TicketHome.vue index f404799..644128b 100644 --- a/src/pages-service/tickets/components/TicketHome.vue +++ b/src/pages-service/tickets/components/TicketHome.vue @@ -135,6 +135,9 @@ const groupOffsets = ref([]) const rightScrollTop = ref(0) const instance = getCurrentInstance() const productsById = computed(() => new Map(props.products.map((product) => [product.id, product]))) +const groupLayoutSignature = computed(() => props.groups + .map((group) => `${group.id}:${(group.productIds || []).join(',')}`) + .join('|')) const productsForGroup = (group) => (group.productIds || []) .map((productId) => productsById.value.get(productId)) @@ -197,7 +200,10 @@ const handleProductScroll = (event) => { } onMounted(measureGroupOffsets) -watch(() => props.groups.map((group) => group.id).join(','), measureGroupOffsets) +watch(groupLayoutSignature, () => { + groupOffsets.value = [] + measureGroupOffsets() +}, { flush: 'post' }) const makePhoneCall = () => { if (!props.scenicSpot.phone) return diff --git a/src/pages-service/tickets/view-contract.test.mjs b/src/pages-service/tickets/view-contract.test.mjs index 4b8dd00..247a0bf 100644 --- a/src/pages-service/tickets/view-contract.test.mjs +++ b/src/pages-service/tickets/view-contract.test.mjs @@ -60,6 +60,9 @@ test("storefront synchronizes the left category from right-column scrolling", as assert.match(source, /groupOffsets/); assert.match(source, /scrollTop/); assert.match(source, /leftScrollIntoViewId/); + assert.match(source, /groupLayoutSignature/); + assert.match(source, /group\.productIds/); + assert.match(source, /groupOffsets\.value = \[\]/); assert.match(source, /TopNavBar/); });