From 6acceed2099fdcd839238079b9f9ae99c20c615b Mon Sep 17 00:00:00 2001 From: whyzxhnd Date: Fri, 17 Oct 2025 12:21:18 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B5=E5=AD=90=E5=9B=B4=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HandDevice/Home/components/MapControls.vue | 4 +- .../HandDevice/Home/components/OpenLayerMap.vue | 23 ++++++++-- .../Home/components/composables/useMapEvents.ts | 6 +-- .../Home/components/services/fence.service.ts | 27 ++++++----- .../HandDevice/Home/components/types/map.types.ts | 35 +++++++++++--- web/src/views/HandDevice/Home/index.vue | 31 ++++++++++++- web/src/views/gas/fence/FenceForm.vue | 53 +++++++++++++++++----- web/src/views/gas/fence/index.vue | 3 +- 8 files changed, 140 insertions(+), 42 deletions(-) diff --git a/web/src/views/HandDevice/Home/components/MapControls.vue b/web/src/views/HandDevice/Home/components/MapControls.vue index ebec43f..6b366e3 100644 --- a/web/src/views/HandDevice/Home/components/MapControls.vue +++ b/web/src/views/HandDevice/Home/components/MapControls.vue @@ -58,6 +58,8 @@ interface Props { isTrajectoriesActive?: boolean /** 绘制围栏按钮是否激活 */ isDrawFencesActive?: boolean + /** 是否隐藏顶部面板 */ + hideTopPanel?: boolean } interface Emits { @@ -75,7 +77,7 @@ withDefaults(defineProps(), { isMarkersActive: false, isFencesActive: false, isTrajectoriesActive: false, - isDrawFencesActive: false + isDrawFencesActive: false, }) defineEmits() diff --git a/web/src/views/HandDevice/Home/components/OpenLayerMap.vue b/web/src/views/HandDevice/Home/components/OpenLayerMap.vue index e8f2615..3211cd1 100644 --- a/web/src/views/HandDevice/Home/components/OpenLayerMap.vue +++ b/web/src/views/HandDevice/Home/components/OpenLayerMap.vue @@ -24,7 +24,7 @@ @time-change="setTrajectoryTime" @time-range-change="setTrajectoryTimeRange" /> -
+
@@ -106,12 +106,18 @@ const props = withDefaults(defineProps(), { showTrajectories: true, showMarkers: true, showFences: true, - showDrawFences: true + showDrawFences: true, + hideTopPanel: false }) + +const emit = defineEmits<{ + (e: 'fence-draw-complete', coordinates: [number, number][]): void + (e: 'refresh-fences'): void +}>() // 响应式状态 const showMarkers = ref(props.showMarkers) const showTrajectories = ref(false) -const showFences = ref(false) +const showFences = ref(props.showFences) const showDrawFences = ref(false) const mapContainerRef = ref(null) const handDetectorStore = useHandDetectorStore() @@ -258,10 +264,17 @@ const handleFenceDrawComplete = (coordinates: [number, number][]) => { return } console.log('围栏绘制完成:', coordinates) + emit('fence-draw-complete', coordinates) clearFenceDrawLayer() // 重置绘制状态 showDrawFences.value = false } + +const refreshFences = () => { + if (isMapInitialized) { + services.fenceService?.setFenceData(props.fences || []) + } +} // 监听 markers props 变化 watch( () => props.markers, @@ -278,11 +291,13 @@ onMounted(() => { initMap() }, 100) }) + +defineExpose({ refreshFences }) + diff --git a/web/src/views/gas/fence/FenceForm.vue b/web/src/views/gas/fence/FenceForm.vue index 033c451..6360edf 100644 --- a/web/src/views/gas/fence/FenceForm.vue +++ b/web/src/views/gas/fence/FenceForm.vue @@ -1,5 +1,5 @@