Ver Fonte

健康代码+合并

rui.jiang há 5 meses atrás
pai
commit
fd397859d3
59 ficheiros alterados com 679 adições e 480 exclusões
  1. BIN
      dist.zip
  2. BIN
      downLoadServer.zip
  3. 1 2
      downLoadServer/.env
  4. 0 0
      downLoadServer/node
  5. 1 1
      downLoadServer/package.json
  6. 4 3
      downLoadServer/src/server/server.js
  7. 6 1
      downLoadServer/src/server/utils/chartsCom/3DDrawingChart.js
  8. 1 0
      downLoadServer/src/server/utils/chartsCom/BarChart.js
  9. 1 0
      downLoadServer/src/server/utils/chartsCom/BoxLineCharts.js
  10. 1 0
      downLoadServer/src/server/utils/chartsCom/ColorbarInitTwoDmarkersChart.js
  11. 1 0
      downLoadServer/src/server/utils/chartsCom/FaultAll.js
  12. 1 0
      downLoadServer/src/server/utils/chartsCom/FaultUnit.js
  13. 1 0
      downLoadServer/src/server/utils/chartsCom/GeneratorTemperature.js
  14. 1 0
      downLoadServer/src/server/utils/chartsCom/HeatmapCharts.js
  15. 1 0
      downLoadServer/src/server/utils/chartsCom/PlotlyCharts.js
  16. 1 0
      downLoadServer/src/server/utils/chartsCom/PlotlyChartsFen.js
  17. 6 1
      downLoadServer/src/server/utils/chartsCom/Time3DChart.js
  18. 1 0
      downLoadServer/src/server/utils/chartsCom/TwoDMarkersChart.js
  19. 1 0
      downLoadServer/src/server/utils/chartsCom/TwoDMarkersChart1.js
  20. 1 0
      downLoadServer/src/server/utils/chartsCom/WindRoseChart.js
  21. 1 0
      downLoadServer/src/server/utils/chartsCom/YewErrorBarChart.js
  22. 1 0
      downLoadServer/src/server/utils/chartsCom/lineAndChildLine.js
  23. 1 0
      downLoadServer/src/server/utils/chartsCom/lineChartsFen.js
  24. 1 0
      downLoadServer/src/server/utils/chartsCom/powerMarkers2DCharts.js
  25. 1 0
      downLoadServer/src/server/utils/chartsCom/yawErrorBarSum.js
  26. 1 0
      downLoadServer/src/server/utils/chartsCom/yawErrorLine.js
  27. 0 1
      src/components/map/index.vue
  28. 3 2
      src/store/themes.js
  29. 5 5
      src/views/overview/components/cp/index.vue
  30. 17 13
      src/views/overview/components/fault_all/index.vue
  31. 29 22
      src/views/overview/components/fault_unit/index.vue
  32. 81 77
      src/views/overview/components/power_curve/index.vue
  33. 3 2
      src/views/overview/components/power_scatter_2D/index.vue
  34. 6 2
      src/views/overview/components/production_indicator_unit/index.vue
  35. 17 17
      src/views/overview/components/temperature_environment/index.vue
  36. 8 3
      src/views/overview/components/temperature_large_components_tem_deviation/index.vue
  37. 3 3
      src/views/overview/components/wind_speed/index.vue
  38. 2 16
      src/views/overview/components/wind_speed_frequency/index.vue
  39. 61 56
      src/views/overview/components/yaw_error/index.vue
  40. 1 1
      src/views/overview/index.vue
  41. 1 24
      src/views/overview/js/colors.js
  42. 1 1
      src/views/performance/assetssDetail.vue
  43. 4 1
      src/views/performance/components/PlotlyCharts.vue
  44. 19 12
      src/views/performance/components/chartsCom/3DDrawingChart.vue
  45. 2 2
      src/views/performance/components/chartsCom/BarChart.vue
  46. 8 8
      src/views/performance/components/chartsCom/ColorbarInitTwoDmarkersChart.vue
  47. 4 4
      src/views/performance/components/chartsCom/FaultAll.vue
  48. 62 73
      src/views/performance/components/chartsCom/FaultUnit.vue
  49. 96 4
      src/views/performance/components/chartsCom/GeneratorTemperature.vue
  50. 8 6
      src/views/performance/components/chartsCom/HeatmapCharts.vue
  51. 20 8
      src/views/performance/components/chartsCom/Time3DChart.vue
  52. 9 7
      src/views/performance/components/chartsCom/TwoDMarkersChart.vue
  53. 11 9
      src/views/performance/components/chartsCom/TwoDMarkersChart1.vue
  54. 8 6
      src/views/performance/components/chartsCom/WindRoseChart.vue
  55. 84 49
      src/views/performance/components/chartsCom/lineAndChildLine.vue
  56. 40 21
      src/views/performance/components/chartsCom/lineChartsFen.vue
  57. 19 10
      src/views/performance/components/chartsCom/powerMarkers2DCharts.vue
  58. 6 3
      src/views/performance/components/chartsCom/yawErrorLine.vue
  59. 5 4
      vue.config.js

BIN
dist.zip


BIN
downLoadServer.zip


+ 1 - 2
downLoadServer/.env

@@ -1,10 +1,9 @@
-PLOTLY_USERNAME=your-username
-PLOTLY_API_KEY=your-api-key 
 API_BASE_URL=http://127.0.0.1:3000
 MINIO_ENDPOINT=192.168.50.233
 MINIO_PORT=6900
 MINIO_ACCESS_KEY=haH1vePq7unSp4TG1One
 MINIO_SECRET_KEY=idxO5SAjboUYERpDICgHgBoHX7bcYv355lMQANt6
+CHROME_PATH=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
 #   nginx 配置 minio
 #   env MINIO_ENDPOINT=192.168.50.233;
 #   env MINIO_PORT=6900;

+ 0 - 0
downLoadServer/node


+ 1 - 1
downLoadServer/package.json

@@ -32,6 +32,6 @@
     "plotly.js-dist": "^2.34.0",
     "plotly.js-dist-min": "^2.34.0",
     "plotly.js-with-locales": "^1.31.2",
-    "puppeteer": "^22.6.0"
+    "puppeteer": "^19.11.1"
   }
 }

+ 4 - 3
downLoadServer/src/server/server.js

@@ -1,3 +1,6 @@
+import dotenv from "dotenv";
+// 加载 .env 文件中的环境变量
+dotenv.config();
 import express from "express";
 import { serverConfig } from "./config.js";
 import { logger } from "./middleware/logger.js";
@@ -6,7 +9,6 @@ import exampleRoutes from "./routes/exampleRoutes.js";
 import chartRoutes from "./routes/chartRoutes.js";
 import path from "path";
 import { fileURLToPath } from "url";
-import dotenv from "dotenv";
 // 引入 cors 模块
 import cors from "cors";
 
@@ -42,6 +44,5 @@ export const startServer = () => {
     );
   });
 };
-// 加载 .env 文件中的环境变量
-dotenv.config();
+
 export default app;

