From 9aed93946a567c874c847b4d3e356058b0455ae7 Mon Sep 17 00:00:00 2001
From: wangjuncheng <1>
Date: 星期二, 01 七月 2025 16:13:22 +0800
Subject: [PATCH] 2

---
 src/components/menu/TimeLine.vue |  121 +++++++++++++++++++++++++++------------
 1 files changed, 83 insertions(+), 38 deletions(-)

diff --git a/src/components/menu/TimeLine.vue b/src/components/menu/TimeLine.vue
index 052f870..6b1e748 100644
--- a/src/components/menu/TimeLine.vue
+++ b/src/components/menu/TimeLine.vue
@@ -302,7 +302,17 @@
 
       // 濡傛灉闇�瑕佽Е鍙戞煇浜涙洿鏂板嚱鏁帮紝涔熷彲浠ヤ繚鐣�
       updateWaterColorByTime();
-      updateWeatherByProgress();
+      // updateWeatherByProgress();
+      // 淇敼涓哄浐瀹氶樁娈碉紝缂撴參涓嬮洦鐨勭姸鎬�
+      const rainParams = {
+        rainSize: 0.5,
+        rainSpeed: 20,
+        rainDensity: 15,
+        rainColor: "#ADD8E6",
+      };
+      console.log("瀹炴椂妯℃嫙寮�濮嬩笅闆�");
+      // 璋冪敤宸ュ叿鏂规硶鏇存柊闆ㄦ晥
+      mapUtils.toggleRain(rainParams, true);
     }, 5000); // 姣� 5 绉掓墽琛屼竴娆�
   } else {
     // 杩欓噷闈㈣繕鏄綘鐨勬挱鏀句唬鐮侊紝涓婇潰鐨刬f涓槸浜旂閽熻烦鍔ㄤ竴娆$殑瀹炴椂妯℃嫙
@@ -344,9 +354,10 @@
     console.warn("selectedScheme 鎴� data 涓嶅瓨鍦�");
     return;
   }
-  // 娉ㄦ剰锛氭湁鏃� data 鍙兘鏄竴涓瓧绗︿覆锛堜緥濡� JSON 瀛楃涓诧級
+
   let data = selectedScheme.value.data;
-  // 濡傛灉鏄瓧绗︿覆锛屽垯灏濊瘯瑙f瀽鎴愬璞�
+
+  // 濡傛灉鏄瓧绗︿覆锛屽垯灏濊瘯瑙f瀽涓哄璞�
   if (typeof data === "string") {
     try {
       data = JSON.parse(data);
@@ -356,28 +367,69 @@
       return;
     }
   }
-  // 鎵撳嵃闄嶉洦寮哄害鐨勫崟浣�
+
   console.log("闄嶉洦寮哄害鐨勫崟浣嶆槸锛�", data.intensityUnit);
