public/images/poi/雨量计1.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/menu/Device.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/menu/Location.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/tools/LayerTree.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/constant/dict.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/store/simulation.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/utils/map.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
public/images/poi/ÓêÁ¿¼Æ1.png
src/components/menu/Device.vue
@@ -6,28 +6,12 @@ <div class="left-content device-content"> <div style="margin-left: 5px"> <span style="color: white">éç¹æ²ï¼</span> <el-select @change="handleChange" v-model="selectValue" placeholder="Select" size="large" style="width: 240px" > <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> <el-select @change="handleChange" v-model="selectValue" placeholder="Select" size="large" style="width: 240px"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </div> <el-tree :data="deviceTree" node-key="deviceId" :props="treeProps" @node-click="handleTreeNodeClick" class="device-tree" > <el-tree :data="deviceTree" node-key="deviceId" :props="treeProps" @node-click="handleTreeNodeClick" class="device-tree"> <template #default="{ node, data }"> <span v-if="!data.children" class="device-tree-item"> <!-- <div class="device-item-icon"></div> --> @@ -43,30 +27,56 @@ </template> <script setup> import { ref, computed, onMounted } from "vue"; import { createPoint, removeEntities } from "@/utils/map"; import { ref, computed, onMounted, watch } from "vue"; import { deviceDictList, getDictName } from "@/constant/dict.js"; import { getDeviceInfo } from "@/api/hpApi"; // å®ä¹ä¸ä¸ªååºå¼å¼ç¨åå¨è®¾å¤å表 import { initeWaterPrimitiveView } from "@/utils/water"; //ç¸æºflyTo彿°ï¼åç»optionsåè¡¨ä¸æå¯¹åºç»çº¬åº¦åå¼ç¨ import { useSimStore } from "@/store/simulation"; const simStore = useSimStore(); const deviceListAll = ref([]); // ç»ä»¶æè½½æ¶è·å设å¤ä¿¡æ¯ï¼é»è®¤è¿æ»¤âåè¡æ²â onMounted(() => { loadDeviceList("åè¡æ²"); initeWaterPrimitiveView() }); watch(() => simStore.DeviceShowSwitch, (newValue, oldValue) => { if (newValue) { initializeDevicePoints(); } else { removeEntities(); } }); const deviceEntities = ref([]); 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.deviceName}, 设å¤ç±»å: ${item.dictDeviceType}`); createPoint(item); }); deviceEntities.value = list; }; // æ ¹æ®åºååç§°å 载设å¤å表 const loadDeviceList = async (areaName) => { try { const res = await getDeviceInfo(); // è°æ´getDeviceInfo以æ¥å卿忰ï¼å¦æéè¦çè¯ deviceListAll.value = res.data.pageData.filter((item) => const res = await getDeviceInfo(); const allDevices = res.data.pageData; const devicesInArea = allDevices.filter((item) => item.deviceName?.includes(areaName) ); deviceListAll.value = devicesInArea; removeEntities(); initializeDevicePoints(); } catch (error) { console.error("å 载设å¤ä¿¡æ¯å¤±è´¥", error); } }; // å¤çåºåååäºä»¶ const handleChange = (item) => { if (!item) { @@ -75,7 +85,7 @@ } // æ ¹æ®æ°åºååéæ°å 载设å¤å表 loadDeviceList(item); console.log(deviceListAll.value); // console.log(deviceListAll.value); }; const selectValue = ref("åè¡æ²"); @@ -222,12 +232,14 @@ :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> src/components/menu/Location.vue
@@ -7,19 +7,8 @@ <div class="left-content district-content"> <div style="margin-left: 5px"> <span style="color: white">éç¹æ²ï¼</span> <el-select @change="handleChange" v-model="selectValue" placeholder="Select" size="large" style="width: 240px" > <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> <el-select @change="handleChange" v-model="selectValue" placeholder="Select" size="large" style="width: 240px"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </div> @@ -29,13 +18,7 @@ <div v-if="loading" class="loading-overlay"> <div class="spinner"></div> </div> <div v-else v-for="(item, key) in districtList" :key="key" class="district-item" @click="handleClick(item)" > <div v-else v-for="(item, key) in districtList" :key="key" class="district-item" @click="handleClick(item)"> <div class="district-item-icon"></div> <div class="district-item-text">{{ item.hdName }}</div> </div> @@ -45,99 +28,78 @@ </template> <script setup> import { ref, onMounted, watch } from "vue"; import { createPoint } from "@/utils/map"; import { useSimStore } from "@/store/simulation"; import { ref, computed, onMounted } from "vue"; import { deviceDictList, getDictName } from "@/constant/dict.js"; const simStore = useSimStore(); // å®ä¹ä¸ä¸ªååºå¼å¼ç¨åå¨è®¾å¤å表 const deviceListAll = ref([]); // å½åéä¸çåºå const selectValue = ref("åè¡æ²"); // åºåé项 const options = ref([ { value: "åè¡æ²", label: "åè¡æ²", }, { value: "鱼水æ´åæ²", label: "鱼水æ´åæ²", }, { value: "äºå®¶è¥¿æ²", label: "äºå®¶è¥¿æ²", }, { value: "åæ²³æ²", label: "åæ²³æ²", }, { value: "龿³å³ªæ", label: "龿³å³ªæ", }, { value: "åè¡æ²", label: "åè¡æ²" }, { value: "鱼水æ´åæ²", label: "鱼水æ´åæ²" }, // å ¶ä»é项... ]); const districtList = ref([]); const loading = ref(true); // æ§å¶å è½½ç¶æ function handleClick(district) { const entity = viewer.entities.getById(district.hdId); if (entity) { viewer.flyTo(entity, { offset: { heading: Cesium.Math.toRadians(0), pitch: Cesium.Math.toRadians(-45), range: 4000, }, }); } } // æ ¹æ®åºååç§°è¿æ»¤æ°æ® const filterDataByArea = (areaName) => { if (!areaName || !simStore.DangerPoint || simStore.DangerPoint.length === 0) { districtList.value = []; return; } districtList.value = simStore.DangerPoint.filter((item) => item.position?.includes(areaName) ); // æ å½¢ç»æå±æ§é ç½® const treeProps = { label: "deviceName", children: "children", }; // å¤çåºåååäºä»¶ const handleChange = (item) => { const areaName = item; const handleChange = (areaName) => { if (!areaName) { ElMessage.warning("è¯·éæ©ä¸ä¸ªåºå"); console.error("è¯·éæ©ä¸ä¸ªåºå"); return; } filterDataByArea(areaName); selectValue.value = areaName; // æ´æ°éä¸çåºåå¼ console.log(deviceListAll.value); // è¿éå·²å 嫿æåºåçæ°æ® }; // çå¬ simStore.DangerPoint åå watch( () => simStore.DangerPoint, (newVal) => { if (newVal && newVal.length > 0) { filterDataByArea(selectValue.value); loading.value = false; // æ°æ®å è½½å®æ } else { districtList.value = []; loading.value = true; // æ°æ®æªåå¤å°±ç»ª } }, { immediate: true } ); // 计ç®å±æ§ï¼å°è®¾å¤å表转æ¢ä¸ºæ å½¢ç»æï¼ä¾æ®å½åéä¸çåºå const deviceTree = computed(() => { const typeMap = {}; // è¿æ»¤åºå±äºå½åéä¸åºåçè®¾å¤ const filteredDevices = deviceListAll.value.filter(device => device.deviceName.includes(selectValue.value) ); // æè®¾å¤ç±»ååç» filteredDevices.forEach((device) => { const typeName = getDictName(deviceDictList, device.dictDeviceType); if (!typeName) { console.warn("æªæ¾å°è®¾å¤ç±»å:", device); return; } if (!typeMap[typeName]) { typeMap[typeName] = []; } // ç´æ¥ä½¿ç¨åå§ç设å¤åç§°ï¼ä¸è¿è¡ä»»ä½æ¿æ¢æä½ typeMap[typeName].push({ ...device, deviceName: device.deviceName.trim(), // åªå»é¤é¦å°¾ç©ºæ ¼ }); }); // 转æ¢ä¸ºæ å½¢ç»æ return Object.keys(typeMap).map((typeName) => ({ deviceName: typeName, children: typeMap[typeName], })); }); // å设å¨ç»ä»¶åå§åä¹åï¼deviceListAll 已被填å äºææåºåçæ°æ® // 妿䏿¯è¿æ ·ï¼åéè¦ä¿ç对 loadDeviceList çè°ç¨ï¼æè æ¾å°ä¸ç§æ¹æ³æ¥é¢å¡«å deviceListAll onMounted(() => { // é»è®¤å æ£æ¥ä¸éæ°æ® if (simStore.DangerPoint && simStore.DangerPoint.length > 0) { filterDataByArea("åè¡æ²"); loading.value = false; } else { loading.value = true; } // 妿éè¦å¨æ¤å¤å è½½å ¨é¨æ°æ®ï¼è¯·åæ¶æ³¨é以ä¸è¡å¹¶ç¡®ä¿ getDeviceInfo è¿åææåºåçæ°æ® // loadDeviceList(""); }); </script> @@ -148,7 +110,8 @@ left: 0px; right: 0px; bottom: 10px; background-color: rgba(236, 233, 233, 0.5); /* åéæé®ç½© */ background-color: rgba(236, 233, 233, 0.5); /* åéæé®ç½© */ display: flex; align-items: center; justify-content: center; @@ -169,6 +132,7 @@ transform: rotate(360deg); } } .district { position: absolute; width: 345px; @@ -183,10 +147,12 @@ cursor: pointer; margin-top: 10px; } .district-content { padding: 10px; box-sizing: border-box; } .district-item-icon { background: url("@/assets/img/menu/locationicon.png") no-repeat; background-position: 5px 5px; @@ -213,6 +179,7 @@ /deep/ .el-select__placeholder { color: white; } /deep/ .el-select-dropdown__item.hover, .el-select-dropdown__item:hover { color: white !important; src/components/tools/LayerTree.vue
@@ -184,6 +184,18 @@ } return; } if (label === "综åçæµè®¾å¤ä¿¡æ¯") { simStore.DeviceShowSwitch = checked; if (checked) { if (!treeMap.get("综åçæµè®¾å¤ä¿¡æ¯")) { } else { toggleLayerVisible("综åçæµè®¾å¤ä¿¡æ¯", true); } } else { toggleLayerVisible("综åçæµè®¾å¤ä¿¡æ¯", false); } return; } // å ¶ä»å¾å±çå¤çé»è¾ const list = treeMap.get(label); @@ -219,7 +231,7 @@ } else if (entityList && typeof entityList.show !== "undefined") { entityList.show = checked; } else { console.error(`æ æ³è®¾ç½®å¾å± ${name} çå¯è§æ§`); // console.error(`æ æ³è®¾ç½®å¾å± ${name} çå¯è§æ§`); } } @@ -233,7 +245,7 @@ item.deviceName?.includes("åè¡æ²") ); }; // é»è®¤å è½½é¨åå·²æ¿æ¢è³Device.vueä¸ï¼é»è¾ä¿®æ¹ä¸ºæ ¹æ®å½åéæ©å°å½¢åæ¢è®¾å¤ç¹æ¾ç¤º async function initDevicePoint() { let list = []; await getDevicetList(); @@ -325,7 +337,7 @@ * åå§åæææ°æ® */ function getData() { initDevicePoint(); // initDevicePoint(); // initDistrictPoint(); initDuanmianPoint(); addTetrahedron(); src/constant/dict.js
@@ -8,6 +8,10 @@ value: "1874719366287368194", }, { label: "é¨é计1", value: "1437295810", }, { label: "æå头", value: "1437295825", }, src/store/simulation.js
@@ -5,6 +5,7 @@ export const useSimStore = defineStore('simulation', () => { // 鿣ç¹å表 const DeviceShowSwitch = ref(true) const DangerPoint = ref([]) const navigationShow = ref(true) const leftShow = ref(false) @@ -147,6 +148,7 @@ backToHome, rainFalls, DangerPoint, DeviceShowSwitch, // æ¹æ¡ç¸å ³æ¹æ³ setSchemCard, src/utils/map.js
@@ -158,7 +158,7 @@ } export function removeEntities() { entities.forEach(entity => { // viewer.entities.remove(entity) viewer.entities.remove(entity) entity.show = false; }); // entities = []