From bdad433dae31b8b189fe1326ed0e47bf7cc326cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Wed, 23 Sep 2026 13:39:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(viewer):=20remove=20lightbox=20top-bar=20se?= =?UTF-8?q?ttings=20menu=20(user=20request)=20=E2=80=94=20close=20button?= =?UTF-8?q?=20+=20counter=20only;=20Esc=20closes=20directly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Code --- apps/viewer/src/__tests__/lightbox.spec.ts | 21 +++++--------------- apps/viewer/src/components/PhotoLightbox.vue | 1 - 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/apps/viewer/src/__tests__/lightbox.spec.ts b/apps/viewer/src/__tests__/lightbox.spec.ts index 1bbb924..b011efb 100644 --- a/apps/viewer/src/__tests__/lightbox.spec.ts +++ b/apps/viewer/src/__tests__/lightbox.spec.ts @@ -382,28 +382,17 @@ describe('photo lightbox dark viewer (UI-02 V04)', () => { expect(lightbox(wrapper).emitted('update:photoId')).toEqual([['p1']]); }); - it('more menu exposes the reduce-motion toggle; Escape closes the menu before the viewer', async () => { + it('top bar has no settings/more menu (removed per user request 2026-09-23); Escape closes the viewer directly', async () => { const wrapper = mountLightbox('p2'); await flushPromises(); - await wrapper.find('.viewer-more').trigger('click'); - expect(wrapper.find('.more-popover').exists()).toBe(true); - const item = wrapper.find('.more-item'); - expect(item.text()).toContain('减少动画'); - expect(item.attributes('aria-checked')).toBe('false'); - await item.trigger('click'); - expect(wrapper.find('.more-item').attributes('aria-checked')).toBe('true'); - // 还原模块级偏好单例,避免影响后续用例。 - await wrapper.find('.more-item').trigger('click'); + // 「⋯」更多菜单(减少动画开关)已按用户要求移除:顶部仅保留关闭与序号。 + expect(wrapper.find('.viewer-more').exists()).toBe(false); + expect(wrapper.find('.more-menu').exists()).toBe(false); keydown('Escape'); await flushPromises(); - expect(wrapper.find('.more-popover').exists()).toBe(false); // 先收菜单 - expect(lightbox(wrapper).emitted('close')).toBeUndefined(); // 不关查看器 - - keydown('Escape'); - await flushPromises(); - expect(lightbox(wrapper).emitted('close')).toHaveLength(1); + expect(lightbox(wrapper).emitted('close')).toHaveLength(1); // Esc 直接关查看器 }); it('moves focus into the dialog on open and returns it to the trigger on close', async () => { diff --git a/apps/viewer/src/components/PhotoLightbox.vue b/apps/viewer/src/components/PhotoLightbox.vue index 98b8b47..441d53f 100644 --- a/apps/viewer/src/components/PhotoLightbox.vue +++ b/apps/viewer/src/components/PhotoLightbox.vue @@ -11,7 +11,6 @@ import HeartParticles from './viewer/HeartParticles.vue'; import InteractionNotice from './viewer/InteractionNotice.vue'; import ThumbnailStrip, { type ThumbnailItem } from './viewer/ThumbnailStrip.vue'; import ShareSheet from './viewer/ShareSheet.vue'; -import { reducedMotion, toggleReducedMotion } from '../ui/prefs'; import { positionDisplay } from '../viewer/position'; import { MIN_SCALE, panBy, resetZoom, wheelFactor, zoomAt, type ZoomState } from '../viewer/zoom';