From e895212fa4215c50ce79ce4b448e064caf394776 Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期四, 03 七月 2025 17:35:46 +0800 Subject: [PATCH] 2025.7.3 动态溯源(待完成) --- 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