@@ -382,6 +382,7 @@ const topTabFromHash = () => {
|
||||
const launchOverlayMinDisplayMs = 700
|
||||
const launchOverlayGuideTimeoutMs = 12000
|
||||
const launchOverlayNonGuideTimeoutMs = 900
|
||||
const launchOverlayDefaultText = '正在进入自然导览'
|
||||
|
||||
const shouldShowLaunchOverlay = () => {
|
||||
if (typeof window === 'undefined') return false
|
||||
@@ -407,7 +408,7 @@ const currentTab = ref<GuideTopTab>(initialTopTab())
|
||||
const launchOverlayVisible = ref(shouldShowLaunchOverlay())
|
||||
const launchOverlayLeaving = ref(false)
|
||||
const launchProgress = ref(8)
|
||||
const launchLoadingText = ref('正在初始化三维场景')
|
||||
const launchLoadingText = ref(launchOverlayDefaultText)
|
||||
const launchInitialModelSettled = ref(false)
|
||||
const launchOverlayRecoverable = ref(false)
|
||||
const launchImageLoaded = ref(false)
|
||||
@@ -499,6 +500,26 @@ const shouldWaitForLaunchModel = () => (
|
||||
&& is3DMode.value
|
||||
)
|
||||
|
||||
const continueLaunchWithoutInitialModel = (reason: string, event?: { view: GuideIndoorView; floorId?: string; message?: string; elapsedMs?: number }) => {
|
||||
if (!launchOverlayVisible.value || launchOverlayLeaving.value) return
|
||||
|
||||
console.warn('首页前置加载页未等待初始三维模型,已进入馆外导览:', {
|
||||
reason,
|
||||
event
|
||||
})
|
||||
|
||||
launchInitialModelSettled.value = true
|
||||
launchOverlayRecoverable.value = false
|
||||
launchLoadingText.value = launchOverlayDefaultText
|
||||
launchProgress.value = Math.max(launchProgress.value, 96)
|
||||
is3DMode.value = false
|
||||
guideOutdoorState.value = 'home'
|
||||
selectedGuidePoi.value = null
|
||||
isPoiCardCollapsed.value = false
|
||||
isSimulatingRoute.value = false
|
||||
hideLaunchOverlay()
|
||||
}
|
||||
|
||||
const startLaunchOverlay = () => {
|
||||
if (!launchOverlayVisible.value) return
|
||||
|
||||
@@ -507,9 +528,7 @@ const startLaunchOverlay = () => {
|
||||
launchOverlayRecoverable.value = false
|
||||
launchOverlayStartedAt = Date.now()
|
||||
launchProgress.value = shouldWaitForLaunchModel() ? 8 : 68
|
||||
launchLoadingText.value = shouldWaitForLaunchModel()
|
||||
? '正在初始化三维场景'
|
||||
: '正在进入自然导览'
|
||||
launchLoadingText.value = launchOverlayDefaultText
|
||||
|
||||
const timeoutMs = shouldWaitForLaunchModel()
|
||||
? launchOverlayGuideTimeoutMs
|
||||
@@ -517,10 +536,7 @@ const startLaunchOverlay = () => {
|
||||
|
||||
launchOverlayFallbackTimer = setTimeout(() => {
|
||||
if (shouldWaitForLaunchModel() && !launchInitialModelSettled.value) {
|
||||
launchOverlayRecoverable.value = true
|
||||
launchProgress.value = Math.min(96, Math.max(launchProgress.value, 92))
|
||||
launchLoadingText.value = '三维场景加载较慢,仍在等待模型就绪'
|
||||
console.warn(`首页前置加载页等待模型超过 ${timeoutMs}ms,继续等待真实模型 ready`)
|
||||
continueLaunchWithoutInitialModel('timeout')
|
||||
return
|
||||
}
|
||||
hideLaunchOverlay()
|
||||
@@ -532,7 +548,7 @@ const handleInitialModelProgress = (event: { progress: number; message: string;
|
||||
|
||||
launchOverlayRecoverable.value = false
|
||||
launchProgress.value = Math.min(99, Math.max(8, event.progress))
|
||||
launchLoadingText.value = event.message || '正在加载三维场景'
|
||||
launchLoadingText.value = launchOverlayDefaultText
|
||||
}
|
||||
|
||||
const settleLaunchOverlayByModel = (status: 'ready' | 'failed', event?: { view: GuideIndoorView; floorId?: string; message?: string; elapsedMs?: number }) => {
|
||||
@@ -540,13 +556,11 @@ const settleLaunchOverlayByModel = (status: 'ready' | 'failed', event?: { view:
|
||||
launchOverlayRecoverable.value = status === 'failed'
|
||||
|
||||
if (status === 'failed') {
|
||||
launchProgress.value = Math.min(launchProgress.value, 96)
|
||||
launchLoadingText.value = event?.message || '三维场景加载失败'
|
||||
console.warn('首页前置加载页收到初始模型加载失败,等待用户选择重试或进入降级首页:', event)
|
||||
continueLaunchWithoutInitialModel('failed', event)
|
||||
return
|
||||
} else {
|
||||
launchProgress.value = 100
|
||||
launchLoadingText.value = '三维场景已就绪'
|
||||
launchLoadingText.value = launchOverlayDefaultText
|
||||
console.log('首页前置加载页收到初始模型加载完成:', event)
|
||||
}
|
||||
|
||||
@@ -571,6 +585,10 @@ const handleLaunchImageError = () => {
|
||||
|
||||
const handleLaunchContinue = () => {
|
||||
launchOverlayRecoverable.value = false
|
||||
if (shouldWaitForLaunchModel() && !launchInitialModelSettled.value) {
|
||||
continueLaunchWithoutInitialModel('manual')
|
||||
return
|
||||
}
|
||||
hideLaunchOverlay()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user