rui.jiang vor 6 Monaten
Ursprung
Commit
fba5e234eb
51 geänderte Dateien mit 1718 neuen und 236 gelöschten Zeilen
  1. 8 1
      src/api/performance.js
  2. 2 2
      src/components/map/index.vue
  3. 1 0
      src/icons/svg/overview.svg
  4. 0 0
      src/icons/svg/overview1.svg
  5. 1 0
      src/icons/svg/overview2.svg
  6. 6 1
      src/styles/global.scss
  7. 4 1
      src/views/home/components/Menu.vue
  8. 1 0
      src/views/laserRangeFinder/index.vue
  9. 17 0
      src/views/overview/components/analysis_information/index.vue
  10. 17 0
      src/views/overview/components/cp/index.vue
  11. 17 0
      src/views/overview/components/cp_trend/index.vue
  12. 17 0
      src/views/overview/components/cp_windspeed/index.vue
  13. 17 0
      src/views/overview/components/data_integrity_minute/index.vue
  14. 17 0
      src/views/overview/components/data_integrity_second/index.vue
  15. 17 0
      src/views/overview/components/fault/index.vue
  16. 17 0
      src/views/overview/components/min_pitch/index.vue
  17. 17 0
      src/views/overview/components/pitch_generator_speed/index.vue
  18. 17 0
      src/views/overview/components/pitch_power/index.vue
  19. 17 0
      src/views/overview/components/pitch_tsr_cp/index.vue
  20. 17 0
      src/views/overview/components/power_curve/index.vue
  21. 17 0
      src/views/overview/components/power_scatter/index.vue
  22. 17 0
      src/views/overview/components/power_scatter_2D/index.vue
  23. 17 0
      src/views/overview/components/production_indicator/index.vue
  24. 17 0
      src/views/overview/components/rated_power_windspeed/index.vue
  25. 17 0
      src/views/overview/components/rated_windspeed/index.vue
  26. 17 0
      src/views/overview/components/speed_power/index.vue
  27. 9 0
      src/views/overview/components/speed_torque/index.vue
  28. 17 0
      src/views/overview/components/temperature_environment/index.vue
  29. 17 0
      src/views/overview/components/temperature_large_components/index.vue
  30. 17 0
      src/views/overview/components/tsr/index.vue
  31. 17 0
      src/views/overview/components/tsr_cp_power/index.vue
  32. 19 0
      src/views/overview/components/tsr_cp_power_scatter/index.vue
  33. 17 0
      src/views/overview/components/tsr_trend/index.vue
  34. 17 0
      src/views/overview/components/tsr_windspeed/index.vue
  35. 17 0
      src/views/overview/components/wind_direction_frequency/index.vue
  36. 17 0
      src/views/overview/components/wind_spee/index.vue
  37. 17 0
      src/views/overview/components/wind_speed_frequency/index.vue
  38. 17 0
      src/views/overview/components/yaw_error/index.vue
  39. 17 0
      src/views/overview/components/yaw_error_density/index.vue
  40. 177 0
      src/views/overview/index.vue
  41. 252 0
      src/views/overview/js/assetssType.js
  42. 212 81
      src/views/performance/assetssDetail.vue
  43. 109 0
      src/views/performance/batchDetail.vue
  44. 202 80
      src/views/performance/components/EditAnalysis.vue
  45. 160 37
      src/views/performance/components/PlotlyCharts.vue
  46. 17 12
      src/views/performance/components/analysisEvent.vue
  47. 0 1
      src/views/performance/customAnalysis.vue
  48. 2 1
      src/views/performance/editAssets.vue
  49. 2 5
      src/views/system/menuMag/components/editDialog.vue
  50. 31 4
      src/views/system/menuMag/index.vue
  51. 10 10
      vue.config.js

+ 8 - 1
src/api/performance.js

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2024-06-03 09:29:50
- * @LastEditTime: 2024-09-24 13:34:34
+ * @LastEditTime: 2025-01-06 16:37:46
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/api/performance。.js
@@ -258,3 +258,10 @@ export function getRportType(data) {
     params: data,
   });
 }
+export function queryAllTypeScada() {
+  // /energy-manage-service/dataTransferType/queryAllType
+  return request({
+    url: "/energy-manage-service/dataTransferType/queryAllType",
+    method: "get",
+  });
+}

+ 2 - 2
src/components/map/index.vue