+ 6 - 1
downLoadServer/src/server/utils/chartsCom/3DDrawingChart.js

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2025-04-14 16:09:13
- * @LastEditTime: 2025-05-29 15:30:40
+ * @LastEditTime: 2025-06-10 14:10:40
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /downLoadServer/src/server/utils/chartsCom/3DDrawingChart.js
@@ -37,6 +37,7 @@ export const generate3DDrawingChart = async (data, bucketName, objectName) => {
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 
@@ -154,6 +155,10 @@ export const generate3DDrawingChart = async (data, bucketName, objectName) => {
         staticPlot: false,
         showlegend: true,
         legend: {
+          itemsizing: "constant", // ✅ 统一图例 marker 大小
+          font: {
+            size: 12,
+          },
           marker: {
             size: 10, // 图例中点的大小
           },

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/BarChart.js

@@ -33,6 +33,7 @@ export const generateBarChart = async (data, bucketName, objectName) => {
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/BoxLineCharts.js

@@ -43,6 +43,7 @@ export const generateBoxLineChart = async (data, bucketName, objectName) => {
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/ColorbarInitTwoDmarkersChart.js

@@ -41,6 +41,7 @@ export const generateColorbarInitTwoDmarkersChart = async (
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/FaultAll.js

@@ -118,6 +118,7 @@ export const getFaultAllCharts = async (
     // 使用 Puppeteer 生成图表的截图
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
     try {

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/FaultUnit.js

@@ -118,6 +118,7 @@ export const getFaultUnitCharts = async (
     // 使用 Puppeteer 生成图表的截图
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
     try {

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/GeneratorTemperature.js

@@ -48,6 +48,7 @@ export const generateGeneratorTemperature = async (
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/HeatmapCharts.js

@@ -39,6 +39,7 @@ export const generateHeatmapChart = async (data, bucketName, objectName) => {
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/PlotlyCharts.js

@@ -102,6 +102,7 @@ export const generatePlotlyCharts = async (
 
     browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/PlotlyChartsFen.js

@@ -46,6 +46,7 @@ export const generatePlotlyChartsFen = async (
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 6 - 1
downLoadServer/src/server/utils/chartsCom/Time3DChart.js

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2025-04-14 17:49:33
- * @LastEditTime: 2025-05-21 15:11:06
+ * @LastEditTime: 2025-06-10 14:10:23
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/downLoadServer/src/server/utils/chartsCom/Time3DChart.js
@@ -41,6 +41,7 @@ export const generateTime3DChart = async (data, bucketName, objectName) => {
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: [
         "--no-sandbox",
         "--disable-setuid-sandbox",
@@ -167,6 +168,10 @@ export const generateTime3DChart = async (data, bucketName, objectName) => {
         staticPlot: false,
         showlegend: true,
         legend: {
+          itemsizing: "constant", // ✅ 统一图例 marker 大小
+          font: {
+            size: 12,
+          },
           marker: {
             size: 10, // 图例中点的大小
           },

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/TwoDMarkersChart.js

@@ -41,6 +41,7 @@ export const generateTwoDMarkersChart = async (
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/TwoDMarkersChart1.js

@@ -32,6 +32,7 @@ export const generateTwoDMarkersChart1 = async (
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/WindRoseChart.js

@@ -124,6 +124,7 @@ export const getWindRoseChart = async (
     // 使用 Puppeteer 生成图表的截图
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
     try {

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/YewErrorBarChart.js

@@ -119,6 +119,7 @@ export const getYewErrorBarChart = async (
     // 使用 Puppeteer 生成图表的截图
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
     try {

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/lineAndChildLine.js

@@ -120,6 +120,7 @@ export const generateLineAndChildLine = async (
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/lineChartsFen.js

@@ -38,6 +38,7 @@ export const generateLineChart = async (
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/powerMarkers2DCharts.js

@@ -41,6 +41,7 @@ export const generatepowerMarkers2DCharts = async (
     // 创建浏览器实例
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/yawErrorBarSum.js

@@ -105,6 +105,7 @@ export const getYawErrorBarSumCharts = async (
     // 使用 Puppeteer 生成图表的截图
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
     try {

+ 1 - 0
downLoadServer/src/server/utils/chartsCom/yawErrorLine.js

@@ -115,6 +115,7 @@ export const generateYawErrorLine = async (
     // 使用 Puppeteer 生成图表的截图
     const browser = await puppeteer.launch({
       headless: "new",
+      executablePath: `${process.env.CHROME_PATH}`, // 根据系统改路径
       args: ["--no-sandbox", "--disable-setuid-sandbox"],
     });
 

+ 0 - 1
src/components/map/index.vue

@@ -192,7 +192,6 @@ import icon05 from "../../assets/img/icon05.png";
 import icon06 from "../../assets/img/iconFJ.png";
 import defaultIcon from "../../assets/img/iconFJ.png";
 
-
 // import icon01 from "../../assets/img/icon01.png";
 // import icon02 from "../../assets/img/icon02.png";
 // import icon03 from "../../assets/img/icon03.png";

+ 3 - 2
src/store/themes.js

@@ -3,16 +3,17 @@ import { theme } from "tailwindcss/stubs/defaultConfig.stub";
 /*
  * @Author: your name
  * @Date: 2024-05-27 15:09:27
- * @LastEditTime: 2025-03-18 16:51:12
+ * @LastEditTime: 2025-06-10 10:57:45
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/store/themes.js
  */
+import { colorSchemes } from "@/views/overview/js/colors";
 export default {
   namespaced: true,
   state: {
     theme: localStorage.getItem("theme") || "green",
-    themeColor: [],
+    themeColor: [...colorSchemes[0].colors],
   },
   mutations: {
     setTheme(state, theme) {

+ 5 - 5
src/views/overview/components/cp/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-09 18:05:58
- * @LastEditTime: 2025-06-06 16:17:37
+ * @LastEditTime: 2025-06-12 09:52:54
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/cp/index.vue
@@ -55,9 +55,9 @@
         <lineAndChildLine
           v-if="item.batchCode && !item.fieldEngineCode"
           :setUpImgData="setUpImgData"
-          :key="`${new Date().getTime()}` + item.batchCode + index"
+          :key="item.batchCode + index"
           :index="`${new Date().getTime()}` + index"
-          :ref="`${new Date().getTime()}` + item.batchCode"
+          :ref="item.batchCode"
           :fileAddr="item.fileAddr"
         >
         </lineAndChildLine>
@@ -75,9 +75,9 @@
         <lineChartsFen
           v-if="item.fieldEngineCode"
           :setUpImgData="setUpImgData"
-          :key="`${new Date().getTime()}` + item.fieldEngineCode + index"
+          :key="item.fieldEngineCode + index"
           :index="`${new Date().getTime()}` + index"
-          :ref="`${new Date().getTime()}` + item.fieldEngineCode"
+          :ref="item.fieldEngineCode"
           :fieldEngineCode="item.fieldEngineCode"
           :fileAddr="item.fileAddr"
         >

+ 17 - 13
src/views/overview/components/fault_all/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-13 13:56:55
- * @LastEditTime: 2025-05-16 15:08:41
+ * @LastEditTime: 2025-06-11 09:39:04
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/fault_all/index.vue
@@ -33,7 +33,7 @@
           对全场机组各类故障的次数和时长进行统计
         </div>
       </el-alert>
-      <div v-if="zongFaultCsvData.length > 0">
+      <div class="chartsBox" v-if="zongFaultCsvData.length > 0">
         <FaultAll
           :faultTypes="
             zongFaultCsvData &&
@@ -56,6 +56,7 @@
           <el-table
             max-height="500"
             :key="indCsv + 'indCsv'"
+            :default-sort="{ prop: 'fault_time_sum', order: 'descending' }"
             :data="filteredData(itemCsv)"
             border
             style="width: 100%"
@@ -68,8 +69,11 @@
             <el-table-column
               prop="fault_time_sum"
               sortable
-              label="故障时长()"
+              label="故障时长(小时)"
             >
+              <template slot-scope="scope">
+                {{ Number(scope.row.fault_time_sum).toFixed(2) }}
+              </template>
             </el-table-column>
             <el-table-column align="right">
               <template slot="header" slot-scope="scope">
@@ -303,18 +307,14 @@ export default {
                     this.zongFaultCsvData.push({
                       data: result.data
                         .filter((row) => Object.keys(row).length)
-                        .slice(0, result.data.length - 1),
+                        .slice(0, result.data.length - 1)
+                        .map((item) => ({
+                          ...item,
+                          count: Number(item.count),
+                          fault_time_sum: Number(item.fault_time_sum) / 3600,
+                        })),
                     });
                   }
-                  //  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) => {
@@ -444,6 +444,10 @@ export default {
     overflow: auto;
     padding: 20px;
     flex: 1;
+    .chartsBox {
+      height: 100%;
+      overflow-y: scroll;
+    }
     /* 滚动条整体样式 */
     &::-webkit-scrollbar {
       width: 6px; /* 滚动条宽度 */

+ 29 - 22
src/views/overview/components/fault_unit/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-13 13:56:12
- * @LastEditTime: 2025-03-14 18:57:21
+ * @LastEditTime: 2025-06-11 09:39:17
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/fault_unit/index.vue
@@ -32,7 +32,7 @@
           对各个机组故障的总次数和时长进行统计
         </div>
       </el-alert>
-      <div v-if="fenFaultCsvData.length > 0">
+      <div class="chartsBox" v-if="fenFaultCsvData.length > 0">
         <FaultUnit
           :faultTypes="
             fenFaultCsvData &&
@@ -42,12 +42,12 @@
           :faultCounts="
             fenFaultCsvData &&
             fenFaultCsvData[0] &&
-            fenFaultCsvData[0].data.map((item) => item.count)
+            fenFaultCsvData[0].data.map((item) => Number(item.count))
           "
           :faultDurations="
             fenFaultCsvData &&
             fenFaultCsvData[0] &&
-            fenFaultCsvData[0].data.map((item) => item.fault_time)
+            fenFaultCsvData[0].data.map((item) => Number(item.fault_time))
           "
           :fenFaultCsvData="fenFaultCsvData"
         ></FaultUnit>
@@ -55,15 +55,23 @@
           <el-table
             max-height="500"
             :data="filteredFenData(itemCsv)"
+            :default-sort="{ prop: 'fault_time', order: 'descending' }"
             border
             style="width: 100%"
             align="center"
           >
-            <el-table-column prop="wind_turbine_name" label="风机名称">
+            <el-table-column prop="wind_turbine_name" label="风机名称" sortable>
             </el-table-column>
             <el-table-column prop="count" sortable label="故障次数(次)">
             </el-table-column>
-            <el-table-column prop="fault_time" sortable label="故障时长(秒)">
+            <el-table-column
+              prop="fault_time"
+              sortable
+              label="故障时长(小时)"
+            >
+              <template slot-scope="scope">
+                {{ Number(scope.row.fault_time).toFixed(2) }}
+              </template>
             </el-table-column>
             <el-table-column align="right">
               <template slot="header" slot-scope="scope">
@@ -188,20 +196,6 @@ export default {
   },
   computed: {
     // 根据搜索关键字过滤数据
-    filteredData() {
-      return (itemCsv) => {
-        // 如果有搜索关键词,则过滤数据
-        if (this.search) {
-          return itemCsv.data.filter((item) => {
-            return item.wind_turbine_name
-              .toLowerCase()
-              .includes(this.search.toLowerCase());
-          });
-        }
-        // 没有搜索关键词时返回所有数据
-        return itemCsv.data;
-      };
-    },
     filteredFenData() {
       return (itemCsv) => {
         // 如果有搜索关键词,则过滤数据
@@ -213,6 +207,7 @@ export default {
           });
         }
         // 没有搜索关键词时返回所有数据
+        console.log(itemCsv.data);
         return itemCsv.data;
       };
     },
@@ -295,10 +290,18 @@ export default {
                   ) {
                     //分机型故障统计处理
                     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),
+                        .filter((row) => {
+                          return Object.keys(row).length;
+                        })
+                        .slice(0, result.data.length - 1)
+                        .map((item) => ({
+                          ...item,
+                          count: Number(item.count),
+                          fault_time: Number(item.fault_time) / 3600,
+                        })),
                     });
                   }
                 }
@@ -439,6 +442,10 @@ export default {
     overflow: auto;
     padding: 20px;
     flex: 1;
+    .chartsBox {
+      height: 100%;
+      overflow-y: scroll;
+    }
     /* 滚动条整体样式 */
     &::-webkit-scrollbar {
       width: 6px; /* 滚动条宽度 */

+ 81 - 77
src/views/overview/components/power_curve/index.vue

@@ -24,25 +24,26 @@
         </div>
       </el-alert>
       <!-- 总图 -->
-      <div class="titleCharts">分析总图 :</div>
-      <div v-if="graphFilesData && graphFilesData.length > 0">
-        <template
-          v-for="(powerCurveDom, ind) in generalFilesData"
-          :style="{ marginTop: '50px' }"
-        >
-          <el-row class="charts">
-            <el-col :span="24" :key="ind + 'leftTable'">
-              <div class="leftTable">
-                <el-button
-                  size="small"
-                  @click="
-                    downLoadCsv(
-                      powerCurveDom && powerCurveDom.powerCurveTableData
-                    )
-                  "
-                  >导出功率曲线数据</el-button
-                >
-                <!-- <el-table
+      <div class="chartsBox">
+        <div class="titleCharts">分析总图 :</div>
+        <div v-if="graphFilesData && graphFilesData.length > 0">
+          <template
+            v-for="(powerCurveDom, ind) in generalFilesData"
+            :style="{ marginTop: '50px' }"
+          >
+            <el-row class="charts">
+              <el-col :span="24" :key="ind + 'leftTable'">
+                <div class="leftTable">
+                  <el-button
+                    size="small"
+                    @click="
+                      downLoadCsv(
+                        powerCurveDom && powerCurveDom.powerCurveTableData
+                      )
+                    "
+                    >导出功率曲线数据</el-button
+                  >
+                  <!-- <el-table
                   :data="powerCurveDom.powerCurveTableData"
                   border
                   max-height="500"
@@ -63,54 +64,54 @@
                   >
                   </el-table-column>
                 </el-table> -->
-              </div>
-            </el-col>
-            <el-col :span="24" :key="ind + 'rightTable'">
-              <div class="rightTable">
-                <PlotlyCharts
-                  :setUpImgData="setUpImgData"
-                  :lineMarkerData="powerCurveDom.chartsData"
-                  :comType="'generalDrawing'"
-                  :inds="`${new Date().getTime()}` + `zong${ind}`"
-                ></PlotlyCharts>
-              </div>
-            </el-col>
-          </el-row>
-        </template>
-      </div>
-      <el-empty v-else description="暂无总图"></el-empty>
-      <!-- 分图 -->
-      <div class="titleCharts">分析分图 :</div>
-      <template v-if="graphFilesData && graphFilesData.length > 0">
-        <div
-          class="graphFilesData"
-          v-for="(powerCurveDom, ind) in graphFilesData"
-        >
-          <el-row class="charts">
-            <el-col
-              v-if="
-                powerCurveDom && powerCurveDom.powerCurveTableData.length > 0
-              "
-              :key="ind + 'powerCurveDom' + 'rightTable'"
-              :span="24"
-            >
-              <div class="rightTable">
-                <PlotlyCharts
-                  :setUpImgData="setUpImgData"
-                  :lineMarkerData="powerCurveDom.chartsData"
-                  :comType="'graph'"
-                  :inds="`${new Date().getTime()}` + `fen${ind}`"
-                ></PlotlyCharts>
-              </div>
-            </el-col>
-            <el-col
-              :span="24"
-              :key="ind + 'powerCurveDom' + 'leftTable'"
-              v-if="
-                powerCurveDom && powerCurveDom.powerCurveTableData.length > 0
-              "
-            >
-              <!-- <div class="leftTable">
+                </div>
+              </el-col>
+              <el-col :span="24" :key="ind + 'rightTable'">
+                <div class="rightTable">
+                  <PlotlyCharts
+                    :setUpImgData="setUpImgData"
+                    :lineMarkerData="powerCurveDom.chartsData"
+                    :comType="'generalDrawing'"
+                    :inds="`${new Date().getTime()}` + `zong${ind}`"
+                  ></PlotlyCharts>
+                </div>
+              </el-col>
+            </el-row>
+          </template>
+        </div>
+        <el-empty v-else description="暂无总图"></el-empty>
+        <!-- 分图 -->
+        <div class="titleCharts">分析分图 :</div>
+        <template v-if="graphFilesData && graphFilesData.length > 0">
+          <div
+            class="graphFilesData"
+            v-for="(powerCurveDom, ind) in graphFilesData"
+          >
+            <el-row class="charts">
+              <el-col
+                v-if="
+                  powerCurveDom && powerCurveDom.powerCurveTableData.length > 0
+                "
+                :key="ind + 'powerCurveDom' + 'rightTable'"
+                :span="24"
+              >
+                <div class="rightTable">
+                  <PlotlyCharts
+                    :setUpImgData="setUpImgData"
+                    :lineMarkerData="powerCurveDom.chartsData"
+                    :comType="'graph'"
+                    :inds="`${new Date().getTime()}` + `fen${ind}`"
+                  ></PlotlyCharts>
+                </div>
+              </el-col>
+              <el-col
+                :span="24"
+                :key="ind + 'powerCurveDom' + 'leftTable'"
+                v-if="
+                  powerCurveDom && powerCurveDom.powerCurveTableData.length > 0
+                "
+              >
+                <!-- <div class="leftTable">
                 <el-table
                   :data="powerCurveDom && powerCurveDom.powerCurveTableData"
                   border
@@ -129,16 +130,16 @@
                   </el-table-column>
                 </el-table>
               </div> -->
-            </el-col>
-
-            <el-col v-else :span="24">
-              <el-empty description="暂无分图"></el-empty>
-            </el-col>
-          </el-row>
-        </div>
-      </template>
-      <el-empty v-else description="暂无分图"></el-empty>
+              </el-col>
 
+              <el-col v-else :span="24">
+                <el-empty description="暂无分图"></el-empty>
+              </el-col>
+            </el-row>
+          </div>
+        </template>
+        <el-empty v-else description="暂无分图"></el-empty>
+      </div>
       <el-dialog
         v-if="isShowDescription"
         title="添加评论"
@@ -547,7 +548,10 @@ export default {
     overflow: auto;
     padding: 20px;
     flex: 1;
-
+    .chartsBox {
+      height: 100%;
+      overflow-y: scroll;
+    }
     /* 滚动条整体样式 */
     &::-webkit-scrollbar {
       width: 6px; /* 滚动条宽度 */

+ 3 - 2
src/views/overview/components/power_scatter_2D/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-09 18:10:35
- * @LastEditTime: 2025-04-11 16:50:32
+ * @LastEditTime: 2025-06-10 11:06:57
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/power_scatter_2D/index.vue
@@ -39,6 +39,7 @@
         keyField="fieldEngineCode"
         :itemSize="600"
         v-slot="{ item, index }"
+        v-if="diagramRelationsDatas && diagramRelationsDatas.length > 0"
       >
         <TwoDMarkersChart1
           :setUpImgData="setUpImgData"
@@ -48,7 +49,7 @@
           :fileAddr="item.fileAddr"
         ></TwoDMarkersChart1>
       </VirtualList>
-
+      <el-empty description="暂无分析记录" v-else></el-empty>
       <el-dialog
         v-if="isShowDescription"
         title="添加评论"

+ 6 - 2
src/views/overview/components/production_indicator_unit/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-13 13:44:56
- * @LastEditTime: 2025-04-11 16:51:20
+ * @LastEditTime: 2025-06-10 11:25:46
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/production_indicator_unit/index.vue
@@ -31,7 +31,7 @@
           对风场及机组各项运行指标进行统计,包括应发电量、实发电量、风机能量利用率,有效风速小时数,利用小时等指标。
         </div>
       </el-alert>
-      <div v-if="productionIndicatorCsvData.length > 0">
+      <div v-if="productionIndicatorCsvData.length > 0" class="chartsBox">
         <template v-for="(itemCsv, itemind) in productionIndicatorCsvData">
           <el-table
             :key="'table' + itemind"
@@ -543,6 +543,10 @@ export default {
     overflow: auto;
     padding: 20px;
     flex: 1;
+    .chartsBox {
+      height: 100%;
+      overflow-y: scroll;
+    }
     /* 滚动条整体样式 */
     &::-webkit-scrollbar {
       width: 6px; /* 滚动条宽度 */

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

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-10 09:09:46
- * @LastEditTime: 2025-06-06 16:31:24
+ * @LastEditTime: 2025-06-10 11:41:38
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/temperature_environment/index.vue
@@ -39,22 +39,18 @@
         分析总图 :
       </div>
       <el-empty description="暂无分图分析记录" v-else></el-empty>
-      <VirtualList
-        :list="[...generalFilesDatas]"
-        keyField="fileAddr"
-        :itemSize="500"
-        v-slot="{ item, index }"
-      >
-        <BarChart
-          :setUpImgData="setUpImgData"
-          :key="`${new Date().getTime()}` + item.batchCode + index"
-          :inds="`${new Date().getTime()}` + index + 'barChart'"
-          :ref="`${new Date().getTime()}` + item.batchCode"
-          :fileAddr="item.fileAddr"
-        >
-        </BarChart>
-      </VirtualList>
-
+      <div class="chartsBox">
+        <div v-for="(item, index) in generalFilesDatas">
+          <BarChart
+            :setUpImgData="setUpImgData"
+            :key="`${new Date().getTime()}` + item.batchCode + index"
+            :inds="`${new Date().getTime()}` + index + 'barChart'"
+            :ref="`${new Date().getTime()}` + item.batchCode"
+            :fileAddr="item.fileAddr"
+          >
+          </BarChart>
+        </div>
+      </div>
       <el-dialog
         v-if="isShowDescription"
         title="添加评论"
@@ -337,6 +333,10 @@ export default {
     overflow: auto;
     padding: 20px;
     flex: 1;
+    .chartsBox {
+      height: 100%;
+      overflow-y: scroll;
+    }
     /* 滚动条整体样式 */
     &::-webkit-scrollbar {
       width: 6px; /* 滚动条宽度 */

+ 8 - 3
src/views/overview/components/temperature_large_components_tem_deviation/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-21 10:03:27
- * @LastEditTime: 2025-02-26 11:23:18
+ * @LastEditTime: 2025-06-10 11:37:14
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/temperature_large_components_tem_deviation/index.vue
@@ -51,7 +51,12 @@
         分析分图 :
       </div>
       <el-empty description="暂无分图分析记录" v-else></el-empty>
-      <div v-for="(item, index) in diagramRelationsDatas">
+      <VirtualList
+        :list="[...diagramRelationsDatas]"
+        keyField="fileAddr"
+        :itemSize="500"
+        v-slot="{ item, index }"
+      >
         <GeneratorTemperature
           :setUpImgData="setUpImgData"
           :key="item.fieldEngineCode + index"
@@ -61,7 +66,7 @@
           :fileAddr="item.fileAddr"
         >
         </GeneratorTemperature>
-      </div>
+      </VirtualList>
       <el-dialog
         v-if="isShowDescription"
         title="添加评论"

+ 3 - 3
src/views/overview/components/wind_speed/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-10 09:11:23
- * @LastEditTime: 2025-03-17 13:59:21
+ * @LastEditTime: 2025-06-12 09:51:20
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/wind_spee/index.vue
@@ -44,9 +44,9 @@
         <!-- {{ item.fileAddr }} -->
         <BarChart
           :setUpImgData="setUpImgData"
-          :key="`${new Date().getTime()}` + item.batchCode + index"
+          :key="item.batchCode + index"
           :inds="`${new Date().getTime()}` + index"
-          :ref="`${new Date().getTime()}` + item.batchCode"
+          :ref="item.batchCode"
           :fileAddr="item.fileAddr"
         ></BarChart>
         <!-- <BarChart

+ 2 - 16
src/views/overview/components/wind_speed_frequency/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-10 09:11:34
- * @LastEditTime: 2025-05-13 09:44:37
+ * @LastEditTime: 2025-06-10 11:06:34
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/wind_speed_frequency/index.vue
@@ -47,21 +47,7 @@
           :fileAddr="item.fileAddr"
         ></BarChart>
       </VirtualList>
-      <!-- <div
-        class="charts"
-        v-if="diagramRelationsDatas && diagramRelationsDatas.length > 0"
-      >
-        <template v-for="(itemChart, indChart) in diagramRelationsDatas">
-          <BarChart
-            :key="itemChart.fieldEngineCode + indChart"
-            :inds="indChart"
-            :ref="itemChart.fieldEngineCode"
-            :fileAddr="itemChart.fileAddr"
-          ></BarChart>
-        </template>
-      </div>
-     
-      -->
+
       <el-empty description="暂无分析记录" v-else></el-empty>
       <el-dialog
         v-if="isShowDescription"

+ 61 - 56
src/views/overview/components/yaw_error/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-10 09:24:14
- * @LastEditTime: 2025-03-21 14:42:04
+ * @LastEditTime: 2025-06-10 11:31:12
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/yaw_error/index.vue
@@ -32,63 +32,64 @@
           静态偏航误差过大,导致风轮不能精准对风,会造成发电损失,例如10°的静态偏航误差导致2.6%的发电损失,且风速较低的风场往往出现更多的发电损失;此外静态偏航误差过大,不仅会影响机组的功率输出,还会引起叶片气动弹性波动,增加机组的额外载荷。因此,定期检测机组的静态偏航误差,并及时校正,对于改善机组发电性能和机组运行安全都有很重要的意义。
         </div>
       </el-alert>
-
-      <div class="titleCharts" v-if="zongFaultCsvData.length > 0">
-        分析总图 :
-      </div>
-      <div v-if="zongFaultCsvData.length > 0">
-        <yawErrorBarChart
-          :zongFaultCsvData="zongFaultCsvData"
-          :index="`${new Date().getTime()}`"
-        ></yawErrorBarChart>
-        <yawErrorBarSum
-          :zongFaultCsvData="zongFaultCsvData"
-          :index="`${new Date().getTime()}`"
-        ></yawErrorBarSum>
-        <template v-for="(itemCsv, indCsv) in zongFaultCsvData">
-          <el-table
-            :key="indCsv + 'indCsv'"
-            :data="filteredData(itemCsv)"
-            border
-            style="width: 100%"
-            max-height="500"
-            align="center"
-          >
-            <el-table-column prop="engine_name" label="风机名称">
-            </el-table-column>
-            <el-table-column prop="yaw_error1" label="静态偏航误差值(度)">
-            </el-table-column>
-            <el-table-column prop="powerloss" 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>
-      </div>
-      <div class="titleCharts">分析分图 :</div>
-      <div v-if="fenFaultCsvData.length > 0">
-        <div v-for="(item, index) in fenFaultCsvData">
-          <yawErrorLine
-            :setUpImgData="setUpImgData"
-            :key="item.fieldEngineCode + index"
-            :index="`${new Date().getTime()}` + index"
-            :ref="item.fieldEngineCode"
-            :fileAddr="item.fileAddr"
-          >
-          </yawErrorLine>
+      <div class="chartsBox">
+        <div class="titleCharts" v-if="zongFaultCsvData.length > 0">
+          分析总图 :
+        </div>
+        <div v-if="zongFaultCsvData.length > 0">
+          <yawErrorBarChart
+            :zongFaultCsvData="zongFaultCsvData"
+            :index="`${new Date().getTime()}`"
+          ></yawErrorBarChart>
+          <yawErrorBarSum
+            :zongFaultCsvData="zongFaultCsvData"
+            :index="`${new Date().getTime()}`"
+          ></yawErrorBarSum>
+          <template v-for="(itemCsv, indCsv) in zongFaultCsvData">
+            <el-table
+              :key="indCsv + 'indCsv'"
+              :data="filteredData(itemCsv)"
+              border
+              style="width: 100%"
+              max-height="500"
+              align="center"
+            >
+              <el-table-column prop="engine_name" label="风机名称">
+              </el-table-column>
+              <el-table-column prop="yaw_error1" label="静态偏航误差值(度)">
+              </el-table-column>
+              <el-table-column prop="powerloss" 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>
         </div>
+        <div class="titleCharts">分析分图 :</div>
+        <div v-if="fenFaultCsvData.length > 0">
+          <div v-for="(item, index) in fenFaultCsvData">
+            <yawErrorLine
+              :setUpImgData="setUpImgData"
+              :key="item.fieldEngineCode + index"
+              :index="`${new Date().getTime()}` + index"
+              :ref="item.fieldEngineCode"
+              :fileAddr="item.fileAddr"
+            >
+            </yawErrorLine>
+          </div>
+        </div>
+        <el-empty
+          description="暂无分析记录"
+          v-if="zongFaultCsvData.length === 0 && fenFaultCsvData.length === 0"
+        ></el-empty>
       </div>
-      <el-empty
-        description="暂无分析记录"
-        v-if="zongFaultCsvData.length === 0 && fenFaultCsvData.length === 0"
-      ></el-empty>
       <el-dialog
         v-if="isShowDescription"
         title="添加评论"
@@ -470,6 +471,10 @@ export default {
     overflow: auto;
     padding: 20px;
     flex: 1;
+    .chartsBox {
+      height: 100%;
+      overflow-y: scroll;
+    }
     /* 滚动条整体样式 */
     &::-webkit-scrollbar {
       width: 6px; /* 滚动条宽度 */

+ 1 - 1
src/views/overview/index.vue

@@ -210,7 +210,7 @@ export default {
       });
     },
     analysisTypeCode(newVal) {
-      console.log(newVal, "分析模型 ");
+      // console.log(newVal, "分析模型 ");
     },
   },
   async created() {

+ 1 - 24
src/views/overview/js/colors.js

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2025-02-17 15:31:57
- * @LastEditTime: 2025-03-20 14:31:16
+ * @LastEditTime: 2025-06-11 10:22:46
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/js/colors.js
@@ -26,29 +26,6 @@ export const colorSchemes = [
       "#28357A",
       "#1A285E",
     ],
-    // colors: [
-    //   "#6FB99F", // 柔和的蓝绿色
-    //   "#5DA89E",
-    //   "#4C979E",
-    //   "#3B869D",
-    //   "#2D7492",
-    //   "#1F6286",
-
-    //   "#2C1B5E", // 深紫色过渡
-    //   "#27174E",
-    //   "#1F123D",
-    //   "#180C2D",
-    //   "#A76DA8", // 柔和的紫色过渡
-    //   "#95579B",
-    //   "#81408D",
-    //   "#6A297A",
-    //   "#541D67",
-    //   "#3E134E",
-    //   "#985B4A", // 深暖色调
-    //   "#874B3A",
-    //   "#763B2A",
-    //   "#652C1A",
-    // ],
   },
   {
     label: "复古",

+ 1 - 1
src/views/performance/assetssDetail.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2024-05-27 09:25:45
- * @LastEditTime: 2025-02-26 11:33:43
+ * @LastEditTime: 2025-06-11 09:28:09
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/assetssDetail.vue

+ 4 - 1
src/views/performance/components/PlotlyCharts.vue

@@ -123,7 +123,10 @@ export default {
     };
   },
   mounted() {
-    this.color1 = this.themeColor;
+    this.$nextTick(() => {
+      // this.color1 = this.themeColor;
+      this.color1 = this.colorSchemes[0].colors;
+    });
     this.updateCharts(this.setUpImgData); // 初次渲染
   },
   computed: {

+ 19 - 12
src/views/performance/components/chartsCom/3DDrawingChart.vue

@@ -81,9 +81,10 @@ export default {
   data() {
     return {
       color1: [], // 默认颜色
+      // 配色方案列表(每个方案是一个颜色数组)
+      colorSchemes: colorSchemes,
       chartData: {},
       chartType: "scatter", // 当前图表类型(默认是散点图)
-      colorSchemes: [...colorSchemes],
       pointSize: 1, // 默认点大小
     };
   },
@@ -97,7 +98,7 @@ export default {
     themeColor: {
       handler(newval) {
         if (newval.length === 0) {
-          this.color1 = colorSchemes[0].colors;
+          this.color1 = this.colorSchemes[0].colors;
         } else {
           this.color1 = newval;
         }
@@ -113,12 +114,10 @@ export default {
     },
   },
   async mounted() {
-    this.getData();
-    if (this.themeColor.length === 0) {
-      this.color1 = colorSchemes[0].colors;
-    } else {
-      this.color1 = this.themeColor;
-    }
+    this.$nextTick(() => {
+      this.color1 = this.colorSchemes[0].colors;
+      this.getData();
+    });
   },
   methods: {
     async getData() {
@@ -152,12 +151,10 @@ export default {
         }
       }
     },
-
     // 更新配色方案
     updateChartColor() {
       this.renderChart(); // 当配色方案或点大小发生变化时重新渲染图表
     },
-
     // 切换图表类型
     setChartType(type) {
       this.chartType = type;
@@ -180,7 +177,7 @@ export default {
     renderChart() {
       const uniqueColors = [...new Set(this.chartData.data[0].color)];
       if (!this.color1) {
-        this.color1 = colorSchemes[0].colors;
+        this.color1 = this.colorSchemes[0].colors;
       }
       const traces = uniqueColors.map((color, idx) => {
         const colorData = this.chartData.data[0].color.map((c) =>
@@ -253,6 +250,12 @@ export default {
             // tickwidth: 2,
             tickcolor: "black",
             tickangle: -10,
+            // range:
+            //   this.chartData.xaixs === "发电机转速(r/min)" ||
+            //   this.chartData.xaixs === "发电机转速(r/min)"
+            //     ? [1000, 2000]
+            //     : undefined,
+            // range: this.chartData.xaixs === "桨距角(°)" ? [-1, 20] : undefined,
           },
           yaxis: {
             title: this.chartData.yaixs,
@@ -319,6 +322,10 @@ export default {
         staticPlot: false,
         showlegend: true,
         legend: {
+          itemsizing: "constant", // ✅ 统一图例 marker 大小
+          font: {
+            size: 12,
+          },
           marker: {
             size: 10, // 图例中点的大小
           },
@@ -334,7 +341,7 @@ export default {
         ],
         modeBarButtonsToRemove: [
           "sendDataToCloud",
-          "autoScale2d",
+          // "autoScale2d",
           "hoverClosest3d",
           "resetCameraLastSave3d",
           "resetCameraDefault3d",

+ 2 - 2
src/views/performance/components/chartsCom/BarChart.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2024-09-11 14:30:17
- * @LastEditTime: 2025-06-06 16:28:29
+ * @LastEditTime: 2025-06-12 09:09:57
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/components/chartsCom/BarChart.vue
@@ -160,7 +160,7 @@ export default {
         autosize: true, // 开启自适应
       };
       // **如果 Y 轴是 "温度偏差",添加两条红色虚线**
-      if (this.chartData.yaixs === "温度偏差") {
+      if (this.chartData.data[0].title === "温度偏差") {
         layout.shapes = [
           {
             type: "line",

+ 8 - 8
src/views/performance/components/chartsCom/ColorbarInitTwoDmarkersChart.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-03-14 10:30:00
- * @LastEditTime: 2025-04-28 14:08:16
+ * @LastEditTime: 2025-06-11 10:45:29
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/components/chartsCom/colorbarInitTwoDmarkersChart.vue
@@ -129,12 +129,13 @@ export default {
   },
   mixins: [myMixin],
   async mounted() {
-    this.getData();
-    if (this.themeColor.length === 0) {
-      this.color1 = colorSchemes[4].colors;
-    } else {
-      this.color1 = this.themeColor;
-    }
+    this.$nextTick(() => {
+      this.getData();
+      this.color1 = this.colorSchemes[4].colors;
+      // } else {
+      //   this.color1 = this.themeColor;
+      // }
+    });
   },
   methods: {
     // 根据配色方案设置每个选项的样式
@@ -208,7 +209,6 @@ export default {
           acc[curr] = index + 1;
           return acc;
         }, {});
-        console.log("timeMapping", timeMapping);
         // 获取 colorbar 的最小值和最大值来计算比例值
         const minValue = Math.min(...new Set(uniqueTimeLabels));
         const maxValue = Math.max(...new Set(uniqueTimeLabels));

+ 4 - 4
src/views/performance/components/chartsCom/FaultAll.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-15 14:24:59
- * @LastEditTime: 2025-05-16 11:14:32
+ * @LastEditTime: 2025-06-12 18:06:31
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/components/chartsCom/FaultAll.vue
@@ -74,14 +74,14 @@ export default {
       // 故障时长的折线图数据(右侧 Y 轴)
       const lineTrace = {
         x: this.faultTypes.slice(0, 10),
-        y: this.faultDurations.slice(0, 10),
+        y: this.faultDurations.slice(0, 10).map((item) => item.toFixed(2)),
         type: "scatter",
         mode: "lines+markers", // 线性图 + 点标记
         line: { color: "#1A295D" }, // 红色折线
         name: "故障时长",
         yaxis: "y2", // 使用第二个 Y 轴(右侧)
         hovertemplate:
-          `故障类型:` + ` %{x} <br> ` + `故障时长:` + "%{y} 分钟 <br>",
+          `故障类型:` + ` %{x} <br> ` + `故障时长:` + "%{y} 小时 <br>",
       };
 
       // 布局配置,设置双 Y 轴
@@ -115,7 +115,7 @@ export default {
           backgroundcolor: "#e5ecf6",
         },
         yaxis2: {
-          title: "故障时长 (分钟)",
+          title: "故障时长 (小时)",
           titlefont: { color: "#1A295D" },
           tickfont: { color: "#1A295D" },
           overlaying: "y", // 在第一个 Y 轴上方绘制

+ 62 - 73
src/views/performance/components/chartsCom/FaultUnit.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div ref="chart" style="width: 100%; height: 400px"></div>
+    <div ref="chart" style="width: 100%; height: 500px"></div>
   </div>
 </template>
 
@@ -12,25 +12,21 @@ export default {
   props: {
     faultTypes: {
       type: Array,
-      default: [],
-    }, // 故障机组
+      default: () => [],
+    },
     faultCounts: {
       type: Array,
-      default: [],
-    }, // 故障次数
+      default: () => [],
+    },
     faultDurations: {
       type: Array,
-      default: [],
-    }, // 故障时长
-    fenFaultCsvData: {
-      type: Array,
-      default: [],
+      default: () => [],
     },
   },
   watch: {
     faultCounts: {
       deep: true,
-      handler(v) {
+      handler() {
         this.renderChart();
       },
     },
@@ -40,95 +36,88 @@ export default {
   },
   methods: {
     renderChart() {
-      // 故障次数的散点图数据(左侧 Y 轴)
-      const scatterFaultCounts = {
-        x: this.faultTypes.slice(0, 10),
-        y: this.faultCounts.slice(0, 10),
-        mode: "markers", // 散点图
-        marker: { color: "#64ADC2", size: 10 }, // 蓝色散点
-        name: "故障次数",
-        hovertemplate: `机组:` + ` %{x} <br> ` + `故障次数:` + "%{y} 次<br>",
-      };
+      // 步骤 1:预处理,将数据打包成对象数组以便排序
+      const combined = this.faultTypes.map((name, i) => ({
+        name,
+        count: this.faultCounts[i],
+        durationHour: this.faultDurations[i].toFixed(2),
+      }));
 
-      // 故障时长的散点图数据(右侧 Y 轴)
-      const scatterFaultDurations = {
-        x: this.faultTypes.slice(0, 10),
-        y: this.faultDurations.slice(0, 10),
-        mode: "markers", // 散点图
-        marker: { color: "#1A295D", size: 10 }, // 红色散点
-        name: "故障时长",
-        yaxis: "y2", // 使用第二个 Y 轴(右侧)
-        hovertemplate: `机组:` + ` %{x} <br> ` + `故障时长:` + "%{y} 分钟<br>",
-      };
+      // 步骤 2:按 name 字符串排序
+      combined.sort((a, b) => a.name.localeCompare(b.name)); // 按字典序排序
+
+      // 步骤 3:归一化故障次数用于散点大小
+      const rawSizes = combined.map((d) => d.count);
+      const minSize = 8;
+      const maxSize = 30;
+      const sizeRange = maxSize - minSize;
+      const minValue = Math.min(...rawSizes);
+      const maxValue = Math.max(...rawSizes);
+      const normalizedSizes = rawSizes.map((val) => {
+        if (maxValue === minValue) return (minSize + maxSize) / 2;
+        return ((val - minValue) / (maxValue - minValue)) * sizeRange + minSize;
+      });
+
+      // 步骤 4:生成散点图数据
+      const data = combined.map((d, i) => ({
+        x: [d.name],
+        y: [d.durationHour],
+        mode: "markers",
+        type: "scatter",
+        name: d.name,
+        marker: {
+          size: normalizedSizes[i],
+          sizemode: "area",
+          sizeref: 1,
+          sizemin: 4,
+          showscale: false,
+        },
+        hovertemplate: `机组: ${d.name}<br>故障时长: ${d.durationHour} 小时<br>故障次数: ${d.count} 次<extra></extra>`,
+      }));
 
-      // 布局配置,设置双 Y 轴
+      // 其他布局配置保持不变
       const layout = {
         title: {
-          text: "机组故障次数与时长分析Top10",
-          font: {
-            size: 16,
-            weight: "bold",
-          },
+          text: "机组故障时长与故障次数分析",
+          font: { size: 16, weight: "bold" },
         },
         xaxis: {
           title: "故障机组",
+          type: "category",
           tickangle: 30,
-          tickmode: "array",
-          tickvals: this.faultTypes.slice(0, 10), // 保证这里是字符串数组
-          ticktext: this.faultTypes.slice(0, 10), // 确保 ticktext 使用相同的标签
           tickfont: { size: 12 },
-          type: "category", // 让 Y 轴按类别均匀分布
-          // categoryorder: "category ascending", // 按类别字母顺序排列
           gridcolor: "rgb(255,255,255)",
           tickcolor: "rgb(255,255,255)",
           backgroundcolor: "#e5ecf6",
+          showbackground: true,
         },
         yaxis: {
-          title: "故障次数",
-          titlefont: { color: "#64ADC2" },
-          tickfont: { color: "#64ADC2" },
-          side: "left", // 左侧的 Y 轴
-          showline: true,
-          linecolor: "#64ADC2",
+          title: "故障时长(小时)",
+          tickfont: { size: 12 },
           gridcolor: "rgb(255,255,255)",
           tickcolor: "rgb(255,255,255)",
           backgroundcolor: "#e5ecf6",
-        },
-        yaxis2: {
-          title: "故障时长(秒)",
-          titlefont: { color: "#1A295D" },
-          tickfont: { color: "#1A295D" },
-          showgrid: false, // 隐藏 Y 轴网格线
-          overlaying: "y", // 在第一个 Y 轴上方绘制
-          side: "right", // 右侧的 Y 轴
-          position: 1, // 调整右侧轴的位置
-          showline: true,
-
-          // tickvals: this.faultTypes.slice(0, 10), // 保证这里是字符串数组
-          // ticktext: this.faultTypes.slice(0, 10), // 确保 ticktext 使用相同的标签
-          linecolor: "#1A295D", // 设置右侧轴线颜色
+          showbackground: true,
         },
         plot_bgcolor: "#e5ecf6",
         gridcolor: "#fff",
-        bgcolor: "#e5ecf6", // 设置背景颜色
-        showlegend: false, // 显示图例
-        margin: {
-          t: 80, // 上边距
-          b: 150, // 下边距,给 X 轴标签更多空间
+        margin: { t: 80, b: 120 },
+        showlegend: true,
+        legendgroup: "same",
+        legend: {
+          itemsizing: "constant",
+          font: {
+            size: 12,
+          },
         },
       };
 
-      // 渲染图表
-      Plotly.newPlot(
-        this.$refs.chart,
-        [scatterFaultCounts, scatterFaultDurations],
-        layout
-      );
+      Plotly.newPlot(this.$refs.chart, data, layout);
     },
   },
 };
 </script>
 
 <style scoped>
-/* 以根据需要添加样式 */
+/* 可添加样式 */
 </style>

+ 96 - 4
src/views/performance/components/chartsCom/GeneratorTemperature.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-21 11:18:49
- * @LastEditTime: 2025-03-13 17:10:32
+ * @LastEditTime: 2025-06-13 09:10:36
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/components/chartsCom/GeneratorTemperature.vue
@@ -91,7 +91,17 @@ export default {
       loading: false,
       isError: false,
       colors: [...colorSchemes[0].colors],
-      typeLine: ["solid", "dot", "dash", "longdash", "dashdot", "longdashdot"],
+      typeLine: [
+        "solid",
+        "solid",
+        "dot",
+        "dot",
+        "dash",
+        "solid",
+        // "longdash",
+        // "dashdot",
+        // "longdashdot",
+      ],
     };
   },
   computed: {
@@ -116,8 +126,17 @@ export default {
   },
   mounted() {
     if (this.fileAddr) {
-      this.getData();
-      this.color1 = this.themeColor;
+      this.$nextTick(() => {
+        this.getData();
+        this.color1 = [
+          "#0000F5",
+          "#377E21",
+          "#0000F5",
+          "#377E21",
+          "#000000",
+          "#F2A93B",
+        ];
+      });
     }
   },
   methods: {
@@ -202,6 +221,8 @@ export default {
           gridcolor: "rgb(255,255,255)",
           tickcolor: "rgb(255,255,255)",
           backgroundcolor: "#e5ecf6",
+          // range: [-20],
+          min: -20,
         },
         margin: {
           l: 50,
@@ -209,6 +230,77 @@ export default {
           t: 50,
           b: 50,
         },
+        shapes: [
+          {
+            type: "line",
+            xref: "paper",
+            x0: 0,
+            x1: 1,
+            yref: "y",
+            y0: 15,
+            y1: 15,
+            line: {
+              color: "red",
+              width: 2,
+              dash: "dash",
+            },
+          },
+          {
+            type: "line",
+            xref: "paper",
+            x0: 0,
+            x1: 1,
+            yref: "y",
+            y0: -15,
+            y1: -15,
+            line: {
+              color: "red",
+              width: 2,
+              dash: "dash",
+            },
+          },
+          {
+            type: "line",
+            xref: "paper",
+            x0: 0,
+            x1: 1,
+            yref: "y",
+            y0: 5,
+            y1: 5,
+            line: {
+              color: "#F9DD70",
+              width: 2,
+              dash: "dash",
+            },
+          },
+          {
+            type: "line",
+            xref: "paper",
+            x0: 0,
+            x1: 1,
+            yref: "y",
+            y0: -5,
+            y1: -5,
+            line: {
+              color: "#F9DD70",
+              width: 2,
+              dash: "dash",
+            },
+          },
+          {
+            type: "line",
+            xref: "paper",
+            x0: 0,
+            x1: 1,
+            yref: "y",
+            y0: 0,
+            y1: 0,
+            line: {
+              color: "#fff", // 设置为黑色
+              width: 2,
+            },
+          },
+        ],
         plot_bgcolor: "#e5ecf6",
         gridcolor: "#fff",
         bgcolor: "#e5ecf6", // 设置背景颜色

+ 8 - 6
src/views/performance/components/chartsCom/HeatmapCharts.vue

@@ -70,12 +70,14 @@ export default {
   },
   mounted() {
     if (this.fileAddr) {
-      this.getData();
-      if (this.themeColor.length === 0) {
-        this.color1 = colorSchemes[0].colors;
-      } else {
-        this.color1 = this.themeColor;
-      }
+      this.$nextTick(() => {
+        this.getData();
+        // if (this.themeColor.length === 0) {
+        this.color1 = this.colorSchemes[0].colors;
+        // } else {
+        //   this.color1 = this.themeColor;
+        // }
+      });
     }
   },
 

+ 20 - 8
src/views/performance/components/chartsCom/Time3DChart.vue

@@ -92,7 +92,7 @@ export default {
     themeColor: {
       handler(newval) {
         if (newval.length === 0) {
-          this.color1 = colorSchemes[0].colors;
+          this.color1 = this.colorSchemes[0].colors;
         } else {
           this.color1 = newval;
         }
@@ -108,12 +108,14 @@ export default {
     },
   },
   async mounted() {
-    this.getData();
-    if (this.themeColor.length === 0) {
-      this.color1 = colorSchemes[0].colors;
-    } else {
-      this.color1 = this.themeColor;
-    }
+    this.$nextTick(() => {
+      this.getData();
+      // if (this.themeColor.length === 0) {
+      this.color1 = this.colorSchemes[0].colors;
+      // } else {
+      //   this.color1 = this.themeColor;
+      // }
+    });
   },
 
   methods: {
@@ -227,6 +229,12 @@ export default {
             tickcolor: "black",
             zeroline: false,
             tickangle: -10,
+            // range:
+            //   this.chartData.xaixs === "发电机转速(r/min)" ||
+            //   this.chartData.xaixs === "发电机转速(r/min)"
+            //     ? [1000, 2000]
+            //     : undefined,
+            // range: this.chartData.xaixs === "桨距角(°)" ? [-1, 20] : undefined,
           },
           // 对 Y 轴不显示默认标题,只保留 tick 标签,并适当加大 standoff 以防止标签挤在一起
           yaxis: {
@@ -315,6 +323,10 @@ export default {
         staticPlot: false,
         showlegend: true,
         legend: {
+          itemsizing: "constant", // ✅ 统一图例 marker 大小
+          font: {
+            size: 12,
+          },
           marker: {
             size: 10,
           },
@@ -331,7 +343,7 @@ export default {
         ],
         modeBarButtonsToRemove: [
           "sendDataToCloud",
-          "autoScale2d",
+          // "autoScale2d",
           "hoverClosest3d",
           "resetCameraLastSave3d",
           "resetCameraDefault3d",

+ 9 - 7
src/views/performance/components/chartsCom/TwoDMarkersChart.vue

@@ -104,7 +104,7 @@ export default {
     themeColor: {
       handler(newval) {
         if (newval.length === 0) {
-          this.color1 = colorSchemes[0].colors;
+          this.color1 = this.colorSchemes[0].colors;
         } else {
           this.color1 = newval;
         }
@@ -121,12 +121,14 @@ export default {
   },
   mixins: [myMixin],
   async mounted() {
-    this.getData();
-    if (this.themeColor.length === 0) {
-      this.color1 = colorSchemes[0].colors;
-    } else {
-      this.color1 = this.themeColor;
-    }
+    this.$nextTick(() => {
+      this.getData();
+      // if (this.themeColor.length === 0) {
+      this.color1 = this.colorSchemes[0].colors;
+      // } else {
+      //   this.color1 = this.themeColor;
+      // }
+    });
   },
   methods: {
     // 根据配色方案设置每个选项的样式

+ 11 - 9
src/views/performance/components/chartsCom/TwoDMarkersChart1.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2024-09-11 14:32:12
- * @LastEditTime: 2025-04-27 15:23:06
+ * @LastEditTime: 2025-06-11 10:50:36
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/components/chartsCom/powerMarkers2DCharts.vue
@@ -108,7 +108,7 @@ export default {
     themeColor: {
       handler(newval) {
         if (newval.length === 0) {
-          this.color1 = colorSchemes[5].colors;
+          this.color1 = this.colorSchemes[5].colors;
         } else {
           this.color1 = newval;
         }
@@ -124,12 +124,14 @@ export default {
     },
   },
   async mounted() {
-    this.getData();
-    if (this.themeColor.length === 0) {
-      this.color1 = colorSchemes[5].colors;
-    } else {
-      this.color1 = this.themeColor;
-    }
+    this.$nextTick(() => {
+      this.getData();
+      // if (this.themeColor.length === 0) {
+      this.color1 = this.colorSchemes[5].colors;
+      // } else {
+      //   this.color1 = this.themeColor;
+      // }
+    });
 
     // console.log(this.color1, colorSchemes[0].colors, "color1");
   },
@@ -251,7 +253,7 @@ export default {
               tickvals: tickvals, // 设置刻度值
               ticktext: ticktext, // 设置刻度文本
               tickmode: "array", // 使用数组模式
-              tickangle: -45, // 可选:调整刻度文本的角度
+              // tickangle: -45, // 可选:调整刻度文本的角度
             },
             size: new Array(data.xData.length).fill(this.pointSize), // 点的大小
           },

+ 8 - 6
src/views/performance/components/chartsCom/WindRoseChart.vue

@@ -62,12 +62,14 @@ export default {
     },
   },
   mounted() {
-    this.getData();
-    if (this.themeColor.length === 0) {
-      this.color1 = colorSchemes[0].colors;
-    } else {
-      this.color1 = this.themeColor;
-    }
+    this.$nextTick(() => {
+      this.getData();
+      // if (this.themeColor.length === 0) {
+      this.color1 = this.colorSchemes[0].colors;
+      // } else {
+      //   this.color1 = this.themeColor;
+      // }
+    });
   },
   methods: {
     async getData() {

+ 84 - 49
src/views/performance/components/chartsCom/lineAndChildLine.vue

@@ -76,7 +76,7 @@ export default {
       chartType: "line", // 默认图表类型是折线图
       color1: [], // 默认颜色
       // 配色方案列表(每个方案是一个颜色数组)
-      colorSchemes: [...colorSchemes],
+      colorSchemes: colorSchemes,
       loading: false,
       isError: false,
       colors: [...colorSchemes[0].colors],
@@ -89,23 +89,29 @@ export default {
   },
   watch: {
     themeColor: {
-      handler() {
-        this.color1 = this.themeColor;
-        this.updateChartColor();
+      handler(newVal, oldVal) {
+        if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
+          this.color1 = newVal;
+          this.updateChartColor();
+        }
       },
       deep: true,
     },
     setUpImgData: {
-      handler(newType) {
-        this.drawChart();
+      handler(newVal, oldVal) {
+        if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
+          this.drawChart();
+        }
       },
       deep: true,
     },
   },
   mounted() {
     if (this.fileAddr) {
-      this.color1 = this.themeColor;
-      this.getData();
+      this.$nextTick(() => {
+        this.color1 = this.colorSchemes[0].colors;
+        this.getData();
+      });
     }
   },
   methods: {
@@ -123,9 +129,9 @@ export default {
           // 使用 nextTick 来确保 DOM 渲染完成后绘制图表
           nextTick(() => {
             this.drawChart();
-            this.isError = false;
-            this.loading = false;
           });
+          this.isError = false;
+          this.loading = false;
         } catch (error) {
           console.error("Error loading data:", error);
           this.isError = true;
@@ -139,46 +145,54 @@ export default {
         return false;
       }
       const data = [];
-      this.chartData &&
-        this.chartData.data &&
-        this.chartData.data.forEach((turbine, index) => {
-          // 判断图表类型,根据类型调整绘制方式
-          const chartConfig = {
-            x: turbine.xData, // X 数据
-            y: turbine.yData, // Y 数据
-            name: turbine.engineName, // 使用机组名称
-            line: {
-              color:
-                this.color1.length > 0
-                  ? this.color1[index % this.color1.length]
-                  : this.colors[index % this.colors.length], // 为每个机组分配不同的颜色
-            },
-            marker: {
-              color:
-                this.color1.length > 0
-                  ? this.color1[index % this.color1.length]
-                  : this.colors[index % this.colors.length], // 为每个机组分配不同的颜色
-            },
-            hovertemplate:
-              `${this.chartData.xaixs}:` +
-              ` %{x} <br> ` +
-              `${this.chartData.yaixs}:` +
-              "%{y} <br>",
-          };
-          if (this.chartData.yaixs === "概率密度函数") {
-            chartConfig.line.color = this.color1[12];
-          }
-          if (this.chartType === "line") {
-            chartConfig.mode = "lines"; // 如果是折线图
-            chartConfig.fill = "none";
-          } else if (this.chartType === "bar") {
-            // chartConfig.type = "bar"; // 如果是柱状图
-            chartConfig.fill = "tonexty";
-          }
+      const newData =
+        this.chartData.analysisTypeCode === "风电机组叶尖速比和风速分析"
+          ? this.chartData &&
+            this.chartData.data &&
+            JSON.parse(JSON.stringify(this.chartData.data)).sort((a, b) => {
+              return a.engineName.localeCompare(b.engineName);
+            })
+          : JSON.parse(JSON.stringify(this.chartData.data));
+      newData.forEach((turbine, index) => {
+        // 判断图表类型,根据类型调整绘制方式
+        const chartConfig = {
+          x: turbine.xData, // X 数据
+          y: turbine.yData, // Y 数据
+          name: turbine.engineName, // 使用机组名称
+          line: {
+            color:
+              this.color1.length > 0
+                ? this.color1[index % this.color1.length]
+                : this.colors[index % this.colors.length], // 为每个机组分配不同的颜色
+          },
+          marker: {
+            color:
+              this.color1.length > 0
+                ? this.color1[index % this.color1.length]
+                : this.colors[index % this.colors.length], // 为每个机组分配不同的颜色
+          },
+          hovertemplate:
+            `${this.chartData.xaixs}:` +
+            ` %{x} <br> ` +
+            `${this.chartData.yaixs}:` +
+            "%{y} <br>",
+        };
+        if (this.chartData.yaixs === "概率密度函数") {
+          console.log(this.color1[5], this.colors[5], "this.color1");
+          chartConfig.line.color =
+            this.color1.length > 0 ? this.color1[7] : this.colors[7]; // 为每个机组分配不同的颜色
+        }
+        if (this.chartType === "line") {
+          chartConfig.mode = "lines"; // 如果是折线图
+          chartConfig.fill = "none";
+        } else if (this.chartType === "bar") {
+          // chartConfig.type = "bar"; // 如果是柱状图
+          chartConfig.fill = "tonexty";
+        }
+
+        data.push(chartConfig);
+      });
 
-          data.push(chartConfig);
-        });
-      console.log(this.chartData, "图表title");
       const layout = {
         title: {
           text: this.chartData.title || this.chartData.data[0].title,
@@ -192,12 +206,28 @@ export default {
           gridcolor: "rgb(255,255,255)",
           tickcolor: "rgb(255,255,255)",
           backgroundcolor: "#e5ecf6",
+          range:
+            this.chartData.analysisTypeCode === "风电机组风能利用系数分析" &&
+            this.chartData.contract_Cp_curve_xData
+              ? [
+                  0,
+                  Math.max(
+                    ...this.chartData.contract_Cp_curve_xData
+                      .map(Number)
+                      .filter((val) => !isNaN(val))
+                  ) * 0.9,
+                ]
+              : undefined,
         },
         yaxis: {
           title: this.chartData.yaixs || "Y轴", // 纵坐标标题
           gridcolor: "rgb(255,255,255)",
           tickcolor: "rgb(255,255,255)",
           backgroundcolor: "#e5ecf6",
+          range:
+            this.chartData.analysisTypeCode === "风电机组风能利用系数分析"
+              ? [0, 1.5]
+              : undefined,
         },
         margin: {
           l: 50,
@@ -271,6 +301,11 @@ export default {
       };
     },
   },
+  beforeUnmount() {
+    if (this.cancelToken) {
+      this.cancelToken.cancel("组件卸载,取消请求");
+    }
+  },
 };
 </script>
 

+ 40 - 21
src/views/performance/components/chartsCom/lineChartsFen.vue

@@ -64,8 +64,11 @@ export default {
   },
   watch: {
     setUpImgData: {
-      handler(newType) {
-        this.drawChart();
+      handler(newVal, oldVal) {
+        if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
+          console.log("更新图表");
+          this.drawChart();
+        }
       },
       deep: true,
     },
@@ -117,22 +120,17 @@ export default {
     },
     // 绘制图表
     drawChart() {
-      const sortedData = this.chartData.data.sort((a, b) => {
-        if (
-          a.engineCode === this.fieldEngineCode &&
-          b.engineCode !== this.fieldEngineCode
-        ) {
-          return 1;
-        }
-        if (
-          a.engineCode !== this.fieldEngineCode &&
-          b.engineCode === this.fieldEngineCode
-        ) {
-          return -1;
-        }
-        return 0;
+      // 先整体排序:目标 engineCode 放最后,其他按 engineName 升序
+      const sortedData = [...this.chartData.data].sort((a, b) => {
+        const aIsTarget = a.engineCode === this.fieldEngineCode;
+        const bIsTarget = b.engineCode === this.fieldEngineCode;
+        // 如果 a 是目标、b 不是 => a 排后(返回 1)
+        if (aIsTarget && !bIsTarget) return 1;
+        // 如果 b 是目标、a 不是 => b 排后(返回 -1)
+        if (!aIsTarget && bIsTarget) return -1;
+        // 如果都不是目标项,按 engineName 升序排序
+        return a.engineName.localeCompare(b.engineName);
       });
-
       const data = [];
       const lineData = [];
 
@@ -146,10 +144,15 @@ export default {
           name: turbine.engineName,
           line: { color },
           marker: { color },
-          hovertemplate: `
-            ${this.chartData.xaixs}: %{x} <br>
-            ${this.chartData.yaixs}: %{y} <br>
-          `,
+          // hovertemplate: `
+          //   ${this.chartData.xaixs}: %{x} <br>
+          //   ${this.chartData.yaixs}: %{y} <br>
+          // `,
+          hovertemplate:
+            `${this.chartData.xaixs}:` +
+            ` %{x} <br> ` +
+            `${this.chartData.yaixs}:` +
+            "%{y} <br>",
         };
 
         if (this.chartType === "line") {
@@ -194,12 +197,28 @@ export default {
           gridcolor: "rgb(255,255,255)",
           tickcolor: "rgb(255,255,255)",
           backgroundcolor: "#e5ecf6",
+          range:
+            this.chartData.analysisTypeCode === "风电机组风能利用系数分析" &&
+            this.chartData.contract_Cp_curve_xData
+              ? [
+                  0,
+                  Math.max(
+                    ...this.chartData.contract_Cp_curve_xData
+                      .map(Number)
+                      .filter((val) => !isNaN(val))
+                  ) * 0.9,
+                ]
+              : undefined,
         },
         yaxis: {
           title: this.chartData.yaixs || "Y轴",
           gridcolor: "rgb(255,255,255)",
           tickcolor: "rgb(255,255,255)",
           backgroundcolor: "#e5ecf6",
+          range:
+            this.chartData.analysisTypeCode === "风电机组风能利用系数分析"
+              ? [0, 1]
+              : undefined,
         },
         margin: {
           l: 50,

+ 19 - 10
src/views/performance/components/chartsCom/powerMarkers2DCharts.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2024-09-11 14:32:12
- * @LastEditTime: 2025-04-28 14:16:16
+ * @LastEditTime: 2025-06-13 13:43:47
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/components/chartsCom/powerMarkers2DCharts.vue
@@ -109,7 +109,7 @@ export default {
     themeColor: {
       handler(newval) {
         if (newval.length === 0) {
-          this.color1 = colorSchemes[0].colors;
+          this.color1 = this.colorSchemes[0].colors;
         } else {
           this.color1 = newval;
         }
@@ -125,12 +125,15 @@ export default {
     },
   },
   async mounted() {
-    this.getData();
-    if (this.themeColor.length === 0) {
-      this.color1 = colorSchemes[0].colors;
-    } else {
-      this.color1 = this.themeColor;
-    }
+    this.$nextTick(() => {
+      this.getData();
+      // if (this.themeColor.length === 0) {
+      this.color1 = this.colorSchemes[0].colors;
+      // } else {
+      //   this.color1 = this.themeColor;
+      // }
+    });
+
     // console.log(this.color1, colorSchemes[0].colors, "color1");
   },
   methods: {
@@ -256,11 +259,11 @@ export default {
                   [1, "#1B2973"],
                 ], // 默认颜色渐变
             colorbar: {
-              title: data.colorbartitle, // 色标标题
+              title: data.colorbartitle || "月份", // 色标标题
               tickvals: tickvals, // 设置刻度值
               ticktext: ticktext, // 设置刻度文本
               tickmode: "array", // 使用数组模式
-              tickangle: -45, // 可选:调整刻度文本的角度
+              // tickangle: -45, // 可选:调整刻度文本的角度
             },
             size: new Array(data.xData.length).fill(this.pointSize), // 点的大小
           },
@@ -302,6 +305,11 @@ export default {
           tickcolor: "rgb(255,255,255)",
           backgroundcolor: "#e5ecf6",
           showbackground: true, // 显示背景
+          range:
+            this.chartData.xaixs === "发电机转速(r/min)" ||
+            this.chartData.xaixs === "发电机转速(r/min)"
+              ? [1000, 2000]
+              : undefined,
         },
         yaxis: {
           title: this.chartData.yaixs,
@@ -309,6 +317,7 @@ export default {
           tickcolor: "rgb(255,255,255)",
           backgroundcolor: "#e5ecf6",
           showbackground: true, // 显示背景
+          range: this.chartData.yaixs === "桨距角(°)" ? [-1, 20] : undefined,
         },
         showlegend: false,
         plot_bgcolor: "#e5ecf6",

+ 6 - 3
src/views/performance/components/chartsCom/yawErrorLine.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-22 09:42:59
- * @LastEditTime: 2025-05-14 11:19:18
+ * @LastEditTime: 2025-06-11 10:55:18
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/components/chartsCom/yawErrorLine.vue
@@ -108,8 +108,11 @@ export default {
   },
   mounted() {
     if (this.fileAddr) {
-      this.getData();
-      this.color1 = this.themeColor;
+      this.$nextTick(() => {
+        this.getData();
+        // this.color1 = this.themeColor;
+        this.color1 = this.colorSchemes[0].colors;
+      });
     }
   },
   methods: {

+ 5 - 4
vue.config.js

@@ -153,8 +153,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:3002",
+        // target: "http://106.120.102.238:58880", //这个代理会走两次代理转发
         changeOrigin: true,
         pathRewrite: {
           "^/databaseApi": "", // 去掉 /databaseApi 前缀
@@ -162,8 +162,9 @@ module.exports = {
       },
       //nodejs 数据库数据
       "/downLoadChart": {
-        target: "http://127.0.0.1:3000",
-        // target: "http://106.120.102.238:58880",
+        // target: "http://127.0.0.1:3000",
+        // target: "http://192.168.50.235:8999", //内网演示
+        target: "http://106.120.102.238:28999/downLoadChart", //外网演示
         changeOrigin: true,
         pathRewrite: {
           "^/downLoadChart": "", // 去掉 /downLoadChart 前缀