f373e0c0797e1800bf066fdfbb748bb9242230f6..2a02d981f6d5ed2ef3b3a09d5a3b5bc0d07cf742
2025-07-09 wangjuncheng
提交断面
2a02d9 对比 | 目录
2025-07-09 guonan
修改
a11308 对比 | 目录
2025-07-09 guonan
优化目录树以及实时模拟最后弹窗的问题
d8134b 对比 | 目录
已修改5个文件
149 ■■■■ 文件已修改
src/api/hpApi.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/trApi.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/menu/CrossSectionalAnalysis.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/menu/TimeLine.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/tools/LayerTree.vue 81 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/hpApi.js
@@ -178,7 +178,7 @@
export async function getDeviceInfoByPage(data, pageNum) {
  const response = await axios.post("/hp/deviceInfo/getData", {
    filterObject: {
      "divisionDistrict": data,
      "divisionDistrictList": [data],
      // 所属项目
      // 如果不加这个,则返回的全是强震仪(1933099069385355265)
      "belongObjList": [
src/api/trApi.js
@@ -191,4 +191,18 @@
    throw error; // 抛出错误,让调用方可以捕获
  }
}
export async function getCrossSection(data) {
  // console.log(data,'发送的数据!');
  try {
    const res = await instance.get("/simu/crossSection", {
      params: data
    });
    return res.data; // 返回实际数据(通常 res.data 才是接口返回的内容)
  } catch (error) {
    console.error("Error fetching data:", error);
    throw error; // 抛出错误,让调用方可以捕获
  }
}
// **************************************************************************************************************
src/components/menu/CrossSectionalAnalysis.vue
@@ -75,8 +75,13 @@
<script setup>
import { ElMessage } from 'element-plus';
import { ref, onMounted, defineExpose } from "vue";
import { getCrossSection } from '@/api/trApi.js'; // 假设你有真实接口
import { useSimStore } from '@/store/simulation';
import { storeToRefs } from 'pinia';
const simStore = useSimStore();
const { selectedScheme } = storeToRefs(simStore);
const viewer = window.viewer;
let selectedSchemeId = selectedScheme.value.id
let pickedPointsCross = ref([]);
let pickHandlerCross = null;
@@ -229,6 +234,8 @@
        pickHandlerCross = null;
    }
    isPicking.value = false;
    console.log('这里发送请求,清空郭楠的echarts2');
}
function initPickHandler() {
    if (isPicking.value) {
@@ -260,7 +267,9 @@
    pickHandlerCross.setInputAction(clickAction, Cesium.ScreenSpaceEventType.LEFT_CLICK);
}
function confirmPoints() {
async function confirmPoints() {
    console.log(selectedSchemeId,'这里拿的是方案的数据');
    if (pickedPointsCross.value.length < 2) {
        ElMessage.warning('请先选择两个点后再进行确认!');
        return;
@@ -268,6 +277,7 @@
    const point1 = pickedPointsCross.value[0];
    const point2 = pickedPointsCross.value[1];
console.log(point1,point2);
    console.log('第一个点信息:', {
        longitude: point1.longitude,
@@ -280,11 +290,34 @@
        latitude: point2.latitude,
        cartesian: point2.cartesian
    });
    const startPoint = `${point1.longitude},${point1.latitude}`;
    const endPoint = `${point2.longitude},${point2.latitude}`;
    const result = await getCrossSectionInfo(startPoint, endPoint);
    console.log(result,'这里是郭楠需要的断面数据');
    isUploaded.value = true;
    ElMessage.success('正在进行--断面截面--数据分析上传,请稍等...');
}
  // 获取真实数据
function getCrossSectionInfo(a, b) {
  const params = {
    startPoint: a,
    endPoint: b,
    id: selectedSchemeId
  };
  return getCrossSection(params).then(data => {
    if (data && data.code === 200) {
      return data.data; // 返回原始数据数组
    } else {
      return [];
    }
  }).catch(error => {
    console.error('获取数据时发生错误:', error);
    ElMessage.warning('数据有误,请联系管理员或重新进行模拟!');
    return [];
  });
}
defineExpose({
    clearPoints
});
src/components/menu/TimeLine.vue
@@ -340,8 +340,9 @@
      }
      // 触发进度更新
      const progress = currentTime.value / totalDuration;
      emit("timeUpdate", progress * 100);
      // const progress = currentTime.value / totalDuration;
      // 实时模拟应该不用显示弹窗吧
      // emit("timeUpdate", progress * 100);
      // 如果需要触发某些更新函数,也可以保留
      updateWaterColorByTime();
@@ -1076,7 +1077,11 @@
watch(
  () => finishPlay.value,
  (newVal) => {
    if (newVal && selectedScheme.value.type === 2) {
    if (
      newVal &&
      selectedScheme.value.type === 2 &&
      simStore.rePlayList.length > 0
    ) {
      handlePlayFinished();
    }
  }
src/components/tools/LayerTree.vue
@@ -239,22 +239,62 @@
 * 清除图层实体
 * @param {String} layerName - 图层名称
 */
function clearLayerEntities(layerName) {
// 暂且保留
// async function clearLayerEntities(layerName) {
//   const list = treeMap.get(layerName);
//   if (list && Array.isArray(list)) {
//     for (const item of list) {
//       const entity = await item;
//       if (layerName == "综合监测设备信息") {
//         removeEntities(entity.deviceId);
//       } else if (layerName == "孙胡沟隐患点") {
//         removeEntities(entity.hdId);
//       }
//     }
//   }
//   treeMap.delete(layerName);
// }
/**
 * 清除图层实体
 * @param {String} layerName - 图层名称
 */
// 此函数优化了在模拟仿真页面,如果点击目录树选中取消,泥位计仍显示
async function clearLayerEntities(layerName) {
  const isMnfzPage = route.path === "/mnfz"; // 判断是否为 /mnfz 页面
  const list = treeMap.get(layerName);
  if (list && Array.isArray(list)) {
    list.forEach((entity) => {
      clearAllPoints();
    });
    for (const item of list) {
      const entity = await item;
      console.log(entity,'eeeeeeeee')
      let shouldRemove = true; // 默认要删除
      // 如果是 /mnfz 页面,并且是“泥位计”,则不删除
      if (isMnfzPage && entity.type === "泥位计") {
        shouldRemove = false;
      }
      if (shouldRemove) {
        if (layerName === "综合监测设备信息") {
          removeEntities(entity.deviceId);
        } else if (layerName === "孙胡沟隐患点") {
          removeEntities(entity.hdId);
        }
      }
    }
  }
  treeMap.delete(layerName);
}
// 监控设备开关变化
watchEffect(() => {
watchEffect(async () => {
  clearLayerEntities("综合监测设备信息");
  if (simStore.DeviceShowSwitch) {
    const deviceList = simStore.devices
    // 使用 Promise.all 等待所有异步操作完成
    const deviceListPromises = simStore.devices
      .filter((item) => item.deviceName?.includes("孙胡沟"))
      .map(async (item) => {
        const entity = viewer.entities.getById(item.deviceId);
@@ -263,8 +303,12 @@
        item.id = item.deviceId;
        item.className = "device";
        item.showLabel = true;
        await createPoint(item);
        await createPoint(item); // 确保 createPoint 返回一个 Promise 或者本身就是异步函数
        return item; // 返回处理后的 item
      });
    // 等待所有异步操作完成
    const deviceList = await Promise.all(deviceListPromises);
    if (deviceList.length) {
      treeMap.set("综合监测设备信息", deviceList);
@@ -273,13 +317,15 @@
});
// 监控隐患点开关变化
watchEffect(() => {
watchEffect(async () => {
  clearLayerEntities("孙胡沟隐患点");
  if (simStore.DangerShowSwitch) {
    const dangerPoints = simStore.DangerPoint.filter((item) =>
    const filteredPoints = simStore.DangerPoint.filter((item) =>
      item.position?.includes("孙胡沟")
    ).map(async (item) => {
    );
    const dangerPointPromises = filteredPoints.map(async (item) => {
      const entity = viewer.entities.getById(item.hdId);
      item.id = item.hdId;
      item.name = item.hdName;
@@ -288,11 +334,18 @@
      item.showBillboard = true;
      item.type = item.disasterType;
      item.className = "district";
      await createPoint(item);
      await createPoint(item); // 确保 createPoint 是异步函数
      return item; // 返回处理好的 item
    });
    if (dangerPoints.length) {
      treeMap.set("孙胡沟隐患点", dangerPoints);
    try {
      const resolvedPoints = await Promise.all(dangerPointPromises);
      if (resolvedPoints.length) {
        treeMap.set("孙胡沟隐患点", resolvedPoints);
      }
    } catch (error) {
      console.error("创建隐患点时发生错误:", error);
    }
  }
});