Sfoglia il codice sorgente

添加需求时序图时间展示及时间过滤

liujiejie 3 mesi fa
parent
commit
eb1484f7cb

+ 54 - 29
src/components/map/index.vue

@@ -11,9 +11,12 @@
           <span>风机数量</span><span>{{ newWind.engineTotalCount }} 台</span>
         </p>
         <p>
-          <span>总容量</span><span>{{
-            newWind?.ratedCapacityNumber ? newWind.ratedCapacityNumber : 0
-          }}/KW</span>
+          <span>总容量</span
+          ><span
+            >{{
+              newWind?.ratedCapacityNumber ? newWind.ratedCapacityNumber : 0
+            }}/KW</span
+          >
         </p>
         <p>
           <span>经度</span><span>{{ hoverInfo.longitude }}°</span>
@@ -22,10 +25,13 @@
           <span>纬度</span><span>{{ hoverInfo.latitude }}°</span>
         </p>
         <p>
-          <span>分析类型数</span><span>{{
-            hoverInfo.analysisTypeCount ? hoverInfo.analysisTypeCount : 0
-          }}
-            个</span>
+          <span>分析类型数</span
+          ><span
+            >{{
+              hoverInfo.analysisTypeCount ? hoverInfo.analysisTypeCount : 0
+            }}
+            个</span
+          >
         </p>
         <p>
           <span>分析开始时间</span>
@@ -36,17 +42,29 @@
           }}</span>
         </p>
         <p>
-  <span>分析结束时间</span>
-  <span>{{ newWind.analysisEndTime ? $formatDateTWO(newWind.analysisEndTime) : '暂无数据' }}</span>
-</p>
-<p>
-  <span>数据开始时间</span>
-  <span>{{ newWind.dataStartTime ? $formatDateTWO(newWind.dataStartTime) : '暂无数据' }}</span>
-</p>
-<p>
-  <span>数据结束时间</span>
-  <span>{{ newWind.dataEndTime ? $formatDateTWO(newWind.dataEndTime) : '暂无数据' }}</span>
-</p>
+          <span>分析结束时间</span>
+          <span>{{
+            newWind.analysisEndTime
+              ? $formatDateTWO(newWind.analysisEndTime)
+              : "暂无数据"
+          }}</span>
+        </p>
+        <p>
+          <span>数据开始时间</span>
+          <span>{{
+            newWind.dataStartTime
+              ? $formatDateTWO(newWind.dataStartTime)
+              : "暂无数据"
+          }}</span>
+        </p>
+        <p>
+          <span>数据结束时间</span>
+          <span>{{
+            newWind.dataEndTime
+              ? $formatDateTWO(newWind.dataEndTime)
+              : "暂无数据"
+          }}</span>
+        </p>
 
         <!-- <p>
           <span>最新分析时间</span><span> {{ $formatDateTWO(hoverInfo.wfbrCreateTime) }}</span>
@@ -61,13 +79,17 @@
           <span>风机编号</span><span>{{ hoverfengji.engineCode }}</span>
         </p>
         <p>
-          <span>额定容量</span><span>{{
-            hoverfengji?.ratedCapacity ? hoverfengji?.ratedCapacity : 0
-          }}
-            /KW</span>
+          <span>额定容量</span
+          ><span
+            >{{
+              hoverfengji?.ratedCapacity ? hoverfengji?.ratedCapacity : 0
+            }}
+            /KW</span
+          >
         </p>
         <p>
-          <span>海拔高度</span><span>{{ hoverfengji.elevationHeight }} /米</span>
+          <span>海拔高度</span
+          ><span>{{ hoverfengji.elevationHeight }} /米</span>
         </p>
         <p>
           <span>轮毂高度</span><span>{{ hoverfengji.hubHeight }} /米</span>
@@ -86,10 +108,12 @@
           <span>额定风速</span><span>{{ hoverfengji.ratedWindSpeed }} m/s</span>
         </p>
         <p>
-          <span>切入风速</span><span>{{ hoverfengji.ratedCutInWindspeed }} m/s</span>
+          <span>切入风速</span
+          ><span>{{ hoverfengji.ratedCutInWindspeed }} m/s</span>
         </p>
         <p>
-          <span>切出风速</span><span>{{ hoverfengji.ratedCutOutWindspeed }} m/s</span>
+          <span>切出风速</span
+          ><span>{{ hoverfengji.ratedCutOutWindspeed }} m/s</span>
         </p>
       </div>
     </div>
