feat: refine guide explain UX and QA docs

This commit is contained in:
lyf
2026-06-12 17:20:39 +08:00
parent 2055b13b90
commit a7c1879f60
27 changed files with 2831 additions and 1362 deletions

View File

@@ -83,10 +83,13 @@
<view v-else-if="currentTab === 'explain'" class="explain-page">
<ExplainList
:exhibits="explainExhibits"
:cards="explainExhibits"
:loading="explainLoading"
:error="explainError"
@exhibit-click="handleExplainExhibitClick"
@featured-click="handleExplainFeaturedClick"
@audio-click="handleAudioClick"
@location-click="handleExplainLocationClick"
/>
<FloatingAudioButton
@@ -130,7 +133,7 @@ import {
explainUseCase
} from '@/usecases/explainUseCase'
import {
toExplainExhibitViewModel
toExplainCardViewModel
} from '@/view-models/explainViewModels'
import type {
MuseumFloor
@@ -168,6 +171,8 @@ const showAudioPlayer = ref(false)
const isAudioPlaying = ref(false)
const currentAudio = ref<AudioItem | null>(null)
const explainExhibits = ref<Exhibit[]>([])
const explainLoading = ref(false)
const explainError = ref('')
// 选中的标记详情
interface MarkerDetail {
@@ -227,12 +232,17 @@ const loadGuideFloors = async () => {
}
const loadExplainExhibits = async () => {
explainLoading.value = true
explainError.value = ''
try {
const exhibits = await explainUseCase.listExhibits()
explainExhibits.value = exhibits.map(toExplainExhibitViewModel)
explainExhibits.value = exhibits.map(toExplainCardViewModel)
} catch (error) {
console.error('加载讲解内容失败:', error)
explainError.value = '讲解内容加载失败,请稍后重试'
explainExhibits.value = []
} finally {
explainLoading.value = false
}
}
@@ -442,7 +452,7 @@ const handleAudioClick = async (exhibit: Exhibit) => {
if (!selection?.playable || !selection.media?.url) {
uni.showToast({
title: selection?.unavailableMessage || exhibit.audioUnavailableReason || '该展项暂无讲解音频',
title: selection?.unavailableMessage || exhibit.audioStatusText || '该讲解暂无可播放音频',
icon: 'none'
})
return
@@ -465,7 +475,7 @@ const handleFloatingButtonClick = () => {
showAudioPlayer.value = true
} else {
uni.showToast({
title: '请先选择一个展品',
title: '请先选择一个讲解内容',
icon: 'none'
})
}
@@ -496,6 +506,20 @@ const handleExplainExhibitClick = (exhibit: Exhibit) => {
const handleExplainFeaturedClick = async (exhibit: Exhibit) => {
await handleAudioClick(exhibit)
}
const handleExplainLocationClick = (exhibit: Exhibit) => {
if (!exhibit.poiId) {
uni.showToast({
title: '该讲解暂无三维位置数据',
icon: 'none'
})
return
}
uni.navigateTo({
url: `/pages/route/detail?facilityId=${encodeURIComponent(exhibit.poiId)}&target=${encodeURIComponent(exhibit.title)}&state=preview`
})
}
</script>
<style scoped lang="scss">