修复点位精确匹配并调整加载提示
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
lyf
2026-07-12 22:31:07 +08:00
parent f94af2de4d
commit 8e187d6d4f
3 changed files with 44 additions and 14 deletions

View File

@@ -383,7 +383,7 @@ const topTabFromHash = () => {
const launchOverlayMinDisplayMs = 700
const launchOverlayGuideTimeoutMs = 12000
const launchOverlayNonGuideTimeoutMs = 900
const launchOverlayDefaultText = '正在进入自然导览'
const launchOverlayDefaultText = '正在进入智能导览'
const shouldShowLaunchOverlay = () => {
if (typeof window === 'undefined') return false

View File

@@ -133,13 +133,9 @@ const dedupePoisById = (pois: MuseumPoi[]) => {
const getPoiSpaceIdentity = (poi: MuseumPoi) => poi.sourceSpaceId || poi.spaceId || ''
const getPoiLookupIdentities = (id: string) => {
const normalizedId = id.trim()
return new Set([
normalizedId,
normalizedId.replace(/^(?:hall|space)-/, '')
].filter(Boolean))
}
const getPoiSourceLookupIdentity = (id: string) => (
id.trim().replace(/^(?:hall|space)-/, '')
)
const mergePoiCategories = (...categoryGroups: MuseumCategory[][]) => {
const seenIds = new Set<string>()
@@ -553,12 +549,18 @@ export class SgsSdkGuideRepository implements GuideRepository {
async getPoiById(id: string) {
const pois = await this.searchPois()
const lookupIdentities = getPoiLookupIdentities(id)
return pois.find((poi) => (
lookupIdentities.has(poi.id)
|| lookupIdentities.has(poi.spaceId || '')
|| lookupIdentities.has(poi.sourceSpaceId || '')
))
const normalizedId = id.trim()
const exactPoi = pois.find((poi) => poi.id === normalizedId)
if (exactPoi) return exactPoi
const sourceIdentity = getPoiSourceLookupIdentity(normalizedId)
const sourcePoi = sourceIdentity
? pois.find((poi) => (
poi.spaceId === sourceIdentity
|| poi.sourceSpaceId === sourceIdentity
))
: undefined
return sourcePoi
|| findPoiByNavIdNameFallback(pois, id)
}

View File

@@ -167,6 +167,34 @@ describe('SgsSdkGuideRepository 点位搜索', () => {
expect(renderPois.some((poi) => poi.id === fallbackTheater?.id)).toBe(true)
})
it('精确空间 ID 与普通点位 ID 同号时不会定位到错误点位', async () => {
vi.spyOn(console, 'warn').mockImplementation(() => undefined)
const provider = createProvider({
getFloorPois: vi.fn().mockResolvedValue([{
...floorPoi,
id: '42',
name: '普通卫生间'
}]),
getFloorSpaces: vi.fn().mockResolvedValue([{
id: '42',
name: '公共空间',
type: 'public_area',
floorId: '101',
boundaryWkt: 'POLYGON((0 0, 8 0, 8 8, 0 8, 0 0))'
}])
})
const repository = new SgsSdkGuideRepository(provider)
await expect(repository.getPoiById('space-42')).resolves.toMatchObject({
id: 'space-42',
name: '公共空间'
})
await expect(repository.getPoiById('42')).resolves.toMatchObject({
id: '42',
name: '普通卫生间'
})
})
it('相同模型对象名不会删除不同稳定 ID 和坐标的普通点位', async () => {
const provider = createProvider({
getFloorSpaces: vi.fn().mockResolvedValue([]),