修复馆内模型初始视图与点位返回复位
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
lyf
2026-07-15 18:20:18 +08:00
parent 1072b25c46
commit 6566d38cb0
11 changed files with 568 additions and 44 deletions

View File

@@ -24,6 +24,11 @@ export type PoiDetailReturnContext = Readonly<{
requestId: number
}>
type GuideModelReadyState = Readonly<{
view: 'overview' | 'floor' | 'multi'
floorId: string
}>
// 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',
@@ -45,12 +50,14 @@ export const GUIDE_MODEL_INITIAL_STATE: GuideModelInitialState = Object.freeze({
const initialState = ref<GuideModelInitialState>(GUIDE_MODEL_INITIAL_STATE)
const pendingModelResetAfterPoiDetail = ref<PoiDetailReturnContext | null>(null)
const confirmedPoiDetailRequestId = ref<number | null>(null)
const requestGeneration = ref(0)
let poiDetailRequestId = 0
export const useGuideModelState = () => {
const initializeModel = (floorId: string) => {
const initializeModel = ({ view, floorId }: GuideModelReadyState) => {
if (initialState.value.defaultActiveFloorId) return initialState.value
if (view !== 'overview' || !floorId.trim()) return initialState.value
initialState.value = Object.freeze({
...GUIDE_MODEL_INITIAL_STATE,
defaultActiveFloorId: floorId,
@@ -66,16 +73,31 @@ export const useGuideModelState = () => {
requestId: ++poiDetailRequestId
})
pendingModelResetAfterPoiDetail.value = context
confirmedPoiDetailRequestId.value = null
return context
}
const cancelPoiDetailReturn = () => {
const confirmPoiDetailReturn = (requestId: number) => {
if (pendingModelResetAfterPoiDetail.value?.requestId !== requestId) return false
confirmedPoiDetailRequestId.value = requestId
return true
}
const cancelPoiDetailReturn = (requestId?: number) => {
if (
requestId !== undefined
&& pendingModelResetAfterPoiDetail.value?.requestId !== requestId
) return false
pendingModelResetAfterPoiDetail.value = null
confirmedPoiDetailRequestId.value = null
return true
}
const consumePoiDetailReturn = () => {
const context = pendingModelResetAfterPoiDetail.value
if (!context || confirmedPoiDetailRequestId.value !== context.requestId) return null
pendingModelResetAfterPoiDetail.value = null
confirmedPoiDetailRequestId.value = null
return context
}
@@ -91,6 +113,7 @@ export const useGuideModelState = () => {
requestGeneration: readonly(requestGeneration),
initializeModel,
beginPoiDetailReturn,
confirmPoiDetailReturn,
cancelPoiDetailReturn,
consumePoiDetailReturn,
invalidatePendingRequests