@@ -110,7 +134,8 @@
           <span>状态</span><span>{{  }}</span>
         </p> -->
         <p>
-          <span>测风塔高度</span><span>{{ hoverta.anemometerHeightStrings }}/米</span>
+          <span>测风塔高度</span
+          ><span>{{ hoverta.anemometerHeightStrings }}/米</span>
         </p>
       </div>
     </div>
@@ -209,8 +234,8 @@ export default {
         new TileLayer({
           source: new XYZ({
             // url: "http://127.0.0.1:8010/tiles/{z}/{x}/{y}.png", //本地
-            // url: "http://192.168.50.235/tiles/{z}/{x}/{y}.png", //内网
-            url: "http://106.120.102.238:18000/tiles/{z}/{x}/{y}.png", //外网
+            url: "http://192.168.50.235/tiles/{z}/{x}/{y}.png", //内网
+            // url: "http://106.120.102.238:18000/tiles/{z}/{x}/{y}.png", //外网
             // url: "http://10.96.137.5:9080/tiles/{z}/{x}/{y}.png", //大~#@唐
           }),
         }),
@@ -321,7 +346,7 @@ export default {
 
           // 只有当当前悬停的 feature 和上次的不同,才触发操作
           if (lastHoveredFeature !== feature) {
-            if (val == "1" || val == "30"||val == "-1") {
+            if (val == "1" || val == "30" || val == "-1") {
               this.hoverInfo = feature.get("data");
               this.hoverStyle.left = `${evt.pixel[0] + 10}px`;
               this.hoverStyle.top = `${evt.pixel[1] - 150}px`;

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

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-09 18:06:09
- * @LastEditTime: 2025-02-14 13:34:00
+ * @LastEditTime: 2025-02-14 16:25:02
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/cp_trend/index.vue
@@ -40,12 +40,12 @@
         :itemSize="500"
         v-slot="{ item, index }"
       >
-        <BoxLineCharts
+        <BoxMarkersCharts
           :key="item.fieldEngineCode + index"
           :index="index + item.fieldEngineCode"
           :ref="item.fieldEngineCode"
           :fileAddr="item.fileAddr"
-        ></BoxLineCharts>
+        ></BoxMarkersCharts>
       </VirtualList>
 
       <el-dialog
@@ -97,7 +97,7 @@
 <script>
 import DicCard from "@/views/overview/components/dicCard/index.vue";
 import FilterChart from "@/views/overview/components/filterChart/index.vue";
-import BoxLineCharts from "@/views/performance/components/chartsCom/BoxLineCharts.vue";
+import BoxMarkersCharts from "@/views/performance/components/chartsCom/BoxMarkersCharts.vue";
 import TinymceEditor from "@/components/Tinymce.vue";
 import {
   analysisDetail,
@@ -110,7 +110,7 @@ export default {
   components: {
     DicCard,
     FilterChart,
-    BoxLineCharts,
+    BoxMarkersCharts,
     TinymceEditor,
   },
   props: {

+ 77 - 38
src/views/performance/components/chartsCom/BoxLineCharts.vue

@@ -1,17 +1,17 @@
 <template>
   <div style="width: 100%; height: 500px">
-    <!-- 时间范围选择器 -->
+    <!-- 条件渲染日期范围选择器 -->
     <el-date-picker
-      v-model="dateRange"
-      type="daterange"
-      align="right"
-      unlink-panels
-      range-separator="至"
-      start-placeholder="开始日期"
-      end-placeholder="结束日期"
-      @change="onDateRangeChange"
-      style="margin: 20px 0 0 0"
-    ></el-date-picker>
+      v-if="isDateType(chartData.data[0]?.xData)"
+      <!--
+      只有xData是日期时才显示
+      --
+    >
+      v-model="dateRange" type="daterange" align="right" unlink-panels
+      range-separator="至" start-placeholder="开始日期"
+      end-placeholder="结束日期" @change="onDateRangeChange" size="mini"
+      style="margin: 20px 0 0 0" ></el-date-picker
+    >
 
     <!-- boxLineCharts -->
     <div
@@ -49,6 +49,7 @@ export default {
     };
   },
   mounted() {
+    console.log(this.fileAddr, "fileAddr 连接");
     this.getData();
   },
   methods: {
@@ -85,23 +86,43 @@ export default {
       return date >= new Date(startDate) && date <= new Date(endDate);
     },
 
+    // 判断xData是否为日期格式
+    isDateType(xData) {
+      // 假设第一个元素如果是日期字符串或Date对象则为日期类型
+      const firstTimestamp = xData[0];
+      return !isNaN(Date.parse(firstTimestamp)); // 判断是否是有效日期
+    },
+
     // 过滤数据
     filterData(group) {
       const filteredXData = [];
       const filteredYData = [];
       const filteredMedians = group.medians ? { x: [], y: [] } : null;
-      group.medians.x.forEach((timestamp, index) => {
-        if (this.isInDateRange(timestamp)) {
-          filteredMedians.x.push(timestamp);
-          filteredMedians.y.push(group.medians.y[index]);
-        }
-      });
-      group.xData.forEach((timestamp, index) => {
-        if (this.isInDateRange(timestamp)) {
-          filteredXData.push(timestamp);
-          filteredYData.push(group.yData[index]);
+
+      // 如果是日期类型数据,则进行日期过滤
+      if (this.isDateType(group.xData)) {
+        group.xData.forEach((timestamp, index) => {
+          if (this.isInDateRange(timestamp)) {
+            filteredXData.push(timestamp);
+            filteredYData.push(group.yData[index]);
+
+            // 处理中位值数据,确保索引一致
+            if (filteredMedians && this.isInDateRange(group.medians.x[index])) {
+              filteredMedians.x.push(group.medians.x[index]);
+              filteredMedians.y.push(group.medians.y[index]);
+            }
+          }
+        });
+      } else {
+        // 如果不是日期类型,直接将数据添加到数组
+        filteredXData.push(...group.xData);
+        filteredYData.push(...group.yData);
+
+        if (group.medians) {
+          filteredMedians.x.push(...group.medians.x);
+          filteredMedians.y.push(...group.medians.y);
         }
-      });
+      }
 
       return {
         ...group,
@@ -117,8 +138,9 @@ export default {
 
       // 过滤数据
       const filteredData = this.filterData(chartData);
-
       // 构建箱线图
+      console.log(filteredData, "filteredData");
+
       const trace = {
         x: filteredData.xData,
         y: filteredData.yData,
@@ -130,31 +152,48 @@ export default {
         boxmean: false, // 不显示均值
         name: filteredData.title,
       };
-      const trace2 = {
-        x: filteredData.medians.x,
-        y: filteredData.medians.y,
-        mode: "markers",
-        marker: {
-          color: "#406DAB",
-          size: 3,
-        },
-        name: `${filteredData.title} - 中位点`,
-        type: "scatter",
-      };
+
+      let trace2 = {}; // 初始化trace2为一个空对象
+
+      // 如果有中位值并且中位值的x轴数据不为空,则显示中位点
+      if (filteredData.medians && filteredData.medians.x.length > 0) {
+        trace2 = {
+          x: filteredData.medians.x,
+          y: filteredData.medians.y,
+          mode: "markers",
+          marker: {
+            color: "#406DAB",
+            size: 3,
+          },
+          name: `${filteredData.title} - 中位点`,
+          type: "scatter",
+        };
+      }
+
+      console.log(filteredData, "filteredData");
 
       // 布局设置
       const layout = {
         title: filteredData.title,
         xaxis: {
           title: this.chartData.xaixs,
-          type: "date", // 强制设置为日期类型
-          tickformat: "%Y-%m-%d", // 这里也可以调整格式
+          // 如果xData不是日期格式,则不配置type: "date"
+          title: this.chartData.xaixs,
+          // tickvals: filteredData.xData, // 设置tickvals为原始的xData
+          // ticktext: filteredData.xData, // 设置ticktext为原始的xData(避免被转换成数字)
+          // tickformat: this.isDateType(filteredData.xData)
+          //   ? "%Y-%m-%d"
+          //   : undefined,
+          tickmode: "array", // 精确控制刻度
         },
         yaxis: { title: this.chartData.yaixs },
         showlegend: true,
       };
-
-      Plotly.newPlot(`plotDivBox-${this.index}`, [trace, trace2], layout);
+      // 使用 v-if 防止重新渲染
+      if (this.chartData.data && this.chartData.data.length > 0) {
+        Plotly.newPlot(`plotDivBox-${this.index}`, [trace, trace2], layout);
+      }
+      // Plotly.newPlot(`plotDivBox-${this.index}`, [trace, trace2], layout);
     },
   },
 };