| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, computed, onMounted } from "vue"; |
| | | import { ref, computed, onMounted, watch, onBeforeUnmount } from "vue"; |
| | | import { useRoute, onBeforeRouteUpdate } from "vue-router"; |
| | | import { createPoint, removeEntities } from "@/utils/map"; |
| | | import { deviceDictList, getDictName } from "@/constant/dict.js"; |
| | | import { getDeviceInfo } from "@/api/hpApi"; |
| | | |
| | | // 定义一个响应式引用存储设备列表 |
| | | const deviceListAll = ref([]); |
| | | |
| | | // 组件挂载时获取设备信息,默认过滤“孙胡沟” |
| | | onMounted(() => { |
| | | import { initeWaterPrimitiveView } from "@/utils/water"; //相机flyTo函数,后续options列表中有对应经纬度后弃用 |
| | | import { useSimStore } from "@/store/simulation"; |
| | | const simStore = useSimStore(); |
| | | onMounted(async () => { |
| | | // 加载所有的隐患点信息 |
| | | await getData(); |
| | | loadDeviceList("孙胡沟"); |
| | | initeWaterPrimitiveView(); |
| | | }); |
| | | |
| | | onBeforeRouteUpdate((to, from, next) => { |
| | | if (to.path !== "/zhjc") { |
| | | handleCleanup(); |
| | | } |
| | | next(); |
| | | }); |
| | | const route = useRoute(); |
| | | |
| | | onBeforeUnmount(() => { |
| | | if (route.path !== "/zhjc") { |
| | | handleCleanup(); |
| | | } |
| | | }); |
| | | watch( |
| | | () => simStore.DeviceShowSwitch, |
| | | (newValue, oldValue) => { |
| | | if (newValue) { |
| | | initializeDevicePoints(); |
| | | } else { |
| | | handleCleanup(); |
| | | } |
| | | } |
| | | ); |
| | | const deviceListAll = ref([]); |
| | | const deviceEntities = ref([]); |
| | | const handleCleanup = () => { |
| | | deviceListAll.value.forEach((item) => { |
| | | removeEntities(item.deviceId); |
| | | }); |
| | | }; |
| | | const initializeDevicePoints = () => { |
| | | const list = []; |
| | | deviceListAll.value.forEach((item, index) => { |
| | | // 根据需求可增删 |
| | | item.type = getDictName(deviceDictList, item.dictDeviceType); |
| | | item.name = item.deviceName.split(selectValue.value)[1] || item.deviceName; |
| | | item.id = item.deviceId; |
| | | item.className = "device"; |
| | | item.showLabel = true; |
| | | // 打印每个设备的名称和设备类型 |
| | | // console.log(`设备名称: ${item.id}, 设备类型: ${item.name}`); |
| | | createPoint(item); |
| | | }); |
| | | deviceEntities.value = list; |
| | | }; |
| | | const allDevices = ref([]); |
| | | const getData = async () => { |
| | | const res = await getDeviceInfo(); |
| | | allDevices.value = res.data.pageData; |
| | | }; |
| | | // 根据区域名称加载设备列表 |
| | | const loadDeviceList = async (areaName) => { |
| | | try { |
| | | const res = await getDeviceInfo(); // 调整getDeviceInfo以接受动态参数,如果需要的话 |
| | | deviceListAll.value = res.data.pageData.filter((item) => |
| | | handleCleanup(); |
| | | // const res = await getDeviceInfo(); |
| | | // const allDevices = res.data.pageData; |
| | | const devicesInArea = allDevices.value.filter((item) => |
| | | item.deviceName?.includes(areaName) |
| | | ); |
| | | deviceListAll.value = devicesInArea; |
| | | deviceListAll.length = 0; |
| | | initializeDevicePoints(); |
| | | } catch (error) { |
| | | console.error("加载设备信息失败", error); |
| | | } |
| | |
| | | } |
| | | // 根据新区域名重新加载设备列表 |
| | | loadDeviceList(item); |
| | | console.log(deviceListAll.value); |
| | | // console.log(deviceListAll.value); |
| | | }; |
| | | |
| | | const selectValue = ref("孙胡沟"); |
| | |
| | | // 先按设备类型分组 |
| | | deviceListAll.value.forEach((device) => { |
| | | const typeName = getDictName(deviceDictList, device.dictDeviceType); |
| | | |
| | | if (!typeName) { |
| | | console.warn("未找到设备类型:", device); |
| | | return; |
| | | } |
| | | |
| | | if (!typeMap[typeName]) { |
| | | typeMap[typeName] = []; |
| | | } |
| | |
| | | :deep(.el-select__placeholder) { |
| | | color: white; |
| | | } |
| | | |
| | | :deep(.el-select-dropdown__item.hover), |
| | | :deep(.el-select-dropdown__item:hover) { |
| | | color: white !important; |
| | | background-color: rgb(38, 124, 124, 0.5); |
| | | } |
| | | |
| | | :deep(.el-tree-node__content) { |
| | | padding-left: 0px !important ; |
| | | padding-left: 0px !important; |
| | | } |
| | | </style> |