From 8163711992a19be6c54fe0c11014f36904ea3669 Mon Sep 17 00:00:00 2001
From: wangjuncheng <1>
Date: 星期四, 08 五月 2025 16:43:44 +0800
Subject: [PATCH] change

---
 src/components/menu/TimeLine.vue |   97 ++++++++++++++++++++++++++++++++++--------------
 1 files changed, 69 insertions(+), 28 deletions(-)

diff --git a/src/components/menu/TimeLine.vue b/src/components/menu/TimeLine.vue
index 412c582..02b60f1 100644
--- a/src/components/menu/TimeLine.vue
+++ b/src/components/menu/TimeLine.vue
@@ -189,26 +189,37 @@
 };
 // 闄嶉洦鍙樺寲閮ㄥ垎
 // 闄嶉洦鏁版嵁鐩稿叧鍙橀噺
-// 闄嶉洦鏁版嵁鐩稿叧鍙橀噺
 let rainFallValues = ref([]); // 瀛樺偍鍘熷闄嶉洦閲忔暟鎹�
 let minRainValue = ref(Infinity);
 let maxRainValue = ref(-Infinity);
-
 // 鑾峰彇闄嶉洦鏁版嵁
 function getRainfallData() {
-  getRainfall().then((res) => {
-    rainFallValues.value = res.data.map(item => item.value); // 鎻愬彇闄嶉洦閲忓��
-    minRainValue.value = Math.min(...rainFallValues.value);
-    maxRainValue.value = Math.max(...rainFallValues.value);
-    console.log(minRainValue.value, maxRainValue.value, 'min and max rain values');
-  });
+  if (!selectedScheme.value || !selectedScheme.value.data) {
+    console.warn("selectedScheme 鎴� data 涓嶅瓨鍦�");
+    return;
+  }
+
+  // 娉ㄦ剰锛氭湁鏃� data 鍙兘鏄竴涓瓧绗︿覆锛堜緥濡� JSON 瀛楃涓诧級
+  let data = selectedScheme.value.data;
+
+  // 濡傛灉鏄瓧绗︿覆锛屽垯灏濊瘯瑙f瀽鎴愬璞�
+  if (typeof data === 'string') {
+    try {
+      data = JSON.parse(data);
+      console.log('瑙f瀽鍚庣殑 data:', data);
+    } catch (e) {
+      console.error("data 涓嶆槸鏈夋晥鐨� JSON 瀛楃涓�");
+      return;
+    }
+  }
+  const rainfallList = data.rainfalls;
+  // 鎻愬彇 intensity 鍊�
+  rainFallValues.value = rainfallList.map(r => r.intensity);
+  minRainValue.value = Math.min(...rainFallValues.value);
+  maxRainValue.value = Math.max(...rainFallValues.value);
+
+  console.log(minRainValue.value, maxRainValue.value, 'min and max rain values');
 }
-
-// // 绾挎�ф槧灏勫嚱鏁�
-// function mapValue(value, fromLow, fromHigh, toLow, toHigh) {
-//   return (value - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow;
-// }
-
 // 瀹氫箟闄嶉洦绛夌骇鍙婂叾瀵瑰簲鐨勮瑙夊弬鏁�
 const rainLevels = [
   {
@@ -256,7 +267,6 @@
     color: '#ADD8E6' // 榛戣壊锛岃薄寰佹瀬绔毚闆�
   }
 ];
