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