This commit is contained in:
@@ -449,6 +449,7 @@ let launchOverlayFallbackTimer: ReturnType<typeof setTimeout> | null = null
|
||||
let launchOverlayFadeTimer: ReturnType<typeof setTimeout> | null = null
|
||||
let launchOverlayHideDelayTimer: ReturnType<typeof setTimeout> | null = null
|
||||
let launchOverlayStartedAt = 0
|
||||
let launchOverlayRunId = 0
|
||||
|
||||
const clearLaunchTimers = () => {
|
||||
if (launchOverlayFallbackTimer) {
|
||||
@@ -470,11 +471,13 @@ const clearLaunchTimers = () => {
|
||||
const completeHideLaunchOverlay = () => {
|
||||
if (!launchOverlayVisible.value) return
|
||||
|
||||
const runId = launchOverlayRunId
|
||||
launchProgress.value = 100
|
||||
launchOverlayLeaving.value = true
|
||||
clearLaunchTimers()
|
||||
|
||||
launchOverlayFadeTimer = setTimeout(() => {
|
||||
if (runId !== launchOverlayRunId) return
|
||||
launchOverlayVisible.value = false
|
||||
launchOverlayLeaving.value = false
|
||||
launchOverlayFadeTimer = null
|
||||
@@ -489,7 +492,9 @@ const hideLaunchOverlay = () => {
|
||||
|
||||
if (waitMs > 0) {
|
||||
if (launchOverlayHideDelayTimer) clearTimeout(launchOverlayHideDelayTimer)
|
||||
const runId = launchOverlayRunId
|
||||
launchOverlayHideDelayTimer = setTimeout(() => {
|
||||
if (runId !== launchOverlayRunId) return
|
||||
launchOverlayHideDelayTimer = null
|
||||
completeHideLaunchOverlay()
|
||||
}, waitMs)
|
||||
@@ -504,21 +509,18 @@ const shouldWaitForLaunchModel = () => (
|
||||
&& is3DMode.value
|
||||
)
|
||||
|
||||
const continueLaunchWithoutInitialModel = (reason: string, event?: { view: GuideIndoorView; floorId?: string; message?: string; elapsedMs?: number }) => {
|
||||
// The launch overlay is independent from the selected map business mode. Releasing it
|
||||
// must leave ThreeMap mounted so its loading/error/retry lifecycle can continue.
|
||||
const releaseLaunchOverlayWithoutInitialModel = (reason: string, event?: { view: GuideIndoorView; floorId?: string; message?: string; elapsedMs?: number }) => {
|
||||
if (!launchOverlayVisible.value || launchOverlayLeaving.value) return
|
||||
|
||||
console.warn('首页前置加载页未等待初始三维模型,已进入馆外导览:', {
|
||||
console.warn('首页前置加载页未等待初始三维模型,已关闭启动遮罩:', {
|
||||
reason,
|
||||
event
|
||||
})
|
||||
|
||||
launchInitialModelSettled.value = true
|
||||
launchProgress.value = Math.max(launchProgress.value, 96)
|
||||
is3DMode.value = false
|
||||
guideOutdoorState.value = 'home'
|
||||
selectedGuidePoi.value = null
|
||||
isPoiCardCollapsed.value = false
|
||||
isSimulatingRoute.value = false
|
||||
hideLaunchOverlay()
|
||||
}
|
||||
|
||||
@@ -526,6 +528,7 @@ const startLaunchOverlay = () => {
|
||||
if (!launchOverlayVisible.value) return
|
||||
|
||||
clearLaunchTimers()
|
||||
const runId = ++launchOverlayRunId
|
||||
launchInitialModelSettled.value = false
|
||||
launchOverlayStartedAt = Date.now()
|
||||
launchProgress.value = shouldWaitForLaunchModel() ? 8 : 68
|
||||
@@ -535,8 +538,9 @@ const startLaunchOverlay = () => {
|
||||
: launchOverlayNonGuideTimeoutMs
|
||||
|
||||
launchOverlayFallbackTimer = setTimeout(() => {
|
||||
if (runId !== launchOverlayRunId) return
|
||||
if (shouldWaitForLaunchModel() && !launchInitialModelSettled.value) {
|
||||
continueLaunchWithoutInitialModel('timeout')
|
||||
releaseLaunchOverlayWithoutInitialModel('timeout')
|
||||
return
|
||||
}
|
||||
hideLaunchOverlay()
|
||||
@@ -553,7 +557,7 @@ const settleLaunchOverlayByModel = (status: 'ready' | 'failed', event?: { view:
|
||||
launchInitialModelSettled.value = true
|
||||
|
||||
if (status === 'failed') {
|
||||
continueLaunchWithoutInitialModel('failed', event)
|
||||
releaseLaunchOverlayWithoutInitialModel('failed', event)
|
||||
return
|
||||
} else {
|
||||
launchProgress.value = 100
|
||||
@@ -885,6 +889,7 @@ onMounted(() => {
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
launchOverlayRunId += 1
|
||||
clearLaunchTimers()
|
||||
|
||||
if (indoorGestureHintTimer) {
|
||||
|
||||
Reference in New Issue
Block a user