Bladeren bron

禅道样式修改

liujiejie 5 maanden geleden
bovenliggende
commit
910e8d0bf2

BIN
downLoadServer/src/public/file/副本XXX风电场可靠性和能效双提升数据分析报告(模板).docx


+ 2 - 2
downLoadServer/src/server/config.js

@@ -1,4 +1,4 @@
 export const serverConfig = {
-  port: 3000,
-  host: "127.0.0.1",
+  port: 3001,
+  host: "0.0.0.0",
 };

+ 28 - 101
downLoadServer/src/server/controllers/chartController.js

@@ -112,102 +112,7 @@ const handleChartGeneration = async (
  * @param {function} onParsed - 解析成功回调,返回解析后的数据
  * @param {function} onError - 出错时的回调
  */
-// const fetchCsvAndParse = async (
-//   req,
-//   res,
-//   onParsed,
-//   onError,
-//   successMessage,
-//   additionalParams = {}
-// ) => {
-//   try {
-//     const {
-//       fileAddr,
-//       bucketName,
-//       objectName,
-//       fieldInfo,
-//       chartType,
-//       engineTypeCode,
-//     } = req.body;
-//     if (!fileAddr) {
-//       return errorResponse(res, "缺少数据URL", 400);
-//     }
-
-//     const response = await axios.get(fileAddr, { responseType: "text" });
-//     const csvText = response.data;
-//     console.log(req.body, "req.body");
-//     Papa.parse(csvText, {
-//       header: true,
-//       complete: async (result) => {
-//         const data = result.data
-//           .filter((row) => Object.keys(row).length)
-//           .slice(0, result.data.length - 1);
-//         console.log(data, "csv data 数据");
-//         // 调用 onParsed 函数并确保只发送一次响应
-//         try {
-//           let imageUrl = "";
-//           let imageUrls = [];
-//           if (typeof onParsed === "function") {
-//             if (chartType === "radar") {
-//               const results = await Promise.all(
-//                 data &&
-//                   data.map((val) =>
-//                     onParsed(
-//                       val,
-//                       data,
-//                       bucketName,
-//                       objectName,
-//                       fieldInfo,
-//                       engineTypeCode,
-//                       additionalParams
-//                     ).catch((err) => {
-//                       console.error("getRadarCharts failed:", err);
-//                       return null;
-//                     })
-//                   )
-//               );
-//               imageUrls.push(...results); // 如果你还需要存入 imageUrls
-//               console.log(imageUrls, "img");
-//             } else {
-//               imageUrl = await onParsed(
-//                 data,
-//                 bucketName,
-//                 objectName,
-//                 fieldInfo,
-//                 additionalParams
-//               );
-//             }
-//           }
-//           successResponse(res, { data, imageUrl, imageUrls }, successMessage);
-//         } catch (error) {
-//           console.error("处理解析数据时出错:", error);
-//           errorResponse(res, "处理数据失败", 500);
-//         }
-//       },
-//       error: (error) => {
-//         console.error("CSV 解析错误:", error);
-//         if (onError) {
-//           onError(error);
-//         }
-//         errorResponse(res, "CSV 解析失败", 500); // 发送错误响应
-//       },
-//     });
-//   } catch (error) {
-//     console.error("获取 CSV 错误:", error);
-
-//     if (error.response) {
-//       errorResponse(
-//         res,
-//         `获取数据失败: ${error.response.status}`,
-//         error.response.status
-//       );
-//     } else {
-//       errorResponse(res, "获取 CSV 失败", 500);
-//     }
-//   }
-// };
-
-const text = () => {};
+
 const fetchCsvAndParse = async (
   req,
   res,
@@ -284,11 +189,33 @@ const handleParsedResult = async (
   engineTypeCode,
   additionalParams
 ) => {
-  const data = result.data
-    .filter((row) => Object.keys(row).length)
-    .slice(0, result.data.length - 1);
-
-  // console.log(data, "csv data 数据");
+  // chartType==="faultUnitChart"?
+  const data =
+    chartType === "faultUnitChart"
+      ? result.data
+          .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).toFixed(2),
+          }))
+          .sort((a, b) => Number(b.fault_time) - Number(a.fault_time))
+      : chartType === "faultAllChart"
+      ? result.data
+          .filter((row) => Object.keys(row).length)
+          .slice(0, result.data.length - 1)
+          .map((item) => ({
+            ...item,
+            count: Number(item.count),
+            fault_time_sum: (Number(item.fault_time_sum) / 3600).toFixed(2),
+          }))
+          .sort((a, b) => Number(b.fault_time_sum) - Number(a.fault_time_sum))
+      : result.data
+          .filter((row) => Object.keys(row).length)
+          .slice(0, result.data.length - 1);
 
   try {
     let imageUrl = "";

+ 2 - 2
downLoadServer/src/server/utils/chartsCom/FaultAll.js

@@ -46,7 +46,7 @@ export const getFaultAllCharts = async (
       line: { color: "#1A295D" }, // 红色折线
       name: "故障时长",
       yaxis: "y2", // 使用第二个 Y 轴(右侧)
-      hovertemplate: `故障类型: %{x} <br> 故障时长: %{y} 分钟 <br>`,
+      hovertemplate: `故障类型: %{x} <br> 故障时长: %{y} 小时 <br>`,
     };
 
     // 布局配置,设置双 Y 轴
@@ -86,7 +86,7 @@ export const getFaultAllCharts = async (
       },
       yaxis2: {
         title: {
-          text: "故障时长 (分钟)",
+          text: "故障时长 (小时)",
         },
         titlefont: { color: "#1A295D" },
         tickfont: { color: "#1A295D" },

+ 3 - 2
downLoadServer/src/server/utils/chartsCom/GeneratorTemperature.js

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2025-05-13 14:33:50
- * @LastEditTime: 2025-06-18 14:56:26
+ * @LastEditTime: 2025-06-20 14:16:35
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /downLoadServer/src/server/utils/chartsCom/GeneratorTemperature.js
@@ -94,7 +94,8 @@ export const generateGeneratorTemperature = async (
 
       const layout = {
         title: {
-          text: data.title,
+          text: "发电机-轴承温度偏差:" + data.turbineName,
+          // text: data.title,
           font: {
             size: 16,
             weight: "bold",

+ 2 - 2
downLoadServer/src/server/utils/chartsCom/YewErrorBarChart.js

@@ -60,7 +60,7 @@ export const getYewErrorBarChart = async (
     };
     const layout = {
       title: {
-        text: "机组静态偏航误差值", // 图表标题
+        text: "机组静态偏航误差值分布", // 图表标题
         font: {
           size: 16, // 设置标题字体大小(默认 16)
           weight: "bold",
@@ -68,7 +68,7 @@ export const getYewErrorBarChart = async (
       },
       xaxis: {
         title: {
-          text: "机组编号",
+          text: "机组",
         }, // 横坐标标题
         tickmode: "array",
         tickvals: xData, // 设置刻度值(机组编号)

+ 10 - 4
downLoadServer/src/server/utils/chartsCom/powerMarkers2DCharts.js

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2025-04-28 14:15:23
- * @LastEditTime: 2025-05-26 11:01:22
+ * @LastEditTime: 2025-06-20 16:49:39
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /downLoadServer/src/server/utils/chartsCom/powerMarkers2DCharts.js
@@ -70,7 +70,13 @@ export const generatepowerMarkers2DCharts = async (
           ? [...new Set(scatterData.colorbar)] // 从 colorbar 中提取唯一的标签
           : [...new Set(scatterData.color)]; // 如果没有 colorbar,使用 data.color
 
-      const ticktext = uniqueTimeLabels.map((dateStr) => dateStr); // 格式化为标签
+      const ticktext = uniqueTimeLabels.map((dateStr) => {
+        const date = new Date(dateStr);
+        return date.toLocaleDateString("en-CA", {
+          year: "numeric",
+          month: "2-digit",
+        }); // 格式化为 'yyyy-MM'
+      }); // 使用格式化后的时间作为 ticktext
       const tickvals = uniqueTimeLabels.map((label, index) => index + 1); // 设置 tick 值
       const timeMapping = uniqueTimeLabels.reduce((acc, curr, index) => {
         acc[curr] = index + 1;
@@ -130,11 +136,11 @@ export const generatepowerMarkers2DCharts = async (
                 [1, "#1B2973"],
               ], // 默认颜色渐变
           colorbar: {
-            title: { text: scatterData.colorbartitle || "Color Legend" }, // 色标标题
+            title: { text: scatterData.colorbartitle || "" }, // 色标标题
             tickvals: tickvals, // 设置刻度值
             ticktext: ticktext, // 设置刻度文本
             tickmode: "array", // 使用数组模式
-            tickangle: -45, // 可选:调整刻度文本的角度
+            // tickangle: -45, // 可选:调整刻度文本的角度
           },
           size: 4, // 点的大小
           line: {

BIN
downLoadServer/src/src.zip


+ 4 - 3
src/views/overview/components/cp/index.vue

@@ -1,8 +1,8 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-09 18:05:58
- * @LastEditTime: 2025-06-13 16:58:46
- * @LastEditors: milo-MacBook-Pro.local
+ * @LastEditTime: 2025-06-20 15:18:08
+ * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/cp/index.vue
 -->
@@ -11,10 +11,11 @@
   <div class="type-variable">
     <!-- 风能利用系数和有功功率分析 -->
     <div class="left scroller">
+      <!-- :setUpimg="['有功功率', '风能利用系数']" -->
       <FilterChart
         :windList="windEngineGroupList"
         @getEnfineList="getEnfineList"
-        :setUpimg="['有功功率', '风能利用系数']"
+        :setUpimg="['风能利用系数']"
         @handlePrevious="handlePrevious"
         @handleNext="handleNext"
       ></FilterChart>

+ 2 - 2
src/views/overview/components/fault_unit/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-13 13:56:12
- * @LastEditTime: 2025-06-11 09:39:17
+ * @LastEditTime: 2025-06-20 14:04:22
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/fault_unit/index.vue
@@ -60,7 +60,7 @@
             style="width: 100%"
             align="center"
           >
-            <el-table-column prop="wind_turbine_name" label="风机名称" sortable>
+            <el-table-column prop="wind_turbine_name" label="机组" sortable>
             </el-table-column>
             <el-table-column prop="count" sortable label="故障次数(次)">
             </el-table-column>

+ 13 - 3
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-06-10 11:25:46
+ * @LastEditTime: 2025-06-20 11:47:19
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/production_indicator_unit/index.vue
@@ -148,6 +148,7 @@
                 :ref="itemind + 'chart' + chartInd"
                 :chartData="chantItem"
                 :itemCsvData="itemCsv.data"
+                :machineTypeCode="itemCsv.machineTypeCode"
                 v-if="
                   (fieldEngineCodes.length > 0 &&
                     searchFenitem.includes(chantItem.wind_turbine_name)) ||
@@ -388,7 +389,7 @@ export default {
       }
     },
     // 封装的获取 CSV 数据方法
-    fetchCsvData(analysisType, url) {
+    fetchCsvData(analysisType, url, machineTypeCode) {
       axios
         .get(url, { responseType: "blob" }) // 确保数据以 blob 格式返回
         .then((response) => {
@@ -407,7 +408,12 @@ export default {
                   data: result.data
                     .filter((row) => Object.keys(row).length)
                     .slice(0, result.data.length - 1),
+                  machineTypeCode,
                 }); // 过滤空行
+                // console.log(
+                //   this.productionIndicatorCsvData,
+                //   " this.productionIndicatorCsvData"
+                // );
               },
               error: (error) => {
                 console.error("CSV 解析错误:", error);
@@ -469,7 +475,11 @@ export default {
             if (item.fileAddr) {
               this.productionIndicatorCsvHeader = [];
               this.productionIndicatorCsvData = [];
-              this.fetchCsvData("production_indicator", item.fileAddr);
+              this.fetchCsvData(
+                "production_indicator",
+                item.fileAddr,
+                item.machineTypeCode
+              );
             }
           });
         } else {

+ 2 - 2
src/views/overview/components/yaw_error/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-10 09:24:14
- * @LastEditTime: 2025-06-10 11:31:12
+ * @LastEditTime: 2025-06-20 14:09:33
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/yaw_error/index.vue
@@ -54,7 +54,7 @@
               max-height="500"
               align="center"
             >
-              <el-table-column prop="engine_name" label="风机名称">
+              <el-table-column prop="engine_name" label="机组">
               </el-table-column>
               <el-table-column prop="yaw_error1" label="静态偏航误差值(度)">
               </el-table-column>

+ 5 - 2
src/views/performance/assetssDetail.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2024-05-27 09:25:45
- * @LastEditTime: 2025-06-11 09:28:09
+ * @LastEditTime: 2025-06-20 14:05:08
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/assetssDetail.vue
@@ -213,7 +213,10 @@
               style="width: 100%"
               align="center"
             >
-              <el-table-column prop="wind_turbine_name" label="风机名称">
+              <el-table-column
+                prop="wind_turbine_name"
+                label="wind_turbine_name"
+              >
               </el-table-column>
               <el-table-column prop="count" sortable label="故障次数(次)">
               </el-table-column>

+ 5 - 2
src/views/performance/components/EditAnalysis.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2024-05-29 09:14:23
- * @LastEditTime: 2025-01-20 16:47:34
+ * @LastEditTime: 2025-06-20 14:05:19
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/components/EditAnalysis.vue
@@ -184,7 +184,10 @@
                 style="width: 100%"
                 align="center"
               >
-                <el-table-column prop="wind_turbine_name" label="风机名称">
+                <el-table-column
+                  prop="wind_turbine_name"
+                  label="wind_turbine_name"
+                >
                 </el-table-column>
                 <el-table-column prop="count" sortable label="故障次数(次)">
                 </el-table-column>

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

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-21 11:18:49
- * @LastEditTime: 2025-06-13 09:10:36
+ * @LastEditTime: 2025-06-20 14:15:46
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/components/chartsCom/GeneratorTemperature.vue
@@ -204,7 +204,7 @@ export default {
       });
       const layout = {
         title: {
-          text: this.chartData.title,
+          text: "发电机-轴承温度偏差:" + this.chartData.turbineName,
           font: {
             size: 16, // 设置标题字体大小(默认 16)
             weight: "bold",

+ 10 - 1
src/views/performance/components/chartsCom/Radar.vue

@@ -18,6 +18,10 @@ export default {
       type: Array,
       default: [],
     },
+    machineTypeCode: {
+      type: Object,
+      default: "",
+    },
   },
   watch: {
     chartData: {
@@ -137,10 +141,15 @@ export default {
       ];
 
       // 构建 ECharts 配置项
+      console.log(this.machineTypeCode, " this.machineTypeCode");
       const option = {
         // backgroundColor: 'rgba(240, 240, 240, 0.5)', // 整体背景颜色
         title: {
-          text: this.chartData.wind_turbine_name + "机组指标",
+          text:
+            this.machineTypeCode +
+            "机型" +
+            this.chartData.wind_turbine_name +
+            "机组指标",
           left: "center",
           textStyle: {
             fontSize: 16, // 设置字体大小为 16px

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

@@ -108,10 +108,7 @@ export default {
         },
         name: "偏航误差值", // 图例名称
         hovertemplate:
-          `机组名称:` +
-          ` %{x} <br> ` +
-          `偏航误差值:` +
-          "%{y} <br> <extra></extra>",
+          `机组:` + ` %{x} <br> ` + `偏航误差值:` + "%{y} <br> <extra></extra>",
       };
 
       // 创建虚拟的 trace 以便显示图例
@@ -139,14 +136,14 @@ export default {
 
       const layout = {
         title: {
-          text: "机组静态偏航误差值", // 图表标题
+          text: "机组静态偏航误差值分布", // 图表标题
           font: {
             size: 16, // 设置标题字体大小(默认 16)
             weight: "bold",
           },
         },
         xaxis: {
-          title: "机组编号", // 横坐标标题
+          title: "机组", // 横坐标标题
           tickmode: "array",
           tickvals: xData, // 设置刻度值(机组编号)
           ticktext: xData, // 设置刻度文本(机组编号)