rui.jiang 1 viikko sitten
vanhempi
commit
12a94b451b

BIN
dist.zip


+ 3 - 3
src/components/HeaderCom.vue

@@ -2,8 +2,8 @@
   <div class="header">
     <div class="header-logo">
       
-      <img src="@/assets/datang.png" slot="reference" />
-      <h2 class="conversion">中国大唐集团公司</h2>
+      <!-- <img src="@/assets/datang.png" slot="reference" />
+      <h2 class="conversion">中国大唐集团公司</h2> -->
     </div>
     <div class="personalCenter">
       <p class="current-time">{{ currentDate }}</p>
@@ -194,7 +194,7 @@ export default {
   justify-content: space-between;
   align-items: center;
   height: 60px;
-  padding: 0 20px;
+  padding: 0 10px;
 
   .header-logo {
     display: flex;

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

@@ -191,6 +191,16 @@ import icon04 from "../../assets/img/iconFJ.png";
 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";
+// import icon04 from "../../assets/img/icon04.png";
+// import icon05 from "../../assets/img/icon05.png";
+// import icon06 from "../../assets/img/iconFJ.png";
+// import defaultIcon from "../../assets/img/iconFJ.png";
+
 import { queryErrDescByEngine, queryFloatingWindowInfo } from "@/api/ledger.js";
 import { login } from "@/api/login";
 

+ 1 - 1
src/styles/base.css

@@ -252,7 +252,7 @@ body {
 /* 外边框 */
 .global-variable {
   margin: 18px;
-  padding: 20px;
+  padding: 10px;
   background: #ffffff;
   min-height: 88vh;
   /* height: 89vh; */

+ 1 - 1
src/views/admin/cockpitManage/HD.vue

@@ -215,7 +215,7 @@ bottom-data {
 }
 
 .zuobian {
-  width: 180px;
+  width: 150px;
   position: absolute;
   top: 15px;
   left: 10px;

+ 3 - 3
src/views/admin/cockpitManage/component/leftdata.vue

@@ -7,16 +7,16 @@
           <strong class="texyellow">
             {{ onrelevance ? onrelevance : 0 }}</strong
           >
-          <span>待分析任务</span>
+          <span>待分析</span>
         </div>
         <div class="YC02" @click="getwfx">
           <strong class="textred"> {{ abnormal ? abnormal : 0 }}</strong>
-          <span>异常任务</span>
+          <span>异常中断</span>
         </div>
 
         <div class="YC03" @click="getpd">
           <strong class="textred"> {{ queueNumber ? queueNumber : 0 }}</strong>
-          <span>排队任务</span>
+          <span>排队</span>
         </div>
       </div>
 

+ 2 - 2
src/views/admin/cockpitManage/component/rightdata.vue

@@ -17,7 +17,7 @@
     </div>
 
     <div>
-      <h3 style="margin-bottom: 8px">性能分析操作记录</h3>
+      <h3 style="margin-bottom: 8px">历史操作记录</h3>
       <p class="titleJQ">
         <span>名字</span><span>日期</span><span>操作记录</span>
       </p>
@@ -30,7 +30,7 @@
       ></Tabroll>
     </div>
     <div>
-      <h3>异常设备概览</h3>
+      <h3>风机异常概览</h3>
       <div class="BOX">
         <div style="display: flex">
           <div class="YC01">

+ 1 - 1
src/views/health/components/malfunction/bearing.vue

@@ -38,7 +38,7 @@
             :current-page="currentPage"
             layout="total, prev, pager, next, jumper"
             :total="totalCount"
-            :page-size="20"
+            :page-size="10"
             small
           ></el-pagination>
         </div>

+ 1 - 1
src/views/health/components/malfunction/bing.vue

@@ -63,7 +63,7 @@ export default {
             data: [
               { value: 0, name: "正常", itemStyle: { color: "#8AE359" } },
               { value: 0, name: "报警", itemStyle: { color: "#EECB5F" } },
-              { value: 0, name: "危险", itemStyle: { color: "#F7715F" } },
+
             ],
             emphasis: {
               itemStyle: {

+ 1 - 1
src/views/health/components/malfunction/dissymmetry.vue

@@ -39,7 +39,7 @@
             :current-page="currentPage"
             layout="total, prev, pager, next, jumper"
             :total="totalCount"
-            :page-size="20"
+            :page-size="10"
           ></el-pagination>
         </div>
       </div>

+ 1 - 1
src/views/health/components/malfunction/gear.vue

@@ -39,7 +39,7 @@
             :current-page="currentPage"
             layout="total, prev, pager, next, jumper"
             :total="totalCount"
-            :page-size="20"
+            :page-size="10"
           ></el-pagination>
         </div>
       </div>

+ 1 - 1
src/views/health/components/malfunction/loose.vue

@@ -39,7 +39,7 @@
             :current-page="currentPage"
             layout="total, prev, pager, next, jumper"
             :total="totalCount"
-            :page-size="20"
+            :page-size="10"
           ></el-pagination>
         </div>
       </div>

+ 1 - 1
src/views/health/components/malfunction/misalignment.vue

@@ -39,7 +39,7 @@
             :current-page="currentPage"
             layout="total, prev, pager, next, jumper"
             :total="totalCount"
-            :page-size="20"
+            :page-size="10"
           ></el-pagination>
         </div>
       </div>

+ 21 - 18
src/views/health/components/malfunction/temperature.vue

@@ -1,8 +1,7 @@
 <template>
   <div>
     <div class="TopBox">
-
-          <div class="rightdiv">
+      <div class="rightdiv">
         <el-table
           ref="multipleTable"
           :data="tableData"
@@ -11,15 +10,10 @@
           height="250"
         >
           <!-- <el-table-column fixed type="selection" width="55"> </el-table-column> -->
-          <el-table-column
-            prop="timeStamp"
-            label="时间"
-            align="center"
-   
-          >
+          <el-table-column prop="timeStamp" label="时间" align="center">
           </el-table-column>
 
-          <el-table-column prop="" label="部件部件名称" align="center">
+          <el-table-column prop="" label="部件名称" align="center">
           </el-table-column>
           <el-table-column
             prop="innerRingFault"
@@ -76,7 +70,7 @@
             <p class="PText">
               <span><i class="color1"></i>正常</span
               ><span><i class="color2"></i>报警</span
-              ><span><i class="color3"></i>危险</span>
+              >
             </p>
 
             <h4>诊断步骤:</h4>
@@ -86,21 +80,27 @@
           </div>
         </div>
       </div>
-
-  
     </div>
     <div class="bottomBox">
       <div class="tu">
-        <zhexian title="主轴承温度特征值℃" lineType="line" lineColor="#02aae9"></zhexian>
+        <zhexian
+          title="主轴承温度特征值"
+          lineType="line"
+          lineColor="#02aae9"
+        ></zhexian>
       </div>
       <div class="tu">
-        <zhexian  title="驱动侧发电机轴承温度℃"></zhexian>
+        <zhexian title="驱动侧发电机轴承温度"></zhexian>
       </div>
       <div class="tu">
-        <zhexian title="齿轮箱油温℃" lineType="line" lineColor="#02aae9"></zhexian>
+        <zhexian
+          title="齿轮箱油温"
+          lineType="line"
+          lineColor="#02aae9"
+        ></zhexian>
       </div>
       <div class="tu">
-       <zhexian  title="驱动侧非发电机轴承温度℃"></zhexian>
+        <zhexian title="驱动侧非发电机轴承温度"></zhexian>
       </div>
     </div>
   </div>
@@ -381,15 +381,18 @@ h4 {
 }
 
 .bottomBox {
+  margin-top: 20px;
   display: flex;
   flex-wrap: wrap;
   justify-content: space-around;
   overflow: hidden;
   overflow-y: auto;
-  height: 370px;
+  height: 350px;
+  border: 1px solid rgb(231, 231, 231);
+  padding: 10px;
   .tu {
     width: 49%;
-    height: 370px;
+    height: 350px;
   }
   // margin-top: 10px;
   // .BtLeft {

+ 232 - 185
src/views/health/index.vue

@@ -15,104 +15,141 @@
             label: 'companyName',
             value: 'codeNumber',
           }"
-        >
-        </selecttree>
+        />
       </p>
 
       <p>
         时间:
-
         <el-date-picker
           v-model="timevalue"
           size="small"
           type="month"
           placeholder="选择月"
-        >
-        </el-date-picker>
-        <!-- <el-date-picker
-          size="small"
-          v-model="timevalue"
-          type="datetimerange"
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-        >
-        </el-date-picker> -->
+        />
       </p>
-      <el-button type="primary" size="small" @click="conditions"
-        >查询</el-button
-      >
+
+      <el-button type="primary" size="small" @click="conditions">
+        查询
+      </el-button>
     </div>
+
     <div class="kuang">
-    <div class="main-body">
-      <div class="basics" v-for="(item, index) in ListData" :key="item + index">
-        <div class="title">
-          <span>
-            <SvgIcons
-              name="WindPower3"
-              class="WindPower3"
-              width="30"
-              height="30"
-            ></SvgIcons>
-          </span>
-          <h4>
-            {{ item.fanName }}
-          </h4>
-        </div>
-        <div class="content">
-          <div class="summary" v-if="item.status == '1'" style="color: #28a745">
-            <span>100</span>
-            <span>健康</span>
-          </div>
-          <div
-            class="summary"
-            v-else-if="item.status == '2'"
-            style="color: #ffc107"
-          >
-            <span>84</span>
-            <span>亚健康</span>
-          </div>
-          <div
-            class="summary"
-            v-else-if="item.status == '3'"
-            style="color: #fd7e14"
-          >
-            <span>65</span>
-            <span>一般</span>
-          </div>
-          <div
-            class="summary"
-            v-else-if="item.status == '4'"
-            style="color: #dc3545"
-          >
-            <span>50</span>
-            <span> 故障 </span>
+      <!-- 加载中动画 -->
+      <div v-if="loading" class="loader-wrapper">
+        <div class="loader"></div>
+      </div>
+
+      <!-- 空状态 -->
+      <el-empty
+        class="Anempty"
+        v-if="!loading && ListData.length === 0"
+        :image-size="200"
+      />
+
+      <!-- 主体内容 -->
+      <div class="main-body" v-if="!loading && ListData.length > 0">
+        <div
+          class="basics"
+          v-for="(item, index) in ListData"
+          :key="item + index"
+        >
+          <div class="title">
+            <span>
+              <SvgIcons
+                name="WindPower3"
+                class="WindPower3"
+                width="26"
+                height="26"
+              />
+            </span>
+            <h4>风机:{{ item.wind_turbine_name }}</h4>
+            <span class="mill">{{ millTypeMap[item.mill_type] || "-" }}</span>
           </div>
-          <div class="summary" v-else>未知状态</div>
 
-          <ul class="health">
-            <li v-for="item in item.systems" :key="item.name">
-              <span>{{ item.name }}</span>
-              <span :class="'health-' + item.val">
-                {{ getStatusText(item.val) }}
+          <div class="content">
+            <div class="summary" style="color: #28a745">
+              <span :style="{ color: getHealthColor(item.total_health_score) }">
+                {{
+                  item.total_health_score < 0
+                    ? "-"
+                    : Math.floor(item.total_health_score)
+                }}
+              </span>
+              <span :style="{ color: getHealthColor(item.total_health_score) }">
+                {{ getHealthLabel(item.total_health_score) }}
               </span>
-            </li>
-          </ul>
+            </div>
+
+            <ul class="health">
+              <li>
+                <span>发电机组</span>
+                <span :class="'health-' + item.val">
+                  {{
+                    item.subsystems.generator.health_score >= 0
+                      ? String(
+                          Math.floor(item.subsystems.generator.health_score)
+                        ).slice(0, 3)
+                      : "-"
+                  }}
+                </span>
+              </li>
+
+              <li v-if="item.subsystems.drive_train">
+                <span>传动系统</span>
+                <span :class="'health-' + item.val">
+                  {{
+                    item.subsystems.drive_train.health_score >= 0
+                      ? String(
+                          Math.floor(item.subsystems.drive_train.health_score)
+                        ).slice(0, 3)
+                      : "-"
+                  }}
+                </span>
+              </li>
+
+              <li>
+                <span>机舱系统</span>
+                <span :class="'health-' + item.val">
+                  {{
+                    item.subsystems.nacelle.health_score >= 0
+                      ? String(
+                          Math.floor(item.subsystems.nacelle.health_score)
+                        ).slice(0, 3)
+                      : "-"
+                  }}
+                </span>
+              </li>
+
+              <li>
+                <span>电网环境</span>
+                <span :class="'health-' + item.val">
+                  {{
+                    item.subsystems.grid.health_score >= 0
+                      ? String(
+                          Math.floor(item.subsystems.grid.health_score)
+                        ).slice(0, 3)
+                      : "-"
+                  }}
+                </span>
+              </li>
+            </ul>
+          </div>
         </div>
       </div>
     </div>
 
-  </div>
-      <p class="tishi"><span>健康度说明:</span>100-85代表健康,84-70代表亚健康,69-55一代表般,  &lt;55代表故障</p>
+    <p class="tishi">
+      <span>健康度说明:</span>100-85代表健康,84-70代表亚健康,69-55代表一般,
+      &lt;55代表故障
+    </p>
   </div>
 </template>
 
 <script>
-import * as FileSaver from "file-saver";
-import * as XLSX from "xlsx";
 import { getSysOrganizationAuthTreeByRoleId } from "@/api/ledger.js";
 import selecttree from "../../components/selecttree.vue";
 import axios from "axios";
+
 export default {
   components: {
     selecttree,
@@ -121,101 +158,24 @@ export default {
     return {
       parentOpt: [],
       companyCode: "",
-      timevalue: [], // 绑定 el-date-picker 的值
-      startTime: "", // 开始时间
-      endTime: "", // 结束时间
-      ListData: [
-        {
-          fanName: "FXX风机-1号", // 风机名称
-          status: "1",
-          systems: [
-            // 子系统列表
-            { name: "发电机组", val: "100" },
-            { name: "传动系统", val: "100" },
-            { name: "机舱系统", val: "100" },
-            { name: "电网环境", val: "100" },
-            { name: "辅助系统", val: "100" },
-          ],
-        },
-        {
-          fanName: "FXX风机-2号", // 风机名称
-          status: "2",
-          systems: [
-            // 子系统列表
-            { name: "发电机组", val: "84" },
-            { name: "传动系统", val: "84" },
-            { name: "机舱系统", val: "84" },
-            { name: "电网环境", val: "84" },
-            { name: "辅助系统", val: "84" },
-          ],
-        },
-        {
-          fanName: "FXX风机-1号", // 风机名称
-          status: "3",
-          systems: [
-            // 子系统列表
-            { name: "发电机组", val: "65" },
-            { name: "传动系统", val: "65" },
-            { name: "机舱系统", val: "65" },
-            { name: "电网环境", val: "65" },
-            { name: "辅助系统", val: "65" },
-          ],
-        },
-        {
-          fanName: "FXX风机-1号", // 风机名称
-          status: "4",
-          systems: [
-            // 子系统列表
-            { name: "发电机组", val: "50" },
-            { name: "传动系统", val: "50" },
-            { name: "机舱系统", val: "50" },
-            { name: "电网环境", val: "50" },
-            { name: "辅助系统", val: "50" },
-          ],
-        },
-        {
-          fanName: "FXX风机-1号", // 风机名称
-          status: "1",
-          systems: [
-            // 子系统列表
-        { name: "发电机组", val: "100" },
-            { name: "传动系统", val: "100" },
-            { name: "机舱系统", val: "100" },
-            { name: "电网环境", val: "100" },
-            { name: "辅助系统", val: "100" },
-          ],
-        },
-        {
-          fanName: "FXX风机-1号", // 风机名称
-          status: "1",
-          systems: [
-            // 子系统列表
-           { name: "发电机组", val: "100" },
-            { name: "传动系统", val: "100" },
-            { name: "机舱系统", val: "100" },
-            { name: "电网环境", val: "100" },
-            { name: "辅助系统", val: "100" },
-          ],
-        },
-      ],
+      timevalue: [],
+      ListData: [],
+      loading: false, // ✅ 加载状态
     };
   },
-
+  computed: {
+    millTypeMap() {
+      return {
+        dfig: "双馈",
+        direct: "直驱",
+        semi: "半直驱",
+      };
+    },
+  },
   created() {
     this.GETtree();
   },
-  watch: {},
   methods: {
-    getStatusText(val) {
-      const statusMap = {
-        1: "健康",
-        2: "亚健康",
-        3: "一般",
-        4: "故障",
-      };
-      return statusMap[val] || val;
-    },
-    // 获取风场
     async GETtree() {
       const res = await getSysOrganizationAuthTreeByRoleId();
       const treedata = res.data;
@@ -243,7 +203,52 @@ export default {
       return processedData;
     },
 
-    conditions() {},
+    getHealthLabel(val) {
+      if (!Number.isFinite(val) || val < 0) return "无数据";
+      if (val >= 85) return "健康";
+      if (val >= 70) return "亚健康";
+      if (val >= 55) return "一般";
+      return "故障";
+    },
+
+    getHealthColor(val) {
+      if (!Number.isFinite(val) || val < 0) return "#6c757d"; // 灰色
+      if (val >= 85) return "#28a745"; // 绿色
+      if (val >= 70) return "#ffc107"; // 黄色
+      if (val >= 55) return "#fd7e14"; // 橙色
+      return "#dc3545"; // 红色
+    },
+
+    conditions() {
+      const fullStr = this.$formatDateTWO(this.timevalue);
+      const datePart = typeof fullStr === "string" ? fullStr.slice(0, 7) : "";
+      const parms = {
+        windcode: this.companyCode,
+        month: datePart,
+      };
+
+      this.loading = true; // ✅ 显示 loading
+      const start = performance.now(); // ⏱️ 请求开始时间
+
+      axios
+        .post(`/WJJapi/health_assess`, parms)
+        .then((res) => {
+          this.ListData = res.data;
+
+          const end = performance.now(); // ⏱️ 请求结束时间
+          const duration = ((end - start) / 1000).toFixed(2);
+          console.log(`接口请求耗时:${duration} 秒`);
+        })
+        .catch((error) => {
+          console.error("Error fetching data:", error);
+          const end = performance.now(); // ⏱️ 请求结束时间
+          const duration = ((end - start) / 1000).toFixed(2);
+          console.log(`接口请求耗时:${duration} 秒`);
+        })
+        .finally(() => {
+          this.loading = false; // ✅ 隐藏 loading
+        });
+    },
   },
 };
 </script>
@@ -267,7 +272,7 @@ export default {
 .main-body {
   margin: 0 auto;
   display: grid;
-  grid-template-columns: repeat(auto-fill, 280px); /* 严格保持300px宽度 */
+  grid-template-columns: repeat(auto-fill, 260px); /* 严格保持300px宽度 */
   justify-content: space-evenly; /* 均匀分布 */
   gap: 10px;
 
@@ -276,7 +281,7 @@ export default {
   overflow: hidden;
   overflow-y: auto;
   .basics {
-    width: 280px; /* 固定宽度 */
+    width: 260px; /* 固定宽度 */
     display: flex;
     flex-direction: column;
     margin-bottom: 20px;
@@ -286,7 +291,7 @@ export default {
       padding: 5px 0;
       width: 100%;
       border-bottom: 1px solid var(--header-bg);
-      text-align: center;
+      text-align: left;
 
       display: flex;
       align-items: center; // 垂直居中
@@ -302,17 +307,22 @@ export default {
       }
 
       h4 {
+        width: 175px;
         color: var(--header-bg);
         font-size: 1.1em;
         font-weight: 600;
         margin: 0;
       }
+      .mill {
+        font-size: 12px;
+        color: rgb(43, 42, 42);
+      }
     }
 
     .content {
       display: flex;
       width: 100%;
-      gap: 8px;
+      gap: 28px;
       .summary {
         width: 70px;
         display: flex;
@@ -320,7 +330,7 @@ export default {
         align-items: center; // 居中对齐
         justify-content: center;
         font-weight: bold;
-
+        padding-left: 26px;
         span {
           display: block;
           text-align: center;
@@ -368,19 +378,6 @@ export default {
         li span {
           &:last-child {
             color: var(--header-bg);
-            // Status color classes
-            &.health-1 {
-              color: #28a745;
-            } // 健康 - 绿色
-            &.health-2 {
-              color: #ffc107;
-            } // 亚健康 - 黄色
-            &.health-3 {
-              color: #fd7e14;
-            } // 一般 - 橙色
-            &.health-4 {
-              color: #dc3545;
-            } // 故障 - 红色
           }
         }
       }
@@ -390,14 +387,64 @@ export default {
 .jia {
   color: var(--header-bg);
 }
-.kuang{
-  // height: min-content;
-height: 680px;
+.kuang {
+  height: 680px;
+  position: relative;
+  overflow: hidden;
+  overflow-y: auto;
+  .Anempty {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+  }
 }
-.tishi{
+
+.tishi {
   font-size: 12px;
-  span{
+  span {
     font-weight: 800;
   }
 }
+
+// 动画
+/* ✅ loading 包裹容器 */
+.loader-wrapper {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100%; /* 可根据页面需要调整高度 */
+}
+
+/* ✅ loading 样式动画 */
+
+.loader {
+  width: 50px;
+  --b: 8px;
+  aspect-ratio: 1;
+  border-radius: 50%;
+  padding: 1px;
+  background: conic-gradient(#0000 10%, var(--header-bg)) content-box;
+
+  -webkit-mask: repeating-conic-gradient(
+      #0000 0deg,
+      #000 1deg 20deg,
+      #0000 21deg 36deg
+    ),
+    radial-gradient(
+      farthest-side,
+      #0000 calc(100% - var(--b) - 1px),
+      #000 calc(100% - var(--b))
+    );
+  -webkit-mask-composite: destination-in;
+  mask-composite: intersect;
+  animation: l4 1s infinite steps(10);
+}
+@keyframes l4 {
+  to {
+    transform: rotate(1turn);
+  }
+}
 </style>
+
+

+ 0 - 419
src/views/health/malfunction copy.vue

@@ -1,419 +0,0 @@
-<template>
-  <div class="global-variable">
-    <div class="head">
-      <ul>
-        <li
-          v-for="(item, index) in menuItems"
-          :key="index"
-          @click="activeTab = item.component"
-          :class="{ active: activeTab === item.component }"
-        >
-          <span class="Simg"><img :src="item.icon" :alt="item.name" /></span>
-          <span>{{ item.name }}</span>
-        </li>
-      </ul>
-    </div>
-
-    <div class="searchbox">
-      <p>
-        单位:
-        <selecttree
-               size="small"
-          style="width: 180px"
-          placeholder="请选择所属公司"
-          :list="parentOpt"
-          type="1"
-          v-model="companyCode"
-          @change="parentChange"
-          :defaultParentProps="{
-            children: 'children',
-            label: 'companyName',
-            value: 'codeNumber',
-          }"
-        >
-        </selecttree>
-      </p>
-      <p>
-        风机:
-        <el-select
-               size="small"
-          style="width: 150px"
-          v-model="unitvalue"
-          @change="getchedian"
-          placeholder="请选择"
-        >
-          <el-option
-            v-for="item in unitoptions"
-            :key="item.engineCode"
-            :label="item.engineName"
-            :value="item.engineCode"
-          >
-          </el-option>
-        </el-select>
-      </p>
-      <p>
-        测点:
-        <el-select v-model="monitoringvalue"         size="small" clearable placeholder="请选择">
-          <el-option
-            v-for="item in monitoringoptions"
-            :key="item.detectionPointEn"
-            :label="item.detectionPointCn"
-            :value="item.detectionPointEn"
-          >
-          </el-option>
-        </el-select>
-      </p>
-      <p>
-        采样频率:
-        <el-select v-model="frequencyvalue"        size="small"  clearable placeholder="请选择">
-          <el-option
-            v-for="item in frequencyoptions"
-            :key="item"
-            :label="item"
-            :value="item"
-          >
-          </el-option>
-        </el-select>
-      </p>
-      <p>
-        时间:
-        <el-date-picker
-               size="small"
-          v-model="timevalue"
-          type="datetimerange"
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-        >
-        </el-date-picker>
-      </p>
-      <el-button type="primary" size="small" @click="conditions(1)"
-        >查询</el-button
-      >
-      <!-- <el-button type="primary" size="small">自动诊断</el-button> -->
-    </div>
-
-    <div class="main-body">
-      <keep-alive>
-        <component
-          :is="activeTab"
-          :codedata="codedata"
-          :totalCount="totalCount"
-          :totalPage="totalPage"
-          @updatePage="handlePageChange"
-        />
-      </keep-alive>
-    </div>
-  </div>
-</template>
-  
-  <script>
-import * as FileSaver from "file-saver";
-import * as XLSX from "xlsx";
-import {
-  getSysOrganizationAuthTreeByRoleId,
-  windEngineGrouPage,
-  queryDetectionDic,
-} from "@/api/ledger.js";
-import selecttree from "../../components/selecttree.vue";
-import Bearing from "./components/malfunction/bearing.vue";
-import Dissymmetry from "./components/malfunction/dissymmetry.vue";
-import Gear from "./components/malfunction/gear.vue";
-import Loose from "./components/malfunction/loose.vue";
-import Misalignment from "./components/malfunction/misalignment.vue";
-import Temperature from "./components/malfunction/temperature.vue";
-import axios from "axios";
-export default {
-  components: {
-    selecttree,
-    Bearing,
-    Dissymmetry,
-    Gear,
-    Loose,
-    Misalignment,
-    Temperature,
-  },
-  data() {
-    return {
-      activeTab: "Bearing", // 默认显示轴承诊断
-      menuItems: [
-        {
-          name: "轴承诊断",
-          icon: require("@/assets/img/ZC.png"),
-          component: "Bearing",
-        },
-        {
-          name: "齿轮诊断",
-          icon: require("@/assets/img/SZ.png"),
-          component: "Gear",
-        },
-        {
-          name: "不对中诊断",
-          icon: require("@/assets/img/DZ.png"),
-          component: "Dissymmetry",
-        },
-        {
-          name: "不平衡诊断",
-          icon: require("@/assets/img/DC.png"),
-          component: "Misalignment",
-        },
-        {
-          name: "松动诊断",
-          icon: require("@/assets/img/SD.png"),
-          component: "Loose",
-        },
-        {
-          name: "温度诊断",
-          icon: require("@/assets/img/WD.png"),
-          component: "Temperature",
-        },
-      ],
-      unitvalue: "",
-      unitoptions: [],
-      companyCode: "",
-      parentOpt: [],
-      timevalue: [],
-      startTime: "",
-      endTime: "",
-      monitoringvalue: "",
-      monitoringoptions: [],
-
-      frequencyvalue: "",
-      frequencyoptions: [],
-
-      codedata: [],
-      totalCount: 0,
-      totalPage: 0,
-      page: "",
-    };
-  },
-  created() {
-    this.GETtree();
-  },
-  methods: {
-    async GETtree() {
-      const res = await getSysOrganizationAuthTreeByRoleId();
-      const treedata = res.data;
-      const processedData = this.processTreeData(treedata);
-      this.parentOpt = processedData;
-      this.defaultdata = res.data[0];
-    },
-    // 获取所属单位
-    parentChange(data) {
-      this.maplist = data;
-      this.maplistArr = data;
-
-      // 1. 检查关键数据
-      if (!this.maplist?.codeNumber) {
-        console.error("codeNumber 不存在!");
-        return;
-      }
-
-      // 2. 发起第一个请求
-      let paramsData = {
-        fieldCode: this.maplist.codeNumber,
-        pageNum: 1,
-        pageSize: 99,
-      };
-      this.unitvalue = "";
-
-      windEngineGrouPage(paramsData)
-        .then((res) => {
-          this.unitoptions = res.data.list;
-          this.windCode = this.companyCode;
-        })
-        .catch((err) => {
-          console.error("windEngineGrouPage 失败:", err);
-        });
-
-      // 3. 解析坐标逻辑(避免 return 终止函数)
-      let shouldSkip = false;
-      try {
-        if (data.codeType === "field") {
-          if (
-            this.parseCoordinates(data.longitudeAndLatitudeString).length > 0
-          ) {
-            shouldSkip = true;
-          }
-        } else {
-          data.children?.forEach((element) => {
-            if (
-              element.codeType === "field" &&
-              this.parseCoordinates(element.longitudeAndLatitudeString).length >
-                0
-            ) {
-              shouldSkip = true;
-            }
-          });
-        }
-      } catch (err) {
-        console.error("解析坐标出错:", err);
-      }
-
-      if (shouldSkip) {
-        console.log("坐标已存在,跳过部分逻辑");
-      }
-
-      // 4. 确保第二个请求执行
-      axios
-        .get(
-          `/ETLapi/waveData/getAllSamplingFrequency/${this.maplist.codeNumber}`
-        )
-
-        .then((res) => {
-          this.frequencyoptions = res.data.datas;
-        })
-        .catch((err) => {
-          console.error("第二个请求失败:", err);
-        });
-    },
-    processTreeData(treeData) {
-      const processedData = [];
-      function processNode(node) {
-        if (node.codeType === "field") {
-          node.companyName = node.fieldName;
-        }
-        if (node.children && node.children.length > 0) {
-          node.children.forEach((child) => {
-            processNode(child);
-          });
-        }
-      }
-      treeData.forEach((root) => {
-        processNode(root);
-        processedData.push(root);
-      });
-      return processedData;
-    },
-    parseCoordinates(input) {
-      if (input && typeof input === "string") {
-        return input.split(",").map(Number);
-      }
-      return [];
-    },
-    // 风机
-    getchedian(value) {
-      queryDetectionDic({ engineCodes: value }).then((res) => {
-        this.monitoringoptions = res.data;
-      });
-    },
-    handlePageChange(page) {
-      console.log(`接收到的当前页: ${page}`);
-      // 更新当前页
-      this.conditions(page); // 调用条件方法时传递页码
-    },
-    conditions(page) {
-      const params = {
-        samplingFrequency: this.frequencyvalue,
-        windCode: this.maplist.codeNumber,
-        windTurbineNumberList: [this.unitvalue],
-        mesureNameList: [this.monitoringvalue],
-        startTime: this.$formatDateTWO(this.timevalue[0]),
-        endTime: this.$formatDateTWO(this.timevalue[1]),
-        pageNo: page,
-        pageSize: 20,
-      };
-
-      axios.post(`/ETLapi/waveData/getMesureDataWithSF`, params).then((res) => {
-        this.codedata = res.data.datas;
-        this.totalCount = res.data.totalCount;
-        this.totalPage = res.data.totalPage;
-      });
-    },
-  },
-};
-</script>
-  
-  <style lang="scss" scoped>
-.global-variable {
-  padding: 10px;
-}
-.head {
-  padding: 5px 0;
-  display: flex;
-  justify-content: space-between;
-
-  ul {
-    display: flex;
-    width: 500px;
-    height: 65px;
-    justify-content: space-between;
-    li {
-      cursor: pointer;
-      padding: 8px 12px 0 12px;
-      border-radius: 4px;
-      transition: all 0.3s;
-
-      &:hover {
-        background-color: #f0f0f0;
-      }
-
-      &.active {
-        background-color: #e6f7ff;
-        border-bottom: 2px solid var(--header-bg);
-
-        span {
-          color: var(--header-bg);
-          font-weight: bold;
-        }
-      }
-
-      .Simg {
-        width: 30px;
-        height: 30px;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        margin: 0 auto;
-
-        img {
-          max-width: 100%;
-          max-height: 100%;
-        }
-      }
-
-      span {
-        display: block;
-        font-size: 12px;
-        font-weight: 600;
-        text-align: center;
-        margin-top: 5px;
-      }
-    }
-  }
-}
-.searchbox {
-  display: flex;
-  margin-bottom: 10px;
-  align-items: center;
-  flex-wrap: wrap;
-  padding-top: 10px;
-  p {
-    margin-right: 10px;
-    margin-bottom: 0;
-    //margin-top: 10px;
-    display: flex;
-    align-items: center;
-
-    .el-select,
-    .el-date-picker {
-      margin-left: 10px;
-    }
-  }
-
-  .el-select {
-    width: 180px;
-  }
-}
-.main-body {
-  margin-top: 10px;
-  // border: 1px solid #ebeef5;
-  border-radius: 4px;
-  padding: 10px;
-  background: #fff;
-}
-
-.el-range-editor.el-input__inner {
-  width: 370px;
-}
-</style>

+ 129 - 95
src/views/health/malfunction.vue

@@ -8,7 +8,6 @@
         :label="item.name"
         :name="item.component"
       >
-
       </el-tab-pane>
     </el-tabs>
 
@@ -58,9 +57,9 @@
         >
           <el-option
             v-for="item in monitoringoptions"
-            :key="item.detectionPointEn"
-            :label="item.detectionPointCn"
-            :value="item.detectionPointEn"
+            :key="item.itemKey"
+            :label="item.itemValue"
+            :value="item.itemKey"
           />
         </el-select>
       </p>
@@ -91,7 +90,13 @@
           end-placeholder="结束日期"
         />
       </p>
-      <el-button type="primary" size="small" @click="conditions(1)" class="search-btn">查询</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        @click="conditions(1)"
+        class="search-btn"
+        >查询</el-button
+      >
     </div>
 
     <!-- 动态组件内容 -->
@@ -110,21 +115,21 @@
 </template>
 
 <script>
-import * as FileSaver from 'file-saver'
-import * as XLSX from 'xlsx'
+import * as FileSaver from "file-saver";
+import * as XLSX from "xlsx";
 import {
   getSysOrganizationAuthTreeByRoleId,
   windEngineGrouPage,
   queryDetectionDic,
-} from '@/api/ledger.js'
-import selecttree from '../../components/selecttree.vue'
-import Bearing from './components/malfunction/bearing.vue'
-import Dissymmetry from './components/malfunction/dissymmetry.vue'
-import Gear from './components/malfunction/gear.vue'
-import Loose from './components/malfunction/loose.vue'
-import Misalignment from './components/malfunction/misalignment.vue'
-import Temperature from './components/malfunction/temperature.vue'
-import axios from 'axios'
+} from "@/api/ledger.js";
+import selecttree from "../../components/selecttree.vue";
+import Bearing from "./components/malfunction/bearing.vue";
+import Dissymmetry from "./components/malfunction/dissymmetry.vue";
+import Gear from "./components/malfunction/gear.vue";
+import Loose from "./components/malfunction/loose.vue";
+import Misalignment from "./components/malfunction/misalignment.vue";
+import Temperature from "./components/malfunction/temperature.vue";
+import axios from "axios";
 
 export default {
   components: {
@@ -138,124 +143,126 @@ export default {
   },
   data() {
     return {
-      activeTab: 'Bearing',
-      activeName: 'Bearing', // el-tabs 控制当前 tab
+      activeTab: "Bearing",
+      activeName: "Bearing", // el-tabs 控制当前 tab
 
       menuItems: [
         {
-          name: '轴承诊断',
-          icon: require('@/assets/img/ZC.png'),
-          component: 'Bearing',
+          name: "轴承诊断",
+          icon: require("@/assets/img/ZC.png"),
+          component: "Bearing",
         },
         {
-          name: '齿轮诊断',
-          icon: require('@/assets/img/SZ.png'),
-          component: 'Gear',
+          name: "齿轮诊断",
+          icon: require("@/assets/img/SZ.png"),
+          component: "Gear",
         },
         {
-          name: '不对中诊断',
-          icon: require('@/assets/img/DZ.png'),
-          component: 'Dissymmetry',
+          name: "不对中诊断",
+          icon: require("@/assets/img/DZ.png"),
+          component: "Dissymmetry",
         },
         {
-          name: '不平衡诊断',
-          icon: require('@/assets/img/DC.png'),
-          component: 'Misalignment',
+          name: "不平衡诊断",
+          icon: require("@/assets/img/DC.png"),
+          component: "Misalignment",
         },
         {
-          name: '松动诊断',
-          icon: require('@/assets/img/SD.png'),
-          component: 'Loose',
+          name: "松动诊断",
+          icon: require("@/assets/img/SD.png"),
+          component: "Loose",
         },
         {
-          name: '温度诊断',
-          icon: require('@/assets/img/WD.png'),
-          component: 'Temperature',
+          name: "温度诊断",
+          icon: require("@/assets/img/WD.png"),
+          component: "Temperature",
         },
       ],
 
-      unitvalue: '',
+      unitvalue: "",
       unitoptions: [],
-      companyCode: '',
+      companyCode: "",
       parentOpt: [],
       timevalue: [],
-      startTime: '',
-      endTime: '',
-      monitoringvalue: '',
+      startTime: "",
+      endTime: "",
+      monitoringvalue: "",
       monitoringoptions: [],
-      frequencyvalue: '',
+      frequencyvalue: "",
       frequencyoptions: [],
       codedata: [],
       totalCount: 0,
       totalPage: 0,
-      page: '',
-    }
+      page: "",
+    };
   },
   created() {
-    this.GETtree()
+    this.GETtree();
   },
   methods: {
     handleClick(tab) {
-      this.activeTab = tab.name
+      this.activeTab = tab.name;
     },
     async GETtree() {
-      const res = await getSysOrganizationAuthTreeByRoleId()
-      const treedata = res.data
-      const processedData = this.processTreeData(treedata)
-      this.parentOpt = processedData
-      this.defaultdata = res.data[0]
+      const res = await getSysOrganizationAuthTreeByRoleId();
+      const treedata = res.data;
+      const processedData = this.processTreeData(treedata);
+      this.parentOpt = processedData;
+      this.defaultdata = res.data[0];
     },
     parentChange(data) {
-      this.maplist = data
-      this.maplistArr = data
+      this.maplist = data;
+      this.maplistArr = data;
 
       if (!this.maplist?.codeNumber) {
-        console.error('codeNumber 不存在!')
-        return
+        console.error("codeNumber 不存在!");
+        return;
       }
 
       const paramsData = {
         fieldCode: this.maplist.codeNumber,
         pageNum: 1,
         pageSize: 99,
-      }
+      };
 
-      this.unitvalue = ''
+      this.unitvalue = "";
+      this.monitoringvalue = "";
+      this.frequencyvalue = "";
 
       windEngineGrouPage(paramsData)
         .then((res) => {
-          this.unitoptions = res.data.list
-          this.windCode = this.companyCode
+          this.unitoptions = res.data.list;
+          this.windCode = this.companyCode;
         })
         .catch((err) => {
-          console.error('windEngineGrouPage 失败:', err)
-        })
+          console.error("windEngineGrouPage 失败:", err);
+        });
 
-      let shouldSkip = false
+      let shouldSkip = false;
       try {
-        if (data.codeType === 'field') {
+        if (data.codeType === "field") {
           if (
             this.parseCoordinates(data.longitudeAndLatitudeString).length > 0
           ) {
-            shouldSkip = true
+            shouldSkip = true;
           }
         } else {
           data.children?.forEach((element) => {
             if (
-              element.codeType === 'field' &&
+              element.codeType === "field" &&
               this.parseCoordinates(element.longitudeAndLatitudeString).length >
                 0
             ) {
-              shouldSkip = true
+              shouldSkip = true;
             }
-          })
+          });
         }
       } catch (err) {
-        console.error('解析坐标出错:', err)
+        console.error("解析坐标出错:", err);
       }
 
       if (shouldSkip) {
-        console.log('坐标已存在,跳过部分逻辑')
+        console.log("坐标已存在,跳过部分逻辑");
       }
 
       axios
@@ -263,43 +270,70 @@ export default {
           `/ETLapi/waveData/getAllSamplingFrequency/${this.maplist.codeNumber}`
         )
         .then((res) => {
-          this.frequencyoptions = res.data.datas
+          this.frequencyoptions = res.data.datas;
         })
         .catch((err) => {
-          console.error('第二个请求失败:', err)
-        })
+          console.error("第二个请求失败:", err);
+        });
     },
     processTreeData(treeData) {
-      const processedData = []
+      const processedData = [];
       function processNode(node) {
-        if (node.codeType === 'field') {
-          node.companyName = node.fieldName
+        if (node.codeType === "field") {
+          node.companyName = node.fieldName;
         }
         if (node.children && node.children.length > 0) {
           node.children.forEach((child) => {
-            processNode(child)
-          })
+            processNode(child);
+          });
         }
       }
       treeData.forEach((root) => {
-        processNode(root)
-        processedData.push(root)
-      })
-      return processedData
+        processNode(root);
+        processedData.push(root);
+      });
+      return processedData;
     },
     parseCoordinates(input) {
-      if (input && typeof input === 'string') {
-        return input.split(',').map(Number)
+      if (input && typeof input === "string") {
+        return input.split(",").map(Number);
       }
-      return []
+      return [];
     },
     getchedian(value) {
-      queryDetectionDic({ engineCodes: value }).then((res) => {
-        this.monitoringoptions = res.data
-      })
+      axios
+        .post(
+          `/ETLapi/waveData/getAllMesurePointName/${this.companyCode}/${value}`
+        )
+        .then((res) => {
+          this.monitoringvalue = "";
+          if (res.data.code === 500) {
+            this.monitoringoptions = []; // 清空旧数据
+            this.$message({
+              message: res.data.message || "未知错误",
+              type: "warning",
+            });
+            return;
+          }
+
+          if (res.data.code === 200) {
+            const datas = Array.isArray(res.data.datas) ? res.data.datas : [];
+            this.monitoringoptions = datas;
+            if (datas.length === 0) {
+              this.$message({
+                message: "暂无数据",
+                type: "warning",
+              });
+            }
+          }
+        })
+        .catch((err) => {
+          console.error("请求失败", err);
+          this.monitoringoptions = []; // 防止报错后保持旧数据
+        });
     },
     handlePageChange(page) {
-      this.conditions(page)
+      this.conditions(page);
     },
     conditions(page) {
       const params = {
@@ -310,17 +344,17 @@ export default {
         startTime: this.$formatDateTWO(this.timevalue[0]),
         endTime: this.$formatDateTWO(this.timevalue[1]),
         pageNo: page,
-        pageSize: 20,
-      }
+        pageSize: 10,
+      };
 
       axios.post(`/ETLapi/waveData/getMesureDataWithSF`, params).then((res) => {
-        this.codedata = res.data.datas
-        this.totalCount = res.data.totalCount
-        this.totalPage = res.data.totalPage
-      })
+        this.codedata = res.data.datas;
+        this.totalCount = res.data.totalCount;
+        this.totalPage = res.data.totalPage;
+      });
     },
   },
-}
+};
 </script>
   
   <style lang="scss" scoped>

+ 87 - 13
src/views/health/vibration.vue

@@ -74,9 +74,9 @@
         >
           <el-option
             v-for="item in monitoringoptions"
-            :key="item.detectionPointEn"
-            :label="item.detectionPointCn"
-            :value="item.detectionPointEn"
+            :key="item.itemKey"
+            :label="item.itemValue"
+            :value="item.itemKey"
           >
           </el-option>
         </el-select>
@@ -138,7 +138,7 @@
             <!-- {{ item.rowData }} -->
             <p v-if="item.name != '趋势图'">
               测点路径:{{
-                getDetectionPointCn(item?.rowData?.mesurePointName)
+                NewgetDetectionPointCn(item?.rowData?.mesurePointName)
               }}-{{ item?.rowData?.windTurbineNumber }}
               <span>采样频率: {{ item?.rowData?.samplingFrequency }}(Hz)</span>
               <span
@@ -221,15 +221,15 @@
           <el-table-column type="index" label="排序" fixed> </el-table-column>
           <el-table-column prop="timeStamp" label="采样时间" width="180px">
           </el-table-column>
-          <el-table-column
-            prop="mesurePointName"
-            label="测点名称"
-            width="150px"
-          >
+          <el-table-column label="测点名称" width="150px">
             <template slot-scope="scope">
-              {{ getDetectionPointCn(scope.row.mesurePointName) }}
+              {{
+                pointNameMap[scope.row.mesurePointName] ||
+                scope.row.mesurePointName
+              }}
             </template>
           </el-table-column>
+
           <!-- <el-table-column prop="companyName" label="场站">
             {{ getCompanyLabel(scope.row.companyCode) }}
             
@@ -272,6 +272,8 @@ import spectrogramcharts from "./components/spectrogramcharts.vue";
 import tendencycharts from "./components/tendencycharts.vue";
 import timedomaincharts from "./components/timedomaincharts.vue";
 import axios from "axios";
+// 放在 <script> 外部
+
 export default {
   components: {
     envelopecharts,
@@ -324,6 +326,44 @@ export default {
       envelopeListTwo: {},
       oldCurrentRow: {},
       XrmsValue: 0, // 默认值
+
+      pointNameMap: {
+        main_bearing_radial_vertical_vibration: "主轴承径向垂直振动",
+        main_bearing_radial_vibration: "主轴承径向振动",
+        main_bearing_radial_horizontal_vibration: "主轴承径向水平振动",
+        main_bearing_axial_vibration: "主轴承轴向振动",
+        front_main_bearing_radial_vertical_vibration: "前主轴承径向垂直振动",
+        front_main_bearing_radial_vibration: "前主轴承径向振动",
+        front_main_bearing_radial_horizontal_vibration: "前主轴承径向水平振动",
+        front_main_bearing_axial_vibration: "前主轴承轴向振动",
+        generator_radial_1_vibration: "发电机径向1振动",
+        generator_radial_2_vibration: "发电机径向2振动",
+        generator_speed: "发电机转速",
+        generator_non_drive_end_radial_vibration: "发电机非驱动端径向振动",
+        generator_drive_end_radial_vibration: "发电机驱动端径向振动",
+        rear_main_bearing_radial_vertical_vibration: "后主轴承径向垂直振动",
+        rear_main_bearing_radial_vibration: "后主轴承径向振动",
+        rear_main_bearing_radial_horizontal_vibration: "后主轴承径向水平振动",
+        rear_main_bearing_axial_vibration: "后主轴承轴向振动",
+        stator_radial_horizontal_vibration: "定子径向水平振动",
+        gearbox_first_stage_planet_large_ring_radial_vibration:
+          "齿轮箱一级行星级大齿圈径向振动",
+        gearbox_first_stage_planet_radial_vibration: "齿轮箱一级行星级径向振动",
+        gearbox_third_stage_planet_radial_vibration: "齿轮箱三级行星级径向振动",
+        gearbox_second_stage_planet_large_ring_radial_vibration:
+          "齿轮箱二级行星级大齿圈径向振动",
+        gearbox_second_stage_planet_radial_vibration:
+          "齿轮箱二级行星级径向振动",
+        gearbox_second_stage_planet_axial_vibration: "齿轮箱二级行星级轴向振动",
+        gearbox_low_speed_shaft_output_end_radial_vibration:
+          "齿轮箱低速轴输出端径向振动",
+        gearbox_input_end_radial_vibration: "齿轮箱输入端径向振动",
+        gearbox_output_shaft_axial_vibration: "齿轮箱输出轴轴向振动",
+        gearbox_high_speed_shaft_output_end_radial_vibration:
+          "齿轮箱高速轴输出端径向振动",
+        gearbox_high_speed_shaft_output_end_axial_vibration:
+          "齿轮箱高速轴输出端轴向振动",
+      },
     };
   },
 
@@ -362,6 +402,12 @@ export default {
       );
       return point ? point?.detectionPointCn : null; // 如果没有找到对应项,返回 null
     },
+
+     NewgetDetectionPointCn(key) {
+      return this.pointNameMap[key] || key
+    },
+  
+  
     getCompanyLabel(companyCode) {
       const selectedOption = this.parentOpt?.find(
         (option) => option.codeNumber === companyCode
@@ -386,6 +432,7 @@ export default {
         pageSize: 99,
       };
       this.unitvalue = "";
+      this.monitoringvalue = "";
       // 获取风机
       windEngineGrouPage(paramsData).then((res) => {
         this.unitoptions = res.data.list;
@@ -436,9 +483,36 @@ export default {
     },
     // 获取测点
     getchedian(value) {
-      queryDetectionDic({ engineCodes: value }).then((res) => {
-        this.monitoringoptions = res.data;
-      });
+      axios
+        .post(
+          `/ETLapi/waveData/getAllMesurePointName/${this.companyCode}/${value}`
+        )
+        .then((res) => {
+          this.monitoringvalue = "";
+          if (res.data.code === 500) {
+            this.monitoringoptions = []; // 清空旧数据
+            this.$message({
+              message: res.data.message || "未知错误",
+              type: "warning",
+            });
+            return;
+          }
+
+          if (res.data.code === 200) {
+            const datas = Array.isArray(res.data.datas) ? res.data.datas : [];
+            this.monitoringoptions = datas;
+            if (datas.length === 0) {
+              this.$message({
+                message: "暂无数据",
+                type: "warning",
+              });
+            }
+          }
+        })
+        .catch((err) => {
+          console.error("请求失败", err);
+          this.monitoringoptions = []; // 防止报错后保持旧数据
+        });
     },
 
     handleModelUpdate(data) {

+ 1 - 1
src/views/home/Index.vue

@@ -125,6 +125,6 @@ export default {
 }
 
 .headerLeft {
-  width: 190px;
+  width: 170px;
 }
 </style>

+ 13 - 13
src/views/home/components/MenuHD.vue

@@ -378,16 +378,16 @@ export default {
 }
 </style>
 
-<style lang="scss" >
-/* 华电时的菜单打开这个 */
-// .el-menu--popup {
-//   width: 100% !important;
-//     min-width: 120px !important;
-//   .el-menu-item {
-//     width: 100% !important;
-//     min-width: unset !important;
-//     text-align: center;
-//     padding: 0 5px !important;
-//   }
-// }
-</style>
+<!-- /* 华电时的菜单打开这个 */ -->
+<!-- <style lang="scss" >
+.el-menu--popup {
+  width: 100% !important;
+    min-width: 120px !important;
+  .el-menu-item {
+    width: 100% !important;
+    min-width: unset !important;
+    text-align: center;
+    padding: 0 5px !important;
+  }
+}
+</style> -->

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

@@ -1,7 +1,7 @@
 <template>
   <el-card shadow="always" class="box-card" v-loading="loading">
     <div class="box-header">
-      <h4>分析介绍:</h4>
+      <h4 style="font-weight: 700">分析介绍:</h4>
       <div class="box-header-min">
         <el-descriptions>
           <el-descriptions-item label="分析主题">{{

+ 16 - 2
vue.config.js

@@ -113,6 +113,20 @@ module.exports = {
         },
       },
 
+      // 王娇娇
+      "/WJJapi": {
+        // target: "http://192.168.50.235:8888", // WZLapi 内网 目标地址
+        target: "http://106.120.102.238:18777", // WZLapi/ 内网 目标地址
+        changeOrigin: true,
+        pathRewrite: {
+          "^/WJJapi": "", // 去掉 /WZLapi 前缀
+        },
+        onProxyReq(proxyReq, req, res) {
+          console.log("Proxying /sAlgorithm request to:", proxyReq.path); // 打印代理请求路径
+        },
+      },
+
+
       // 数据转换亮亮
       "/transDataWeb": {
         // target: "http://192.168.50.241:9000/trans_data_web",//生产
@@ -134,8 +148,8 @@ module.exports = {
       },
       //nodejs 数据库数据
       "/databaseApi": {
-        target: "http://192.168.50.234:3000",
-        // target: "http://106.120.102.238:58880",//这个代理会走两次代理转发
+        // target: "http://192.168.50.234:3000",
+        target: "http://106.120.102.238:58880",//这个代理会走两次代理转发
         changeOrigin: true,
         pathRewrite: {
           "^/databaseApi": "", // 去掉 /databaseApi 前缀