| | |
| | | </div> --> |
| | | |
| | | <el-tabs v-model="activeTab"> |
| | | <el-tab-pane label="底图" name="components" |
| | | <el-tab-pane label="图层" name="components" |
| | | ><div class="flex flex-col gap-2"> |
| | | <el-radio-group v-model="activeSourceType" class="flex flex-col gap-2" @change="changeSourceType"> |
| | | <el-radio class="w-full mr-0" v-for="item in Object.keys(gaoDeSourceTypeMap)" :key="item" :label="parseInt(item)"> |
| | | <el-radio class="w-full mr-0" v-for="item in layerList" :key="item" :label="item"> |
| | | <span>{{ gaoDeSourceTypeMap[item] }}</span> |
| | | </el-radio> |
| | | </el-radio-group> |
| | | </div></el-tab-pane |
| | | > |
| | | <el-tab-pane label="覆盖层" name="overlays"> |
| | | <el-tab-pane label="覆盖物" name="overlays"> |
| | | <el-tree |
| | | class="w-full" |
| | | :data="treeData" |
| | |
| | | <script setup lang="ts"> |
| | | import { Close } from '@element-plus/icons-vue'; |
| | | import { ElTree } from 'element-plus'; |
| | | import type Overlay from 'ol/Overlay'; |
| | | import { onMounted, ref, watch } from 'vue'; |
| | | import { computed, onMounted, ref, watch } from 'vue'; |
| | | import { useDrag } from '/@/hooks/useDrag'; |
| | | import type { GaoDeSourceType, OLMap } from '/@/model/map/OLMap'; |
| | | import { gaoDeSourceTypeMap, MARKER_OVERLAY_CLASS_NAME, OverlayType } from '/@/model/map/OLMap'; |
| | | import type { OLMap } from '/@/model/map/OLMap'; |
| | | import { GaoDeSourceType, gaoDeSourceTypeMap, OverlayType } from '/@/model/map/OLMap'; |
| | | import { sleep } from '/@/utils/util'; |
| | | const searchText = ref(''); |
| | | const activeTab = ref('components'); |
| | | const treeRef = ref(); |
| | | |
| | | const layerList = [GaoDeSourceType.Vector, GaoDeSourceType.Satellite, GaoDeSourceType.SatelliteRoad]; |
| | | const props = defineProps<{ |
| | | olMap: OLMap; |
| | | }>(); |
| | |
| | | const activeSourceType = ref(props.olMap.activeSourceType); |
| | | |
| | | const changeSourceType = (val: GaoDeSourceType) => { |
| | | props.olMap.setSourceUrl(val); |
| | | props.olMap.applySourceType(val); |
| | | }; |
| | | |
| | | const overlayTreeRef = ref<InstanceType<typeof ElTree>>(); |
| | |
| | | { |
| | | id: ROOT_OVERLAY_TYPE.Marker, |
| | | label: '设备', |
| | | checked: props.olMap.overlayIsVisible.value, |
| | | checked: props.olMap.markerIsVisible.value, |
| | | }, |
| | | ]); |
| | | const initTreeChecked = () => { |
| | |
| | | }); |
| | | }; |
| | | |
| | | const setTreeChecked = (checked: boolean) => { |
| | | treeData.value.forEach((item) => { |
| | | if (checked) { |
| | | overlayTreeRef.value?.setCheckedKeys([ROOT_OVERLAY_TYPE.Marker]); |
| | | } else { |
| | | overlayTreeRef.value?.setCheckedKeys([]); |
| | | } |
| | | }); |
| | | }; |
| | | |
| | | 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) { |
| | | const overlays = props.olMap.map.getOverlays().getArray(); |
| | | |
| | | const filteredOverlays = overlays.filter((overlay) => { |
| | | const type = overlay.get('type'); |
| | | return type === OverlayType.Marker; |
| | | }); |
| | | props.olMap.adjustViewToOverlays(filteredOverlays); |
| | | props.olMap.adjustViewToMarkers(); |
| | | } |
| | | }; |
| | | |
| | |
| | | }; |
| | | const handleCheck = (data: any, node: any) => { |
| | | const checkedKeys = node.checkedKeys; |
| | | isHumanCheckTrigger = true; |
| | | const isVisible = checkedKeys.includes(ROOT_OVERLAY_TYPE.Marker); |
| | | props.olMap.toggleMarkerOverlayVisible(isVisible); |
| | | }; |