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