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/components/tools/Legend_yhgl.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/tools/Legend_zhjc.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,77 @@ </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([]); // ç»ä»¶æè½½æ¶è·å设å¤ä¿¡æ¯ï¼é»è®¤è¿æ»¤âåè¡æ²â import { initeWaterPrimitiveView } from "@/utils/water"; //ç¸æºflyTo彿°ï¼åç»optionsåè¡¨ä¸æå¯¹åºç»çº¬åº¦åå¼ç¨ import { useSimStore } from "@/store/simulation"; const simStore = useSimStore(); onMounted(() => { 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 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.filter((item) => item.deviceName?.includes(areaName) ); deviceListAll.value = devicesInArea; deviceListAll.length = 0; initializeDevicePoints(); } catch (error) { console.error("å 载设å¤ä¿¡æ¯å¤±è´¥", error); } }; // å¤çåºåååäºä»¶ const handleChange = (item) => { if (!item) { @@ -75,7 +106,7 @@ } // æ ¹æ®æ°åºååéæ°å 载设å¤å表 loadDeviceList(item); console.log(deviceListAll.value); // console.log(deviceListAll.value); }; const selectValue = ref("åè¡æ²"); @@ -115,12 +146,10 @@ // å æè®¾å¤ç±»ååç» deviceListAll.value.forEach((device) => { const typeName = getDictName(deviceDictList, device.dictDeviceType); if (!typeName) { console.warn("æªæ¾å°è®¾å¤ç±»å:", device); return; } if (!typeMap[typeName]) { typeMap[typeName] = []; } @@ -222,12 +251,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,12 +28,25 @@ </template> <script setup> import { ref, onMounted, watch } from "vue"; import { createPoint } from "@/utils/map"; import { ref, onMounted, watch, onBeforeUnmount } from "vue"; import { createPoint, removeEntities } from "@/utils/map"; import { useSimStore } from "@/store/simulation"; import { initeWaterPrimitiveView } from "@/utils/water"; //ç¸æºflyTo彿°ï¼åç»optionsåè¡¨ä¸æå¯¹åºç»çº¬åº¦åå¼ç¨ import { useRoute, onBeforeRouteUpdate } from 'vue-router'; const simStore = useSimStore(); onBeforeRouteUpdate((to, from, next) => { if (to.path !== '/yhgl') { handleCleanup(); } next(); }); const route = useRoute(); onBeforeUnmount(() => { if (route.path !== '/yhgl') { handleCleanup(); } }); const selectValue = ref("åè¡æ²"); const options = ref([ @@ -91,9 +87,27 @@ }); } } const handleCleanup = async () => { await Promise.all(districtList.value.map(item => removeEntities(item.hdId))); } const initializeDevicePoints = async () => { await Promise.all(districtList.value.map(async (item, index) => { // æ ¹æ®éæ±å¯å¢å item.id = item.hdId; item.name = item.hdName; item.latitude = item.lat; item.longitude = item.lon; item.showBillboard = true; item.type = item.disasterType; item.className = "district"; await createPoint(item); // æå°æ¯ä¸ªè®¾å¤çåç§°å设å¤ç±»å // console.log(`设å¤åç§°: ${item.id}, 设å¤ç±»å: ${item.name}`); })); }; // æ ¹æ®åºååç§°è¿æ»¤æ°æ® const filterDataByArea = (areaName) => { const filterDataByArea = async (areaName) => { handleCleanup(); if (!areaName || !simStore.DangerPoint || simStore.DangerPoint.length === 0) { districtList.value = []; return; @@ -102,6 +116,7 @@ districtList.value = simStore.DangerPoint.filter((item) => item.position?.includes(areaName) ); await initializeDevicePoints(); }; // å¤çåºåååäºä»¶ @@ -111,10 +126,15 @@ ElMessage.warning("è¯·éæ©ä¸ä¸ªåºå"); return; } filterDataByArea(areaName); }; watch(() => simStore.DangerShowSwitch, (newValue, oldValue) => { if (newValue) { initializeDevicePoints(); } else { handleCleanup() } }); // çå¬ simStore.DangerPoint åå watch( () => simStore.DangerPoint, @@ -123,6 +143,7 @@ filterDataByArea(selectValue.value); loading.value = false; // æ°æ®å è½½å®æ } else { handleCleanup(); districtList.value = []; loading.value = true; // æ°æ®æªåå¤å°±ç»ª } @@ -131,6 +152,8 @@ ); onMounted(() => { handleCleanup() initeWaterPrimitiveView() // é»è®¤å æ£æ¥ä¸éæ°æ® if (simStore.DangerPoint && simStore.DangerPoint.length > 0) { filterDataByArea("åè¡æ²"); @@ -148,7 +171,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 +193,7 @@ transform: rotate(360deg); } } .district { position: absolute; width: 345px; @@ -183,10 +208,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 +240,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,30 @@ } return; } if (label === "综åçæµè®¾å¤ä¿¡æ¯") { simStore.DeviceShowSwitch = checked; if (checked) { if (!treeMap.get("综åçæµè®¾å¤ä¿¡æ¯")) { } else { toggleLayerVisible("综åçæµè®¾å¤ä¿¡æ¯", true); } } else { toggleLayerVisible("综åçæµè®¾å¤ä¿¡æ¯", false); } return; } if (label === "åè¡æ²éæ£ç¹") { simStore.DangerShowSwitch = checked; if (checked) { if (!treeMap.get("åè¡æ²éæ£ç¹")) { } else { toggleLayerVisible("åè¡æ²éæ£ç¹", true); } } else { toggleLayerVisible("åè¡æ²éæ£ç¹", false); } return; } // å ¶ä»å¾å±çå¤çé»è¾ const list = treeMap.get(label); @@ -219,7 +243,7 @@ } else if (entityList && typeof entityList.show !== "undefined") { entityList.show = checked; } else { console.error(`æ æ³è®¾ç½®å¾å± ${name} çå¯è§æ§`); // console.error(`æ æ³è®¾ç½®å¾å± ${name} çå¯è§æ§`); } } @@ -233,7 +257,7 @@ item.deviceName?.includes("åè¡æ²") ); }; // é»è®¤å è½½é¨åå·²æ¿æ¢è³Device.vueä¸ï¼é»è¾ä¿®æ¹ä¸ºæ ¹æ®å½åéæ©å°å½¢åæ¢è®¾å¤ç¹æ¾ç¤º async function initDevicePoint() { let list = []; await getDevicetList(); @@ -252,31 +276,31 @@ } // 鿣ç¹å表 watchEffect(() => { const dangerPoints = simStore.DangerPoint.filter((item) => item.position?.includes("åè¡æ²") ); // watchEffect(() => { // const dangerPoints = simStore.DangerPoint.filter((item) => // item.position?.includes("åè¡æ²") // ); if (dangerPoints && dangerPoints.length > 0) { const list = []; // if (dangerPoints && dangerPoints.length > 0) { // const list = []; dangerPoints.forEach((item) => { // console.log(item, "item"); item.id = item.hdId; item.name = item.hdName; item.latitude = item.lat; item.longitude = item.lon; item.showBillboard = true; item.type = item.disasterType; item.className = "district"; const entity = createPoint(item); entity.show = false; list.push(entity); }); // dangerPoints.forEach((item) => { // // console.log(item, "item"); // item.id = item.hdId; // item.name = item.hdName; // item.latitude = item.lat; // item.longitude = item.lon; // item.showBillboard = true; // item.type = item.disasterType; // item.className = "district"; // const entity = createPoint(item); // entity.show = false; // list.push(entity); // }); treeMap.set("åè¡æ²éæ£ç¹", list); } }); // treeMap.set("åè¡æ²éæ£ç¹", list); // } // }); let divPointList = []; /** @@ -325,7 +349,7 @@ * åå§åæææ°æ® */ function getData() { initDevicePoint(); // initDevicePoint(); // initDistrictPoint(); initDuanmianPoint(); addTetrahedron(); src/components/tools/Legend_yhgl.vue
@@ -26,7 +26,7 @@ }; onMounted(() => { console.log("è¿éæ¯å¾ä¾éåï¼"); // console.log("è¿éæ¯å¾ä¾éåï¼"); }); </script> src/components/tools/Legend_zhjc.vue
@@ -31,7 +31,7 @@ }; onMounted(() => { console.log("è¿éæ¯å¾ä¾éåï¼"); // console.log("è¿éæ¯å¾ä¾éåï¼"); }); </script> src/constant/dict.js
@@ -8,6 +8,10 @@ value: "1874719366287368194", }, { label: "é¨é计1", value: "1437295810", }, { label: "æå头", value: "1437295825", }, src/store/simulation.js
@@ -5,6 +5,8 @@ export const useSimStore = defineStore('simulation', () => { // 鿣ç¹å表 const DeviceShowSwitch = ref(true) const DangerShowSwitch = ref(true) const DangerPoint = ref([]) const navigationShow = ref(true) const leftShow = ref(false) @@ -147,6 +149,8 @@ backToHome, rainFalls, DangerPoint, DeviceShowSwitch, DangerShowSwitch, // æ¹æ¡ç¸å ³æ¹æ³ setSchemCard, src/utils/map.js
@@ -156,12 +156,19 @@ return entity; } export function removeEntities() { entities.forEach(entity => { // viewer.entities.remove(entity) entity.show = false; // export function removeEntities() { // entities.forEach(entity => { // viewer.entities.remove(entity) // entity.show = false; // }); // // entities = [] // } export function removeEntities(id) { entities.forEach((entity, index) => { if (entity.id === id) { viewer.entities.remove(entity); } }); // entities = [] } function removeHandler() { if (interativeHandler != null && Cesium.defined(interativeHandler)) {