From d6e6f8b5b31e132e4597eb531168d3e88f3bda72 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 04 七月 2025 17:26:49 +0800
Subject: [PATCH] 2025.7.4 动态溯源

---
 src/components/monitor/DataSummary.vue |  107 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 82 insertions(+), 25 deletions(-)

diff --git a/src/components/monitor/DataSummary.vue b/src/components/monitor/DataSummary.vue
index 39a61f0..6733744 100644
--- a/src/components/monitor/DataSummary.vue
+++ b/src/components/monitor/DataSummary.vue
@@ -20,13 +20,13 @@
             size="small"
             :show-overflow-tooltip="true"
             border
-            row-class-name="t-row"
+            row-class-name="t-row-summary"
             cell-class-name="t-cell"
             header-row-class-name="t-header-row"
             header-cell-class-name="t-header-cell"
           >
             <el-table-column prop="factor" label="鍥犲瓙" width="66" />
-            <el-table-column prop="avg" label="鍧囧��" width="66" />
+            <el-table-column prop="avg" label="鍧囧��" width="84" />
             <el-table-column prop="min" label="鏈�灏忓��" width="66" />
             <el-table-column prop="max" label="鏈�澶у��" width="66" />
           </el-table>
@@ -38,6 +38,7 @@
 <script>
 import { FactorDatas } from '@/model/FactorDatas';
 import { factorName } from '@/constant/factor-name';
+import { windDir } from '@/constant/wind-dir';
 
 export default {
   props: {
@@ -56,29 +57,40 @@
       for (const key in this.factorDatas.factor) {
         if (Object.hasOwnProperty.call(this.factorDatas.factor, key)) {
           const f = this.factorDatas.factor[key];
-          let min,
-            max,
-            total = 0,
-            count = 0;
-          f.datas.forEach((v) => {
-            if (!min || v.factorData < min) {
-              min = v.factorData;
-            }
-            if (!max || v.factorData > max) {
-              max = v.factorData;
-            }
-            total += v.factorData;
-            count++;
-          });
-          let _avg = count == 0 ? 0 : Math.round((total / count) * 100) / 100;
-          if (isNaN(_avg)) _avg = '-';
-          list.push({
-            factorId: f.factorId,
-            factor: factorName[f.factorName],
-            min,
-            max,
-            avg: _avg
-          });
+          if (f.factorName == 'WIND_DIRECTION') {
+            const avg = this.windDirAvg(f);
+            list.push({
+              factorId: f.factorId,
+              factor: factorName[f.factorName],
+              min: '-',
+              max: '-',
+              avg: `${avg}(${windDir(avg)})`
+            });
+          } else {
+            let min,
+              max,
+              total = 0,
+              count = 0;
+            f.datas.forEach((v) => {
+              if (!min || v.factorData < min) {
+                min = v.factorData;
+              }
+              if (!max || v.factorData > max) {
+                max = v.factorData;
+              }
+              total += v.factorData;
+              count++;
+            });
+            let _avg = count == 0 ? 0 : Math.round((total / count) * 100) / 100;
+            if (isNaN(_avg)) _avg = '-';
+            list.push({
+              factorId: f.factorId,
+              factor: factorName[f.factorName],
+              min,
+              max,
+              avg: _avg
+            });
+          }
         }
       }
       return list;
@@ -88,6 +100,51 @@
         return this.selectFactorType.includes(v.factorId);
       });
     }
+  },
+  methods: {
+    windDirAvg(factor) {
+      let u = 0, // 涓滆タ鏂瑰悜鍒嗛噺鎬诲拰
+        v = 0, // 鍗楀寳鏂瑰悜鍒嗛噺鎬诲拰
+        c = 0; // 椋庡悜鏁版嵁涓暟
+      factor.datas.forEach((value) => {
+        let r = (value.factorData / 180.0) * Math.PI;
+        u += Math.sin(r);
+        v += Math.cos(r);
+        c++;
+      });
+      if (c != 0) {
+        const avgU = u / c;
+        const avgV = v / c;
+        let a = Math.atan(avgU / avgV);
+        /**
+         * avgU>0;avgV>0: 鐪熷疄瑙掑害澶勪簬绗竴璞¢檺锛屼慨姝e�间负+0掳
+         * avgU>0;avgV<0: 鐪熷疄瑙掑害澶勪簬绗簩璞¢檺锛屼慨姝e�间负+180掳
+         * avgU<0;avgV<0: 鐪熷疄瑙掑害澶勪簬绗笁璞¢檺锛屼慨姝e�间负+180掳
+         * avgU<0;avgV>0: 鐪熷疄瑙掑害澶勪簬绗洓璞¢檺锛屼慨姝e�间负+360掳
+         */
+        a = (a * 180.0) / Math.PI;
+        if (avgV > 0) {
+          a += avgU > 0 ? 0 : 360;
+        } else {
+          a += 180;
+        }
+        return parseInt(a);
+      } else {
+        return 0;
+      }
+    }
   }
 };
 </script>
+<style>
+.t-row-summary {
+  cursor: auto;
+  background-color: transparent !important;
+}
+</style>
+<style scoped>
+.el-table {
+  --el-table-row-hover-bg-color: transparent;
+  --el-table-current-row-bg-color: transparent;
+}
+</style>

--
Gitblit v1.9.3