diff --git a/apps/viewer/src/__tests__/album-header.spec.ts b/apps/viewer/src/__tests__/album-header.spec.ts index a69c9c7..e2229f5 100644 --- a/apps/viewer/src/__tests__/album-header.spec.ts +++ b/apps/viewer/src/__tests__/album-header.spec.ts @@ -203,25 +203,20 @@ describe('album header info area (UI-02 V02)', () => { expect(copyBtn.textContent).toContain('复制失败'); }); - it('share sheet offers navigator.share when available (native panel self-reports)', async () => { + it('native share button removed (user request 2026-09-24): copy only', async () => { const share = vi.fn(() => Promise.resolve()); Object.defineProperty(navigator, 'share', { value: share, configurable: true }); const writeText = stubClipboard(() => Promise.resolve()); const wrapper = mountHeader({ album: makeAlbum(), viewCount: null }); await wrapper.find('.share-btn').trigger('click'); - await Promise.resolve(); - await Promise.resolve(); - const nativeBtn = sheetEl()!.querySelector('[data-test="share-sheet-native"]')!; - expect(nativeBtn).not.toBeNull(); - nativeBtn.click(); - await Promise.resolve(); - await Promise.resolve(); - expect(share).toHaveBeenCalledWith({ - title: '2026 公司年会', - url: 'http://localhost:3000/a/tokfixture0000000000aaaa?lang=zh-CN', - }); - // 原生分享路径不落剪贴板(面板自反馈,§5.4)。 - expect(writeText).not.toHaveBeenCalled(); + await flushPromises(); + // 仅复制按钮;系统分享不再提供(navigator.share 存在也不显示)。 + expect(sheetEl()!.querySelector('[data-test="share-sheet-native"]')).toBeNull(); + const copyBtn = sheetEl()!.querySelector('[data-test="share-sheet-copy"]')!; + copyBtn.click(); + await flushPromises(); + expect(writeText).toHaveBeenCalled(); + expect(share).not.toHaveBeenCalled(); }); }); diff --git a/apps/viewer/src/__tests__/lightbox.spec.ts b/apps/viewer/src/__tests__/lightbox.spec.ts index 2a31052..2991734 100644 --- a/apps/viewer/src/__tests__/lightbox.spec.ts +++ b/apps/viewer/src/__tests__/lightbox.spec.ts @@ -589,28 +589,6 @@ describe('photo lightbox interactions (UI-02 V05)', () => { return document.querySelector('.share-sheet'); } - it('share opens the sheet with the photo deep link; native share via sheet button', async () => { - const share = vi.fn(() => Promise.resolve()); - Object.defineProperty(navigator, 'share', { value: share, configurable: true }); - const { wrapper } = mountV05('p1', { - albumTitle: '2026 公司年会', - shareUrl: '/a/tok-lb/p/p1?lang=zh-CN', - }); - await flushPromises(); - - await wrapper.find('button[aria-label="分享照片"]').trigger('click'); - await flushPromises(); - // 弹层出现并携带照片深链(页面级提示已退役)。 - expect(lbSheet()).not.toBeNull(); - // 链接文本已隐藏(2026-09-24)。 - expect(wrapper.find('.share-status').exists()).toBe(false); - - const nativeBtn = lbSheet()!.querySelector('[data-test="share-sheet-native"]')!; - nativeBtn.click(); - await flushPromises(); - expect(share).toHaveBeenCalledWith({ title: '2026 公司年会', url: '/a/tok-lb/p/p1?lang=zh-CN' }); - }); - it('sheet copy button writes the deep link with on-button feedback', async () => { const writeText = vi.fn(() => Promise.resolve()); Object.defineProperty(navigator, 'clipboard', { value: { writeText }, configurable: true }); @@ -619,6 +597,8 @@ describe('photo lightbox interactions (UI-02 V05)', () => { await wrapper.find('button[aria-label="分享照片"]').trigger('click'); await flushPromises(); + // 系统分享按钮已移除(2026-09-24):仅复制。 + expect(lbSheet()!.querySelector('[data-test="share-sheet-native"]')).toBeNull(); const copyBtn = lbSheet()!.querySelector('[data-test="share-sheet-copy"]')!; copyBtn.click(); await flushPromises(); diff --git a/apps/viewer/src/components/viewer/ShareSheet.vue b/apps/viewer/src/components/viewer/ShareSheet.vue index 6075df2..1a71a4b 100644 --- a/apps/viewer/src/components/viewer/ShareSheet.vue +++ b/apps/viewer/src/components/viewer/ShareSheet.vue @@ -12,7 +12,6 @@ import { nextTick, onBeforeUnmount, ref, watch } from 'vue'; import { useI18n } from 'vue-i18n'; import QRCode from 'qrcode'; -import { canNativeShare } from '../../support/share'; import { copyText } from '../../support/clipboard'; const props = defineProps<{ @@ -34,7 +33,6 @@ const copyState = ref<'idle' | 'copied' | 'failed'>('idle'); let copyResetTimer: ReturnType | undefined; let qrAbort: { cancel: () => void } | null = null; -const showNativeShare = canNativeShare(); /** 二维码绘制(url 变化重绘;弹层打开时按可见尺寸绘制)。 */ async function drawQr(): Promise { @@ -82,14 +80,6 @@ async function onCopy(): Promise { }, 2500); } -async function onNativeShare(): Promise { - try { - await navigator.share({ title: props.title, url: props.url }); - } catch { - // 取消(AbortError)或其他失败:静默——弹层仍在,复制路径可用。 - } -} - function onKeydown(event: KeyboardEvent): void { if (event.key === 'Escape') { event.preventDefault(); @@ -145,15 +135,7 @@ onBeforeUnmount(() => {