From ec763e1cb7dca873caf4afbc0dfde047b51753d3 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 17 十月 2025 17:26:54 +0800
Subject: [PATCH] 2025.10.17
---
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