Преглед на файлове

添加2D、3D切换功能

liujiejie преди 8 месеца
родител
ревизия
5d30d6f6bc

+ 27 - 16
src/views/home/components/Menu.vue

@@ -21,6 +21,7 @@
             item.children && item.children.length && item.meta?.hidden === false
           "
           :index="item.path"
+          :popper-append-to-body="true"
         >
           <template slot="title">
             <i v-if="isElPrefix(item.iconName)" class="el-icon-menu"></i>
@@ -43,24 +44,34 @@
             <span>{{ child.name }}</span>
           </el-menu-item>
         </el-submenu>
-        <el-menu-item
+        <el-tooltip
           v-else-if="item.meta?.hidden === false"
-          :key="item.id"
-          :index="`${item.path}?id=${item.id}`"
-          @click="handleChangeMenuUrl(item, `${item.path}?id=${item.id}`)"
+          class="box-item"
+          effect="dark"
+          :content="item.name"
+          placement="right-start"
         >
-          <i v-if="isElPrefix(item.iconName)" class="el-icon-menu"></i>
-          <i v-else-if="item.iconName" class="svnIcon">
-            <svg-icon :icon-class="item.iconName" />
-          </i>
-          <i class="svnIcon" v-else-if="item.path === '/home/laserRangeFinder'">
-            <svg-icon
-              style="width: 22px; height: 22px"
-              icon-class="laserRangeFinder"
-            />
-          </i>
-          <span>{{ item.name }}</span>
-        </el-menu-item>
+          <el-menu-item
+            :key="item.id"
+            :index="`${item.path}?id=${item.id}`"
+            @click="handleChangeMenuUrl(item, `${item.path}?id=${item.id}`)"
+          >
+            <i v-if="isElPrefix(item.iconName)" class="el-icon-menu"></i>
+            <i v-else-if="item.iconName" class="svnIcon">
+              <svg-icon :icon-class="item.iconName" />
+            </i>
+            <i
+              class="svnIcon"
+              v-else-if="item.path === '/home/laserRangeFinder'"
+            >
+              <svg-icon
+                style="width: 22px; height: 22px"
+                icon-class="laserRangeFinder"
+              />
+            </i>
+            <span>{{ item.name }}</span>
+          </el-menu-item>
+        </el-tooltip>
       </template>
     </el-menu>
 

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

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-09 18:05:58
- * @LastEditTime: 2025-06-20 15:18:08
+ * @LastEditTime: 2025-08-04 11:29:48
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/cp/index.vue
@@ -57,7 +57,7 @@
           v-if="item.batchCode && !item.fieldEngineCode"
           :setUpImgData="setUpImgData"
           :key="item.batchCode + index"
-          :index="`${new Date().getTime()}` + index"
+          :index="item.batchCode + index"
           :ref="item.batchCode"
           :fileAddr="item.fileAddr"
         >
@@ -77,7 +77,7 @@
           v-if="item.fieldEngineCode"
           :setUpImgData="setUpImgData"
           :key="item.fieldEngineCode + index"
-          :index="`${new Date().getTime()}` + index"
+          :index="item.fieldEngineCode + index"
           :ref="item.fieldEngineCode"
           :fieldEngineCode="item.fieldEngineCode"
           :fileAddr="item.fileAddr"

+ 1 - 0
src/views/overview/components/filterChart/index.vue

@@ -176,6 +176,7 @@ export default {
 
   methods: {
     onSearch() {
+      console.log(this.form.dgeneratorSpeed, "getEnfineList");
       const data = JSON.parse(JSON.stringify(this.form.dgeneratorSpeed));
       this.$emit("getEnfineList", this.form.value2, data);
     },

+ 9 - 1
src/views/overview/components/pitch_tsr_cp/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-09 18:09:55
- * @LastEditTime: 2025-04-11 16:49:57
+ * @LastEditTime: 2025-08-04 11:09:55
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/pitch_tsr_cp/index.vue
@@ -172,6 +172,14 @@ export default {
         }
       }
     },
