@@ -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]
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user