diff --git a/src/pages/exhibit/detail.vue b/src/pages/exhibit/detail.vue
index 07341f0..e65e01b 100644
--- a/src/pages/exhibit/detail.vue
+++ b/src/pages/exhibit/detail.vue
@@ -106,9 +106,6 @@
{{ detailLoadingMessage }}
-
- {{ audioAvailabilityMessage }}
-
diff --git a/tests/unit/ExhibitDetailAudioFirst.spec.ts b/tests/unit/ExhibitDetailAudioFirst.spec.ts
index 60f40db..fe45994 100644
--- a/tests/unit/ExhibitDetailAudioFirst.spec.ts
+++ b/tests/unit/ExhibitDetailAudioFirst.spec.ts
@@ -144,4 +144,26 @@ describe('讲解详情音频优先布局', () => {
language: 'en-US'
}), expect.objectContaining({ displayMode: 'mini' }))
})
+
+ it('音频不可用时只在音频控制区显示一次提示', async () => {
+ mocks.enterExplainDetail.mockResolvedValue({
+ ...exhibit,
+ audioUrl: undefined,
+ audioDuration: undefined,
+ audioStatus: 'MISSING',
+ audioLanguage: 'yue-HK',
+ audioUnavailableReason: '当前语言暂无语音讲解。'
+ })
+
+ const wrapper = mount(ExhibitDetail, {
+ global: { stubs: { GuidePageFrame: GuidePageFrameStub } }
+ })
+
+ await mocks.onLoadHandler?.({ id: exhibit.id, lang: 'yue-HK', targetType: 'STOP', targetId: 'stop-1' })
+ await flushPromises()
+
+ expect(wrapper.find('.detail-audio-unavailable').text()).toBe('当前语言暂无语音讲解。')
+ expect(wrapper.find('.audio-status-hint').exists()).toBe(false)
+ expect(wrapper.findAll('.section-hint')).toHaveLength(0)
+ })
})