From e50196bff10f0196307b2567ed6c0829eadd8ff6 Mon Sep 17 00:00:00 2001 From: wujingjing <gersonwu@qq.com> Date: 星期一, 10 二月 2025 12:12:25 +0800 Subject: [PATCH] 设备显示隐藏 --- src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/Map.vue | 7 --- src/model/map/OLMap.ts | 67 ++++++++++++++++++++++++++++----- src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/panelTool/ThemeControl.vue | 8 +--- src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/LayerControl.vue | 12 ----- src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/panelTool/LayerControl.vue | 4 +- src/components/chat/smallChat/index.vue | 15 ++++++- src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/BasicMap.vue | 5 -- 7 files changed, 77 insertions(+), 41 deletions(-) diff --git a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/BasicMap.vue b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/BasicMap.vue index ac47e38..ee1ac3e 100644 --- a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/BasicMap.vue +++ b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/BasicMap.vue @@ -34,7 +34,7 @@ </div> </div> </div> - <LayerControl v-if="olMap" :olMap="olMap" class="absolute top-3 left-3 z-10" /> + <!-- <LayerControl v-if="olMap" :olMap="olMap" class="absolute top-3 left-3 z-10" /> --> <!-- <PropertyPanel class="absolute top-14 left-10 z-14"></PropertyPanel> --> <PanelTool @@ -93,14 +93,12 @@ data: any; config?: { sourceType: GaoDeSourceType; - markerIsVisible: boolean; }; isFullscreen: boolean; }>(), { config: () => ({ sourceType: GaoDeSourceType.Vector, - markerIsVisible: true, }), } ); @@ -457,7 +455,6 @@ olMap.value = new OLMap({ container: containerRef.value, sourceType: props.config?.sourceType, - markerIsVisible: props.config?.markerIsVisible, }); addMarkerLayer(); diff --git a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/LayerControl.vue b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/LayerControl.vue index 677c237..fd70f7b 100644 --- a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/LayerControl.vue +++ b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/LayerControl.vue @@ -109,7 +109,6 @@ { id: ROOT_OVERLAY_TYPE.Marker, label: '璁惧', - checked: props.olMap.markerIsVisible.value, }, ]); const initTreeChecked = () => { @@ -131,16 +130,7 @@ }; let isHumanCheckTrigger = false; -watch( - () => props.olMap.markerIsVisible.value, - (val) => { - if (isHumanCheckTrigger) { - isHumanCheckTrigger = false; - return; - } - setTreeChecked(val); - } -); + const handleNodeClick = (data: any, node: any) => { if (data.id === ROOT_OVERLAY_TYPE.Marker) { diff --git a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/Map.vue b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/Map.vue index 9b59df8..52d3e07 100644 --- a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/Map.vue +++ b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/Map.vue @@ -25,7 +25,6 @@ <div v-if="isRenderFullscreen" v-show="isFullscreen" class="absolute inset-0 z-50 w-full h-full"> <BasicMap ref="fullScreenMapRef" - :config="fullScreenMapConfig" :isFullscreen="true" class="h-full" :data="data" @@ -87,10 +86,7 @@ } }; -const fullScreenMapConfig = ref({ - sourceType: GaoDeSourceType.Vector, - markerIsVisible: true, -}); + // 鍒囨崲鍏ㄥ睆 const toggleFullScreen = async () => { isFullscreen.value = !isFullscreen.value; @@ -99,7 +95,6 @@ if (isFullscreen.value) { const config = normalMapRef.value.olMap.getConfig(); if (!isRenderFullscreen.value) { - fullScreenMapConfig.value = config; isRenderFullscreen.value = true; } else { // fullScreenMapRef.value.olMap.setConfig(config); diff --git a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/panelTool/LayerControl.vue b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/panelTool/LayerControl.vue index 740dbac..158a571 100644 --- a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/panelTool/LayerControl.vue +++ b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/panelTool/LayerControl.vue @@ -51,7 +51,7 @@ const checkedKeys = node.checkedKeys; isHumanCheckTrigger = true; travelTree(layerInfo.value, (layer) => { - if (layer.type === 'layer') { + if (layer.type === 'layer' || layer.type === 'equip') { const id = layer.id; if (!checkedKeys.includes(id)) { layer.isVisible = false; @@ -90,7 +90,7 @@ } const keys = []; travelTree(val, (item) => { - if (item.type === 'layer') { + if (item.type === 'layer'|| item.type === 'equip') { if (item.isVisible) { keys.push(item.id); } diff --git a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/panelTool/ThemeControl.vue b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/panelTool/ThemeControl.vue index 635553f..33bde66 100644 --- a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/panelTool/ThemeControl.vue +++ b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/map/panelTool/ThemeControl.vue @@ -377,9 +377,7 @@ return styles; }; - const allLayers = props.olMap.layerInfo.value.reduce((preVal, curVal) => { - return preVal.concat(curVal.children.map((item) => item)); - }, []); + const allLayers = props.olMap.getAllLayers(); for (const item of allLayers) { if (props.olMap?.unsupportedLayers.includes(item.id)) { continue; @@ -399,9 +397,7 @@ const ids = allIds.join(','); if (!ids) { - const allLayers = props.olMap.layerInfo.value.reduce((preVal, curVal) => { - return preVal.concat(curVal.children.map((item) => item.model)); - }, []); + const allLayers = props.olMap.getAllLayerModels(); for (const item of allLayers) { const originStyle = item.get('originStyle'); originStyle && item.setStyle(originStyle); diff --git a/src/components/chat/smallChat/index.vue b/src/components/chat/smallChat/index.vue index 15bd148..f8b0821 100644 --- a/src/components/chat/smallChat/index.vue +++ b/src/components/chat/smallChat/index.vue @@ -293,10 +293,21 @@ break; case '鏄剧ず璁惧': - props.olMap.toggleMarkerOverlayVisible(true); + const equipOverlay = props.olMap.getEquipOverlay(); + if (equipOverlay) { + equipOverlay.isVisible = true; + // 寮哄埗瑙﹀彂鏇存柊 + props.olMap.layerInfo.value = props.olMap.layerInfo.value.concat([]) + } break; case '闅愯棌璁惧': - props.olMap.toggleMarkerOverlayVisible(false); + const equipOverlay1 = props.olMap.getEquipOverlay(); + if (equipOverlay1) { + equipOverlay1.isVisible = false; + // 寮哄埗瑙﹀彂鏇存柊 + props.olMap.layerInfo.value = props.olMap.layerInfo.value.concat([]) + + } break; case '鑱氱劍璁惧': props.olMap.adjustViewToMarkers(); diff --git a/src/model/map/OLMap.ts b/src/model/map/OLMap.ts index 783d561..c9cbde8 100644 --- a/src/model/map/OLMap.ts +++ b/src/model/map/OLMap.ts @@ -61,7 +61,6 @@ }; type MapConfig = { sourceType: GaoDeSourceType; - markerIsVisible: boolean; }; type OLEventType = 'blackClick' | 'featureChange' | 'featureHoverChange'; @@ -91,7 +90,6 @@ themeInfo = ref([] as any[]); activeSourceType: Ref<GaoDeSourceType> = ref(GaoDeSourceType.Vector); - markerIsVisible: Ref<boolean> = ref(true); interactLayer: VectorLayer<VectorSource<Feature<Geometry>>, Feature<Geometry>> = null; /** @description 褰撳墠婵�娲荤姸鎬� feature */ @@ -126,13 +124,12 @@ } constructor(options: OLMapOptions) { - const { container, view, sourceType, markerIsVisible } = defaultsDeep(options, { + const { container, view, sourceType } = defaultsDeep(options, { view: { center: [13247019.404399557, 4721671.572580107], zoom: 8, }, sourceType: GaoDeSourceType.Vector, - markerIsVisible: true, } as OLMapOptions) as OLMapOptions; this.source = new XYZ({ crossOrigin: 'anonymous', @@ -153,7 +150,6 @@ interactions: olDefaults({ doubleClickZoom: false }), }); this.activeSourceType.value = sourceType; - this.markerIsVisible.value = markerIsVisible; this.applySourceType(this.activeSourceType.value); this.listenMapClick(); this.addBasicControl(); @@ -356,6 +352,24 @@ this.adjustViewToOverlays(markers); } + + checkEquipIsShow() { + for (const item of this.layerInfo.value) { + if (item.id === 'equip') { + return item.isVisible; + } + } + return false; + } + + getEquipOverlay() { + for (const item of this.layerInfo.value) { + if (item.type === 'equip') { + return item; + } + + } + } createEleOverlay(dom: string | HTMLElement, position = [0, 0]) { const ele = typeof dom === 'string' ? (document.querySelector(dom) as HTMLElement) : dom; if (!ele) return; @@ -366,7 +380,7 @@ stopEvent: false, className: 'z-[999]', }); - eleOverlay.setVisible(this.markerIsVisible.value); + eleOverlay.setVisible(this.checkEquipIsShow()); return eleOverlay; } @@ -475,6 +489,27 @@ this.themeInfo.value = themeInfo; } + getAllLayers() { + const allLayers = this.layerInfo.value.reduce((preVal, curVal) => { + if (preVal.children && preVal.children.length > 0) { + return preVal.concat(curVal.children.map((item) => item)); + } else { + return preVal; + } + }, []); + return allLayers; + } + + getAllLayerModels() { + return this.layerInfo.value.reduce((preVal, curVal) => { + if (preVal.children && preVal.children.length > 0) { + return preVal.concat(curVal.children.map((item) => item.model)); + } else { + return preVal; + } + }, []); + } + /** @description 璁板綍鎵�鏈夊浘灞� */ setAllLayers(layerModels: Layer[], layers: any[], layerGroup: any[]) { // this.layerInfo.value = layerModels.map((layer, index) => { @@ -525,6 +560,22 @@ mapGroupItem.children.push(data); return preVal; }, []); + const that = this; + this.layerInfo.value.push({ + id: 'equip', + title: '鐩戞祴璁惧', + children: [], + _isVisible: true, + get isVisible() { + return this._isVisible; + }, + set isVisible(val) { + console.log("馃殌 ~ val:", val) + this._isVisible = val; + that.toggleMarkerOverlayVisible(val); + }, + type: 'equip', + }); } /** @@ -553,21 +604,17 @@ } } }); - this.markerIsVisible.value = visible; } getConfig(): MapConfig { return { sourceType: this.activeSourceType.value, - markerIsVisible: this.markerIsVisible.value, }; } setConfig(config: MapConfig) { this.activeSourceType.value = config.sourceType; - this.markerIsVisible.value = config.markerIsVisible; this.applySourceType(this.activeSourceType.value); - this.toggleMarkerOverlayVisible(this.markerIsVisible.value); } private addBasicControl() { -- Gitblit v1.9.3