@@ -5,7 +5,7 @@
|
|||||||
<view v-if="isLoading && !loadError" class="loading-overlay">
|
<view v-if="isLoading && !loadError" class="loading-overlay">
|
||||||
<view class="loading-content">
|
<view class="loading-content">
|
||||||
<view class="loading-spinner"></view>
|
<view class="loading-spinner"></view>
|
||||||
<text class="loading-text">{{ loadingMessage }}</text>
|
<text class="loading-text">{{ loadingDisplayMessage }}</text>
|
||||||
<view class="loading-progress">
|
<view class="loading-progress">
|
||||||
<view class="loading-bar" :style="{ width: `${loadingProgress}%` }"></view>
|
<view class="loading-bar" :style="{ width: `${loadingProgress}%` }"></view>
|
||||||
</view>
|
</view>
|
||||||
@@ -14,8 +14,8 @@
|
|||||||
|
|
||||||
<view v-else-if="loadError" class="loading-overlay error-overlay">
|
<view v-else-if="loadError" class="loading-overlay error-overlay">
|
||||||
<view class="loading-content error-content">
|
<view class="loading-content error-content">
|
||||||
<text class="error-title">3D 模型加载失败</text>
|
<text class="error-title">{{ modelLoadErrorTitle }}</text>
|
||||||
<text class="error-text">{{ loadingMessage }}</text>
|
<text class="error-text">{{ modelLoadErrorMessage }}</text>
|
||||||
<view class="retry-btn" @tap="retryLoad">
|
<view class="retry-btn" @tap="retryLoad">
|
||||||
<text class="retry-text">重新加载</text>
|
<text class="retry-text">重新加载</text>
|
||||||
</view>
|
</view>
|
||||||
@@ -349,6 +349,12 @@ const loadingProgress = ref(0)
|
|||||||
const loadingMessage = ref('正在读取馆内导览资源...')
|
const loadingMessage = ref('正在读取馆内导览资源...')
|
||||||
const activeView = ref<ViewMode>(props.initialView)
|
const activeView = ref<ViewMode>(props.initialView)
|
||||||
const currentFloor = ref(props.initialFloorId)
|
const currentFloor = ref(props.initialFloorId)
|
||||||
|
const loadingDisplayMessage = '正在加载馆内三维场景'
|
||||||
|
const modelLoadErrorTitle = '馆内三维场景加载失败'
|
||||||
|
const modelLoadErrorMessage = '可能是网络原因,请重新加载。'
|
||||||
|
const setFriendlyModelLoadError = () => {
|
||||||
|
setProgress(0, modelLoadErrorMessage)
|
||||||
|
}
|
||||||
const selectedPOI = ref<RenderPoi | null>(null)
|
const selectedPOI = ref<RenderPoi | null>(null)
|
||||||
const activeFocusPoiId = ref('')
|
const activeFocusPoiId = ref('')
|
||||||
const floorIndex = ref<FloorIndexItem[]>([])
|
const floorIndex = ref<FloorIndexItem[]>([])
|
||||||
@@ -3188,7 +3194,6 @@ const checkAutoSwitch = (options: { forceOverviewEntry?: boolean } = {}) => {
|
|||||||
detachPoiBeforeLoad: true
|
detachPoiBeforeLoad: true
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
'单楼层模型加载失败',
|
|
||||||
{ showLoading: !hasSceneToKeep && !canLoadFloorSilently(targetFloorId) }
|
{ showLoading: !hasSceneToKeep && !canLoadFloorSilently(targetFloorId) }
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
@@ -3249,15 +3254,13 @@ const checkAutoSwitch = (options: { forceOverviewEntry?: boolean } = {}) => {
|
|||||||
trigger: 'zoom-out',
|
trigger: 'zoom-out',
|
||||||
distance
|
distance
|
||||||
},
|
},
|
||||||
loadOverview,
|
loadOverview
|
||||||
'建筑外观模型加载失败'
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const runAutoSwitchLoad = async (
|
const runAutoSwitchLoad = async (
|
||||||
event: { from: 'overview' | 'floor'; to: 'overview' | 'floor'; trigger: 'zoom-in' | 'zoom-out'; distance: number },
|
event: { from: 'overview' | 'floor'; to: 'overview' | 'floor'; trigger: 'zoom-in' | 'zoom-out'; distance: number },
|
||||||
loadTask: () => Promise<unknown>,
|
loadTask: () => Promise<unknown>,
|
||||||
fallbackMessage: string,
|
|
||||||
options: { showLoading?: boolean } = {}
|
options: { showLoading?: boolean } = {}
|
||||||
) => {
|
) => {
|
||||||
const showLoading = options.showLoading ?? true
|
const showLoading = options.showLoading ?? true
|
||||||
@@ -3278,7 +3281,7 @@ const runAutoSwitchLoad = async (
|
|||||||
console.error('馆内 3D 自动视角切换失败:', error)
|
console.error('馆内 3D 自动视角切换失败:', error)
|
||||||
loadError.value = true
|
loadError.value = true
|
||||||
isLoading.value = false
|
isLoading.value = false
|
||||||
setProgress(0, error instanceof Error ? error.message : fallbackMessage)
|
setFriendlyModelLoadError()
|
||||||
} finally {
|
} finally {
|
||||||
isAutoSwitchLocked = false
|
isAutoSwitchLocked = false
|
||||||
}
|
}
|
||||||
@@ -4854,7 +4857,7 @@ const focusTargetPoi = async (request: TargetPoiFocusRequest) => {
|
|||||||
console.error('目标 POI 聚焦失败:', error)
|
console.error('目标 POI 聚焦失败:', error)
|
||||||
loadError.value = true
|
loadError.value = true
|
||||||
isLoading.value = false
|
isLoading.value = false
|
||||||
setProgress(0, error instanceof Error ? error.message : '目标位置聚焦失败')
|
setFriendlyModelLoadError()
|
||||||
emitTargetFocus(request, 'error', error instanceof Error ? error.message : '目标位置聚焦失败')
|
emitTargetFocus(request, 'error', error instanceof Error ? error.message : '目标位置聚焦失败')
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -4962,7 +4965,7 @@ const init3DScene = async () => {
|
|||||||
loadError.value = true
|
loadError.value = true
|
||||||
isLoading.value = false
|
isLoading.value = false
|
||||||
const message = error instanceof Error ? error.message : '请检查模型资源或网络状态后重试'
|
const message = error instanceof Error ? error.message : '请检查模型资源或网络状态后重试'
|
||||||
setProgress(0, message)
|
setFriendlyModelLoadError()
|
||||||
initialModelSettled = true
|
initialModelSettled = true
|
||||||
emit('initialModelFailed', {
|
emit('initialModelFailed', {
|
||||||
view: activeView.value,
|
view: activeView.value,
|
||||||
@@ -5010,7 +5013,7 @@ const handleFloorChange = async (floorId: string) => {
|
|||||||
console.error('楼层模型加载失败:', error)
|
console.error('楼层模型加载失败:', error)
|
||||||
loadError.value = true
|
loadError.value = true
|
||||||
restoreCommittedFloorPoiLayer()
|
restoreCommittedFloorPoiLayer()
|
||||||
setProgress(0, error instanceof Error ? error.message : '楼层模型加载失败')
|
setFriendlyModelLoadError()
|
||||||
} finally {
|
} finally {
|
||||||
const requestWasSuperseded = modelLoadVersion > previousLoadToken + 1
|
const requestWasSuperseded = modelLoadVersion > previousLoadToken + 1
|
||||||
if (!requestWasSuperseded || floorSwitchRequestedFloorId === requestedFloorId) {
|
if (!requestWasSuperseded || floorSwitchRequestedFloorId === requestedFloorId) {
|
||||||
@@ -5039,7 +5042,7 @@ const showMultiFloor = async () => {
|
|||||||
console.error('多层展示模型加载失败:', error)
|
console.error('多层展示模型加载失败:', error)
|
||||||
loadError.value = true
|
loadError.value = true
|
||||||
isLoading.value = false
|
isLoading.value = false
|
||||||
setProgress(0, error instanceof Error ? error.message : '多层展示模型加载失败')
|
setFriendlyModelLoadError()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user