From e7557e07fbdaa9247024b301e1a2ba41390741ad Mon Sep 17 00:00:00 2001 From: guonan <guonan201020@163.com> Date: 星期四, 10 七月 2025 16:55:24 +0800 Subject: [PATCH] 123 --- src/components/menu/CrossSectionalAnalysis.vue | 1 src/components/monifangzhen/echartInfo.vue | 90 +++++++++++++++++++++++++++++++++++++-------- 2 files changed, 75 insertions(+), 16 deletions(-) diff --git a/src/components/menu/CrossSectionalAnalysis.vue b/src/components/menu/CrossSectionalAnalysis.vue index 3923cee..a06fbb1 100644 --- a/src/components/menu/CrossSectionalAnalysis.vue +++ b/src/components/menu/CrossSectionalAnalysis.vue @@ -298,6 +298,7 @@ const endPoint = `${point2.longitude},${point2.latitude}`; const result = await getCrossSectionInfo(startPoint, endPoint); simStore.crossSection = result + EventBus.emit("redraw-dM") console.log(result,'杩欓噷鏄儹妤犻渶瑕佺殑鏂潰鏁版嵁'); isUploaded.value = true; diff --git a/src/components/monifangzhen/echartInfo.vue b/src/components/monifangzhen/echartInfo.vue index 2f5b8af..4853ce1 100644 --- a/src/components/monifangzhen/echartInfo.vue +++ b/src/components/monifangzhen/echartInfo.vue @@ -159,8 +159,22 @@ EventBus.on("clear-dM", () => { chart2Data.value.stopUpdating(); chart2Data.value.resetLoading(); - clearInterval(intervalId2); - intervalId2 = null; + if (intervalId2) { + clearInterval(intervalId2); + intervalId2 = null; + } + if (stopNowTimeWatch) { + stopNowTimeWatch(); // 鍋滄 nowTime 鐨勭洃鍚� + stopNowTimeWatch = null; + } +}); + +// 閲嶆柊缁樺埗鏂潰鏃讹紝閲嶆柊鍚姩 nowTime 鐩戝惉 +EventBus.on("redraw-dM", () => { + if (chart2Data.value) { + chart2Data.value.startNowTimeWatch(); + chart2Data.value.loadJsonData(); + } }); // 娓呴櫎濞佽儊瀵硅薄涓殑鏁版嵁 @@ -536,6 +550,7 @@ }; }; +let stopNowTimeWatch = null; // 瀛樺偍 watch 鐨勫仠姝㈠嚱鏁� const setEcharts2 = () => { const chartDom = document.getElementById("echarts2"); const myChart2 = echarts.init(chartDom); @@ -548,6 +563,7 @@ let xAxisData = ref(["00:00"]); let updateInterval = ref(null); let dataIndex = ref(0); + let lastProcessedTime = ref(0); // 璁板綍涓婃澶勭悊鐨勬椂闂存埑 // 灏嗗悇绉嶆椂闂存牸寮忚浆鎹负鏃堕棿鎴� const parseTimeToTimestamp = (time) => { @@ -611,33 +627,52 @@ }; }; - // 鏍规嵁褰撳墠鏃堕棿鍔犺浇鏁版嵁 - const loadDataByCurrentTime = () => { + // 鏍规嵁鎸囧畾鏃堕棿鍔犺浇鏁版嵁 + const loadDataByTime = (targetTime) => { if (!flowData.value.length) return; - // 灏唍owTime.value杞崲涓烘椂闂存埑 - const currentTimestamp = parseTimeToTimestamp(nowTime.value); + const currentTimestamp = parseTimeToTimestamp(targetTime); // 鎵惧埌褰撳墠鏃堕棿鍙婁箣鍓嶇殑鎵�鏈夋暟鎹� const pastData = flowData.value.filter( - (item) => item.time <= currentTimestamp + (item) => parseTimeToTimestamp(item.time) <= currentTimestamp ); if (pastData.length) { // 涓�娆℃�у姞杞藉巻鍙叉暟鎹� data1.value = pastData.map((item) => item.flowRate); data2.value = pastData.map((item) => item.velocity); - data3.value = pastData.map((item) => item.depth); // 鍔犺浇娣卞害鏁版嵁 + data3.value = pastData.map((item) => item.depth); xAxisData.value = pastData.map((item) => formatTime(item.time)); // 璁剧疆浠庝笅涓�涓暟鎹偣寮�濮嬬户缁洿鏂� dataIndex.value = pastData.length; + + // 鏇存柊鏈�鍚庡鐞嗙殑鏃堕棿 + lastProcessedTime.value = currentTimestamp; } else { // 娌℃湁鍘嗗彶鏁版嵁锛屽垵濮嬪寲绌烘暟鎹� resetLoading(); } updateChart(); + }; + + // 澶勭悊鏃堕棿璺冲彉 + const handleTimeJump = (newTime) => { + const newTimestamp = parseTimeToTimestamp(newTime); + const timeDiff = Math.abs(newTimestamp - lastProcessedTime.value); + + // 濡傛灉鏃堕棿鍙樺寲瓒呰繃5绉掞紝璁や负鏄ぇ骞呰烦鍙� + if (timeDiff > 5000) { + stopUpdating(); + loadDataByTime(newTime); + + // 濡傛灉涓嶆槸鏆傚仠鐘舵�侊紝缁х画鏇存柊 + if (!isPaused.value) { + startUpdating(); + } + } }; // 鏃堕棿鏍煎紡鍖栧嚱鏁帮紙鏃堕棿鎴宠浆"HH:mm:ss"锛� @@ -653,13 +688,13 @@ const crossSectionData = simStore.crossSection; if (crossSectionData?.length) { flowData.value = crossSectionData; - loadDataByCurrentTime(); // 鍔犺浇褰撳墠鏃堕棿涔嬪墠鐨勬暟鎹� + loadDataByTime(nowTime.value); // 鍔犺浇褰撳墠鏃堕棿涔嬪墠鐨勬暟鎹� } else { resetLoading(); } }; - // 鍥捐〃閰嶇疆 + // 鍥捐〃閰嶇疆锛堜繚鎸佷笉鍙橈級 const updateChart = () => { const option = { animation: false, @@ -694,7 +729,7 @@ yAxis: [ { type: "value", - name: "娴侀噺(m鲁/min)", + name: "娴侀噺(m鲁/s)", min: 0, ...calculateDynamicYAxis(data1.value), axisLabel: { color: "#fff" }, @@ -750,22 +785,23 @@ myChart2.setOption(option, true); }; - // 鏁版嵁鏇存柊 + // 鏁版嵁鏇存柊锛堜繚鎸佷笉鍙橈級 const updateData = () => { if (dataIndex.value < flowData.value.length) { const item = flowData.value[dataIndex.value]; data1.value.push(item.flowRate); data2.value.push(item.velocity); - data3.value.push(item.depth); // 鏇存柊娣卞害鏁版嵁 + data3.value.push(item.depth); xAxisData.value.push(formatTime(item.time)); dataIndex.value++; + lastProcessedTime.value = parseTimeToTimestamp(item.time); updateChart(); } else { stopUpdating(); } }; - // 鎺у埗鏂规硶 + // 鎺у埗鏂规硶锛堜繚鎸佷笉鍙橈級 const startUpdating = (interval = 1000) => { if (!updateInterval.value) { updateInterval.value = setInterval(updateData, interval); @@ -784,13 +820,34 @@ dataIndex.value = 0; data1.value = [0]; data2.value = [0]; - data3.value = [0]; // 閲嶇疆娣卞害鏁版嵁 + data3.value = [0]; xAxisData.value = ["00:00"]; + lastProcessedTime.value = 0; updateChart(); }; + // 鐩戝惉鏃堕棿杞磋烦杞� + const startNowTimeWatch = () => { + if (stopNowTimeWatch) stopNowTimeWatch(); // 鍏堝仠姝㈡棫鐨勭洃鍚� + stopNowTimeWatch = watch(nowTime, (newTime) => { + if (!isPaused.value) { + handleTimeJump(newTime); + } + }); + }; + + startNowTimeWatch(); // 鍒濆鍖� loadJsonData(); + + // 鐩戝惉鍏ㄥ眬鏆傚仠鐘舵�� + watch(isPaused, (newVal) => { + if (newVal) { + stopUpdating(); + } else { + startUpdating(); + } + }); return { myChart2, @@ -798,6 +855,7 @@ stopUpdating, loadJsonData, resetLoading, + startNowTimeWatch, }; }; @@ -805,7 +863,6 @@ watch( () => simStore.crossSection, (newVal) => { - // 纭畾鏃堕棿杞存槸鎾斁鐨勭姸鎬� if (newVal && !isPaused.value) { chart2Data.value.stopUpdating(); chart2Data.value.startUpdating(); @@ -847,6 +904,7 @@ EventBus.off("reset-table"); // 绉婚櫎浜嬩欢鐩戝惉 EventBus.off("clear-echart"); EventBus.off("clear-dM"); + EventBus.off("redraw-dM"); EventBus.off("time-update"); // 娓呯悊浜嬩欢鐩戝惉 }); </script> -- Gitblit v1.9.3