按接口能力展示讲解语言
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
lyf
2026-07-17 18:05:23 +08:00
parent 3d4f4c1d9a
commit 7267dfcac1
2 changed files with 88 additions and 5 deletions

View File

@@ -218,7 +218,7 @@ const detailTextLoadedByLanguage = ref<Record<AudioLanguage, boolean>>({
const isLocationActionVisible = false
const shouldUseHostNavigation = computed(() => isEmbeddedInWechatMiniProgram())
const contentLanguageOptions: Array<{
const languageOptionDefinitions: Array<{
value: AudioLanguage
label: string
}> = [
@@ -240,6 +240,24 @@ const isAudioLanguage = (value: unknown): value is AudioLanguage => (
value === 'zh-CN' || value === 'yue-HK' || value === 'en-US'
)
const supportedDetailLanguages = computed(() => (
(exhibit.value.audio.supportedLanguages || []).filter(isAudioLanguage)
))
const contentLanguageOptions = computed(() => {
const supportedLanguages = supportedDetailLanguages.value
return languageOptionDefinitions.filter((option) => supportedLanguages.includes(option.value))
})
const resolveSupportedDetailLanguage = (requestedLanguage: AudioLanguage) => {
const supportedLanguages = supportedDetailLanguages.value
if (!supportedLanguages.length || supportedLanguages.includes(requestedLanguage)) {
return requestedLanguage
}
return supportedLanguages.includes('zh-CN') ? 'zh-CN' : supportedLanguages[0]
}
const audioLanguageLabel = (lang: AudioLanguage) => {
if (lang === 'en-US') return 'English'
if (lang === 'yue-HK') return '粤语'
@@ -446,13 +464,20 @@ const loadExplainDetail = async (
})
exhibit.value = toExplainDetailPageViewModel(exhibitData)
selectedAudioLanguage.value = lang
const resolvedLanguage = resolveSupportedDetailLanguage(lang)
selectedAudioLanguage.value = resolvedLanguage
if (exhibitData.hallId) {
resolvedHallId.value = exhibitData.hallId
}
void loadFullDetailTextForLanguage(request, lang, exhibit.value)
if (resolvedLanguage !== lang) {
replaceDetailRouteLanguage(resolvedLanguage)
await loadExplainDetail(request, resolvedLanguage)
return
}
void loadFullDetailTextForLanguage(request, resolvedLanguage, exhibit.value)
}
onLoad(async (options: any = {}) => {
@@ -581,7 +606,11 @@ const replaceDetailRouteLanguage = (lang: AudioLanguage) => {
}
const handleLanguageChange = async (lang: AudioLanguage, options: { syncAudio?: boolean } = {}) => {
if (lang === selectedAudioLanguage.value || languageSwitchLoading.value) return
if (
lang === selectedAudioLanguage.value
|| languageSwitchLoading.value
|| (supportedDetailLanguages.value.length > 0 && !supportedDetailLanguages.value.includes(lang))
) return
const shouldSyncAudio = options.syncAudio !== false && isCurrentDetailAudioTarget.value
const request = detailEntryRequest.value