修复馆内三维点位显示异常
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
lyf
2026-07-04 23:42:05 +08:00
parent f03783201d
commit 39f1fc1198
5 changed files with 629 additions and 47 deletions

View File

@@ -31,8 +31,8 @@ import type {
} from '@/data/providers/sgsSdkApiProvider'
const defaultCategory: MuseumCategory = {
id: 'operation_experience',
label: '导览点位',
id: 'poi',
label: '点位',
iconType: 'poi'
}
@@ -55,9 +55,24 @@ const hallEntranceCategory: MuseumCategory = {
}
const categoryBySgsType: Record<string, MuseumCategory & { accessible?: boolean }> = {
toilet: {
id: 'basic_service_facility',
label: '卫生间',
poi: {
id: 'poi',
label: '点位',
iconType: 'poi'
},
device_terminal: {
id: 'poi',
label: '点位',
iconType: 'poi'
},
operation_experience: {
id: 'operation_experience',
label: '导览点位',
iconType: 'poi'
},
toilet: {
id: 'basic_service_facility',
label: '卫生间',
iconType: 'toilet'
},
accessible_toilet: {
@@ -412,6 +427,10 @@ const categoryFor = (poi: SgsPoiPayload): MuseumCategory & { accessible?: boolea
}
}
if (String(poi.poiGroup || '').toUpperCase() === 'OTHER') {
return categoryBySgsType[normalizedType || ''] || defaultCategory
}
if (normalizedType && categoryBySgsType[normalizedType]) {
return categoryBySgsType[normalizedType]
}

View File

@@ -168,24 +168,75 @@ const parseJsonPayload = <T>(payload: unknown): T => {
return payload as T
}
const getNow = () => (
typeof performance !== 'undefined' && typeof performance.now === 'function'
? performance.now()
: Date.now()
)
const isStaticNavDiagnosticsEnabled = () => {
if (!import.meta.env.DEV) return false
if (typeof window === 'undefined') return true
const diagnosticsWindow = window as unknown as {
__GUIDE_3D_MODEL_DIAGNOSTICS__?: boolean
}
return diagnosticsWindow.__GUIDE_3D_MODEL_DIAGNOSTICS__ !== false
}
const logStaticNavDiagnostic = (
event: 'request-json' | 'request-json-complete' | 'request-json-failed',
payload: Record<string, unknown>
) => {
if (!isStaticNavDiagnosticsEnabled()) return
console.debug(`[StaticNavAssetsProvider] ${event}`, payload)
}
const requestJson = <T>(url: string): Promise<T> => new Promise((resolve, reject) => {
const startedAt = getNow()
logStaticNavDiagnostic('request-json', { url })
uni.request({
url,
method: 'GET',
success: (response) => {
const statusCode = Number(response.statusCode || 0)
if (statusCode < 200 || statusCode >= 300) {
logStaticNavDiagnostic('request-json-failed', {
url,
statusCode,
elapsedMs: Math.round(getNow() - startedAt)
})
reject(new Error(`导览资源读取失败: ${statusCode} ${url}`))
return
}
try {
resolve(parseJsonPayload<T>(response.data))
const data = parseJsonPayload<T>(response.data)
logStaticNavDiagnostic('request-json-complete', {
url,
statusCode,
elapsedMs: Math.round(getNow() - startedAt)
})
resolve(data)
} catch (error) {
logStaticNavDiagnostic('request-json-failed', {
url,
statusCode,
elapsedMs: Math.round(getNow() - startedAt),
error: error instanceof Error ? error.message : String(error)
})
reject(error)
}
},
fail: reject
fail: (error) => {
logStaticNavDiagnostic('request-json-failed', {
url,
elapsedMs: Math.round(getNow() - startedAt),
error: error instanceof Error ? error.message : String(error)
})
reject(error)
}
})
})