修复楼层点位展示与楼层匹配

This commit is contained in:
lyf
2026-06-28 00:38:42 +08:00
parent f043c85af0
commit 1ad77fcf48
4 changed files with 135 additions and 20 deletions

View File

@@ -89,6 +89,26 @@ const resolveSgsAssetUrl = (url?: string | null) => {
const sortSgsFloors = (floors: SgsSdkFloorSummaryPayload[]) => [...floors]
.sort((a, b) => Number(a.sortOrder || 0) - Number(b.sortOrder || 0))
const isSharedSgsModelAsset = (
modelUrl: string,
overviewModelUrl: string,
allModelUrls: string[]
) => {
if (!modelUrl) return false
return modelUrl === overviewModelUrl || allModelUrls.filter((url) => url === modelUrl).length > 1
}
const getSgsFloorModelMatchKeys = (floor: SgsSdkFloorSummaryPayload, label: string) => (
[
String(floor.floorId),
floor.floorCode,
floor.floorName,
label
]
.filter((value): value is string => Boolean(value))
)
export interface GuideModelRepository extends GuideModelSource {}
export class StaticGuideModelRepository implements GuideModelRepository {
@@ -144,17 +164,18 @@ export class SgsSdkGuideModelRepository implements GuideModelRepository {
floors.map((floor) => this.provider.getFloorBundle(String(floor.floorId)))
)
const floorAssets: GuideModelFloorAsset[] = floors
const floorModelItems = floors
.map((floor, index) => {
const bundle = bundles[index]
const modelUrl = resolveSgsAssetUrl(bundle.model?.modelUrl || bundle.model?.fallbackModelUrl)
const label = formatSgsFloorLabel(floor.floorCode, floor.floorName)
return {
floorId: String(floor.floorId),
label: formatSgsFloorLabel(floor.floorCode, floor.floorName),
label,
order: Number(floor.sortOrder || 0),
modelUrl,
sharedModelAsset: false
modelMatchKeys: getSgsFloorModelMatchKeys(floor, label)
}
})
.filter((asset) => asset.modelUrl)
@@ -165,7 +186,12 @@ export class SgsSdkGuideModelRepository implements GuideModelRepository {
: null
const overviewModelUrl = resolveSgsAssetUrl(
overviewBundle?.model?.modelUrl || overviewBundle?.model?.fallbackModelUrl
) || floorAssets[0]?.modelUrl || ''
) || floorModelItems[0]?.modelUrl || ''
const floorModelUrls = floorModelItems.map((asset) => asset.modelUrl)
const floorAssets: GuideModelFloorAsset[] = floorModelItems.map((asset) => ({
...asset,
sharedModelAsset: isSharedSgsModelAsset(asset.modelUrl, overviewModelUrl, floorModelUrls)
}))
return {
overviewModelUrl,