From a7413ee037725d5ec1cec29274b3eeb2f7d059cc Mon Sep 17 00:00:00 2001 From: lyf <2514544224@qq.com> Date: Fri, 26 Jun 2026 04:17:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AF=BC=E8=A7=88?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=96=87=E6=A1=88=E4=B8=8E=E4=B8=89=E7=BB=B4?= =?UTF-8?q?=E8=B7=AF=E7=BA=BF=E6=98=BE=E7=A4=BA=E8=81=94=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- src/components/map/ThreeMap.vue | 14 + src/components/navigation/GuideMapShell.vue | 116 ++++--- .../navigation/RoutePlannerPanel.vue | 32 +- src/pages/index/index.vue | 297 +++++++++++++++--- src/repositories/SdkGuideRouteRepository.ts | 226 +++++++++++++ 5 files changed, 592 insertions(+), 93 deletions(-) create mode 100644 src/repositories/SdkGuideRouteRepository.ts diff --git a/src/components/map/ThreeMap.vue b/src/components/map/ThreeMap.vue index a072534..4ac3e5c 100644 --- a/src/components/map/ThreeMap.vue +++ b/src/components/map/ThreeMap.vue @@ -48,6 +48,7 @@ import { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue' import * as THREE from 'three' import { GLTFLoader, type GLTF } from 'three/addons/loaders/GLTFLoader.js' +import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js' import { OrbitControls } from 'three/addons/controls/OrbitControls.js' import FloorSwitcher from './FloorSwitcher.vue' import type { @@ -194,6 +195,7 @@ let camera: THREE.PerspectiveCamera | null = null let renderer: THREE.WebGLRenderer | null = null let controls: OrbitControls | null = null let loader: GLTFLoader | null = null +let dracoLoader: DRACOLoader | null = null let activeModel: THREE.Object3D | null = null let poiGroup: THREE.Group | null = null let routeGroup: THREE.Group | null = null @@ -682,6 +684,9 @@ const initThree = async () => { syncControlInteractionOptions() loader = new GLTFLoader() + dracoLoader = new DRACOLoader() + dracoLoader.setDecoderPath('/static/three/draco/') + loader.setDRACOLoader(dracoLoader) poiGroup = new THREE.Group() poiGroup.name = 'GuideModelPOI' scene.add(poiGroup) @@ -2298,6 +2303,8 @@ const disposeScene = () => { scene = null camera = null loader = null + dracoLoader?.dispose() + dracoLoader = null poiGroup = null routeGroup = null @@ -2321,6 +2328,7 @@ defineExpose({ queueTargetFocus(request) }, clearSelection: clearMapSelection, + clearRoute: clearRoutePreview, clearNavigation: () => clearMapSelection(false), disableAutoSwitchTemporarily }) @@ -2346,6 +2354,12 @@ watch(() => [props.routePreview, props.showRoute], () => { deep: true }) +watch(() => props.initialView, (newView) => { + if (newView === 'floor' || newView === 'multi') { + activeView.value = newView + } +}) + onMounted(() => { init3DScene() }) diff --git a/src/components/navigation/GuideMapShell.vue b/src/components/navigation/GuideMapShell.vue index 2d3b975..621c4ec 100644 --- a/src/components/navigation/GuideMapShell.vue +++ b/src/components/navigation/GuideMapShell.vue @@ -3,25 +3,14 @@