统一楼层视觉基线与详情返回复位
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
lyf
2026-07-14 23:17:33 +08:00
parent 84fbbc0694
commit c08e1afe85
6 changed files with 274 additions and 34 deletions

View File

@@ -18,6 +18,12 @@ export type GuideModelInitialState = Readonly<{
autoFloorSwitchActive: boolean
}>
export type PoiDetailReturnContext = Readonly<{
floorId: string
resetMode: 'floor-baseline'
requestId: number
}>
// The object is frozen so callers cannot accidentally turn a captured baseline into live state.
export const GUIDE_MODEL_INITIAL_STATE: GuideModelInitialState = Object.freeze({
mode: '3d',
@@ -38,8 +44,9 @@ export const GUIDE_MODEL_INITIAL_STATE: GuideModelInitialState = Object.freeze({
})
const initialState = ref<GuideModelInitialState>(GUIDE_MODEL_INITIAL_STATE)
const pendingModelResetAfterPoiDetail = ref(false)
const pendingModelResetAfterPoiDetail = ref<PoiDetailReturnContext | null>(null)
const requestGeneration = ref(0)
let poiDetailRequestId = 0
export const useGuideModelState = () => {
const initializeModel = (floorId: string) => {
@@ -52,18 +59,24 @@ export const useGuideModelState = () => {
return initialState.value
}
const beginPoiDetailReturn = () => {
pendingModelResetAfterPoiDetail.value = true
const beginPoiDetailReturn = (floorId: string) => {
const context = Object.freeze({
floorId,
resetMode: 'floor-baseline' as const,
requestId: ++poiDetailRequestId
})
pendingModelResetAfterPoiDetail.value = context
return context
}
const cancelPoiDetailReturn = () => {
pendingModelResetAfterPoiDetail.value = false
pendingModelResetAfterPoiDetail.value = null
}
const consumePoiDetailReturn = () => {
if (!pendingModelResetAfterPoiDetail.value) return false
pendingModelResetAfterPoiDetail.value = false
return true
const context = pendingModelResetAfterPoiDetail.value
pendingModelResetAfterPoiDetail.value = null
return context
}
// All async focus/floor operations compare this generation before committing.