diff --git a/packages/screen/src/views/3DSituationalAwarenessRefactor/index.vue b/packages/screen/src/views/3DSituationalAwarenessRefactor/index.vue index c0f341d..b34f3ea 100644 --- a/packages/screen/src/views/3DSituationalAwarenessRefactor/index.vue +++ b/packages/screen/src/views/3DSituationalAwarenessRefactor/index.vue @@ -682,7 +682,7 @@ const handleForcePresetToggle = async () => { // 当前隐藏,切换为显示 // 切换搜索范围为50km - disasterData.updateSearchRadius(50); + // disasterData.updateSearchRadius(50); // 1. 关闭地图对比模式(使用统一助手) if (isCompareMode.value) { @@ -945,14 +945,16 @@ const handleDistanceChange = async (newDistance) => { createOrUpdateRangeCircle(mapStore.viewer, newDistance); } - // 3. 重新加载应急资源数据并更新地图标记 - // await loadEmergencyResources(DISASTER_CENTER.lon, DISASTER_CENTER.lat) + // 3. 重新加载应急统计数据 + await loadEmergencyBaseAndPreset(DISASTER_CENTER.lon, DISASTER_CENTER.lat); + + // 4. 重新加载应急资源数据并更新地图标记 + await loadReserveCentersAndPresets(DISASTER_CENTER.lon, DISASTER_CENTER.lat); // 3. 重新加载储备中心和预置点数据并更新地图标记 并且 重新加载应急统计数据 (新增) - await loadReserveCentersAndPresetsAndStatistics(DISASTER_CENTER.lon, DISASTER_CENTER.lat); + // await loadReserveCentersAndPresetsAndStatistics(DISASTER_CENTER.lon, DISASTER_CENTER.lat); + - // // 5. 重新加载应急统计数据 (新增) - // await loadEmergencyBaseAndPreset(DISASTER_CENTER.lon, DISASTER_CENTER.lat); }; /** @@ -977,14 +979,23 @@ const showAllMarkersAndRange = async () => { // 2. 显示接口标记 // hideMarkers() + // 2. 加载全部储备中心/预置点到地图(不限制距离) + // console.log("[index.vue] 加载全部储备中心/预置点到地图..."); + // await loadReserveCentersAndPresetsAndStatistics( + // DISASTER_CENTER.lon, + // DISASTER_CENTER.lat, + // true + // ); + // 2. 加载全部储备中心/预置点到地图(不限制距离) console.log("[index.vue] 加载全部储备中心/预置点到地图..."); - await loadReserveCentersAndPresetsAndStatistics( + await loadReserveCentersAndPresets( DISASTER_CENTER.lon, DISASTER_CENTER.lat, true ); + // 3. 显示范围圈 showRangeCircle(); @@ -1182,6 +1193,85 @@ const loadEmergencyResources = async (longitude, latitude) => { } }; +/** + * 加载储备中心和预置点数据 以及加载应急力量统计数据 + * @param {number} longitude - 经度(可选,不传则查询全部) + * @param {number} latitude - 纬度(可选,不传则查询全部) + * @param {boolean} loadAllForMap - 是否加载全部点位到地图(true时不限制距离) + */ +const loadReserveCentersAndPresets = async (longitude, + latitude, + loadAllForMap = false) => { + try { + // 构建请求参数 + const params = {}; + + if (!loadAllForMap && longitude !== undefined && latitude !== undefined) { + // 正常模式:传递经纬度和距离限制 + params.longitude = longitude; + params.latitude = latitude; + params.maxDistance = disasterData.forcePreset.value.searchRadius; + } + // loadAllForMap 为 true 时,不传任何参数,获取全部数据 + + const response = await request({ + url: `snow-ops-platform/yhYjll/list`, + method: "GET", + params, + }); + + if (response?.data && Array.isArray(response.data)) { + console.log( + "[index.vue] 储备中心和预置点数据加载成功:", + response.data?.length, + "个点位" + ); + + // 1. 转换数据为标准 stations 格式 + const transformedStations = disasterData.transformReserveDataToStations( + response.data, + { longitude, latitude } + ); + + // 2. 仅在非"全部加载"模式下更新 forcePreset.stations(用于 station-list 显示) + if (!loadAllForMap && transformedStations.length > 0) { + disasterData.forcePreset.value.stations = transformedStations; + console.log( + "[index.vue] 已更新 forcePreset.stations:", + transformedStations.length, + "个" + ); + } + // 3. 添加地图标记(全部或范围内) + if (mapStore.viewer) { + console.log("[index.vue] 添加储备中心和预置点地图标记..."); + clearReserveCenterMarkers(mapStore.viewer); + await addReserveCenterMarkers( + mapStore.viewer, + response.data, + { + heightOffset: 10, + }, + { longitude, latitude } + ); + } else { + console.warn("[index.vue] 地图viewer未就绪,跳过标记更新"); + } + } else { + console.warn("[index.vue] 储备中心和预置点接口返回数据为空"); + } + + return response; + } catch (error) { + console.error("[index.vue] 加载储备中心和预置点数据失败:", error); + ElMessage.warning({ + message: "储备中心和预置点数据加载失败", + duration: 3000, + }); + return null; + } +} + /** * 加载储备中心和预置点数据 以及加载应急力量统计数据 * @param {number} longitude - 经度(可选,不传则查询全部) @@ -1277,36 +1367,36 @@ const loadReserveCentersAndPresetsAndStatistics = async ( * 加载应急基地与预置点、应急装备、应急物资、应急人员的统计数量 * /snow-ops-platform/yhYjll/statistics */ -// const loadEmergencyBaseAndPreset = async (longitude, latitude) => { -// try { -// const response = await request({ -// url: `/snow-ops-platform/yhYjll/statistics`, -// method: "GET", -// params: { -// longitude, -// latitude, -// maxDistance: disasterData.forcePreset.value.searchRadius, -// }, -// }); +const loadEmergencyBaseAndPreset = async (longitude, latitude) => { + try { + const response = await request({ + url: `/snow-ops-platform/yhYjll/statistics`, + method: "GET", + params: { + longitude, + latitude, + maxDistance: disasterData.forcePreset.value.searchRadius, + }, + }); -// if (response?.data) { -// // 保存统计数据到状态 (仅更新统计,不更新stations) -// disasterData.updateForcePreset(response.data, { onlyStatistics: true }); -// console.log("[index.vue] 应急统计数据加载成功:", response.data); -// } else { -// console.warn("[index.vue] 应急统计数据接口返回数据为空"); -// } + if (response?.data) { + // 保存统计数据到状态 (仅更新统计,不更新stations) + disasterData.updateForcePreset(response.data, { onlyStatistics: true }); + console.log("[index.vue] 应急统计数据加载成功:", response.data); + } else { + console.warn("[index.vue] 应急统计数据接口返回数据为空"); + } -// return response; -// } catch (error) { -// console.error("[index.vue] 加载应急统计数据失败:", error); -// ElMessage.warning({ -// message: "应急统计数据加载失败", -// duration: 3000, -// }); -// return null; -// } -// }; + return response; + } catch (error) { + console.error("[index.vue] 加载应急统计数据失败:", error); + ElMessage.warning({ + message: "应急统计数据加载失败", + duration: 3000, + }); + return null; + } +}; /** * 查询应急装备和应急物资列表 /snow-ops-platform/yhYjll/listMaterials @@ -1558,13 +1648,17 @@ const initializeScene = async () => { hideMarkers(); console.log("[index.vue] 已隐藏应急资源标记(等待快速匹配激活)"); - // 12. 加载储备中心和预置点数据 并且 加载应急统计数据(新增) - console.log("[index.vue] 加载储备中心和预置点数据..."); - await loadReserveCentersAndPresetsAndStatistics(DISASTER_CENTER.lon, DISASTER_CENTER.lat); + // // 12. 加载储备中心和预置点数据 并且 加载应急统计数据(新增) + // console.log("[index.vue] 加载储备中心和预置点数据..."); + // await loadReserveCentersAndPresetsAndStatistics(DISASTER_CENTER.lon, DISASTER_CENTER.lat); - // // 13. 加载应急统计数据 - // console.log("[index.vue] 加载应急统计数据..."); - // await loadEmergencyBaseAndPreset(DISASTER_CENTER.lon, DISASTER_CENTER.lat); + // 12. 加载应急统计数据 + console.log("[index.vue] 加载应急统计数据..."); + await loadEmergencyBaseAndPreset(DISASTER_CENTER.lon, DISASTER_CENTER.lat); + + // 13. 加载储备中心和预置点数据 + console.log("[index.vue] 加载储备中心和预置点数据..."); + await loadReserveCentersAndPresets(DISASTER_CENTER.lon, DISASTER_CENTER.lat); cesiumViewer.value = viewer; console.log("[index.vue] 场景初始化完成");