@@ -196,8 +196,8 @@ export default {
         new TileLayer({
           source: new XYZ({
             // url: "http://127.0.0.1:8010/tiles/{z}/{x}/{y}.png", //本地
-            // url: "http://192.168.50.235/tiles/{z}/{x}/{y}.png", //内网
-            url: "http://106.120.102.238:18000/tiles/{z}/{x}/{y}.png", //外网
+            url: "http://192.168.50.235/tiles/{z}/{x}/{y}.png", //内网
+            // url: "http://106.120.102.238:18000/tiles/{z}/{x}/{y}.png", //外网
             // url: "http://10.96.137.5:9080/tiles/{z}/{x}/{y}.png", //大~#@唐
           }),
         }),

+ 1 - 0
src/icons/svg/overview.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736408487102" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3556" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M996.352 216.064A42.666667 42.666667 0 0 1 1024 256v725.333333a42.666667 42.666667 0 0 1-42.666667 42.666667H42.666667a42.666667 42.666667 0 0 1-42.666667-42.666667V554.666667a42.666667 42.666667 0 0 1 64.64-36.608l181.333333 108.8 147.370667-184.192a42.666667 42.666667 0 0 1 52.437333-11.52l226.517334 113.28 276.906666-316.544a42.666667 42.666667 0 0 1 47.146667-11.818667zM938.666667 369.493333l-223.872 255.872a42.666667 42.666667 0 0 1-51.2 10.069334l-225.152-112.554667-149.12 186.410667a42.666667 42.666667 0 0 1-55.253334 9.898666L85.333333 630.016V938.666667h853.333334V369.493333z" p-id="3557" fill="#909399"></path><path d="M1010.56 32.938667a42.666667 42.666667 0 0 1 1.834667 60.288l-341.333334 362.666666a42.666667 42.666667 0 0 1-50.133333 8.96l-225.152-112.64-149.12 186.453334A42.666667 42.666667 0 0 1 187.733333 546.133333l-170.666666-128a42.666667 42.666667 0 0 1 51.2-68.266666l137.557333 103.168L350.72 272a42.666667 42.666667 0 0 1 52.394667-11.52l227.626666 113.834667 319.573334-339.584a42.666667 42.666667 0 0 1 60.288-1.792z" p-id="3558" fill="#909399"></path><path d="M726.186667 115.029333a42.666667 42.666667 0 0 1 33.450666-50.218666l213.333334-42.666667a42.666667 42.666667 0 0 1 16.725333 83.712l-213.333333 42.666667a42.666667 42.666667 0 0 1-50.218667-33.493334z" p-id="3559" fill="#909399"></path></svg>

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
src/icons/svg/overview1.svg


+ 1 - 0
src/icons/svg/overview2.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736408575390" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3929" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M128 469.33h341.33V128H128v341.33z m85.33-256H384V384H213.33V213.33zM938.16 300.03L724.4 86.27 509.54 301.12 723.3 514.88l214.86-214.85zM724.4 206.95l93.08 93.08-94.18 94.17-93.08-93.08 94.18-94.17zM128 896h341.33V554.67H128V896z m85.33-256H384v170.67H213.33V640zM554.67 896H896V554.67H554.67V896zM640 640h170.67v170.67H640V640z" fill="#909399" p-id="3930"></path></svg>

+ 6 - 1
src/styles/global.scss

@@ -7,7 +7,12 @@
 .el-menu-item.is-active {
   color: var(--primary-color) !important;
 }
-
+.el-menu--horizontal > .el-menu-item.is-active {
+  border-bottom: 2px solid var(--primary-color) !important;
+}
+.el-menu--horizontal > .el-submenu.is-active .el-submenu__title {
+  border-bottom: 2px solid var(--primary-color) !important;
+}
 .el-dialog__header {
   background-color: var(--primary-color) !important;
   color: var(--text-color) !important;

+ 4 - 1
src/views/home/components/Menu.vue

@@ -49,7 +49,9 @@
     >
       <template v-for="item in routerList">
         <el-submenu
-          v-if="item.children && item.children.length"
+          v-if="
+            item.children && item.children.length && item.meta?.hidden === false
+          "
           :index="item.path"
         >
           <template slot="title">
@@ -154,6 +156,7 @@ export default {
       ...this.routerList,
       ...this.$store.state.auth.dynamicRouter,
     ];
+    console.log(this.routerList, "routerList");
   },
   computed: {
     ...mapState({

+ 1 - 0
src/views/laserRangeFinder/index.vue

@@ -1,4 +1,5 @@
 <template>
+  <!-- 激光测距仪页面 -->
   <div class="global-variable">
     <div class="searchbox">
       <el-collapse v-model="activeNames">

+ 17 - 0
src/views/overview/components/analysis_information/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 17:40:53
+ * @LastEditTime: 2025-01-09 17:50:49
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/assetssMsg/index.vue
+-->
+<template>
+  <div>分析信息</div>
+</template>
+<script>
+export default {
+  name: "AnalysisInformation",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/cp/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 18:05:58
+ * @LastEditTime: 2025-01-10 09:28:15
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/cp/index.vue
+-->
+<template>
+  <div>风能利用系数和有功功率分析</div>
+</template>
+<script>
+export default {
+  name: "cp",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/cp_trend/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 18:06:09
+ * @LastEditTime: 2025-01-10 09:20:39
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/cp_trend/index.vue
+-->
+<template>
+  <div>风能利用系数时序分析</div>
+</template>
+<script>
+export default {
+  name: "cpTrend",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/cp_windspeed/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 18:08:00
+ * @LastEditTime: 2025-01-10 09:20:32
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/cp_windspeed/index.vue
+-->
+<template>
+  <div>风能利用系数和风速分析</div>
+</template>
+<script>
+export default {
+  name: "cpWindspeed",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/data_integrity_minute/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 17:54:02
+ * @LastEditTime: 2025-01-09 17:54:35
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/data_integrity_minute/index.vue
+-->
+<template>
+  <div>scada分钟级数据</div>
+</template>
+<script>
+export default {
+  name: "DataIntegrityMinute",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/data_integrity_second/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 17:55:01
+ * @LastEditTime: 2025-01-10 09:20:15
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/data_integrity_second/index.vue
+-->
+<template>
+  <div>秒级钟级SCADA数据完整度分析</div>
+</template>
+<script>
+export default {
+  name: "DataIntegritySecond",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/fault/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:26:53
+ * @LastEditTime: 2025-01-10 09:27:10
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/fault/index.vue
+-->
+<template>
+  <div>故障分析</div>
+</template>
+<script>
+export default {
+  name: "fault",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/min_pitch/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 18:08:13
+ * @LastEditTime: 2025-01-10 09:19:48
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/min_pitch/index.vue
+-->
+<template>
+  <div>最小桨距角分析</div>
+</template>
+<script>
+export default {
+  name: "minPitch",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/pitch_generator_speed/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 18:09:25
+ * @LastEditTime: 2025-01-10 09:19:31
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/pitch_generator_speed/index.vue
+-->
+<template>
+  <div>变桨和发电机转速协调性分析</div>
+</template>
+<script>
+export default {
+  name: "pitchGeneratorSpeed",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/pitch_power/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 18:09:41
+ * @LastEditTime: 2025-01-10 09:19:07
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/pitch_power/index.vue
+-->
+<template>
+  <div>变桨和有功功率协调性分析</div>
+</template>
+<script>
+export default {
+  name: "pitchPower",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/pitch_tsr_cp/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 18:09:55
+ * @LastEditTime: 2025-01-10 09:18:38
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/pitch_tsr_cp/index.vue
+-->
+<template>
+  <div>变桨和叶尖速比及风能利用系数分析</div>
+</template>
+<script>
+export default {
+  name: "pitchTsrCp",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/power_curve/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 18:10:08
+ * @LastEditTime: 2025-01-10 09:18:18
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/power_curve/index.vue
+-->
+<template>
+  <div>有功功率曲线分析</div>
+</template>
+<script>
+export default {
+  name: "powerCurve",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/power_scatter/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 18:10:22
+ * @LastEditTime: 2025-01-10 09:17:58
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/power_scatter/index.vue
+-->
+<template>
+  <div>逐月有功功率散点3D分析</div>
+</template>
+<script>
+export default {
+  name: "powerScatter",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/power_scatter_2D/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 18:10:35
+ * @LastEditTime: 2025-01-10 09:17:39
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/power_scatter_2D/index.vue
+-->
+<template>
+  <div>逐月有功功率散点2D分析</div>
+</template>
+<script>
+export default {
+  name: "powerScatter2D",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/production_indicator/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:25:25
+ * @LastEditTime: 2025-01-10 09:25:49
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/production_indicator/index.vue
+-->
+<template>
+  <div>生产指标效能分析</div>
+</template>
+<script>
+export default {
+  name: "production_indicator",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/rated_power_windspeed/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 18:10:47
+ * @LastEditTime: 2025-01-10 09:17:15
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/rated_power_windspeed/index.vue
+-->
+<template>
+  <div>额定功率和风速分析</div>
+</template>
+<script>
+export default {
+  name: "ratedPowerWindspeed",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/rated_windspeed/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:08:56
+ * @LastEditTime: 2025-01-10 09:17:01
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/rated_windspeed/index.vue
+-->
+<template>
+  <div>额定风速分析</div>
+</template>
+<script>
+export default {
+  name: "ratedWindspeed",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/speed_power/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:09:17
+ * @LastEditTime: 2025-01-10 09:16:40
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/speed_power/index.vue
+-->
+<template>
+  <div>发电机转速和有功功率分析</div>
+</template>
+<script>
+export default {
+  name: "speedPower",
+};
+</script>
+<style scoped lang="scss"></style>

+ 9 - 0
src/views/overview/components/speed_torque/index.vue

@@ -0,0 +1,9 @@
+<template>
+  <div>发电机转速和转矩分析</div>
+</template>
+<script>
+export default {
+  name: "speedTorque",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/temperature_environment/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:09:46
+ * @LastEditTime: 2025-01-10 09:15:43
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/temperature_environment/index.vue
+-->
+<template>
+  <div>环境温度传感器分析</div>
+</template>
+<script>
+export default {
+  name: "temperatureEnvironment",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/temperature_large_components/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:10:00
+ * @LastEditTime: 2025-01-10 09:15:34
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/temperature_large_components/index.vue
+-->
+<template>
+  <div>大部件温度传感器分析</div>
+</template>
+<script>
+export default {
+  name: "temperatureLargeComponents",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/tsr/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:10:11
+ * @LastEditTime: 2025-01-10 09:15:14
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/tsr/index.vue
+-->
+<template>
+  <div>叶尖速比和有功功率分析</div>
+</template>
+<script>
+export default {
+  name: "tsr",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/tsr_cp_power/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:10:24
+ * @LastEditTime: 2025-01-10 09:15:01
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/tsr_cp_power/index.vue
+-->
+<template>
+  <div>叶尖速比-风能利用系数-功率分析</div>
+</template>
+<script>
+export default {
+  name: "tsrCpPower",
+};
+</script>
+<style scoped lang="scss"></style>

+ 19 - 0
src/views/overview/components/tsr_cp_power_scatter/index.vue

@@ -0,0 +1,19 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:22:59
+ * @LastEditTime: 2025-01-10 09:23:45
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/index.vue
+-->
+<template>
+  <div>叶尖速比-Cp-功率散点分析</div>
+</template>
+<script>
+export default {
+  components: {
+    name: "tsr_cp_power_scatter",
+  },
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/tsr_trend/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:10:39
+ * @LastEditTime: 2025-01-10 09:14:38
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/tsr_trend/index.vue
+-->
+<template>
+  <div>叶尖速比时序分析</div>
+</template>
+<script>
+export default {
+  name: "tsrTrend",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/tsr_windspeed/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:10:59
+ * @LastEditTime: 2025-01-10 09:14:00
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/tsr_windspeed/index.vue
+-->
+<template>
+  <div>叶尖速比和风速分析</div>
+</template>
+<script>
+export default {
+  name: "tsrWindspeed",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/wind_direction_frequency/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:11:12
+ * @LastEditTime: 2025-01-10 09:13:44
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/wind_direction_frequency/index.vue
+-->
+<template>
+  <div>风向玫瑰分析</div>
+</template>
+<script>
+export default {
+  name: "windDirectionFrequency",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/wind_spee/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:11:23
+ * @LastEditTime: 2025-01-10 09:13:17
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/wind_spee/index.vue
+-->
+<template>
+  <div>风速均值分析</div>
+</template>
+<script>
+export default {
+  name: "windSpee",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/wind_speed_frequency/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:11:34
+ * @LastEditTime: 2025-01-10 09:12:56
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/wind_speed_frequency/index.vue
+-->
+<template>
+  <div>风速频率分析</div>
+</template>
+<script>
+export default {
+  name: "windSpeedFrequency",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/yaw_error/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:24:14
+ * @LastEditTime: 2025-01-10 09:24:37
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/yaw_error/index.vue
+-->
+<template>
+  <div>静态偏航误差分析</div>
+</template>
+<script>
+export default {
+  name: "yaw_error",
+};
+</script>
+<style scoped lang="scss"></style>

+ 17 - 0
src/views/overview/components/yaw_error_density/index.vue

@@ -0,0 +1,17 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-10 09:26:12
+ * @LastEditTime: 2025-01-10 09:26:31
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/yaw_error_density/index.vue
+-->
+<template>
+  <div>动态偏航误差分析</div>
+</template>
+<script>
+export default {
+  name: "yaw_error_density",
+};
+</script>
+<style scoped lang="scss"></style>

+ 177 - 0
src/views/overview/index.vue

@@ -0,0 +1,177 @@
+<template>
+  <div class="global-variable">
+    <div class="left">
+      <el-input
+        class="filterInput"
+        placeholder="输入关键字进行过滤"
+        v-model="filterText"
+      >
+      </el-input>
+      <el-tree
+        class="filter-tree"
+        :data="data"
+        highlight-current
+        :props="defaultProps"
+        default-expand-all
+        :filter-node-method="filterNode"
+        ref="tree"
+      >
+      </el-tree>
+    </div>
+    <div class="right">
+      <el-menu
+        :default-active="activeIndex"
+        class="el-menu-demo"
+        mode="horizontal"
+        @select="handleSelect"
+      >
+        <template v-for="menuItem in assetssTypeData">
+          <el-submenu
+            :index="menuItem.type"
+            v-if="menuItem.children && menuItem.children.length"
+          >
+            <template slot="title">{{ menuItem.label }}</template>
+
+            <el-menu-item
+              :index="submenuItem.type"
+              v-for="submenuItem in menuItem.children"
+              >{{ submenuItem.label }}</el-menu-item
+            >
+          </el-submenu>
+          <el-menu-item :index="menuItem.type" v-else>{{
+            menuItem.label
+          }}</el-menu-item>
+        </template>
+      </el-menu>
+      <!-- 动态渲染组件 -->
+      <component :is="currentComponent"></component>
+    </div>
+  </div>
+</template>
+
+<script>
+import { assetssType } from "./js/assetssType";
+export default {
+  data() {
+    return {
+      filterText: "",
+      data: [
+        {
+          id: 1,
+          label: "一级 1",
+          children: [
+            {
+              id: 4,
+              label: "二级 1-1",
+              children: [
+                {
+                  id: 9,
+                  label: "三级 1-1-1",
+                },
+                {
+                  id: 10,
+                  label: "三级 1-1-2",
+                },
+              ],
+            },
+          ],
+        },
+        {
+          id: 2,
+          label: "一级 2",
+          children: [
+            {
+              id: 5,
+              label: "二级 2-1",
+            },
+            {
+              id: 6,
+              label: "二级 2-2",
+            },
+          ],
+        },
+        {
+          id: 3,
+          label: "一级 3",
+          children: [
+            {
+              id: 7,
+              label: "二级 3-1",
+            },
+            {
+              id: 8,
+              label: "二级 3-2",
+            },
+          ],
+        },
+      ],
+      defaultProps: {
+        children: "children",
+        label: "label",
+      },
+      currentComponent: () =>
+        import("./components/analysis_information/index.vue"), // 默认加载AnalysisInformation组件
+      assetssTypeData: [...assetssType],
+      activeIndex: "analysis_information", // 默认选中的菜单项
+    };
+  },
+  watch: {
+    filterText(val) {
+      this.$refs.tree.filter(val);
+    },
+  },
+
+  methods: {
+    // 点击树形节点时
+    handleNodeClick(data) {
+      console.log(data);
+      // 根据树形节点的label动态更新右侧菜单选中的项
+      //   this.updateMenuActiveIndex(data);
+    },
+
+    // 过滤树形节点的方法
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+
+    // 菜单选中项的事件
+    handleSelect(key, keyPath) {
+      console.log(key, keyPath);
+      this.currentComponent = () => import(`./components/${key}/index.vue`);
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.global-variable {
+  display: flex;
+  .left {
+    width: 200px;
+    border-right: 1px solid #ebeef5;
+    padding-right: 20px;
+    .filterInput {
+      margin: 20px 0;
+    }
+  }
+  .right {
+    flex: 1;
+    padding-left: 20px;
+    overflow: hidden;
+    /* 横向滚动设置 */
+    .el-menu-demo {
+      max-width: 100%; /* 容器宽度为100% */
+      white-space: nowrap; /* 阻止换行 */
+      overflow-x: auto; /* 允许横向滚动 */
+      display: flex; /* 让子菜单元素保持在同一行 */
+    }
+  }
+  .el-menu-demo {
+    border-bottom: 1px solid #ebeef5;
+  }
+  ::v-deep .el-submenu__title {
+    padding: 0 10px !important;
+  }
+}
+</style>

+ 252 - 0
src/views/overview/js/assetssType.js

@@ -0,0 +1,252 @@
+/*
+ * @Author: your name
+ * @Date: 2025-01-09 16:34:15
+ * @LastEditTime: 2025-01-10 10:32:00
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/performance/js/assetssType.js
+ */
+export const assetssType = [
+  {
+    id: "1",
+    label: "分析信息",
+    type: "analysis_information",
+  },
+  {
+    id: "2",
+    label: "数据完整度分析",
+    type: "data_integrity",
+    children: [
+      {
+        id: "2-1",
+        label: "分钟级SCADA数据完整度分析",
+        type: "data_integrity_minute",
+      },
+      {
+        id: "2-2",
+        label: "秒级钟级SCADA数据完整度分析",
+        type: "data_integrity_second",
+      },
+    ],
+  },
+  {
+    id: "3",
+    label: "风资源分析",
+    type: "wind_resource",
+    children: [
+      {
+        id: "3-1",
+        label: "风速频率分析",
+        type: "wind_speed_frequency",
+      },
+      {
+        id: "3-2",
+        label: "风向玫瑰分析",
+        type: "wind_direction_frequency",
+      },
+      {
+        id: "3-3",
+        label: "风速均值分析",
+        type: "wind_spee",
+      },
+    ],
+  },
+  {
+    id: "4",
+    label: "功率曲线分析",
+    type: "power_curve_all",
+    children: [
+      {
+        id: "4-1",
+        label: "有功功率曲线分析",
+        type: "power_curve",
+      },
+      {
+        id: "4-2",
+        label: "逐月有功功率散点2D分析",
+        type: "power_scatter_2D",
+      },
+      {
+        id: "4-3",
+        label: "逐月有功功率散点3D分析",
+        type: "power_scatter",
+      },
+    ],
+  },
+  {
+    id: "5",
+    label: "额定功率分析",
+    type: "rated_power",
+    children: [
+      {
+        id: "5-1",
+        label: "额定功率和风速分析",
+        type: "rated_power_windspeed",
+      },
+      {
+        id: "5-2",
+        label: "额定风速分析",
+        type: "rated_windspeed",
+      },
+    ],
+  },
+  {
+    id: "6",
+    label: "性能特征分析",
+    type: "performance_characteristics",
+    children: [
+      {
+        id: "6-1",
+        label: "风能利用系数和有功功率分析",
+        type: "cp",
+      },
+      {
+        id: "6-2",
+        label: "风能利用系数和风速分析",
+        type: "cp_windspeed",
+      },
+      {
+        id: "6-3",
+        label: "风能利用系数时序分析",
+        type: "cp_trend",
+      },
+      {
+        id: "6-4",
+        label: "叶尖速比和有功功率分析",
+        type: "tsr",
+      },
+      {
+        id: "6-5",
+        label: "叶尖速比和风速分析",
+        type: "tsr_windspeed",
+      },
+      {
+        id: "6-6",
+        label: "叶尖速比时序分析",
+        type: "tsr_trend",
+      },
+      {
+        id: "6-7",
+        label: "叶尖速比-风能利用系数-功率分析",
+        type: "tsr_cp_power",
+      },
+      {
+        id: "6-8",
+        label: "变桨和叶尖速比及风能利用系数分析",
+        type: "pitch_tsr_cp",
+      },
+      {
+        id: "6-9",
+        label: "叶尖速比-风能利用系数-功率散点分析",
+        type: "tsr_cp_power_scatter",
+      },
+    ],
+  },
+  {
+    id: "7",
+    label: "变桨特征分析",
+    type: "pitch_characteristics",
+    children: [
+      {
+        id: "7-1",
+        label: "最小桨距角分析",
+        type: "min_pitch",
+      },
+    ],
+  },
+  {
+    id: "8",
+    label: "变桨-转速-转矩(功率)协调分析",
+    type: "pitch_speed_torque",
+    children: [
+      {
+        id: "8-1",
+        label: "变桨和有功功率协调性分析",
+        type: "pitch_power",
+      },
+      {
+        id: "8-2",
+        label: "变桨和发电机转速协调性分析",
+        type: "pitch_generator_speed",
+      },
+      {
+        id: "8-3",
+        label: "发电机转速和有功功率分析",
+        type: "speed_power",
+      },
+      {
+        id: "8-4",
+        label: "发电机转速和转矩分析",
+        type: "speed_torque",
+      },
+    ],
+  },
+  {
+    id: "9",
+    label: "温度传感器性能分析",
+    type: "temperature_sensor",
+    children: [
+      {
+        id: "9-1",
+        label: "环境温度传感器分析",
+        type: "temperature_environment",
+      },
+      {
+        id: "9-2",
+        label: "大部件温度传感器分析",
+        type: "temperature_large_components",
+      },
+    ],
+  },
+  {
+    id: "10",
+    label: "偏航系统分析",
+    type: "yaw_system",
+    children: [
+      {
+        id: "10-1",
+        label: "静态偏航误差分析",
+        type: "yaw_error",
+      },
+      {
+        id: "10-2",
+        label: "动态偏航误差分析",
+        type: "yaw_error_density",
+      },
+    ],
+  },
+  {
+    id: "11",
+    label: "运行指标",
+    type: "production_indicator",
+    children: [
+      {
+        id: "11-1",
+        label: "全场指标",
+        type: "production_indicator",
+      },
+      {
+        id: "11-2",
+        label: "机组指标",
+        type: "production_indicator",
+      },
+    ],
+  },
+  {
+    id: "12",
+    label: "故障分析",
+    type: "fault",
+    children: [
+      {
+        id: "12-1",
+        label: "全场故障统计",
+        type: "fault",
+      },
+      {
+        id: "12-2",
+        label: "机组故障统计",
+        type: "fault",
+      },
+    ],
+  },
+];

+ 212 - 81
src/views/performance/assetssDetail.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2024-05-27 09:25:45
- * @LastEditTime: 2025-01-03 12:11:11
+ * @LastEditTime: 2025-01-10 15:30:25
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/assetssDetail.vue
@@ -60,7 +60,7 @@
               >
                 <el-option
                   v-for="(item, indAns) in analysisTypeList"
-                  :key="item.analysisTypeCode + indAns"
+                  :key="item.analysisTypeCode + indAns + 'analysisTypeList'"
                   :label="item.analysisTypeName"
                   :value="item.analysisTypeCode"
                 ></el-option>
@@ -119,73 +119,123 @@
         <el-table-column prop="engine_name" label="风机名称"> </el-table-column>
         <el-table-column prop="yaw_error1" label="误差值"> </el-table-column>
       </el-table>
-      <el-table
+      <template
         v-else-if="formInfo.analysisTypeCode === 'production_indicator'"
-        :data="productionIndicatorCsvData"
-        border
-        style="width: 100%"
-        align="center"
       >
-        <el-table-column prop="EPActualTotal" label="实发电量">
-        </el-table-column>
-        <el-table-column prop="TurbinePowerRate" label="风机能量利用率">
-        </el-table-column>
-        <el-table-column prop="EPLostStopPercent" label="停机损失百分比">
-        </el-table-column>
-        <el-table-column prop="EPLostBadPercent" label="欠发损失百分比">
-        </el-table-column>
-        <el-table-column
-          prop="EPLostPerformPercent"
-          label="功率曲线未达标损失百分比"
-        >
-        </el-table-column>
-        <el-table-column prop="EPLostLimitPercent" label="限电损失百分比">
-        </el-table-column>
-        <el-table-column prop="TurbineRunRate" label="风机可利用率">
-        </el-table-column>
-        <el-table-column prop="mean_width" label="功率水平平均宽度">
-        </el-table-column>
-        <el-table-column prop="variance_width" label="功率水平方差">
-        </el-table-column>
-        <el-table-column prop="WindSpeedAvr" label="平均风速">
-        </el-table-column>
-        <el-table-column prop="Thi" label="利用小时"> </el-table-column>
-        <el-table-column prop="Ws" label="功率曲线一致性系数">
-        </el-table-column>
-        <el-table-column
-          v-if="
-            formInfo.fieldEngineCode !== '' && formInfo.fieldEngineCode !== null
-          "
-          prop="Qp"
-          label="风场总发电量"
-        >
-        </el-table-column>
-        <el-table-column
-          v-if="
-            formInfo.fieldEngineCode !== '' && formInfo.fieldEngineCode !== null
-          "
-          prop="Thc"
-          label="风场等效利用小时"
-        >
-        </el-table-column>
-        <el-table-column
-          v-if="
-            formInfo.fieldEngineCode !== '' && formInfo.fieldEngineCode !== null
-          "
-          prop="Rdr"
-          label="风场弃风率"
-        >
-        </el-table-column>
-        <el-table-column
-          v-if="
-            formInfo.fieldEngineCode !== '' && formInfo.fieldEngineCode !== null
-          "
-          prop="Qdr"
-          label="风场弃风电量"
-        >
-        </el-table-column>
-      </el-table>
-
+        <div>
+          <template v-for="itemCsv in productionIndicatorCsvData">
+            <el-table
+              v-if="Object.keys(itemCsv.data[0]).length > 4"
+              :data="itemCsv.data"
+              border
+              style="width: 100%"
+              align="center"
+            >
+              <el-table-column prop="EPActualTotal" label="实发电量">
+              </el-table-column>
+              <el-table-column prop="TurbinePowerRate" label="风机能量利用率">
+              </el-table-column>
+              <el-table-column prop="EPLostStopPercent" label="停机损失百分比">
+              </el-table-column>
+              <el-table-column prop="EPLostBadPercent" label="欠发损失百分比">
+              </el-table-column>
+              <el-table-column
+                prop="EPLostPerformPercent"
+                label="功率曲线未达标损失百分比"
+              >
+              </el-table-column>
+              <el-table-column prop="EPLostLimitPercent" label="限电损失百分比">
+              </el-table-column>
+              <el-table-column prop="TurbineRunRate" label="风机可利用率">
+              </el-table-column>
+              <el-table-column prop="mean_width" label="功率水平平均宽度">
+              </el-table-column>
+              <el-table-column prop="variance_width" label="功率水平方差">
+              </el-table-column>
+              <el-table-column prop="WindSpeedAvr" label="平均风速">
+              </el-table-column>
+              <el-table-column prop="Thi" label="利用小时"> </el-table-column>
+              <el-table-column prop="Ws" label="功率曲线一致性系数">
+              </el-table-column>
+            </el-table>
+            <el-table
+              v-else
+              :data="itemCsv.data"
+              border
+              style="width: 100%"
+              align="center"
+            >
+              <el-table-column prop="Qp" label="风场总发电量">
+              </el-table-column>
+              <el-table-column prop="Thc" label="风场等效利用小时">
+              </el-table-column>
+              <el-table-column prop="Rdr" label="风场弃风率"> </el-table-column>
+              <el-table-column prop="Qdr" label="风场弃风电量">
+              </el-table-column>
+            </el-table>
+          </template>
+        </div>
+      </template>
+      <template v-else-if="formInfo.analysisTypeCode === 'fault'">
+        <div>
+          <template v-for="itemCsv in zongFaultCsvData">
+            <el-table
+              :data="filteredData(itemCsv)"
+              border
+              style="width: 100%"
+              align="center"
+            >
+              <el-table-column prop="fault_detail" label="故障类型">
+              </el-table-column>
+              <el-table-column prop="count" sortable label="故障次数(次)">
+              </el-table-column>
+              <el-table-column
+                prop="fault_time_sum"
+                sortable
+                label="故障时长(秒)"
+              >
+              </el-table-column>
+              <el-table-column align="right">
+                <template slot="header" slot-scope="scope">
+                  <el-input
+                    v-model="search"
+                    size="mini"
+                    placeholder="输入故障类型关键字搜索"
+                  />
+                </template>
+              </el-table-column>
+            </el-table>
+          </template>
+          <template v-for="itemCsv in fenFaultCsvData">
+            <el-table
+              :data="filteredFenData(itemCsv)"
+              border
+              style="width: 100%"
+              align="center"
+            >
+              <el-table-column prop="wind_turbine_name" label="风机名称">
+              </el-table-column>
+              <el-table-column prop="count" sortable label="故障次数(次)">
+              </el-table-column>
+              <el-table-column
+                prop="fault_time"
+                sortable
+                label="故障时长(秒)"
+              >
+              </el-table-column>
+              <el-table-column align="right">
+                <template slot="header" slot-scope="scope">
+                  <el-input
+                    v-model="searchFen"
+                    size="mini"
+                    placeholder="输入风机名称关键字搜索"
+                  />
+                </template>
+              </el-table-column>
+            </el-table>
+          </template>
+        </div>
+      </template>
       <!-- 需要在这里添加三个分析类型排版布局 ,分析详情中 -->
       <div v-else>
         <el-card class="box-card analysisType" v-if="generalFiles.length > 0">
@@ -324,7 +374,15 @@
                 v-if="graphFilesData[0] !== null && graphFilesData.length !== 0"
               >
                 <template v-for="(powerCurveDom, ind) in graphFilesData">
-                  <el-col :span="12">
+                  <el-col
+                    :span="12"
+                    v-if="
+                      powerCurveDom &&
+                      formInfo.fieldEngineCode ===
+                        powerCurveDom.chartsData.formInfoFieldEngineCode &&
+                      powerCurveDom.powerCurveTableData.length > 0
+                    "
+                  >
                     <div class="left">
                       <!-- <el-button
                         @click="
@@ -360,7 +418,12 @@
                     </div>
                   </el-col>
                   <el-col
-                    v-if="formInfo.analysisTypeCode === 'power_curve'"
+                    v-if="
+                      powerCurveDom &&
+                      formInfo.fieldEngineCode ===
+                        powerCurveDom.chartsData.formInfoFieldEngineCode &&
+                      powerCurveDom.powerCurveTableData.length > 0
+                    "
                     :span="12"
                   >
                     <div class="right">
@@ -371,6 +434,7 @@
                       ></PlotlyCharts>
                     </div>
                   </el-col>
+                  <el-empty v-else description="该机组暂无分图"></el-empty>
                 </template>
               </template>
               <template v-if="powerHtmlFenData.length > 0">
@@ -491,6 +555,8 @@ export default {
   },
   data() {
     return {
+      search: "",
+      searchFen: "",
       loadings: [],
       loading: false,
       fileCheckResult: null,
@@ -517,12 +583,47 @@ export default {
       graphFilesData: [],
       powerHtmlZongData: [],
       powerHtmlFenData: [],
+      zongFaultCsvHeader: [],
+      zongFaultCsvData: [],
+      fenFaultCsvHeader: [],
+      fenFaultCsvData: [],
     };
   },
   created() {
     //获取分析 分析类型、机组编号 列表
     this.getWindCodeList();
   },
+  computed: {
+    // 根据搜索关键字过滤数据
+    filteredData() {
+      return (itemCsv) => {
+        // 如果有搜索关键词,则过滤数据
+        if (this.search) {
+          return itemCsv.data.filter((item) => {
+            return item.fault_detail
+              .toLowerCase()
+              .includes(this.search.toLowerCase());
+          });
+        }
+        // 没有搜索关键词时返回所有数据
+        return itemCsv.data;
+      };
+    },
+    filteredFenData() {
+      return (itemCsv) => {
+        // 如果有搜索关键词,则过滤数据
+        if (this.searchFen) {
+          return itemCsv.data.filter((item) => {
+            return item.wind_turbine_name
+              .toLowerCase()
+              .includes(this.searchFen.toLowerCase());
+          });
+        }
+        // 没有搜索关键词时返回所有数据
+        return itemCsv.data;
+      };
+    },
+  },
   mounted() {
     this.initializeLoading();
     // this.chartsTypeConfig();
@@ -734,13 +835,28 @@ export default {
           response.data[0]?.generalFiles &&
           response.data[0]?.generalFiles[0]?.fileAddr
         ) {
-          const fileUrl = response.data[0]?.generalFiles[0]?.fileAddr;
           if (this.formInfo.analysisTypeCode === "yaw_error") {
+            const fileUrl = response.data[0]?.generalFiles[0]?.fileAddr;
             this.fetchCsvData("yaw_error", fileUrl);
           } else if (
             this.formInfo.analysisTypeCode === "production_indicator"
           ) {
-            this.fetchCsvData("production_indicator", fileUrl);
+            response.data[0].generalFiles.map((item) => {
+              if (item.fileAddr) {
+                this.productionIndicatorCsvHeader = [];
+                this.productionIndicatorCsvData = [];
+                this.fetchCsvData("production_indicator", item.fileAddr);
+              }
+            });
+          } else if (this.formInfo.analysisTypeCode === "fault") {
+            //总图处理
+            response.data[0].generalFiles.map((item) => {
+              if (item.fileAddr) {
+                this.productionIndicatorCsvHeader = [];
+                this.productionIndicatorCsvData = [];
+                this.fetchCsvData("fault", item.fileAddr);
+              }
+            });
           }
         }
 
@@ -917,17 +1033,32 @@ export default {
                     (row) => Object.keys(row).length
                   ); // 过滤空行
                 } else if (analysisType === "production_indicator") {
-                  this.productionIndicatorCsvHeader = Object.keys(
-                    result.data[0]
-                  );
-                  this.productionIndicatorCsvData = result.data.filter(
-                    (row) => Object.keys(row).length
-                  ); // 过滤空行
-                  console.log(
-                    this.productionIndicatorCsvHeader,
-                    result.data,
-                    "result.data"
+                  this.productionIndicatorCsvHeader.push(
+                    Object.keys(result.data[0])
                   );
+                  this.productionIndicatorCsvData.push({
+                    data: result.data
+                      .filter((row) => Object.keys(row).length)
+                      .slice(0, result.data.length - 1),
+                  }); // 过滤空行
+                } else if (analysisType === "fault") {
+                  if (Object.keys(result.data[0]).includes("fault_detail")) {
+                    //总图故障统计展示
+                    this.zongFaultCsvHeader.push(Object.keys(result.data[0]));
+                    this.zongFaultCsvData.push({
+                      data: result.data
+                        .filter((row) => Object.keys(row).length)
+                        .slice(0, result.data.length - 1),
+                    });
+                  } else {
+                    //分机型故障统计处理
+                    this.fenFaultCsvHeader.push(Object.keys(result.data[0]));
+                    this.fenFaultCsvData.push({
+                      data: result.data
+                        .filter((row) => Object.keys(row).length)
+                        .slice(0, result.data.length - 1),
+                    });
+                  }
                 }
               },
               error: (error) => {

+ 109 - 0
src/views/performance/batchDetail.vue

@@ -0,0 +1,109 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-01-09 10:28:04
+ * @LastEditTime: 2025-01-09 15:02:30
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/performance/batchDetail.vue
+-->
+<template>
+  <div class="global-variable">
+    <!-- <el-card class="box-card"> -->
+    <el-descriptions class="margin-top" title="分析概览" :column="3">
+      <template slot="title">
+        <el-button
+          type="text"
+          style="font-size: 20px"
+          icon="el-icon-arrow-left"
+          @click="() => $router.push('/home/performance/batchMag')"
+        >
+          分析概览
+        </el-button>
+      </template>
+      <template slot="extra">
+        <el-button type="primary" size="small">数据转换</el-button>
+      </template>
+      <el-descriptions-item>
+        <template slot="label">
+          <i class="el-icon-user"></i>
+          关联风场
+        </template>
+        XXXXX风场
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label">
+          <i class="el-icon-mobile-phone"></i>
+          分析名称
+        </template>
+        XXXX
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label">
+          <i class="el-icon-location-outline"></i>
+          状态
+        </template>
+        <el-tag size="small">XX</el-tag>
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label">
+          <i class="el-icon-tickets"></i>
+          创建时间
+        </template>
+        XXXXXX
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label">
+          <i class="el-icon-office-building"></i>
+          创建人
+        </template>
+        XXXXXXXX
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label">
+          <i class="el-icon-office-building"></i>
+          备注
+        </template>
+        XXXXXXXX
+      </el-descriptions-item>
+    </el-descriptions>
+    <!-- </el-card> -->
+    <el-tabs
+      class="tabsBox"
+      v-model="activeName"
+      type="card"
+      @tab-click="handleClick"
+    >
+      <!-- <el-tab-pane label="数据关联" name="first">
+        <DataAdministration />
+      </el-tab-pane> -->
+      <el-tab-pane label="性能分析" name="second">
+        <PerformanceAssetssMag></PerformanceAssetssMag>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+<script>
+import DataAdministration from "../dataAdministration/index.vue";
+import PerformanceAssetssMag from "./assetssMag.vue";
+export default {
+  components: {
+    DataAdministration,
+    PerformanceAssetssMag,
+  },
+  data() {
+    return {
+      activeName: "second",
+    };
+  },
+  methods: {
+    handleClick(tab, event) {
+      console.log(tab, event);
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.tabsBox {
+  margin-top: 20px;
+}
+</style>

+ 202 - 80
src/views/performance/components/EditAnalysis.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2024-05-29 09:14:23
- * @LastEditTime: 2025-01-03 12:15:53
+ * @LastEditTime: 2025-01-10 15:30:32
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/components/EditAnalysis.vue
@@ -87,85 +87,127 @@
         </el-col>
         <el-col :span="24" v-if="form.configAnalysis === 'production_indicator'"
           ><div class="left">
-            <el-table
-              :data="productionIndicatorCsvData"
-              border
-              style="width: 100%"
-              align="center"
-            >
-              <el-table-column prop="EPActualTotal" label="实发电量">
-              </el-table-column>
-              <el-table-column prop="TurbinePowerRate" label="风机能量利用率">
-              </el-table-column>
-              <el-table-column prop="EPLostStopPercent" label="停机损失百分比">
-              </el-table-column>
-              <el-table-column prop="EPLostBadPercent" label="欠发损失百分比">
-              </el-table-column>
-              <el-table-column
-                prop="EPLostPerformPercent"
-                label="功率曲线未达标损失百分比"
-              >
-              </el-table-column>
-              <el-table-column prop="EPLostLimitPercent" label="限电损失百分比">
-              </el-table-column>
-              <el-table-column prop="TurbineRunRate" label="风机可利用率">
-              </el-table-column>
-              <el-table-column prop="mean_width" label="功率水平平均宽度">
-              </el-table-column>
-              <el-table-column prop="variance_width" label="功率水平方差">
-              </el-table-column>
-              <el-table-column prop="WindSpeedAvr" label="平均风速">
-              </el-table-column>
-              <el-table-column prop="Thi" label="利用小时"> </el-table-column>
-              <el-table-column prop="Ws" label="功率曲线一致性系数">
-              </el-table-column>
-              <el-table-column
-                v-if="form.turbines !== '' && form.turbines !== null"
-                prop="Qp"
-                label="风场总发电量"
-              >
-              </el-table-column>
-              <el-table-column
-                v-if="form.turbines !== '' && form.turbines !== null"
-                prop="Thc"
-                label="风场等效利用小时"
+            <template v-for="itemCsv in productionIndicatorCsvData">
+              <el-table
+                v-if="Object.keys(itemCsv.data[0]).length > 4"
+                :data="itemCsv.data"
+                border
+                style="width: 100%"
+                align="center"
               >
-              </el-table-column>
-              <el-table-column
-                v-if="form.turbines !== '' && form.turbines !== null"
-                prop="Rdr"
-                label="风场弃风率"
-              >
-              </el-table-column>
-              <el-table-column
-                v-if="form.turbines !== '' && form.turbines !== null"
-                prop="Qdr"
-                label="风场弃风电量"
+                <el-table-column prop="EPActualTotal" label="实发电量">
+                </el-table-column>
+                <el-table-column prop="TurbinePowerRate" label="风机能量利用率">
+                </el-table-column>
+                <el-table-column
+                  prop="EPLostStopPercent"
+                  label="停机损失百分比"
+                >
+                </el-table-column>
+                <el-table-column prop="EPLostBadPercent" label="欠发损失百分比">
+                </el-table-column>
+                <el-table-column
+                  prop="EPLostPerformPercent"
+                  label="功率曲线未达标损失百分比"
+                >
+                </el-table-column>
+                <el-table-column
+                  prop="EPLostLimitPercent"
+                  label="限电损失百分比"
+                >
+                </el-table-column>
+                <el-table-column prop="TurbineRunRate" label="风机可利用率">
+                </el-table-column>
+                <el-table-column prop="mean_width" label="功率水平平均宽度">
+                </el-table-column>
+                <el-table-column prop="variance_width" label="功率水平方差">
+                </el-table-column>
+                <el-table-column prop="WindSpeedAvr" label="平均风速">
+                </el-table-column>
+                <el-table-column prop="Thi" label="利用小时"> </el-table-column>
+                <el-table-column prop="Ws" label="功率曲线一致性系数">
+                </el-table-column>
+              </el-table>
+              <el-table
+                v-else
+                :data="itemCsv.data"
+                border
+                style="width: 100%"
+                align="center"
               >
-              </el-table-column>
-            </el-table>
+                <el-table-column prop="Qp" label="风场总发电量">
+                </el-table-column>
+                <el-table-column prop="Thc" label="风场等效利用小时">
+                </el-table-column>
+                <el-table-column prop="Rdr" label="风场弃风率">
+                </el-table-column>
+                <el-table-column prop="Qdr" label="风场弃风电量">
+                </el-table-column>
+              </el-table>
+            </template>
           </div>
         </el-col>
-        <el-col :span="24" v-if="form.configAnalysis === '故障统计'"
+        <el-col :span="24" v-if="form.configAnalysis === 'fault'"
           ><div class="left">
-            <el-table
-              :data="tableData"
-              border
-              style="width: 100%"
-              align="center"
-            >
-              <el-table-column prop="date" label="故障次数(次)">
-              </el-table-column>
-              <el-table-column prop="name" label="故障时长(秒)">
-              </el-table-column>
-              <el-table-column prop="name" label="损失电量(KW/h)">
-              </el-table-column>
-            </el-table>
+            <template v-for="itemCsv in zongFaultCsvData">
+              <el-table
+                :data="filteredData(itemCsv)"
+                border
+                style="width: 100%"
+                align="center"
+              >
+                <el-table-column prop="fault_detail" label="故障类型">
+                </el-table-column>
+                <el-table-column prop="count" sortable label="故障次数(次)">
+                </el-table-column>
+                <el-table-column
+                  prop="fault_time_sum"
+                  sortable
+                  label="故障时长(秒)"
+                >
+                </el-table-column>
+                <el-table-column align="right">
+                  <template slot="header" slot-scope="scope">
+                    <el-input
+                      v-model="search"
+                      size="mini"
+                      placeholder="输入故障类型关键字搜索"
+                    />
+                  </template>
+                </el-table-column>
+              </el-table>
+            </template>
+            <template v-for="itemCsv in fenFaultCsvData">
+              <el-table
+                :data="filteredFenData(itemCsv)"
+                border
+                style="width: 100%"
+                align="center"
+              >
+                <el-table-column prop="wind_turbine_name" label="风机名称">
+                </el-table-column>
+                <el-table-column prop="count" sortable label="故障次数(次)">
+                </el-table-column>
+                <el-table-column
+                  prop="fault_time"
+                  sortable
+                  label="故障时长(秒)"
+                >
+                </el-table-column>
+                <el-table-column align="right">
+                  <template slot="header" slot-scope="scope">
+                    <el-input
+                      v-model="searchFen"
+                      size="mini"
+                      placeholder="输入风机名称关键字搜索"
+                    />
+                  </template>
+                </el-table-column>
+              </el-table>
+            </template>
           </div>
         </el-col>
-
         <!-- 其他类型展示的 图表 ,只展示图表不必要展示表格 -->
-
         <template v-if="form.configAnalysis === 'power_curve'">
           <el-col :span="24">
             <div
@@ -277,7 +319,14 @@
               v-if="graphFilesData[0] !== null && graphFilesData.length !== 0"
             >
               <template v-for="(powerCurveDom, ind) in graphFilesData">
-                <el-row>
+                <el-row
+                  v-if="
+                    powerCurveDom &&
+                    form.turbines ===
+                      powerCurveDom.chartsData.formInfoFieldEngineCode &&
+                    powerCurveDom.powerCurveTableData.length > 0
+                  "
+                >
                   <el-col
                     v-loading="htmlLoading"
                     v-if="form.configAnalysis === 'power_curve'"
@@ -323,6 +372,7 @@
                     </div>
                   </el-col>
                 </el-row>
+                <el-empty v-else description="该机组暂无分图"></el-empty>
               </template>
             </template>
           </el-col>
@@ -598,6 +648,8 @@ export default {
   },
   data() {
     return {
+      search: "",
+      searchFen: "",
       tableData: [],
       noData: false,
       htmlLoading: false,
@@ -644,6 +696,10 @@ export default {
       graphFilesData: [],
       powerHtmlZongData: [],
       powerHtmlFenData: [],
+      zongFaultCsvHeader: [],
+      zongFaultCsvData: [],
+      fenFaultCsvHeader: [],
+      fenFaultCsvData: [],
     };
   },
   watch: {
@@ -655,6 +711,37 @@ export default {
       },
     },
   },
+  computed: {
+    // 根据搜索关键字过滤数据
+    filteredData() {
+      return (itemCsv) => {
+        // 如果有搜索关键词,则过滤数据
+        if (this.search) {
+          return itemCsv.data.filter((item) => {
+            return item.fault_detail
+              .toLowerCase()
+              .includes(this.search.toLowerCase());
+          });
+        }
+        // 没有搜索关键词时返回所有数据
+        return itemCsv.data;
+      };
+    },
+    filteredFenData() {
+      return (itemCsv) => {
+        // 如果有搜索关键词,则过滤数据
+        if (this.searchFen) {
+          return itemCsv.data.filter((item) => {
+            return item.wind_turbine_name
+              .toLowerCase()
+              .includes(this.searchFen.toLowerCase());
+          });
+        }
+        // 没有搜索关键词时返回所有数据
+        return itemCsv.data;
+      };
+    },
+  },
   created() {
     //获取分析 分析类型、机组编号 列表
     // this.getWindCodeList();
@@ -776,11 +863,26 @@ export default {
           response.data[0]?.generalFiles &&
           response.data[0]?.generalFiles[0]?.fileAddr
         ) {
-          const fileUrl = response.data[0].generalFiles[0].fileAddr;
           if (this.form.configAnalysis === "yaw_error") {
+            const fileUrl = response.data[0].generalFiles[0].fileAddr;
             this.fetchCsvData("yaw_error", fileUrl);
           } else if (this.form.configAnalysis === "production_indicator") {
-            this.fetchCsvData("production_indicator", fileUrl);
+            response.data[0].generalFiles.map((item) => {
+              if (item.fileAddr) {
+                this.productionIndicatorCsvHeader = [];
+                this.productionIndicatorCsvData = [];
+                this.fetchCsvData("production_indicator", item.fileAddr);
+              }
+            });
+          } else if (this.form.configAnalysis === "fault") {
+            //总图处理
+            response.data[0].generalFiles.map((item) => {
+              if (item.fileAddr) {
+                this.productionIndicatorCsvHeader = [];
+                this.productionIndicatorCsvData = [];
+                this.fetchCsvData("fault", item.fileAddr);
+              }
+            });
           }
         }
 
@@ -963,12 +1065,32 @@ export default {
                     (row) => Object.keys(row).length
                   ); // 过滤空行
                 } else if (analysisType === "production_indicator") {
-                  this.productionIndicatorCsvHeader = Object.keys(
-                    result.data[0]
+                  this.productionIndicatorCsvHeader.push(
+                    Object.keys(result.data[0])
                   );
-                  this.productionIndicatorCsvData = result.data.filter(
-                    (row) => Object.keys(row).length
-                  ); // 过滤空行
+                  this.productionIndicatorCsvData.push({
+                    data: result.data
+                      .filter((row) => Object.keys(row).length)
+                      .slice(0, result.data.length - 1),
+                  }); // 过滤空行
+                } else if (analysisType === "fault") {
+                  if (Object.keys(result.data[0]).includes("fault_detail")) {
+                    //总图故障统计展示
+                    this.zongFaultCsvHeader.push(Object.keys(result.data[0]));
+                    this.zongFaultCsvData.push({
+                      data: result.data
+                        .filter((row) => Object.keys(row).length)
+                        .slice(0, result.data.length - 1),
+                    });
+                  } else {
+                    //分机型故障统计处理
+                    this.fenFaultCsvHeader.push(Object.keys(result.data[0]));
+                    this.fenFaultCsvData.push({
+                      data: result.data
+                        .filter((row) => Object.keys(row).length)
+                        .slice(0, result.data.length - 1),
+                    });
+                  }
                 }
               },
               error: (error) => {

+ 160 - 37
src/views/performance/components/PlotlyCharts.vue

@@ -28,8 +28,11 @@ export default {
         powerConfig: {
           mode: "lines+markers",
           name: "合同功率曲线",
-          line: { color: "red" },
-          marker: { color: "red", size: 5 },
+          line: {
+            color: "red",
+            width: 1, // 设置线条的宽度为1
+          },
+          marker: { color: "red", size: 4 },
         },
         lableConfig: {
           title: { text: "", x: 0.5 },
@@ -179,52 +182,172 @@ export default {
       Plotly.newPlot(`power-curve-plot${this.inds}`, data, layout);
     },
     //初始化分图
-    //初始化分图
     initializeEngineCharts() {
       const fentuCharts = this.powerCurveData.turbines.filter(
         (item) =>
           item.enginCode === this.lineMarkerData?.formInfoFieldEngineCode ||
           item.enginName === this.lineMarkerData?.formInfoFieldEngineCode
       );
-      const data = [];
-      const layout = {
-        title:
-          fentuCharts[0].enginName ||
-          fentuCharts[0].enginCode + "风机有功功率曲线分析",
-        plot_bgcolor: this.config.lableConfig.plot_bgcolor,
-        xaxis: this.config.lableConfig.xaxis,
-        yaxis: this.config.lableConfig.yaxis,
-        legend: this.config.lableConfig.legend,
-      };
-      this.powerCurveData.turbines.forEach((turbine, index) => {
+      if (fentuCharts[0]?.enginName || fentuCharts[0]?.enginCode) {
+        const highlightedData = [];
+        const nonHighlightedData = [];
+        const layout = {
+          title:
+            fentuCharts[0]?.enginName ||
+            fentuCharts[0]?.enginCode + "风机有功功率曲线分析",
+          plot_bgcolor: this.config.lableConfig.plot_bgcolor,
+          xaxis: this.config.lableConfig.xaxis,
+          yaxis: this.config.lableConfig.yaxis,
+          legend: this.config.lableConfig.legend,
+        };
+        // 先渲染其他的风机数据
+        this.powerCurveData.turbines.forEach((turbine, index) => {
+          const isHighlighted =
+            turbine?.enginCode ===
+              this.lineMarkerData?.formInfoFieldEngineCode ||
+            turbine?.enginName === this.lineMarkerData?.formInfoFieldEngineCode;
+
+          const trace = {
+            x: turbine.xData,
+            y: turbine.yData.map((val) => (val !== null ? val : 0.0)),
+            mode: "lines",
+            name: turbine.enginName,
+            line: {
+              color: isHighlighted ? "#1c77b3" : "#d3d3d3",
+            },
+          };
+
+          if (isHighlighted) {
+            highlightedData.push(trace); // 高亮的线条放入 highlighedData
+          } else {
+            nonHighlightedData.push(trace); // 非高亮的线条放入 nonHighlightedData
+          }
+        });
+        // 先添加非高亮的风机数据
+        const data = [...nonHighlightedData, ...highlightedData]; // 高亮的风机数据最后添加
+        // 添加合同功率曲线
         data.push({
-          x: turbine.xData,
-          y: turbine.yData.map((val) => (val !== null ? val : 0.0)),
-          mode: "lines",
-          name: turbine.enginName,
+          x: this.powerCurveData.contractPowerCurve[0].xData,
+          y: this.powerCurveData.contractPowerCurve[0].yData,
+          mode: "lines+markers",
+          name: this.powerCurveData.contractPowerCurve[0].enginName,
           line: {
-            color:
-              turbine?.enginCode ===
-                this.lineMarkerData?.formInfoFieldEngineCode ||
-              turbine?.enginName ===
-                this.lineMarkerData?.formInfoFieldEngineCode
-                ? "#1c77b3"
-                : "#d3d3d3",
+            color: "red",
+            width: 1, // 设置线条的宽度为1
           },
+          marker: { color: "red", size: 4 },
         });
-      });
-
-      data.push({
-        x: this.powerCurveData.contractPowerCurve[0].xData,
-        y: this.powerCurveData.contractPowerCurve[0].yData,
-        mode: "lines+markers",
-        name: this.powerCurveData.contractPowerCurve[0].enginName,
-        line: {
-          color: "red",
-        },
-      });
-      Plotly.newPlot(`chart-${this.inds}`, data, layout);
+        Plotly.newPlot(`chart-${this.inds}`, data, layout);
+      }
     },
+
+    // initializeEngineCharts() {
+    //   console.log(this.lineMarkerData, "enginName");
+    //   const fentuCharts = this.powerCurveData.turbines.filter(
+    //     (item) =>
+    //       item.enginCode === this.lineMarkerData?.formInfoFieldEngineCode ||
+    //       item.enginName === this.lineMarkerData?.formInfoFieldEngineCode
+    //   );
+    //   const data = [];
+    //   const layout = {
+    //     title:
+    //       fentuCharts[0]?.enginName ||
+    //       fentuCharts[0]?.enginCode + "风机有功功率曲线分析",
+    //     plot_bgcolor: this.config.lableConfig.plot_bgcolor,
+    //     xaxis: this.config.lableConfig.xaxis,
+    //     yaxis: this.config.lableConfig.yaxis,
+    //     legend: this.config.lableConfig.legend,
+    //   };
+
+    //   // 先渲染其他的风机数据
+    //   this.powerCurveData.turbines.forEach((turbine, index) => {
+    //     const isHighlighted =
+    //       turbine?.enginCode === this.lineMarkerData?.formInfoFieldEngineCode ||
+    //       turbine?.enginName === this.lineMarkerData?.formInfoFieldEngineCode;
+
+    //     // 这里将高亮的风机与其他风机分开
+    //     data.push({
+    //       x: turbine.xData,
+    //       y: turbine.yData.map((val) => (val !== null ? val : 0.0)),
+    //       mode: "lines",
+    //       name: turbine.enginName,
+    //       line: {
+    //         color: isHighlighted ? "#1c77b3" : "#d3d3d3", // 高亮的线条使用指定颜色
+    //       },
+    //     });
+    //   });
+
+    //   // 将高亮的风机放在最后,确保它显示在其他线条上面
+    //   const highlightedData = data.filter(
+    //     (item) => item.line.color === "#1c77b3"
+    //   );
+    //   const nonHighlightedData = data.filter(
+    //     (item) => item.line.color !== "#1c77b3"
+    //   );
+
+    //   // 把高亮的线条放在数据的最后
+    //   data.length = 0;
+    //   data.push(...nonHighlightedData, ...highlightedData); // 将非高亮的线条先添加,最后添加高亮线条
+
+    //   // 添加合同功率曲线
+    //   data.push({
+    //     x: this.powerCurveData.contractPowerCurve[0].xData,
+    //     y: this.powerCurveData.contractPowerCurve[0].yData,
+    //     mode: "lines+markers",
+    //     name: this.powerCurveData.contractPowerCurve[0].enginName,
+    //     line: {
+    //       color: "red",
+    //     },
+    //   });
+
+    //   Plotly.newPlot(`chart-${this.inds}`, data, layout);
+    // },
+
+    // initializeEngineCharts() {
+    //   console.log(this.lineMarkerData, "enginName");
+    //   const fentuCharts = this.powerCurveData.turbines.filter(
+    //     (item) =>
+    //       item.enginCode === this.lineMarkerData?.formInfoFieldEngineCode ||
+    //       item.enginName === this.lineMarkerData?.formInfoFieldEngineCode
+    //   );
+    //   const data = [];
+    //   const layout = {
+    //     title:
+    //       fentuCharts[0]?.enginName ||
+    //       fentuCharts[0]?.enginCode + "风机有功功率曲线分析",
+    //     plot_bgcolor: this.config.lableConfig.plot_bgcolor,
+    //     xaxis: this.config.lableConfig.xaxis,
+    //     yaxis: this.config.lableConfig.yaxis,
+    //     legend: this.config.lableConfig.legend,
+    //   };
+    //   this.powerCurveData.turbines.forEach((turbine, index) => {
+    //     const isHighlighted =
+    //       turbine?.enginCode === this.lineMarkerData?.formInfoFieldEngineCode ||
+    //       turbine?.enginName === this.lineMarkerData?.formInfoFieldEngineCode;
+
+    //     data.push({
+    //       x: turbine.xData,
+    //       y: turbine.yData.map((val) => (val !== null ? val : 0.0)),
+    //       mode: "lines",
+    //       name: turbine.enginName,
+    //       line: {
+    //         color: isHighlighted ? "#1c77b3" : "#d3d3d3", // 如果是高亮的线条,设置为指定颜色
+    //         // 使用 layer 属性来控制堆叠顺序
+    //         layer: isHighlighted ? "above traces" : "below traces", // 高亮线条显示在其他线条上面
+    //       },
+    //     });
+    //   });
+    //   data.push({
+    //     x: this.powerCurveData.contractPowerCurve[0].xData,
+    //     y: this.powerCurveData.contractPowerCurve[0].yData,
+    //     mode: "lines+markers",
+    //     name: this.powerCurveData.contractPowerCurve[0].enginName,
+    //     line: {
+    //       color: "red",
+    //     },
+    //   });
+    //   Plotly.newPlot(`chart-${this.inds}`, data, layout);
+    // },
   },
 };
 </script>

+ 17 - 12
src/views/performance/components/analysisEvent.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2024-05-29 09:13:51
- * @LastEditTime: 2024-12-24 10:49:55
+ * @LastEditTime: 2025-01-10 11:15:52
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/components/analysisEvent.vue
@@ -53,8 +53,8 @@
                     >全选</el-checkbox
                   >
                   <el-option
-                    v-for="item in analysisTypeList"
-                    :key="item.typeCode"
+                    v-for="(item, indsanal) in analysisTypeList"
+                    :key="item.typeCode + indsanal + 'analysisTypeList'"
                     :label="item.typeName"
                     :value="item.typeCode"
                   ></el-option>
@@ -100,14 +100,10 @@
                   @change="handleScada"
                 >
                   <el-option
-                    :key="'minute'"
-                    :label="'分钟级'"
-                    :value="'minute'"
-                  ></el-option>
-                  <el-option
-                    :key="'second'"
-                    :label="'秒级'"
-                    :value="'second'"
+                    v-for="(TranItem, indTran) in transferTypeData"
+                    :key="TranItem.transferType + TranItem + 'transferTypeData'"
+                    :label="TranItem.transferTypeName"
+                    :value="TranItem.transferType"
                   ></el-option>
                 </el-select>
               </el-form-item>
@@ -666,7 +662,12 @@
   </div>
 </template>
 <script>
-import { analysisEditQuery, analysis, queryDataTime } from "@/api/performance";
+import {
+  analysisEditQuery,
+  analysis,
+  queryDataTime,
+  queryAllTypeScada,
+} from "@/api/performance";
 import {
   getWindEngineGroup,
   windEngineGrouPage,
@@ -742,6 +743,7 @@ export default {
       analysisTypeList: [],
       windEngineGroupList: [],
       windDetail: {},
+      transferTypeData: [],
     };
   },
   watch: {
@@ -756,6 +758,9 @@ export default {
     this.getWindCodeList();
     this.getQueryDataTime();
     this.getFengjiList();
+    queryAllTypeScada().then((res) => {
+      this.transferTypeData = res.data;
+    });
   },
   methods: {
     getFengjiList() {

+ 0 - 1
src/views/performance/customAnalysis.vue

@@ -50,7 +50,6 @@
           </el-popover>
         </template>
       </el-tab-pane>
-
       <el-tab-pane name="chart" class="chartsTab">
         <span slot="label" class="iconFont">
           <el-tooltip

+ 2 - 1
src/views/performance/editAssets.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2024-05-27 09:26:31
- * @LastEditTime: 2024-09-30 16:05:33
+ * @LastEditTime: 2025-01-10 15:25:07
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/editAssets.vue
@@ -19,6 +19,7 @@
         ></el-col
       >
     </el-row>
+    <!-- <analysis-event :activeName="activeName"></analysis-event> -->
     <el-tabs v-model="activeName" @tab-click="handleClick">
       <el-tab-pane label="分析事件" name="first">
         <analysis-event :activeName="activeName"></analysis-event>

+ 2 - 5
src/views/system/menuMag/components/editDialog.vue

@@ -40,11 +40,8 @@
           placeholder="请输入菜单标识"
         ></el-input>
       </el-form-item>
-      <el-form-item
-        label="菜单图标"
-        prop="piconUrl"
-        v-if="activeName !== '3' && activeName !== '2'"
-      >
+      <el-form-item label="菜单图标" prop="piconUrl" v-if="activeName !== '3'">
+        <!-- v-if="activeName !== '3' && activeName !== '2'" -->
         <el-popover
           placement="bottom-start"
           width="460"

+ 31 - 4
src/views/system/menuMag/index.vue

@@ -57,7 +57,7 @@
         :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
         ref="table"
       >
-        <el-table-column prop="permissionName" label="菜单名称">
+        <el-table-column prop="permissionName" min-width="120" label="菜单名称">
         </el-table-column>
         <el-table-column
           prop="permissionType"
@@ -76,9 +76,31 @@
           </template>
         </el-table-column>
 
-        <el-table-column prop="permissionCode" label="权限标识" align="center">
+        <el-table-column
+          min-width="120"
+          prop="permissionCode"
+          label="权限标识"
+          align="center"
+        >
         </el-table-column>
-        <el-table-column prop="permissionUrl" label="路径" align="center">
+        <el-table-column
+          min-width="120"
+          prop="permissionUrl"
+          label="路径"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="permissionShow"
+          label="是否显示"
+          align="center"
+          width="100"
+        >
+          <template slot-scope="scope">
+            <span>{{
+              scope.row.permissionShow === 1 ? "显示" : "不显示"
+            }}</span>
+          </template>
         </el-table-column>
         <el-table-column
           prop="permissionState"
@@ -90,7 +112,12 @@
             <span>{{ scope.row.permissionState === 1 ? "启用" : "停用" }}</span>
           </template>
         </el-table-column>
-        <el-table-column fixed="right" label="操作" align="center">
+        <el-table-column
+          min-width="120"
+          fixed="right"
+          label="操作"
+          align="center"
+        >
           <template slot-scope="scope">
             <el-button
               v-hasPermi="['system:menu:edit']"

+ 10 - 10
vue.config.js

@@ -64,9 +64,9 @@ module.exports = {
     proxy: {
       "/api": {
         // target: "http://192.168.5.4:16200", // 石月
-        // target: "http://192.168.50.235:16200", // 内网
+        target: "http://192.168.50.235:16200", // 内网
         // target: "http://192.168.5.15:16200",
-        target: "http://106.120.102.238:16700", // 外网  16600   16700
+        // target: "http://106.120.102.238:16700", // 外网  16600   16700
         // target: "http://10.96.137.5",
         changeOrigin: true,
         pathRewrite: {
@@ -75,8 +75,8 @@ module.exports = {
       },
       // 未知量  //振动、激光测距仪
       "/WZLapi": {
-        // target: "http://192.168.50.241:9001", // WZLapi 目标地址
-        target: "http://106.120.102.238:18080/WindTransDev", // WZLapi 外网目标地址
+        target: "http://192.168.50.241:9001", // WZLapi 目标地址
+        // target: "http://106.120.102.238:18080/WindTransDev", // WZLapi 外网目标地址
         changeOrigin: true,
         pathRewrite: {
           "^/WZLapi": "", // 去掉 /WZLapi 前缀
@@ -97,8 +97,8 @@ module.exports = {
 
       // 文佳
       "/WJapi": {
-        // target: "http://192.168.50.235:8888", // WZLapi 内网 目标地址
-        target: "http://106.120.102.238:18888", // WZLapi 内网 目标地址
+        target: "http://192.168.50.235:8888", // WZLapi 内网 目标地址
+        // target: "http://106.120.102.238:18888", // WZLapi 内网 目标地址
         changeOrigin: true,
         pathRewrite: {
           "^/WJapi": "", // 去掉 /WZLapi 前缀
@@ -119,8 +119,8 @@ module.exports = {
       },
       //自定义算法文佳
       "/sAlgorithm": {
-        // target: "http://192.168.50.235:8666", // 目标地址
-        target: "http://106.120.102.238:58880",
+        target: "http://192.168.50.235:8666", // 目标地址
+        // target: "http://106.120.102.238:58880",
         changeOrigin: true,
         pathRewrite: {
           "^/sAlgorithm": "", // 如果后端需要 `/api` 前缀
@@ -128,8 +128,8 @@ module.exports = {
       },
       //nodejs 数据库数据
       "/databaseApi": {
-        // target: "http://192.168.50.234:3000",
-        target: "http://106.120.102.238:58880",
+        target: "http://192.168.50.234:3000",
+        // target: "http://106.120.102.238:58880",
         changeOrigin: true,
         pathRewrite: {
           "^/databaseApi": "", // 去掉 /databaseApi 前缀

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.