-
 // 鏍规嵁闄嶉洦閲忚繑鍥炲搴旂殑闆ㄥ舰閰嶇疆
 function getRainLevel(rainValue) {
   for (let level of rainLevels) {
@@ -267,27 +277,49 @@
   // 榛樿鏃犻洦鐘舵��
   return { name: '鏃犻洦', size: 0.5, speed: 30, density: 20, color: '#F0F8FF' };
 }
+// 鏍规嵁鎾斁杩涘害鏇存柊澶╂皵鏁堟灉锛堝凡浼樺寲锛�
+let lastUsedIndex = -1; // 缂撳瓨涓婁竴娆′娇鐢ㄧ殑绱㈠紩锛岄槻姝㈤噸澶嶆洿鏂�
+let lastRainValue = null;
 
-// 鏍规嵁鎾斁杩涘害鏇存柊澶╂皵鏁堟灉
 function updateWeatherByProgress() {
+  if (rainFallValues.value.length === 0) return;
+
+  console.log(`鏃堕棿杞存�绘椂闀�: ${duration.value}, 褰撳墠鏃堕棿: ${currentTime.value}`); // 鎵撳嵃鏃堕棿杞翠俊鎭�
+
   const progress = currentTime.value / duration.value;
   const floatIndex = progress * (rainFallValues.value.length - 1);
-  const index = Math.floor(floatIndex);
-  const nextIndex = Math.min(index + 1, rainFallValues.value.length - 1);
+  const index = Math.floor(floatIndex);            // 褰撳墠绱㈠紩
+  const nextIndex = Math.min(index + 1, rainFallValues.value.length - 1); // 涓嬩竴绱㈠紩
+
   const currentRain = rainFallValues.value[index];
   const nextRain = rainFallValues.value[nextIndex];
-  // 鎻掑�煎洜瀛� [0, 1]
-  // const alpha = floatIndex - index;
 
-  // 鎻掑�煎緱鍒板綋鍓嶉檷闆ㄩ噺
-  // const rainValue = currentRain + (nextRain - currentRain) * alpha;
-  const rainValue = currentRain + (nextRain - currentRain);
-  // 鑾峰彇瀵瑰簲鐨勯洦褰㈤厤缃�
-  const rainLevel = getRainLevel(rainValue);
-  if (rainLevel.name === '鏃犻洦') {
-    mapUtils.delRain();
+  // 鍚敤鎻掑�硷紙alpha 骞虫粦杩囨浮锛�
+  const alpha = floatIndex - index;
+  const rainValue = currentRain + (nextRain - currentRain) * alpha;
+
+  // 鎵撳嵃褰撳墠澶勭悊鐨勯洦閲忔暟鎹�
+  console.log(`姝e湪澶勭悊鐨勯洦閲忔暟鎹偣: 褰撳墠=${currentRain}, 涓嬩竴涓�=${nextRain}, 鎻掑�煎悗=${rainValue.toFixed(2)}, 绱㈠紩=${index}`);
+
+  // 濡傛灉褰撳墠绱㈠紩鏈彉鍖栦笖鎻掑�煎樊寮備笉澶э紝璺宠繃閲嶅鏇存柊
+  if (index === lastUsedIndex && Math.abs(rainValue - lastRainValue) < 0.1) {
+    console.log('鐢变簬鏁版嵁鏃犳樉钁楀彉鍖栵紝璺宠繃鏈鏇存柊');
     return;
   }
+
+  lastUsedIndex = index;
+  lastRainValue = rainValue;
+
+  // 鑾峰彇瀵瑰簲鐨勯洦褰㈤厤缃�
+  const rainLevel = getRainLevel(rainValue);
+
+  if (rainLevel.name === '鏃犻洦') {
+    // 鏃犻洦鐘舵�侊細娓呴櫎闆ㄦ晥
+    mapUtils.delRain();
+    console.log('鎵ц浜嗘棤闆ㄧ姸鎬侊紝娓呴櫎浜嗛洦鏁�');
+    return;
+  }
+
   // 闈炴棤闆ㄧ姸鎬侊細鏋勫缓闆ㄦ淮鍙傛暟骞舵洿鏂伴洦鏁�
   const rainParams = {
     rainSize: rainLevel.size,
@@ -295,6 +327,7 @@
     rainDensity: rainLevel.density,
     rainColor: rainLevel.color
   };
+
   console.log('褰撳墠闆ㄩ噺鏁版嵁锛�', rainValue);
   console.log('褰撳墠闆ㄥ舰锛�', rainLevel);
   // 璋冪敤宸ュ叿鏂规硶鏇存柊闆ㄦ晥
@@ -303,11 +336,15 @@
 const stopPlayback = () => {
   clearInterval(playInterval);
 };
+
 const skipForward = () =>
   (currentTime.value = Math.min(currentTime.value + 1, duration.value)); // 鍚戝墠璺宠浆1绉�
+
 const skipBackward = () =>
   (currentTime.value = Math.max(currentTime.value - 1, 0)); // 鍚戝悗璺宠浆1绉�
+
 const toggleSpeedMenu = () => (showSpeedMenu.value = !showSpeedMenu.value);
+
 // 璁剧疆鎾斁閫熺巼
 const setPlaybackRate = (rate) => {
   playbackRate.value = rate;
@@ -322,6 +359,7 @@
   emit("timeUpdate", progressPercentage.value);
   isPlaying.value = false;
   emit("isPlaying", false);
+
   // 閿�姣佺幇鏈夌殑姘翠綋妯℃嫙灞�
   if (isWaterPrimitiveCreated.value) {
     destoryWaterPrimitive();
@@ -342,7 +380,7 @@
       message: "璇峰厛鍚姩姘翠綋妯℃嫙鍚庡啀杩涜鏃堕棿杞磋烦杞��",
       type: "warning",
     });
-    return;
+    return; // 闃绘鍚庣画閫昏緫鎵ц
   }
   const rect = timelineTrack.value.getBoundingClientRect();
   const percentage = (event.clientX - rect.left) / rect.width;
@@ -358,7 +396,10 @@
       "Time:",
       dayjs(waterTimestamps.value[closestIndex]).format("YYYY-MM-DD HH:mm:ss")
     );
+    // 璋冪敤璺宠浆鎺ュ彛锛屼紶閫掔储寮曞��
     setTimeForWaterSimulation(closestIndex);
+
+    // 濡傛灉褰撳墠鏄殏鍋滅姸鎬侊紝璋冪敤 pauseWaterSimulation
     if (!isPlaying.value) {
       pauseWaterSimulation();
     }

--
Gitblit v1.9.3