-  // 鏍规嵁 intensityUnit 璋冩暣 rainfalls 涓殑 intensity 鍊�
-  if (data.intensityUnit === "mm/min") {
-    data.rainfalls.forEach((r) => (r.intensity *= 60));
-    console.log("灏� mm/min 杞崲涓� mm/h 鍚庣殑 rainfalls:", data.rainfalls);
-  } else if (data.intensityUnit === "mm/5min") {
-    data.rainfalls.forEach((r) => (r.intensity *= 12));
-    console.log("灏� mm/5min 杞崲涓� mm/h 鍚庣殑 rainfalls:", data.rainfalls);
-  } else if (data.intensityUnit !== "mm/h") {
-    console.warn("鏈煡鐨� intensity 鍗曚綅锛屾棤娉曡繘琛岃浆鎹�");
+
+  // 鍒ゆ柇 rainfalls 鏄惁涓哄璞★紝濡傛灉鏄垯杞垚鏁扮粍
+  let rainfalls = data.rainfalls;
+  if (typeof rainfalls === "object" && !Array.isArray(rainfalls)) {
+    rainfalls = Object.values(rainfalls);
+    console.warn("鈿狅笍 rainfalls 鏄璞★紝宸茶浆鎹负鏁扮粍");
   }
-  const rainfallList = data.rainfalls;
-  console.log("鏈�缁堢殑 rainfallList:", rainfallList);
-  rainTotalInfo.value = rainfallList;
-  calculateTimeStep(rainTotalInfo.value);
-  // 浣跨敤绀轰緥
+
+  // 鎸夊皬鏃惰仛鍚堥檷闆ㄦ暟鎹�
+  const hourlyRainfallMap = {};
+
+  rainfalls.forEach((record) => {
+    const originalTime = new Date(record.time);
+    if (isNaN(originalTime.getTime())) {
+      console.warn("鏃犳晥鐨勬椂闂存牸寮忥細", record.time);
+      return;
+    }
+
+    // 鏋勯�犫�滃皬鏃垛�濈骇鍒殑鏃堕棿閿紝姣斿锛�2024-08-25 20:00:00
+    const hourKey = new Date(
+      originalTime.getFullYear(),
+      originalTime.getMonth(),
+      originalTime.getDate(),
+      originalTime.getHours()
+    );
+
+    const hourStr = hourKey.toISOString().slice(0, 16).replace("T", " ");
+
+    if (!hourlyRainfallMap[hourStr]) {
+      hourlyRainfallMap[hourStr] = {
+        intensity: 0,
+        time: hourStr,
+        total: record.total, // 榛樿鐢ㄧ涓�涓褰曠殑 total
+      };
+    }
+
+    hourlyRainfallMap[hourStr].intensity += record.intensity;
+    // 鍙栨渶澶х殑 total锛堝洜涓烘槸绱Н鍊硷級
+    if (record.total > hourlyRainfallMap[hourStr].total) {
+      hourlyRainfallMap[hourStr].total = record.total;
+    }
+  });
+
+  // 杞崲 map 鎴愭暟缁勫苟鎺掑簭
+  const hourlyRainfallList = Object.values(hourlyRainfallMap).sort((a, b) =>
+    a.time.localeCompare(b.time)
+  );
+
+  console.log("鉁� 鎸夊皬鏃惰仛鍚堝悗鐨勯檷闆ㄦ暟鎹細", hourlyRainfallList);
+
+  // 璁剧疆鍏ㄥ眬鍙橀噺
+  rainTotalInfo.value = hourlyRainfallList;
+
+  // 璁$畻鏃堕棿姝ラ暱
   timeStepInfo = calculateTimeStep(rainTotalInfo.value);
+
   // 鎻愬彇 intensity 鍊�
-  rainFallValues.value = rainfallList.map((r) => r.intensity);
+  rainFallValues.value = hourlyRainfallList.map((r) => r.intensity);
   minRainValue.value = Math.min(...rainFallValues.value);
   maxRainValue.value = Math.max(...rainFallValues.value);
+
   console.log(
     "褰撳墠鏂规涓嬫渶灏忛洦閲忓拰鏈�澶ч洦閲忥細",
     minRainValue.value,
@@ -616,20 +668,20 @@
   colorState.lastTime = currentTime.value;
   // ====== 鏂板锛氬湪 updateWaterColor 鍓嶆墦鍗板綋鍓嶄俊鎭� ======
   // // 鑾峰彇褰撳墠绱闄嶉洦閲�
-  // let currentTotal = null;
-  // const baseTimestamp = new Date(rainTotalInfo.value[0].time).getTime();
-  // const currentTimeMs = baseTimestamp + currentTime.value * 1000;
+  let currentTotal = null;
+  const baseTimestamp = new Date(rainTotalInfo.value[0].time).getTime();
+  const currentTimeMs = baseTimestamp + currentTime.value * 1000;
 
-  // // 鎵惧埌鏈�鎺ヨ繎鐨勯檷闆ㄦ暟鎹偣
-  // for (let i = rainTotalInfo.value.length - 1; i >= 0; i--) {
-  //   const dataTimeMs = new Date(rainTotalInfo.value[i].time).getTime();
-  //   if (dataTimeMs <= currentTimeMs) {
-  //     currentTotal = rainTotalInfo.value[i].total;
-  //     break;
-  //   }
-  // }
+  // 鎵惧埌鏈�鎺ヨ繎鐨勯檷闆ㄦ暟鎹偣
+  for (let i = rainTotalInfo.value.length - 1; i >= 0; i--) {
+    const dataTimeMs = new Date(rainTotalInfo.value[i].time).getTime();
+    if (dataTimeMs <= currentTimeMs) {
+      currentTotal = rainTotalInfo.value[i].total;
+      break;
+    }
+  }
 
-  // // 鎵撳嵃淇℃伅
+  // 鎵撳嵃淇℃伅
   // console.log("========================================");
   // console.log(`銆愭椂闂存埑銆�: ${new Date(currentTimeMs).toLocaleString()}`);
   // console.log(`銆愮疮璁¢檷闆ㄩ噺 R銆�: ${currentTotal !== null ? currentTotal.toFixed(2) : '鏈煡'} mm`);
@@ -879,7 +931,6 @@
     }
 
     // console.log('鑾峰彇鍒扮殑 serviceName:', serviceInfo);
-
     // 鏍规嵁 layer.json 鑾峰彇鏃堕棿杞翠俊鎭�
     const {
       waterTimestamps: timestamps,
@@ -904,7 +955,6 @@
         "YYYY-MM-DD HH:mm:ss"
       );
     }
-
     minFlowRate = watersMinHeight;
     maxFlowRate = watersMaxHeight;
   } catch (error) {
@@ -921,9 +971,7 @@
   // 鍥犱负杩欎釜鍑芥暟瀹炴椂妯℃嫙鐩戝惉涔熼渶瑕佷娇鐢紝鎵�浠ュ皝瑁呬簡涓�涓嚱鏁�
   await initializeSimulationData();
 });
-
 const shouldAutoPlay = ref(false);
-
 // 鐩戝惉 layerDate 鍙樺寲鍚庢爣璁板噯澶囨挱鏀�
 watch(
   () => layerDate.value,
@@ -934,7 +982,6 @@
   },
   { deep: true }
 );
-
 // 绛夊緟 finishPlay 鎴愬姛鍚庡啀鎾斁
 watchEffect(() => {
   if (shouldAutoPlay.value && finishPlay.value && !isPlaying.value) {
@@ -943,7 +990,6 @@
     shouldAutoPlay.value = false;
   }
 });
-
 // 鏍规嵁杩斿洖鏁版嵁鐨勪釜鏁板幓娓叉煋鏃堕棿杞�
 function updateTimelineRange() {
   if (waterTimestamps.value.length > 0) {
@@ -954,7 +1000,6 @@
     duration.value = (last - first) / 1000; // 姣杞
   }
 }
-
 onBeforeUnmount(() => {
   stopPlayback();
   destoryWaterPrimitive();

--
Gitblit v1.9.3