+    setUpImgData: {
+      handler(newVal) {
+        console.log(newVal, "setUpImgData");
+        // this.setUpImgData = [...newVal];
+        this.getAnalysisDetail();
+      },
+      deep: true,
+    },
   },
   mounted() {
     if (this.initBatchCode && this.analysisTypeCode) {

+ 10 - 2
src/views/overview/components/power_scatter/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2025-01-09 18:10:22
- * @LastEditTime: 2025-07-10 14:55:37
+ * @LastEditTime: 2025-08-05 09:40:23
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/power_scatter/index.vue
@@ -32,7 +32,12 @@
           在风力发电机组中,功率曲线散点图是一种展示在不同风速下风机产生的功率的工具。这种图表通常以风速为横坐标,以发电机的功率输出为纵坐标。在理想情况下,这些散点应当形成一条清晰的曲线,反映出风速与发电机功率之间的关系。功率曲线是风力发电机性能的关键指标,可以用来评估风机在不同风速条件下的表现。
         </div>
       </el-alert>
-      <div class="titleCharts">分析分图 :</div>
+      <div class="titleCharts">
+        分析分图 :
+        <el-button @click="handleType2D" type="primary" size="small">{{
+          "查看2D"
+        }}</el-button>
+      </div>
       <VirtualList
         :list="diagramRelationsDatas"
         keyField="fieldEngineCode"
@@ -188,6 +193,9 @@ export default {
       //关闭评论弹框
       this.$emit("setIsShow");
     },
+    handleType2D() {
+      this.$emit("handle2D", true);
+    },
     async handleComment() {
       try {
         await analysisCommentEdit({

+ 11 - 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-06-10 11:06:57
+ * @LastEditTime: 2025-08-05 09:42:18
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/overview/components/power_scatter_2D/index.vue
@@ -33,7 +33,12 @@
           在风力发电机组中,功率曲线散点图是一种展示在不同风速下风机产生的功率的工具。这种图表通常以风速为横坐标,以发电机的功率输出为纵坐标。在理想情况下,这些散点应当形成一条清晰的曲线,反映出风速与发电机功率之间的关系。功率曲线是风力发电机性能的关键指标,可以用来评估风机在不同风速条件下的表现
         </div>
       </el-alert>
-      <div class="titleCharts">分析分图 :</div>
+      <div class="titleCharts">
+        分析分图 :
+        <el-button @click="handleType2D" type="primary" size="small">{{
+          "查看3D"
+        }}</el-button>
+      </div>
       <VirtualList
         :list="diagramRelationsDatas"
         keyField="fieldEngineCode"
@@ -193,6 +198,10 @@ export default {
       });
       this.windEngineGroupList = resEngineList.data;
     },
+    handleType2D() {
+      console.log();
+      this.$emit("handle2D", false);
+    },
     handleClose() {
       //关闭评论弹框
       this.$emit("setIsShow");

+ 94 - 0
src/views/overview/components/power_scatters/index.vue

@@ -0,0 +1,94 @@
+<!--
+ * @Author: your name
+ * @Date: 2025-08-04 16:11:25
+ * @LastEditTime: 2025-08-06 16:27:04
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /performance-test/src/views/overview/components/power_scatters/index.vue
+-->
+<template>
+  <div class="type-variable-power-scatters">
+    <!-- <el-button @click="handle2D">{{ is2D ? "查看3D" : "查看2D" }}</el-button> -->
+    <PowerScatter2D
+      v-if="is2D"
+      :initBatchCode="initBatchCode"
+      :analysisTypeCode="'power_scatter_2D'"
+      :batchCodeList="batchCodeList"
+      @setInitBathCode="handleSetInitBathCode"
+      @setIsShow="handleSetIsShow"
+      @handle2D="handle2D"
+      :isShow="isShow"
+      :isShowTinymceEditorCom="true"
+    ></PowerScatter2D>
+    <PowerScatter3D
+      :initBatchCode="initBatchCode"
+      :analysisTypeCode="'power_scatter'"
+      :batchCodeList="batchCodeList"
+      @setInitBathCode="handleSetInitBathCode"
+      @setIsShow="handleSetIsShow"
+      @handle2D="handle2D"
+      :isShow="isShow"
+      :isShowTinymceEditorCom="true"
+      v-else
+    ></PowerScatter3D>
+  </div>
+</template>
+<script>
+import PowerScatter2D from "../power_scatter_2D/index.vue";
+import PowerScatter3D from "../power_scatter/index.vue";
+export default {
+  name: "PowerScatters",
+  components: {
+    PowerScatter2D,
+    PowerScatter3D,
+  },
+  props: {
+    initBatchCode: {
+      default: "",
+      type: String,
+    },
+    isShowTinymceEditorCom: {
+      default: true,
+      type: Boolean,
+    },
+    isShow: {
+      default: false,
+      type: Boolean,
+    },
+    analysisTypeCode: {
+      default: "",
+      type: String,
+    },
+    batchCodeList: {
+      default: "",
+      type: Array,
+    },
+  },
+  emits: ["setInitBathCode", "setIsShow"], // 👈 告诉 Vue 父组件会向上传递事件
+  data() {
+    return {
+      windEngineGroupList: [],
+      is2D: true,
+    };
+  },
+  //105=40(剩余贷款)+60(已还贷款)+30(首付)-20(利息)
+  methods: {
+    handleSetInitBathCode(val) {
+      this.$emit("setInitBathCode", val); // 👈 向爷爷组件传递
+    },
+    handleSetIsShow(val) {
+      this.$emit("setIsShow", val); // 👈 向爷爷组件传递
+    },
+    handle2D(val) {
+      this.is2D = val;
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.type-variable-power-scatters {
+  width: 100%;
+  height: 100%;
+  overflow-y: scroll;
+}
+</style>

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

@@ -358,13 +358,26 @@ export default {
     queryAllAnalysisType() {
       queryAllAnalysisType().then((res) => {
         if (res.code === 200) {
+          const datas = res.data.map((item) => {
+            if (item.typeName === "功率曲线分析") {
+              item.children = [
+                { ...item.children[0] },
+                {
+                  id: "107",
+                  typeName: "风速功率散点分析",
+                  typeCode: "power_scatters",
+                },
+              ];
+            }
+            return item;
+          });
           this.assetssTypeData = [
             {
               id: "1",
               typeName: "分析概述",
               typeCode: "analysis_information",
             },
-            ...res.data,
+            ...datas,
           ];
         }
       });

+ 4 - 4
src/views/performance/components/DetailCharts.vue

@@ -175,7 +175,7 @@ export default {
         },
         shapes: [],
         _undoStack: [],
-        editable: true,
+        editable: false,
       };
       const plotlyData = this.data.data.map((engine) => ({
         x: engine.windSpeed,
@@ -190,7 +190,7 @@ export default {
           "lasso2d",
         ],
         displaylogo: false,
-        editable: true,
+        editable: false,
         scrollZoom: true,
       };
       Plotly.newPlot("mainChart", plotlyData, layout, config).then((gd) => {
@@ -237,7 +237,7 @@ export default {
           ],
           shapes: [],
           _undoStack: [], // 用于存储撤回操作的栈
-          editable: true,
+          editable: false,
         };
         const plotlyData = this.data.data.map((eng, i) => ({
           x: eng.windSpeed,
@@ -262,7 +262,7 @@ export default {
           ],
           displaylogo: false,
           scrollZoom: true,
-          editable: true,
+          editable: false,
         };
         Plotly.newPlot(`chart-${index}`, plotlyData, layout, config).then(
           (gd) => {

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

@@ -414,7 +414,7 @@ export default {
           "plotlylogo3D",
         ],
         displaylogo: false,
-        editable: true,
+        editable: false,
         responsive: true,
         scrollZoom: false,
       };

+ 2 - 1
src/views/performance/components/chartsCom/TwoDMarkersChart.vue

@@ -114,6 +114,7 @@ export default {
     },
     setUpImgData: {
       handler(newType) {
+        console.log(newType, "setUpImgDatachart");
         this.drawChart();
       },
       deep: true,
@@ -396,7 +397,7 @@ export default {
           "plotlylogo3D",
         ],
         displaylogo: false,
-        editable: true,
+        editable: false,
         scrollZoom: false,
       };
       this.$nextTick(() => {

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

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2024-09-11 14:32:12
- * @LastEditTime: 2025-07-15 17:13:00
+ * @LastEditTime: 2025-08-05 09:53:49
  * @LastEditors: bogon
  * @Description: In User Settings Edit
  * @FilePath: /performance-test/src/views/performance/components/chartsCom/powerMarkers2DCharts.vue
@@ -362,8 +362,8 @@ export default {
           "plotlylogo2D",
           "plotlylogo3D",
         ],
+        editable: false,
         displaylogo: false,
-        editable: true,
         scrollZoom: false,
       };
 

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

@@ -100,7 +100,10 @@ export default {
     setUpImgData: {
       handler(newVal, oldVal) {
         if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
-          this.drawChart();
+          // 异步执行,避免同步触发 watcher 嵌套执行
+          this.$nextTick(() => {
+            this.drawChart();
+          });
         }
       },
       deep: true,
@@ -247,12 +250,12 @@ export default {
       const xChartSetUp = getChartSetUp(layout.xaxis.title);
       if (xChartSetUp) {
         layout.xaxis.dtick = xChartSetUp.dtick;
-        layout.xaxis.range = [xChartSetUp.min, xChartSetUp.max];
+        layout.xaxis.range = [Number(xChartSetUp.min), Number(xChartSetUp.max)];
       }
       const yChartSetUp = getChartSetUp(layout.yaxis.title);
       if (yChartSetUp) {
         layout.yaxis.dtick = yChartSetUp.dtick;
-        layout.yaxis.range = [yChartSetUp.min, yChartSetUp.max];
+        layout.yaxis.range = [Number(yChartSetUp.min), Number(yChartSetUp.max)];
       }
       if (
         this.chartData.contract_Cp_curve_yData &&

+ 1 - 1
src/views/performance/components/chartsCom/powerMarkers2DCharts.vue

@@ -372,7 +372,7 @@ export default {
           "plotlylogo3D",
         ],
         displaylogo: false,
-        editable: true,
+        editable: false,
         scrollZoom: false,
       };
 

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

@@ -70,7 +70,7 @@ export default {
     generateChart() {
       const config = {
         displaylogo: false,
-        editable: true,
+        editable: false,
         scrollZoom: true,
       };