Browse Source

首页、安全监视、经济运行、智慧检修和综合报表权限功能实现,替换牛家岭盘道梁禹丰小五台升压站文件

baiyanting 1 year ago
parent
commit
89faa8507d
65 changed files with 3667 additions and 61006 deletions
  1. 2 2
      .env.development
  2. 2 3
      src/App.vue
  3. 33 1
      src/api/common.js
  4. 3 1
      src/assets/styles/dialog.less
  5. 26 3
      src/permission.js
  6. 20 0
      src/plugins/auth.js
  7. 800 634
      src/router/index.js
  8. 15 0
      src/store/getters.js
  9. 7 16
      src/store/index.js
  10. 23 0
      src/store/modules/router.js
  11. 66 18
      src/store/modules/user.js
  12. 43 13
      src/tools/request.js
  13. 22 6
      src/utills/auth.js
  14. 96 0
      src/utills/handleRoutes.js
  15. 1 1
      src/views/HealthControl/Health1.vue
  16. 4 4
      src/views/HealthControl/Health4.vue
  17. 2 3
      src/views/HealthControl/HealthTab1.vue
  18. 0 0
      src/views/HealthControl/energyEfficAnalyse/evaluationAnalysis/index.vue
  19. 1 1
      src/views/powerCurve/index.vue
  20. 11 0
      src/views/HealthControl/energyEfficAnalyse/index.vue
  21. 1 0
      src/views/malfunctionAnalysis/index.vue
  22. 1 1
      src/views/powerAnalysis/index.vue
  23. 1 1
      src/views/nxfx/qxpclfx.vue
  24. 0 0
      src/views/HealthControl/energyEfficAnalyse/temperatureAnalysis/index.vue
  25. 0 0
      src/views/HealthControl/energyEfficAnalyse/wtSaturability/index.vue
  26. 0 0
      src/views/HealthControl/energyEfficAnalyse/wtSaturability/tab1.vue
  27. 0 0
      src/views/HealthControl/energyEfficAnalyse/wtSaturability/tab2.vue
  28. 0 0
      src/views/HealthControl/energyEfficAnalyse/wtSaturability/tab3.vue
  29. 7 6
      src/views/HealthControl/healthLineChart2.vue
  30. 168 0
      src/views/HealthControl/healthDetail/index.vue
  31. 15 10
      src/views/HealthControl/Health3.vue
  32. 3 2
      src/views/HealthControl/Health0.vue
  33. 4 3
      src/views/HealthControl/healthLineChart.vue
  34. 5 4
      src/views/HealthControl/Health.vue
  35. 3 2
      src/views/HealthControl/Health8.vue
  36. 3 2
      src/views/HealthControl/Health5.vue
  37. 9 8
      src/views/HealthControl/Health2.vue
  38. 11 0
      src/views/HealthControl/healthManagement/index.vue
  39. 553 0
      src/views/HealthControl/healthManagement/overview/index.vue
  40. 11 0
      src/views/HealthControl/index.vue
  41. 2 2
      src/views/Home/components/map.vue
  42. 0 0
      src/views/Home/index.vue
  43. 7 6
      src/views/economicsOperation/benchmarkingManagement/projectBenchmarking/index.vue
  44. 3 0
      src/views/economicsOperation/benchmarkingManagement/wiringBenchmarking/index.vue
  45. 61 21
      src/views/layout/Header.vue
  46. 326 754
      src/views/layout/Menu.vue
  47. 48 13
      src/views/layout/login-page.vue
  48. 11 0
      src/views/report/index.vue
  49. 28 0
      src/views/report/stationReport/fdczzdy/index.vue
  50. 34 0
      src/views/report/stationReport/fdxmzdy/index.vue
  51. 11 0
      src/views/report/stationReport/index.vue
  52. 29 0
      src/views/report/stationReport/rbb/index.vue
  53. 28 27
      src/views/stateMonitor/DetailMatrix/detailMatrix.vue
  54. 9 9
      src/views/stateMonitor/LightMatrix/lightMatrix.vue
  55. 11 1
      src/views/stateMonitor/factoryMonitor/components/headerButton.vue
  56. 25 51
      src/views/stateMonitor/factoryMonitor/photovoltaic/index.vue
  57. 346 23270
      src/views/stateMonitor/factoryMonitor/photovoltaic/lightBoosterStation/components/shanyinrongxin.vue
  58. 19 19
      src/views/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitor/index.vue
  59. 361 19756
      src/views/stateMonitor/factoryMonitor/windPowerPlant/boosterStation/components/NJL.vue
  60. 3 6
      src/views/stateMonitor/factoryMonitor/windPowerPlant/boosterStation/components/PDL.vue
  61. 4 4
      src/views/stateMonitor/factoryMonitor/windPowerPlant/boosterStation/components/XWT.vue
  62. 273 16246
      src/views/stateMonitor/factoryMonitor/windPowerPlant/boosterStation/components/YF.vue
  63. 25 56
      src/views/stateMonitor/factoryMonitor/windPowerPlant/index.vue
  64. 20 20
      src/views/stateMonitor/factoryMonitor/windPowerPlant/matrixMonitor/index.vue
  65. 11 0
      src/views/stateMonitor/index.vue

+ 2 - 2
.env.development

@@ -1,9 +1,9 @@
 # VUE_APP_API=http://10.81.3.155:8020
-# VUE_APP_API=http://192.168.1.106:6060
+# VUE_APP_API=http://192.168.1.105:6060
 VUE_APP_API=http://10.81.3.153:6060
 
 # 经济运行 安全监视 
-# VUE_APP_Matrix=http://192.168.1.106:6060
+# VUE_APP_Matrix=http://192.168.1.105:6060
 VUE_APP_Matrix=http://10.81.3.153:6060
 
 

+ 2 - 3
src/App.vue

@@ -24,7 +24,7 @@
         :class="{ hover: isShowMenu }"
         @mouseenter="showMenu"
         @mouseleave="hideMenu"
-        v-show="$store.state.themeName === 'dark'"
+        v-show="$store.state.themeName === 'dark'&&$store.state.menuData.length"
         v-if="hideMenus === '0'"
       >
         <Menu :root="root" />
@@ -181,9 +181,8 @@ export default {
         that.isShowMenu = false;
       }, 500);
     },
-    login({ token, username }) {
+    login() {
       this.$store.commit("user/SET_LOGINSTATE", true);
-      this.$store.commit("user/SET_NAME", username);
     },
     selectMenu(menuIndex) {
       this.menuIndex = menuIndex;

+ 33 - 1
src/api/common.js

@@ -11,4 +11,36 @@ export function login(data) {
     },
   });
 }
-
+export function getUserinfo() {
+  return request({
+    baseURL: process.env.VUE_APP_VUE_LOGIN_URL,
+    url: "/getInfo",
+    method: "get",
+    headers: {
+      isUser: true,
+    },
+  });
+}
+export function login1(data) {
+  return request({
+    baseURL: process.env.VUE_APP_API,
+    url: `/auth/login`,
+    method: "post",
+    data,
+  });
+}
+export function login2(data) {
+  return request({
+    baseURL: process.env.VUE_APP_NEW_WISDOM,
+    url: `health/login?token=${data.token}&userId=${data.userId}`,
+    method: "post",
+  });
+}
+export function logout(data) {
+  return request({
+    baseURL: process.env.VUE_APP_API,
+    url: `/auth/logout`,
+    method: "post",
+    data,
+  });
+}

+ 3 - 1
src/assets/styles/dialog.less

@@ -31,7 +31,9 @@
     }
   }
 }
-
+.parcel-box {
+  padding: 0 30px !important;
+}
 .title-select .el-select .el-input__inner {
   width: 133px;
   max-width: 190px;

+ 26 - 3
src/permission.js

@@ -1,11 +1,34 @@
 import router from "./router";
-import { getToken,  } from "@/utills/auth"; // getToken from cookie
+import { getCookie } from "@/utills/auth"; // getToken from cookie
 import { Base64 } from "js-base64";
 const whiteList = ["/login", "/logout"]; // 不重定向白名单
 import store from "@/store";
 router.beforeEach((to, from, next) => {
-  if (getToken()) {
-    next();
+  if (getCookie("authToken")) {
+    if (to.path == "/login") {
+      next({ path: "/home" });
+    } else {
+      if (store.getters.roles.length === 0) {
+        // 判断当前用户是否已拉取完user_info信息
+        store
+          .dispatch("user/GetInfo")
+          .then(async () => {
+            let permissions = store.getters.permissions;
+            let accessRoutes = [];
+            accessRoutes = await store.dispatch(
+              "routes/setRoutes",
+              permissions
+            );
+            accessRoutes?.forEach((item) => {
+              router.addRoute(item);
+            });
+            next({ ...to, replace: true });
+          })
+          .catch((err) => {});
+      } else {
+        next();
+      }
+    }
   } else if (whiteList.indexOf(to.path) !== -1) {
     next();
   } else {

+ 20 - 0
src/plugins/auth.js

@@ -0,0 +1,20 @@
+import store from "@/store";
+function authPermission(permission) {
+  const all_permission = "*:*:*";
+  const permissions = store.getters && store.getters.permissions;
+  if (permission && permission.length > 0) {
+    return permissions.some((v) => {
+      return all_permission === v || v === permission;
+    });
+  } else {
+    return false;
+  }
+}
+export default {
+  // 验证用户是否含有指定权限,只需包含其中一个
+  hasPermiOr(permissions) {
+    return permissions.some((item) => {
+      return authPermission(item);
+    });
+  },
+};

File diff suppressed because it is too large
+ 800 - 634
src/router/index.js


+ 15 - 0
src/store/getters.js

@@ -0,0 +1,15 @@
+const getters = {
+  roles: (state) => state.user.roles,
+  permissions: (state) => state.user.permissions,
+  authToken: (state) => state.user.authToken, //建立token的快捷访问   user 是因为index.js中导入的时候名称定义为user
+  submitDDTag: (state) => state.submitDDTag,
+  loading: (state) => state.loading,
+  username: (state) => state.user.username,
+  themeName: (state) => state.themeName,
+  asidez: (state) => state.z,
+  mainy: (state) => state.y,
+  login: (state) => state.login,
+  menuData: (state) => state.menuData,
+  routes: (state) => state.routes.routes,
+};
+export default getters;

+ 7 - 16
src/store/index.js

@@ -1,7 +1,8 @@
 import { createStore, createLogger } from "vuex";
 import weather from "./modules/weather";
 import user from "./modules/user";
-
+import routes from "./modules/router";
+import getters from "./getters";
 const debug = process.env.NODE_ENV !== "production";
 
 // 默认状态
@@ -11,7 +12,7 @@ const state = {
   themeName: localStorage.getItem("themeName") || "dark", // 主题
   menuData: [],
   windturbineMap: {},
-  moudleName: localStorage.getItem("ModuleName")||'',
+  moudleName: localStorage.getItem("ModuleName") || "",
 };
 
 //改变状态的方法`
@@ -44,32 +45,22 @@ const actions = {
     context.commit("changeMenuData", str);
   },
   changeModuleName(context, str) {
-      context.commit("changeModuleName", str);
-       localStorage.setItem("ModuleName", str);
+    context.commit("changeModuleName", str);
+    localStorage.setItem("ModuleName", str);
   },
 };
 
-const getters = {
-  authToken: (state) => state.user.authToken, //建立token的快捷访问   user 是因为index.js中导入的时候名称定义为user
-  submitDDTag: (state) => state.submitDDTag,
-  loading: (state) => state.loading,
-  username: (state) => state.user.username,
-  themeName: (state) => state.themeName,
-  asidez: (state) => state.z,
-  mainy: (state) => state.y,
-  login: (state) => state.login,
-  menuData: (state) => state.menuData,
-};
-
 export default createStore({
   modules: {
     weather,
     user,
+    routes,
   },
   state,
   mutations,
   actions,
   getters,
+
   strict: debug,
   plugins: debug ? [createLogger()] : [],
 });

+ 23 - 0
src/store/modules/router.js

@@ -0,0 +1,23 @@
+import { filterAsyncRoutes, } from "@/utills/handleRoutes";
+import { asyncRoutes, constantRoutes } from "@/router";
+const state = () => ({
+  routes: [],
+});
+
+const mutations = {
+  setRoutes(state, routes) {
+    state.routes = constantRoutes.concat(routes);
+  },
+
+};
+const actions = {
+  async setRoutes({ commit }, permissions) {
+    const finallyAsyncRoutes = await filterAsyncRoutes(
+      [...asyncRoutes],
+      permissions
+    );
+    commit("setRoutes", finallyAsyncRoutes);
+    return finallyAsyncRoutes;
+  },
+};
+export default { namespaced: true, state, mutations, actions };

+ 66 - 18
src/store/modules/user.js

@@ -1,40 +1,88 @@
-import { getToken, setToken, removeToken } from "@/utills/auth";
+import {
+  getCookie,
+  setToken,
+  setUserId,
+  removeToken,
+  removeUserId,
+  setLoginState,
+  removeLoginState,
+} from "@/utills/auth";
 import { Message } from "element-plus";
-import { login } from "@/api/common";
+import { login, getUserinfo, logout } from "@/api/common";
 const state = {
-  authToken: localStorage.getItem("authToken") || "", //
-  username: localStorage.getItem("username") || "",
-  loginState: localStorage.getItem("loginState") || false,
+  authToken: getCookie("authToken") || "", //
+  username: "",
+  loginState: getCookie("loginState") || false,
+  userId: getCookie("userId") || "",
+  roles: [],
+  permissions: [],
 };
 const mutations = {
   REMOVE_TOKEN(state) {
-    localStorage.removeItem("authToken");
-    localStorage.removeItem("username");
-    localStorage.removeItem("loginState");
-    state.authToken = "";
+    removeToken();
+    removeUserId();
+    removeLoginState();
+    state.roles = [];
+    state.permissions = [];
     state.username = "";
+    state.userId = "";
+    state.authToken = "";
     state.loginState = false;
   },
   SET_TOKEN: (state, data) => {
     state.authToken = data.token;
-    localStorage.setItem("authToken", data.token);
+    state.userId = data.userId;
+    setToken(data.token);
+    setUserId(data.userId);
   },
   SET_LOGINSTATE: (state, login) => {
     state.loginState = login;
-    localStorage.setItem("loginState", login);
+    setLoginState(login);
   },
   SET_NAME: (state, name) => {
     state.username = name;
-    localStorage.setItem("username", name);
+  },
+  SET_ROLES: (state, roles) => {
+    state.roles = roles;
+  },
+  SET_PERMISSIONS: (state, permissions) => {
+    state.permissions = permissions;
   },
 };
 const actions = {
-  async login({ commit }, data) {
-    const result = await login(data);
-    if (result.code) {
-      //调用vuex中setToken方法
-      commit("setToken", data);
-    }
+  // 获取用户信息
+  GetInfo({ commit, state }) {
+    return new Promise((resolve, reject) => {
+      getUserinfo()
+        .then((res) => {
+          if (res.roles && res.roles.length > 0) {
+            // 验证返回的roles是否是一个非空数组
+            commit("SET_ROLES", res.roles);
+            commit("SET_NAME", res.user.userName);
+            commit("SET_PERMISSIONS", res.permissions);
+          } else {
+            commit("SET_ROLES", ["ROLE_DEFAULT"]);
+          }
+          resolve(res);
+        })
+        .catch((error) => {
+          reject(error);
+        });
+    });
+  },
+  LogOut({ commit, state }) {
+    return new Promise((resolve, reject) => {
+      logout({ token: state.authToken, userId: state.userId })
+        .then((res) => {
+          if (res.data.code == 200) {
+            commit("REMOVE_TOKEN");
+            resolve();
+          }
+        })
+        .catch((error) => {
+          reject(error);
+        });
+    });
   },
 };
 export default {

+ 43 - 13
src/tools/request.js

@@ -1,15 +1,27 @@
 import axios from "axios";
-import store from "../store/index";
+import { getCookie } from "@/utills/auth";
 import BASE from "@tools/basicTool.js";
+import store from "@/store";
+import { ElMessageBox, ElMessage } from "element-plus";
 // import { getToken } from "@/utils/storage";
 const service = axios.create();
 service.defaults.timeout = 50000;
 service.defaults.baseURL = `${process.env.VUE_APP_API}`;
 service.interceptors.request.use(
   (config) => {
-    config.headers = {
-      // Authorization: store.state.token,
-    };
+    const t = (config.headers || {}).isToken;
+    const u = (config.headers || {}).isUser;
+    const isToken = t === false || t === "false";
+    if (!isToken) {
+      //   // 让请求携带自定义token 请根据实际情况自行修改
+      if (u) {
+        config.headers["Authorization"] = "Bearer " + getCookie("authToken");
+      } else {
+        config.headers["token"] = getCookie("authToken");
+        config.headers["userId"] = getCookie("userId");
+      }
+    }
+
     // 统一格式包装请求参数
     if (config.showLoading) {
       BASE.showLoading();
@@ -25,16 +37,34 @@ service.interceptors.request.use(
 service.interceptors.response.use(
   // Loading.close(),
   (response) => {
-    // 处理正常返回数据
-    const { status } = response;
-    if (service.defaults.showLoading) {
-      BASE.closeLoading();
-      service.defaults.showLoading = false;
-    }
-    if (status === 200) {
-      return response.data;
+    const code = response.data.code;
+    if (code == 401) {
+      ElMessageBox.alert(
+        "登录状态已过期,您可以继续留在该页面,或者重新登录",
+        "系统提示",
+        {
+          confirmButtonText: "重新登录",
+          cancelButtonText: "取消",
+          type: "warning",
+          callback: () => {
+            store.dispatch("user/LogOut").then(() => {
+              location.href = "/home";
+            });
+          },
+        }
+      );
     } else {
-      return false;
+      // 处理正常返回数据
+      const { status } = response;
+      if (service.defaults.showLoading) {
+        BASE.closeLoading();
+        service.defaults.showLoading = false;
+      }
+      if (status === 200) {
+        return response.data;
+      } else {
+        return false;
+      }
     }
   },
   (error) => {

+ 22 - 6
src/utills/auth.js

@@ -2,11 +2,11 @@ import Cookies from 'js-cookie'
 import dayjs from "dayjs";
 const timeKey = 'hrsaas-timestamp-key'
 // 设置时间戳的存储变量
-const TokenKey = 'iamAccessToken'
+const TokenKey = "authToken";
+const UserIdKey = "userId";
+const LoginKey = "loginState";
+const Username = "username";
 
-export function getToken() {
-    return localStorage.getItem('authToken')
-}
 export function getCookie(name) {
     return Cookies.get(name);
 }
@@ -19,14 +19,30 @@ export function removeImsCookie() {
     Cookies.remove("code");
     Cookies.remove("iam-access-token");
 }
-// 本地存储token
+// cookie存储token
 export function setToken(token) {
     return Cookies.set(TokenKey, token)
 }
-// 本地删除token
+// cookie存储UserId
+export function setUserId(userId) {
+    return Cookies.set(UserIdKey, userId);
+}
+// cookie存储loginState
+export function setLoginState(loginState) {
+    return Cookies.set(LoginKey, loginState);
+}
+// cookie删除token
 export function removeToken() {
     return Cookies.remove(TokenKey)
 }
+// cookie删除UserId
+export function removeUserId() {
+    return Cookies.remove(UserIdKey);
+}
+// cookie删除UserId
+export function removeLoginState() {
+  return Cookies.remove(LoginKey);
+}
 // 获取时间戳
 export function getTimeStamp() {
     return Cookies.get(timeKey)

+ 96 - 0
src/utills/handleRoutes.js

@@ -0,0 +1,96 @@
+/**
+ * @description 判断当前路由是否包含权限
+ * @param permissions
+ * @param route
+ * @returns {boolean|*}
+ */
+function hasPermission(permissions, route) {
+  if (route.meta && route.meta.permissions) {
+    return permissions.some((role) => route.meta.permissions.includes(role));
+  } else {
+    return false;
+  }
+}
+
+/**
+ * @description intelligence模式根据permissions数组拦截路由
+ * @param routes
+ * @param permissions
+ * @returns {[]}
+ */
+export function filterAsyncRoutes(routes, permissions) {
+  const finallyRoutes = [];
+  if (permissions[0] == "*:*:*") {
+    return routes;
+  } else {
+    routes.forEach((route) => {
+      const item = { ...route };
+      if (hasPermission(permissions, item)) {
+        if (item.children) {
+          item.children = filterAsyncRoutes(item.children, permissions);
+        }
+        finallyRoutes.push(item);
+      }
+    });
+    finallyRoutes.forEach((route) => {
+      if (route.children) {
+        if (route.children[0].children) {
+          route.redirect =
+            route.path +
+            "/" +
+            route.children[0].path +
+            "/" +
+            route.children[0].children[0].path;
+        } else {
+          route.redirect = route.path + "/" + route.children[0].path;
+        }
+        route.children.forEach((croute) => {
+          if (croute.children) {
+            croute.redirect =
+              route.path + "/" + croute.path + "/" + croute.children[0].path;
+            croute.children.forEach((i) => {
+              if (i.children) {
+                i.redirect =
+                  route.path +
+                  "/" +
+                  croute.path +
+                  "/" +
+                  i.path +
+                  "/" +
+                  i.children[0].path;
+              }
+            });
+          }
+        });
+      }
+    });
+    console.log(finallyRoutes);
+    return finallyRoutes;
+  }
+}
+function hasRoute(i, arr) {
+  if (i && arr.length) {
+    return arr.some((a) => {
+      if (a.path.includes(":")) {
+        return i.path.includes(a.path.substring(0, a.path.indexOf("/:")));
+      } else {
+        return i.path.includes(a.path);
+      }
+    });
+  } else {
+    return false;
+  }
+}
+export function fillterMenuRoutes(data, stateRoute) {
+  let currData = [];
+  data.forEach((menu) => {
+    const item = { ...menu };
+    if (hasRoute(item, stateRoute)) {
+      if (item.children) {
+        item.children = fillterMenuRoutes(item.children, stateRoute);
+      }
+      currData.push(item);
+    }
+  });
+  return currData;
+}

+ 1 - 1
src/views/HealthControl/Health1.vue

@@ -219,7 +219,7 @@ import VertivalBarLineChart from "../../components/chart/combination/vertival-ba
 import SvgIcon from "../../components/coms/icon/svg-icon.vue";
 import Panel from "../../components/coms/panel/panel.vue";
 import Dayinfo from "./dayinfo.vue";
-import Health2 from "./Health2.vue";
+import Health2 from "./healthManagement/homepage/index.vue";
 import Track from "./track.vue";
 import RankingPop from "./ranking-pop.vue";
 import FaultDiagnosis from "../malfunctionRecall/components/fault-diagnosis.vue";

+ 4 - 4
src/views/HealthControl/Health4.vue

@@ -47,7 +47,7 @@ export default {
       menuDatas: [
         {
           icon: "svg-q实时监视",
-          path: "/health/health0",
+          path: "/health/healthDetail/wtHealth",
         },
         // {
         //   icon: "svg-q健康",
@@ -55,11 +55,11 @@ export default {
         // },
         {
           icon: "svg-q趋势",
-          path: "/health/health4/healthLineChart2",
+          path: "/health/healthManagement/badStateAnalyse2",
         },
         {
           icon: "svg-q曲线",
-          path: "/health/health4/healthLineChart",
+          path: "/health/healthManagement/badStateAnalyse",
         },
       ],
     };
@@ -168,4 +168,4 @@ export default {
     }
   }
 }
-</style>
+</style>

+ 2 - 3
src/views/HealthControl/HealthTab1.vue

@@ -140,7 +140,7 @@ export default {
     jumpUrl(item) {
       const wpid = item.wpId;
       const wtid = item.wtId;
-      this.$router.push(`/health/health0/${wpid}/${wtid}`);
+      this.$router.push(`/health/healthDetail/wtHealth/${wpid}/${wtid}`);
     },
     // 未确认缺陷按钮下的健康趋势选项
     onClickInfo(item) {
@@ -268,7 +268,6 @@ export default {
 };
 </script>
 
-
 <style lang="less" scope>
 .health-tab-1 {
   .power-info {
@@ -469,4 +468,4 @@ export default {
     }
   }
 }
-</style>
+</style>

src/views/evaluationAnalysis/index.vue → src/views/HealthControl/energyEfficAnalyse/evaluationAnalysis/index.vue


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

@@ -78,7 +78,7 @@ import api1 from "@api/economic/index.js";
 import api from "@api/wisdomOverhaul/energy/index.js";
 export default {
   // 名称
-  name: "cutAnalyse",
+  name: "healthPowerCurve",
 
   // 使用组件
   components: {

+ 11 - 0
src/views/HealthControl/energyEfficAnalyse/index.vue

@@ -0,0 +1,11 @@
+<template>
+  <router-view />
+</template>
+
+<script>
+export default {
+  name: "energyEfficAnalyse", //能效分析
+};
+</script>
+
+<style></style>

+ 1 - 0
src/views/malfunctionAnalysis/index.vue

@@ -118,6 +118,7 @@
 import api from "@api/economic/index.js";
 import axios from "axios";
 export default {
+    name:'malfunctionAnalysis',
   data() {
     return {
       wpId: "",

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

@@ -118,6 +118,7 @@
 import api from "@api/economic/index.js";
 import axios from "axios";
 export default {
+  name: "powerAnalysis",
   data() {
     return {
       wpId: "",
@@ -239,4 +240,3 @@ export default {
   overflow: auto;
 }
 </style>
-  

+ 1 - 1
src/views/nxfx/qxpclfx.vue

@@ -67,7 +67,7 @@
 </template>
 <script>
 import ComTable from "@/components/coms/table/table-qc.vue";
-import thermometerVue from "../../components/chart/bar/thermometer.vue";
+import thermometerVue from "../../../../components/chart/bar/thermometer.vue";
 import api1 from "@api/economic/index.js";
 import api from "@api/wisdomOverhaul/energy/index.js";
 export default {

src/views/temperatureAnalysis/index.vue → src/views/HealthControl/energyEfficAnalyse/temperatureAnalysis/index.vue


src/views/wtSaturability/index.vue → src/views/HealthControl/energyEfficAnalyse/wtSaturability/index.vue


src/views/wtSaturability/tab1.vue → src/views/HealthControl/energyEfficAnalyse/wtSaturability/tab1.vue


src/views/wtSaturability/tab2.vue → src/views/HealthControl/energyEfficAnalyse/wtSaturability/tab2.vue


src/views/wtSaturability/tab3.vue → src/views/HealthControl/energyEfficAnalyse/wtSaturability/tab3.vue


+ 7 - 6
src/views/HealthControl/healthLineChart2.vue

@@ -39,15 +39,16 @@
 </template>
 
 <script>
-import VertivalBarLineChart from "../../components/chart/combination/health-bar-line-chart.vue";
-import NormalLineChart from "../../components/chart/line/normal-line-chart.vue";
-import SvgIcon from "../../components/coms/icon/svg-icon.vue";
-import Panel from "../../components/coms/panel/panel.vue";
-import Table from "../../components/coms/table/table.vue";
+import VertivalBarLineChart from "../../../../components/chart/combination/health-bar-line-chart.vue";
+import NormalLineChart from "../../../../components/chart/line/normal-line-chart.vue";
+import SvgIcon from "../../../../components/coms/icon/svg-icon.vue";
+import Panel from "../../../../components/coms/panel/panel.vue";
+import Table from "../../../../components/coms/table/table.vue";
 import WtChooser from "@com/coms/wt-chooser/wt-chooser.vue";
 import api from "@api/wisdomOverhaul/health/index.js";
 
 export default {
+  name: "healthTrend",
   setup() {},
   components: {
     SvgIcon,
@@ -112,7 +113,7 @@ export default {
     },
     switchWt(data) {
       this.$router.push(
-        `/health/health4/healthLineChart2/${data.wpId}/${data.wtId}`
+        `/health/healthManagement/badStateAnalyse2/${data.wpId}/${data.wtId}`
       );
       this.init();
     },

+ 168 - 0
src/views/HealthControl/healthDetail/index.vue

@@ -0,0 +1,168 @@
+<template>
+  <div class="wind-site">
+    <div class="page-common-body">
+      <div class="page-common-body-router">
+        <router-view />
+      </div>
+      <div class="page-common-body-menu">
+        <div class="page-common-body-menu-box">
+          <div class="page-common-body-menu-border left top"></div>
+          <div class="page-common-body-menu-border left bottom"></div>
+          <div class="page-common-body-menu-border right top"></div>
+          <div class="page-common-body-menu-border right bottom"></div>
+          <div
+            class="page-common-body-menu-item"
+            v-for="(menuData, index) of menuDatas"
+            :key="index"
+            @click="clickMenu(index)"
+            :class="{ active: activeIndex == index }"
+          >
+            <router-link :to="menuData.path">
+              <span
+                class="svg-icon"
+                :class="
+                  activeIndex == index ? 'svg-icon-yellow' : 'svg-icon-green'
+                "
+              >
+                <SvgIcon :svgid="menuData.icon"></SvgIcon>
+              </span>
+            </router-link>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import SvgIcon from "@com/coms/icon/svg-icon.vue";
+export default {
+  name: "healthDetail",
+  setup() {},
+  components: { SvgIcon },
+  data() {
+    return {
+      activeIndex: 0,
+      wpId: "",
+      wtId: "",
+      menuDatas: [
+        {
+          icon: "svg-q实时监视",
+          path: "/health/healthDetail/wtHealth",
+        },
+        {
+          icon: "svg-q趋势",
+          path: "/health/healthDetail/healthTrend",
+        },
+        {
+          icon: "svg-q曲线",
+          path: "/health/healthDetail/badState",
+        },
+      ],
+    };
+  },
+
+  created() {
+    this.wtId = this.$route.params.wtId;
+    this.wpId = this.$route.params.wpId;
+    this.menuDatas.forEach((ele) => {
+      ele.path += "/" + this.wpId + "/" + this.wtId;
+    });
+  },
+
+  methods: {
+    clickMenu: function (index) {
+      this.activeIndex = index;
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.wind-site {
+  .page-common-body {
+    display: flex;
+    flex-direction: row;
+    margin-top: 0.741vh;
+
+    .page-common-body-router {
+      overflow: auto;
+      overflow-x: hidden;
+      height: calc(100vh - 7.037vh);
+      flex: 1 1 auto;
+    }
+
+    .page-common-body-menu {
+      width: 7.407vh;
+      padding: 0 1.481vh 1.481vh 1.481vh;
+
+      .page-common-body-menu-box {
+        border: 0.093vh solid @darkgray;
+        background-color: fade(@darkgray, 30%);
+        padding: 2.222vh 0.185vh;
+        position: relative;
+
+        .page-common-body-menu-border {
+          position: absolute;
+          width: 0.37vh;
+          height: 0.37vh;
+          background-color: @write;
+          border-radius: 50%;
+
+          &.left {
+            left: -0.185vh;
+          }
+
+          &.right {
+            right: -0.185vh;
+          }
+
+          &.top {
+            top: -0.185vh;
+          }
+
+          &.bottom {
+            bottom: -0.185vh;
+          }
+        }
+
+        .page-common-body-menu-item {
+          border: 0.093vh solid fade(@green, 40%);
+          width: 3.889vh;
+          height: 3.889vh;
+          border-radius: 0.278vh;
+          margin-top: 0.741vh;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          cursor: pointer;
+
+          a {
+            line-height: 0;
+          }
+
+          &:first-child {
+            margin-top: 0;
+          }
+
+          &.active {
+            border-color: fade(@yellow, 40%);
+            position: relative;
+
+            &::after {
+              content: "";
+              width: calc(100% - 0.37vh);
+              height: calc(100% - 0.37vh);
+              position: absolute;
+              border: 0.093vh solid @yellow;
+              box-shadow: 0 0 0.37vh @yellow;
+              top: 0.093vh;
+              left: 0.093vh;
+            }
+          }
+        }
+      }
+    }
+  }
+}
+</style>

+ 15 - 10
src/views/HealthControl/Health3.vue

@@ -145,18 +145,19 @@
 </template>
 
 <script>
-import ListBarChart from "../../components/chart/bar/list-bar-chart.vue";
-import VertivalBarLineChart from "../../components/chart/combination/vertival-bar-line-chart.vue";
-import Dashboard2 from "../../components/chart/other/Dashboard2.vue";
-import ThermometerVChart from "../../components/chart/other/thermometer-v-chart.vue";
-import NormalPieChart from "../../components/chart/pie/normal-pie-chart.vue";
-import SvgIcon from "../../components/coms/icon/svg-icon.vue";
-import Panel from "../../components/coms/panel/panel.vue";
-import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
-import Table from "../../components/coms/table/table.vue";
+import ListBarChart from "../../../../components/chart/bar/list-bar-chart.vue";
+import VertivalBarLineChart from "../../../../components/chart/combination/vertival-bar-line-chart.vue";
+import Dashboard2 from "../../../../components/chart/other/Dashboard2.vue";
+import ThermometerVChart from "../../../../components/chart/other/thermometer-v-chart.vue";
+import NormalPieChart from "../../../../components/chart/pie/normal-pie-chart.vue";
+import SvgIcon from "../../../../components/coms/icon/svg-icon.vue";
+import Panel from "../../../../components/coms/panel/panel.vue";
+import ToolbarPanel from "../../../../components/coms/panel/toolbar-panel.vue";
+import Table from "../../../../components/coms/table/table.vue";
 
 import axios from "axios";
 export default {
+  name: "health3",
   setup() {},
   components: {
     SvgIcon,
@@ -312,7 +313,9 @@ export default {
     },
 
     jumpUrl(item) {
-      this.$router.push(`/health/health0/${this.wpId}/${item[0]}`);
+      this.$router.push(
+        `/health/healthDetail/wtHealth/${this.wpId}/${item[0]}`
+      );
     },
   },
 };
@@ -320,6 +323,8 @@ export default {
 
 <style lang="less">
 .health-3 {
+  overflow-y: auto;
+  height: 100%;
   .power-info {
     display: flex;
     .info-tab {

+ 3 - 2
src/views/HealthControl/Health0.vue

@@ -288,10 +288,11 @@
 import SvgIcon from "@com/coms/icon/svg-icon.vue";
 import StandAloneImg from "@/views/WindSite/pages/Info/StandAloneImg.vue";
 import ProgressBar from "@com/coms/progress-bar/progress-bar.vue";
-import Table from "../../components/coms/table/table.vue";
-import HealthReport from "../../components/other/healthReport/index.vue";
+import Table from "../../../../components/coms/table/table.vue";
+import HealthReport from "../../../../components/other/healthReport/index.vue";
 import axios from "axios";
 export default {
+  name: "health0",
   setup() {},
   components: {
     SvgIcon,

+ 4 - 3
src/views/HealthControl/healthLineChart.vue

@@ -14,10 +14,11 @@
 </template>
 
 <script>
-import SimpleLineChart from "../../components/chart/line/simple-line-chart.vue";
+import SimpleLineChart from "@/components/chart/line/simple-line-chart.vue";
 import WtChooser from "@com/coms/wt-chooser/wt-chooser.vue";
 import api from "@api/wisdomOverhaul/health/index.js";
 export default {
+  name: "badStateAnalyse",
   setup() {},
   components: { SimpleLineChart, WtChooser },
   data() {
@@ -36,7 +37,7 @@ export default {
   methods: {
     switchWt(data) {
       this.$router.push(
-        `/health/health4/healthLineChart/${data.wpId}/${data.wtId}`
+        `/health/healthManagement/badStateAnalyse/${data.wpId}/${data.wtId}`
       );
       this.wtId = this.$route.params.wtId;
       this.wpId = this.$route.params.wpId;
@@ -113,4 +114,4 @@ export default {
     height: 25%;
   }
 }
-</style>
+</style>

+ 5 - 4
src/views/HealthControl/Health.vue

@@ -50,12 +50,13 @@
 </template>
 
 <script>
-import HealthTab1 from "./HealthTab1.vue";
-import HealthTab2 from "./HealthTab2.vue";
-import HealthTab3 from "./HealthTab3.vue";
-import HealthTab4 from "./HealthTab4.vue";
+import HealthTab1 from "@/views/HealthControl/HealthTab1.vue";
+import HealthTab2 from "@/views/HealthControl/HealthTab2.vue";
+import HealthTab3 from "@/views/HealthControl/HealthTab3.vue";
+import HealthTab4 from "@/views/HealthControl/HealthTab4.vue";
 
 export default {
+  name: "first",
   setup() {},
   components: { HealthTab1, HealthTab2, HealthTab3, HealthTab4 },
   data() {

+ 3 - 2
src/views/HealthControl/Health8.vue

@@ -116,10 +116,11 @@
 </template>
 
 <script>
-import TableLineChart from "../../components/chart/line/table-line-chart.vue";
+import TableLineChart from "@/components/chart/line/table-line-chart.vue";
 import api from "@api/wisdomOverhaul/health/index.js";
 import axios from "axios";
 export default {
+  name: "healthList",
   setup() {},
   components: { TableLineChart },
   data() {
@@ -154,7 +155,7 @@ export default {
         差: "red",
       },
     };
-    futureHealth: null;
+    null;
   },
   created() {
     this.search();

+ 3 - 2
src/views/HealthControl/Health5.vue

@@ -70,9 +70,10 @@
 </template>
 
 <script>
-import SvgIcon from "../../components/coms/icon/svg-icon.vue";
+import SvgIcon from "@/components/coms/icon/svg-icon.vue";
 import api from "@api/wisdomOverhaul/health/index.js";
 export default {
+  name: "healthMatrix",
   setup() {},
   components: { SvgIcon },
   data() {
@@ -112,7 +113,7 @@ export default {
     // 跳转按钮
     onClickJump(item) {
       this.$router.push({
-        path: `/health/health0/${item.wpId}/${item.wtId}`,
+        path: `/health/healthDetail/wtHealth/${item.wpId}/${item.wtId}`,
       });
     },
   },

+ 9 - 8
src/views/HealthControl/Health2.vue

@@ -142,14 +142,15 @@
 </template>
 
 <script>
-import VertivalBarLineChart from "../../components/chart/combination/health-bar-line-chart.vue";
-import Dashboard from "../../components/chart/other/Dashboard.vue";
-import ThermometerChart from "../../components/chart/other/thermometer-chart.vue";
-import SvgIcon from "../../components/coms/icon/svg-icon.vue";
-import Panel from "../../components/coms/panel/panel.vue";
-import Table from "../../components/coms/table/table.vue";
+import VertivalBarLineChart from "@/components/chart/combination/health-bar-line-chart.vue";
+import Dashboard from "@/components/chart/other/Dashboard.vue";
+import ThermometerChart from "@/components/chart/other/thermometer-chart.vue";
+import SvgIcon from "@/components/coms/icon/svg-icon.vue";
+import Panel from "@/components/coms/panel/panel.vue";
+import Table from "@/components/coms/table/table.vue";
 import api from "@api/wisdomOverhaul/health/index.js";
 export default {
+  name: "homepage",
   setup() {},
   components: {
     SvgIcon,
@@ -299,13 +300,13 @@ export default {
     // 页面跳转
     jumpUrl({ wpId, name }) {
       this.$router.push({
-        path: `/health/health3/${wpId}/${name}`,
+        path: `/health/healthManagement/wpHealth/${wpId}/${name}`,
       });
     },
 
     showDetails(wpId, wtId) {
       this.$router.push({
-        path: `/health/health0/${wpId}/${wtId}`,
+        path: `/health/healthDetail/wtHealth/${wpId}/${wtId}`,
       });
     },
   },

+ 11 - 0
src/views/HealthControl/healthManagement/index.vue

@@ -0,0 +1,11 @@
+<template>
+  <router-view />
+</template>
+
+<script>
+export default {
+  name: "healthManagement", //健康管理
+};
+</script>
+
+<style></style>

+ 553 - 0
src/views/HealthControl/healthManagement/overview/index.vue

@@ -0,0 +1,553 @@
+<template>
+  <div class="health-6">
+    <div class="header-info mg-b-16">
+      <div class="selections">
+        <div
+          class="item"
+          @click="tabSelect('1')"
+          :class="{ active: type === '1' }"
+        >
+          <i class="svg-icon svg-icon-sm">
+            <svg-icon :svgid="'svg-wind-site'" />
+          </i>
+          <span>风场</span>
+        </div>
+        <div
+          class="item"
+          @click="tabSelect('2')"
+          :class="{ active: type === '2' }"
+        >
+          <i class="svg-icon svg-icon-sm">
+            <svg-icon :svgid="'svg-h-project'" />
+          </i>
+          <span>项目</span>
+        </div>
+      </div>
+      <div class="state" v-if="false">
+        <div class="state-item green">
+          <div class="dot"></div>
+          <div class="text">良好数量:</div>
+          <div class="value">999</div>
+        </div>
+        <div class="state-item purple">
+          <div class="dot"></div>
+          <div class="text">正常数量:</div>
+          <div class="value">999</div>
+        </div>
+        <div class="state-item yellow">
+          <div class="dot"></div>
+          <div class="text">注意数量:</div>
+          <div class="value">999</div>
+        </div>
+        <div class="state-item orange">
+          <div class="dot"></div>
+          <div class="text">严重数量:</div>
+          <div class="value">999</div>
+        </div>
+      </div>
+    </div>
+    <row :type="'flex'" class="mg-b-16">
+      <Col :span="12">
+        <panel :title="'报警统计图'" :showLine="false">
+          <dual-pie-chart
+            :innerData="healPieData"
+            :outerData="healPieData"
+            :height="'150px'"
+          />
+        </panel>
+      </Col>
+      <Col :span="12">
+        <panel :title="'故障统计图'" :showLine="false">
+          <dual-pie-chart
+            :innerData="stopPieData"
+            :outerData="stopPieData"
+            :height="'150px'"
+          />
+        </panel>
+      </Col>
+      <!-- <Col :span="16">
+        <panel :title="'矩阵'" :showLine="false">
+          <div class="matrix">
+            <div class="item green">1号</div>
+            <div class="item purple">2号</div>
+            <div class="item orange">3号</div>
+            <div class="item" v-for="index of 150" :key="index">{{ index + 3 }}号</div>
+            <div class="blank" v-for="index of 30" :key="index"></div>
+          </div>
+        </panel>
+      </Col> -->
+    </row>
+    <div class="mg-b-16">
+      <panel :title="'健康状态占比'" :showLine="false">
+        <bar-line-chart
+          :bardata="barData"
+          :lineData="[]"
+          :height="'390px'"
+          :pageSize="10"
+        />
+      </panel>
+    </div>
+    <div class="mg-b-16 curStyle">
+      <panel :title="'健康趋势'" :showLine="false">
+        <MultipleLineChart :list="statusData" :units="['']" :height="'150px'" />
+      </panel>
+      <div class="selections">
+        <div
+          class="item"
+          @click="changeStatus('1')"
+          :class="{ green: status === '1' }"
+        >
+          良好
+        </div>
+        <div
+          class="item"
+          @click="changeStatus('2')"
+          :class="{ green: status === '2' }"
+        >
+          注意
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import BarLineChart from "@/components/chart/combination/bar-line-chart.vue";
+import MultipleLineChart from "@/components/chart/line/double-line-chart.vue";
+import DualPieChart from "@/components/chart/pie/dual-pie-chart.vue";
+import Col from "@/components/coms/grid/col.vue";
+import Row from "@/components/coms/grid/row.vue";
+import SvgIcon from "@/components/coms/icon/svg-icon.vue";
+import Panel from "@/components/coms/panel/panel.vue";
+import api from "@api/wisdomOverhaul/health/index.js";
+export default {
+  name: "overview",
+  setup() {},
+  components: {
+    SvgIcon,
+    Panel,
+    MultipleLineChart,
+    BarLineChart,
+    Row,
+    Col,
+    DualPieChart,
+  },
+  data() {
+    return {
+      type: "2",
+      status: "1",
+      healPieData: [],
+      stopPieData: [],
+      statusData: [],
+      barData: {
+        area: [],
+        legend: [],
+        data: [],
+      },
+    };
+  },
+  created() {
+    this.requestData();
+  },
+  methods: {
+    requestData() {
+      this.getWpwarn();
+      this.getStop();
+      this.getWpOrProStatus();
+      this.getStatus();
+    },
+
+    // 获取健康走势图
+    getWpwarn() {
+      api
+        .healthoperationCountWpwarn({
+          type: this.type,
+        })
+        .then((res) => {
+          let healPieData = [];
+
+          res.data.forEach((ele) => {
+            healPieData.push({
+              value: ele.value,
+              unit: "次",
+              name: ele.name,
+            });
+          });
+
+          this.healPieData = healPieData;
+        });
+
+      // let that = this;
+      // that.API.requestData({
+      //   method: "POST",
+      //   subUrl: "healthoperation/countWpwarn",
+      //   data: {
+      //     type: that.type,
+      //   },
+      //   success(res) {
+      //     let healPieData = [];
+
+      //     res.data.forEach((ele) => {
+      //       healPieData.push({
+      //         value: ele.value,
+      //         unit: "次",
+      //         name: ele.name,
+      //       });
+      //     });
+
+      //     that.healPieData = healPieData;
+      //   },
+      // });
+    },
+
+    // 获取故障统计图
+    getStop() {
+      api
+        .healthoperationCountStop({
+          type: this.type,
+        })
+        .then((res) => {
+          let stopPieData = [];
+
+          res.data.forEach((ele) => {
+            stopPieData.push({
+              value: ele.value,
+              unit: "次",
+              name: ele.name,
+            });
+          });
+
+          this.stopPieData = stopPieData;
+        });
+
+      // let that = this;
+      // that.API.requestData({
+      //   method: "POST",
+      //   subUrl: "healthoperation/countStop",
+      //   data: {
+      //     type: that.type,
+      //   },
+      //   success(res) {
+      //     let stopPieData = [];
+
+      //     res.data.forEach((ele) => {
+      //       stopPieData.push({
+      //         value: ele.value,
+      //         unit: "次",
+      //         name: ele.name,
+      //       });
+      //     });
+
+      //     that.stopPieData = stopPieData;
+      //   },
+      // });
+    },
+
+    // 获取健康状态占比
+    getWpOrProStatus() {
+      api
+        .healthoperationCountWpOrProStatus({
+          type: this.type,
+        })
+        .then((res) => {
+          let barData = {
+            area: res.data.name,
+            legend: ["良好数量", "合格数量", "注意数量", "严重数量"],
+            data: [],
+          };
+
+          barData.data.push(
+            res.data.lhList,
+            res.data.hgList,
+            res.data.zyList,
+            res.data.yzList
+          );
+
+          this.barData = barData;
+        });
+    },
+
+    // 获取健康状态
+    getStatus() {
+      api
+        .healthoperationFindWpOrProStatusForHistory({
+          type: this.type,
+          status: this.status,
+        })
+        .then((res) => {
+          let statusData = [];
+
+          const time = res.data.time;
+          for (let key in res.data) {
+            if (key !== "name" && key !== "time") {
+              let item = res.data[key];
+
+              let statusItem = {
+                title: res.data.name[0][key],
+                smooth: true,
+                value: [],
+              };
+
+              time.forEach((text, index) => {
+                statusItem.value.push({
+                  text: text,
+                  value: item[index],
+                });
+              });
+
+              statusData.push(statusItem);
+            }
+          }
+
+          this.statusData = statusData;
+        });
+
+      // let that = this;
+      // that.API.requestData({
+      //   method: "POST",
+      //   subUrl: "healthoperation/findWpOrProStatusForHistory",
+      //   data: {
+      //     type: that.type,
+      //     status: that.status,
+      //   },
+      //   success(res) {
+      //     let statusData = [];
+
+      //     const time = res.data.time;
+      //     for (let key in res.data) {
+      //       if (key !== "name" && key !== "time") {
+      //         let item = res.data[key];
+
+      //         let statusItem = {
+      //           title: res.data.name[0][key],
+      //           smooth: true,
+      //           value: [],
+      //         };
+
+      //         time.forEach((text, index) => {
+      //           statusItem.value.push({
+      //             text: text,
+      //             value: item[index],
+      //           });
+      //         });
+
+      //         statusData.push(statusItem);
+      //       }
+      //     }
+
+      //     that.statusData = statusData;
+      //   },
+      // });
+    },
+
+    tabSelect(type) {
+      this.type = type;
+      this.requestData();
+    },
+
+    changeStatus(status) {
+      this.status = status;
+      this.getStatus();
+    },
+  },
+};
+</script>
+
+<style lang="less">
+.health-6 {
+  .curStyle {
+    position: relative;
+
+    .selections {
+      position: absolute;
+      display: flex;
+      right: 0;
+      top: 0;
+      width: 50%;
+      justify-content: flex-end;
+      color: @gray;
+      .item {
+        margin-right: 15px;
+        cursor: pointer;
+        // flex: 0 0 80px;
+        // text-align: center;
+        // line-height: 33px;
+        // margin-right: 8px;
+        // color: @font-color;
+        // font-size: @fontsize-s;
+        // background: fade(@gray, 20);
+        // border: 1px solid fade(@gray, 20);
+        // display: flex;
+        // justify-content: center;
+        // align-items: center;
+        // cursor: pointer;
+        .green {
+          color: @green;
+        }
+        &:hover,
+        &.active {
+          // background: fade(@green, 20);
+          // border: 1px solid @green;
+          color: @green;
+          // cursor: pointer;
+
+          i svg use {
+            fill: @green;
+          }
+        }
+      }
+    }
+  }
+
+  .header-info {
+    display: flex;
+
+    .selections {
+      display: flex;
+      flex: 0 0 200px;
+
+      .item {
+        flex: 0 0 80px;
+        text-align: center;
+        height: 33px;
+        line-height: 33px;
+        margin-right: 8px;
+        color: @font-color;
+        font-size: @fontsize-s;
+        background: fade(@gray, 20);
+        border: 1px solid fade(@gray, 20);
+        display: flex;
+        justify-content: center;
+        align-items: center;
+
+        i {
+          margin-right: 8px;
+
+          svg use {
+            fill: @gray;
+          }
+        }
+
+        &:hover,
+        &.active {
+          background: fade(@green, 20);
+          border: 1px solid @green;
+          color: @green;
+          cursor: pointer;
+
+          i svg use {
+            fill: @green;
+          }
+        }
+      }
+    }
+
+    .state {
+      display: flex;
+
+      .state-item {
+        display: flex;
+        height: 32px;
+        align-items: center;
+        .dot {
+          width: 8px;
+          height: 8px;
+          margin-right: 8px;
+        }
+
+        .text {
+          margin-left: 8px;
+        }
+
+        .value {
+          height: 32px;
+          line-height: 32px;
+          background: fade(@gray, 20);
+          padding: 0 16px;
+        }
+
+        &.green {
+          .dot {
+            background: @green;
+          }
+        }
+
+        &.purple {
+          .dot {
+            background: @purple;
+          }
+        }
+
+        &.yellow {
+          .dot {
+            background: @yellow;
+          }
+        }
+
+        &.orange {
+          .dot {
+            background: @orange;
+          }
+        }
+
+        & + .state-item {
+          margin-left: 16px;
+        }
+      }
+    }
+  }
+
+  .matrix {
+    display: flex;
+    flex-wrap: wrap;
+
+    .item {
+      flex: 1 0 calc(100% / 20 - 4px);
+      line-height: 26px;
+      background: fade(@gray, 20);
+      color: @gray-l;
+      font-size: 12px;
+      margin-bottom: 4px;
+      text-align: center;
+      border: 1px solid transparent;
+
+      & + .item {
+        margin-left: 4px;
+      }
+
+      &:nth-child(20n + 1) {
+        margin-left: 0px;
+      }
+
+      &.green {
+        color: @green;
+        background: fade(@green, 20);
+        border-color: @green;
+      }
+
+      &.purple {
+        color: @purple;
+        background: fade(@purple, 20);
+        border-color: @purple;
+      }
+
+      &.orange {
+        color: @orange;
+        background: fade(@orange, 20);
+        border-color: @orange;
+      }
+
+      &.red {
+        color: @red;
+        background: fade(@red, 20);
+        border-color: @red;
+      }
+    }
+
+    .blank {
+      flex: 1 0 calc(100% / 20 - 4px);
+      margin-left: 4px;
+    }
+  }
+}
+</style>

+ 11 - 0
src/views/HealthControl/index.vue

@@ -0,0 +1,11 @@
+<template>
+  <router-view />
+</template>
+
+<script>
+export default {
+  name: "health", //智能检修
+};
+</script>
+
+<style></style>

+ 2 - 2
src/views/Home/components/map.vue

@@ -1092,7 +1092,7 @@
               </div>
             </div>
           </el-col>
-          <el-col>
+          <!-- <el-col>
             <div
               class="grid-content"
               @click="handleClick('SSZLLGL', '理论功率', 'MW')"
@@ -1109,7 +1109,7 @@
                 <p>理论功率</p>
               </div>
             </div>
-          </el-col>
+          </el-col> -->
           <el-col v-show="tabShow == -1 || tabShow == -2">
             <div
               class="grid-content"

src/views/Home/Home.vue → src/views/Home/index.vue


+ 7 - 6
src/views/economicsOperation/benchmarkingManagement/projectBenchmarking/index.vue

@@ -105,7 +105,7 @@
           size="mini"
           class="buttons"
           :disabled="displayDetail"
-          @click="getCmdb"
+          @click="getXmdb"
           >搜索</el-button
         >
         <el-button
@@ -727,7 +727,7 @@ export default {
       this.stationObj = [];
       this.projectObj = [];
       this.getStation(this.company);
-      this.getCmdb();
+      this.getXmdb();
     },
     initialization() {
       companys().then(({ data: res }) => {
@@ -745,6 +745,7 @@ export default {
       }).then(({ data: res }) => {
         if (res.data.length) {
           this.stationList = res.data;
+          this.getXmdb();
           this.getProject(this.stationObj.join(","));
         }
       });
@@ -755,11 +756,11 @@ export default {
       }).then(({ data: res }) => {
         if (res.data.length) {
           this.projectList = res.data;
-          this.getCmdb();
+          this.getXmdb();
         }
       });
     },
-    getCmdb() {
+    getXmdb() {
       xmdb({
         companys: this.company,
         type: this.tabIndex,
@@ -822,10 +823,10 @@ export default {
       this.company = val;
       //   this.projectObj = [];
       this.getStation(val);
-      this.getCmdb();
+      this.getXmdb();
     },
     handleProjectChange() {
-      this.getCmdb();
+      this.getXmdb();
     },
     handleCurrentChange(val) {
       if (val.length > 5) {

+ 3 - 0
src/views/economicsOperation/benchmarkingManagement/wiringBenchmarking/index.vue

@@ -771,6 +771,7 @@ export default {
       }).then(({ data: res }) => {
         if (res.data.length) {
           this.stationList = res.data;
+          this.gerXldb();
           this.getProject(this.stationObj.join(","));
         }
       });
@@ -858,10 +859,12 @@ export default {
       this.gerXldb();
     },
     handleStationChange(val) {
+      this.gerXldb();
       //   this.lineObj = [];
       this.getProject(val);
     },
     handleProjectChange(val) {
+      this.gerXldb();
       //   this.lineObj = [];
       this.getLine(val);
     },

+ 61 - 21
src/views/layout/Header.vue

@@ -3,7 +3,7 @@
     <ul class="header-menu-list">
       <li
         class="header-menu-item"
-        v-for="(menu, index) of menus"
+        v-for="(menu, index) of currMenu"
         :key="menu"
         @click="click(index, menu)"
         :class="{ active: activeIndex == index }"
@@ -43,17 +43,24 @@
 </template>
 <script>
 import $ from "jquery";
-import store from "@store/index";
+import { getCookie } from "@/utills/auth";
 import tools from "../../tools/encryption.js";
+import { logout } from "@/api/common.js";
 export default {
   data() {
     return {
       themeName: false,
       menus: [
         {
-          id: "monitor",
+          id: "home",
+          text: "首页",
+          path: "/home",
+          isActive: true,
+        },
+        {
+          id: "stateMonitor",
           text: "监视中心",
-          path: "/monitor/home",
+          path: "/stateMonitor",
           isActive: true,
         },
         {
@@ -66,7 +73,7 @@ export default {
           id: "health",
           text: "智慧检修",
           // path: '/sandtable',
-          path: "/health/health2",
+          path: "/health",
           isActive: false,
         },
         // {
@@ -145,10 +152,36 @@ export default {
   },
   computed: {
     userName() {
-      return this.$store.state.user?.username;
+      return getCookie("username") || this.$store.state.user.username;
     },
-    activeClass(data) {
-      return data.isActive ? "active" : "";
+    // activeClass(data) {
+    //   return data.isActive ? "active" : "";
+    // },
+    currMenu() {
+      let stateRoutes = this.$store.state.routes.routes;
+      let currMenu = [];
+      if (stateRoutes.length) {
+        stateRoutes.forEach((route) => {
+          if (route.path !== "/login") {
+            currMenu.push({
+              id: route.name,
+              text: route.meta.title,
+              path: route.path,
+              isActive: false,
+            });
+          }
+        });
+        currMenu.push(
+          {
+            id: "zhbj",
+            text: "综合报警",
+            path: "",
+          },
+        );
+        return currMenu;
+      } else {
+        return [];
+      }
     },
   },
   methods: {
@@ -167,7 +200,7 @@ export default {
       }
       this.activeIndex = index;
       this.$router.push(data.path);
-      const ActiveModule = this.menus.find((ele) => {
+      const ActiveModule = this.currMenu.find((ele) => {
         return ele.path === data.path;
       });
       if (ActiveModule) {
@@ -188,8 +221,13 @@ export default {
     },
     handleCommand(command) {
       if (command == "logout") {
-        this.$store.commit("user/REMOVE_TOKEN");
-        this.$router.push("/login");
+        logout({
+          token: getCookie("authToken"),
+          userId: getCookie("userId"),
+        }).then((res) => {
+          this.$store.commit("user/REMOVE_TOKEN");
+          this.$router.push("/login");
+        });
       }
     },
   },
@@ -197,17 +235,19 @@ export default {
   watch: {
     $route: {
       handler: function (val, oldVal) {
-        this.menus.some((t, index) => {
-          if (val.path.includes(t.id)) {
-            this.activeIndex = index;
-            const ActiveModule = this.menus.find((ele) => {
-              return ele.path === val.path;
-            });
-            if (ActiveModule) {
-              this.$store.dispatch("changeModuleName", ActiveModule.text);
+        if (this.currMenu.length) {
+          this.currMenu.some((t, index) => {
+            if (val.path.includes(t.id)) {
+              this.activeIndex = index;
+              const ActiveModule = this.currMenu.find((ele) => {
+                return ele.path === val.path;
+              });
+              if (ActiveModule) {
+                this.$store.dispatch("changeModuleName", ActiveModule.text);
+              }
             }
-          }
-        });
+          });
+        }
       },
       //深度观察监听
       deep: true,

File diff suppressed because it is too large
+ 326 - 754
src/views/layout/Menu.vue


+ 48 - 13
src/views/layout/login-page.vue

@@ -54,7 +54,7 @@
   </div>
 </template>
 <script>
-import { login } from "@/api/common.js";
+import { login, login1, login2 } from "@/api/common.js";
 import Cookies from "js-cookie";
 import { Base64 } from "js-base64";
 import SvgIcon from "@com/coms/icon/svg-icon.vue";
@@ -92,8 +92,7 @@ export default {
   watch: {
     $route: {
       handler(val) {
-        console.log(val);
-        this.redirectUrl = val.query.redirect ? val.query.redirect : "/";
+        this.redirectUrl = val.query.redirect ? val.query.redirect : "/home";
       },
       immediate: true,
     },
@@ -102,8 +101,8 @@ export default {
     Login() {
       let that = this;
       that.$refs.loginRef.validate((valid) => {
-        that.loading = true;
         if (!valid) return;
+        that.loading = true;
         if (that.loginForm.rememberMe) {
           Cookies.set("username", that.loginForm.username, { expires: 300 });
           Cookies.set("password", Base64.encode(that.loginForm.password), {
@@ -119,22 +118,58 @@ export default {
           Cookies.remove("rememberMe");
         }
         login(this.loginForm).then((data) => {
-          if (data.code == "200") {
+          if (data.code == 200) {
+            this.$store.commit("user/SET_TOKEN", data);
+            let loginSta = new Promise((resolve, reject) => {
+              login1({ token: data.token, userId: data.userId })
+                .then(({ data }) => {
+                  resolve(data);
+                })
+                .catch((e) => {
+                  reject("发生错误");
+                });
+            });
+            let loginHeal = new Promise((resolve, reject) => {
+              login2({ token: data.token, userId: data.userId })
+                .then((res) => {
+                  resolve(res);
+                })
+                .catch((e) => {
+                  reject("发生错误");
+                });
+            });
+            Promise.all([loginSta, loginHeal]).then((res) => {
+              if (res[0].code == 200 && res[1].code == 200) {
+                that.BASE.showMsg({
+                  msg: "登录成功",
+                  type: "success",
+                });
+                this.loading = false;
+                this.$emit("onLogin");
+                that.$router.push(this.redirectUrl); // 跳转到首页
+              }
+            });
+            // login1({ token: data.token, userId: data.userId }).then((res) => {
+            //   if (res.data.code == 200) {
+            //     that.BASE.showMsg({
+            //       msg: "登录成功",
+            //       type: "success",
+            //     });
+            //     this.loading = false;
+            //     this.$emit("onLogin");
+            //     that.$router.push(this.redirectUrl); // 跳转到首页
+            //   }
+          } else {
             that.BASE.showMsg({
-              msg: "登录成功",
-              type: "success",
+              msg: data.msg,
+              type: "error",
             });
             this.loading = false;
-            this.$store.commit("user/SET_TOKEN", data);
-            this.$emit("onLogin", {
-              token: data.token,
-              username: that.loginForm.username,
-            });
-            that.$router.push(this.redirectUrl); // 跳转到首页
           }
         });
       });
     },
+
     updateRemember(v) {
       Cookies.set("rememberMe", v);
     },

+ 11 - 0
src/views/report/index.vue

@@ -0,0 +1,11 @@
+<template>
+  <router-view />
+</template>
+
+<script>
+export default {
+  name: "others", //综合报表
+};
+</script>
+
+<style></style>

+ 28 - 0
src/views/report/stationReport/fdczzdy/index.vue

@@ -0,0 +1,28 @@
+<template>
+  <div style="height:100%">
+    <iframe :src="url" width="100%" height="100%" frameborder="0" scrolling="auto"></iframe>
+  </div>
+</template>
+<script>
+export default {
+  data(){
+    return {
+      url: "http://10.81.3.155:8083/bi/ebipro/easyolap.do?action=edit&resid=EANA$2$8$1$a95c37e40d684dfc91cf61e9a67b22e3$9434e7e05656406194de4ca47cb31fa3&id=admin&pw=admin&showmenu=false&showparams=true&calcnow=true"
+    }
+  }
+}
+</script>
+<style lang="less" scope>
+@titleGray: #9ca5ab;
+@rowGray: #606769;
+@darkBack: #536268;
+.knowledge-2 {
+  .el-select {
+    width: 200px;
+  }
+  .el-input {
+    width: 200px;
+  }
+}
+</style>
+

+ 34 - 0
src/views/report/stationReport/fdxmzdy/index.vue

@@ -0,0 +1,34 @@
+<template>
+  <div style="height:100%">
+    <iframe :src="url" width="100%" height="100%" frameborder="0" scrolling="auto"></iframe>
+  </div>
+    
+</template>
+
+<script>
+
+
+export default {
+  data(){
+    return {
+      // url: "http://10.155.32.4:8000/bi47/showreport.do?resid=EBI$12$0C375MRT9PPPNMNCCTULLVQINXCND95K$1$LDBDTULZIVZV1WQD163KP6ICTCDUT99L.rptolap&id=admin&pw=admin"
+      url: "http://10.81.3.155:8083/bi/ebipro/easyolap.do?action=edit&resid=EANA$2$8$1$a95c37e40d684dfc91cf61e9a67b22e3$046f1537b66449ea8e38d2106ce1b25d"
+    }
+  }
+}
+</script>
+  
+<style lang="less" scope>
+@titleGray: #9ca5a8;
+@rowGray: #606769;
+@darkBack: #536268;
+.knowledge-2 {
+  .el-select {
+    width: 200px;
+  }
+  .el-input {
+    width: 200px;
+  }
+}
+</style>
+

+ 11 - 0
src/views/report/stationReport/index.vue

@@ -0,0 +1,11 @@
+<template>
+  <router-view />
+</template>
+
+<script>
+export default {
+  name: "report", //自定制报表管理
+};
+</script>
+
+<style></style>

+ 29 - 0
src/views/report/stationReport/rbb/index.vue

@@ -0,0 +1,29 @@
+<template>
+    <div style="height:100%">
+      <iframe :src="url" width="100%" height="100%" frameborder="0" scrolling="auto"></iframe>
+    </div>
+  </template>
+  <script>
+  export default {
+    data(){
+      return {
+        url: "http://10.81.3.155:8083/bi/ebibase/showreport.do?resid=EANA$2$2$1$a95c37e40d684dfc91cf61e9a67b22e3$0884b7e114ff4f67ae7679824f8f1a9d&id=admin&pw=admin"
+      }
+    }
+  }
+  </script>
+  <style lang="less" scope>
+  @titleGray: #9ca5a8;
+  @rowGray: #606769;
+  @darkBack: #536268;
+  .knowledge-2 {
+    .el-select {
+      width: 200px;
+    }
+    .el-input {
+      width: 200px;
+    }
+  }
+  </style>
+  
+  

+ 28 - 27
src/views/stateMonitor/DetailMatrix/detailMatrix.vue

@@ -582,31 +582,31 @@ export default {
           key: "bzgl",
           ratio: 1000,
         },
-        {
-          text: "理论功率",
-          color: "#9CA5A8",
-          key: "llgl",
-          ratio: 1000,
-        },
+        // {
+        //   text: "理论功率",
+        //   color: "#9CA5A8",
+        //   key: "llgl",
+        //   ratio: 1000,
+        // },
         {
           text: "实际功率",
           color: "#9CA5A8",
           key: "sjgl",
           ratio: 1000,
         },
-        {
-          text: "AGC指令",
-          color: "#9CA5A8",
-          key: "agc",
-          flag: true,
-        },
-        {
-          text: "出线功率",
-          color: "#9CA5A8",
-          key: "cxgl",
-          ratio: 1000,
-          flag: true,
-        },
+        // {
+        //   text: "AGC指令",
+        //   color: "#9CA5A8",
+        //   key: "agc",
+        //   flag: true,
+        // },
+        // {
+        //   text: "出线功率",
+        //   color: "#9CA5A8",
+        //   key: "cxgl",
+        //   ratio: 1000,
+        //   flag: true,
+        // },
       ],
       activeTab: "all", //全部 风电 光伏
       enterpriseIndex: "all", //公司
@@ -646,11 +646,11 @@ export default {
           stse: "",
           sts: "SSZBZGL",
         },
-        {
-          statiomName: "理论功率",
-          stse: "",
-          sts: "SSZNHGLZS",
-        },
+        // {
+        //   statiomName: "理论功率",
+        //   stse: "",
+        //   sts: "SSZNHGLZS",
+        // },
         {
           statiomName: "实际功率",
           stse: "",
@@ -2748,8 +2748,8 @@ export default {
           display: flex;
           flex-direction: row;
           align-items: center;
-          // justify-content: space-between;
-          width: 7%;
+          //   width: 7%;
+          width: 8%;
           height: 100%;
           margin-right: 20px;
           font-size: 12px;
@@ -2762,7 +2762,8 @@ export default {
           }
 
           &.active1 {
-            width: 5%;
+            // width: 5%;
+            width: 6%;
           }
 
           .sub-value {

+ 9 - 9
src/views/stateMonitor/LightMatrix/lightMatrix.vue

@@ -331,14 +331,14 @@
               item.bzgl ? (item.bzgl / 1000).toFixed(2) : "0.00"
             }}</span></el-col
           >
-          <el-col
+          <!-- <el-col
             style="cursor: pointer"
             @click="handleIndicatorClick(item.czlx, item.wpid)"
           >
             理论功率<span>{{
               item.llgl ? (item.llgl / 1000).toFixed(2) : "0.00"
             }}</span></el-col
-          >
+          > -->
           <el-col
             style="cursor: pointer"
             @click="handleIndicatorClick(item.czlx, item.wpid)"
@@ -347,7 +347,7 @@
               item.sjgl ? (item.sjgl / 1000).toFixed(2) : "0.00"
             }}</span></el-col
           >
-          <el-col>
+          <!-- <el-col>
             AGC指令<span>{{
               item.agc ? item.agc.toFixed(2) : "0.00"
             }}</span></el-col
@@ -356,7 +356,7 @@
             出线功率<span>{{
               item.cxgl ? (item.cxgl / 1000).toFixed(2) : "0.00"
             }}</span></el-col
-          >
+          > -->
         </el-row>
 
         <div
@@ -468,11 +468,11 @@ export default {
           stse: "",
           sts: "SSZBZGL",
         },
-        {
-          statiomName: "理论功率",
-          stse: "",
-          sts: "SSZNHGLZS",
-        },
+        // {
+        //   statiomName: "理论功率",
+        //   stse: "",
+        //   sts: "SSZNHGLZS",
+        // },
         {
           statiomName: "实际功率",
           stse: "",

+ 11 - 1
src/views/stateMonitor/factoryMonitor/components/headerButton.vue

@@ -136,9 +136,19 @@ export default {
         let company = data.data.map((item) => {
           return { label: item.aname, value: item.nemCode, ...item };
         });
+        let menu = this.$route.path.includes("windPowerPlant");
+        let gf = this.localCompanyid
+          ? this.localCompanyid.includes("GF")
+          : false;
         this.OrganizationList = [...this.OrganizationList, ...company];
         this.checkNode = this.localCompanyid
-          ? this.localCompanyid
+          ? menu
+            ? gf
+              ? this.OrganizationList[0].value
+              : this.localCompanyid
+            : gf
+            ? this.localCompanyid
+            : this.OrganizationList[0].value
           : this.OrganizationList[0].value;
         if (!this.localCompanyid) {
           this.localCompanyid = this.OrganizationList[0].value;

+ 25 - 51
src/views/stateMonitor/factoryMonitor/photovoltaic/index.vue

@@ -14,60 +14,34 @@ export default {
   },
   data() {
     return {
-      routerData: [
-        {
-          icon: "svg-station-surveillance",
-          title: "场站监视",
-          path: "/monitor/factoryMonitor/photovoltaic/lighthome",
-        },
-        {
-          icon: "svg-s指标列表",
-          title: "数据指标",
-          path: "/monitor/factoryMonitor/photovoltaic/lightDataTarget",
-        },
-        {
-          icon: "svg-matrix",
-          title: "矩阵监视",
-          path: "/monitor/factoryMonitor/photovoltaic/lightMatrixMonitor",
-        },
-        {
-          icon: "svg-photovoltaic",
-          title: "光伏设备",
-          path: "/monitor/factoryMonitor/photovoltaic/photovoltaicFacility",
-        },
-        {
-          icon: "svg-s升压站",
-          title: "升压站",
-          path: "/monitor/factoryMonitor/photovoltaic/lightBoosterStation",
-        },
-        // {
-        //   icon: "icon-all",
-        //   title: "总貌图",
-        //   path: "/monitor/factoryMonitor/photovoltaic/lightGeneralPicture",
-        // },
-        {
-          icon: "svg-s地图",
-          title: "地貌图",
-          path: "/monitor/factoryMonitor/photovoltaic/lightGeomorphologicMap",
-        },
-      ],
     };
   },
   methods: {},
-  //   computed:{
-  //     routerData(){
-  //       const result=this.$store.state.user.MenuList.find(item=>{
-  //         return item.permission=='stateMonitor'
-  //       })
-  //       const result1= result.children.find(item1=>{
-  //         return item1.permission=='factoryMonitor'
-  //       })
-  //       const res=result1.children.find(item=>{
-  //         return item.permission=='photovoltaic'
-  //       })
-  //       return res.children;
-  //     }
-  //   }
+  computed: {
+    routerData() {
+      let currData = [];
+      let stateRoutes = this.$store.state.routes.routes;
+      stateRoutes.forEach((route) => {
+        if (route.path == "/stateMonitor") {
+          route.children.forEach((croute) => {
+            if (croute.path == "factoryMonitor") {
+              let a = croute.children.find(
+                (item) => item.path == "photovoltaic"
+              );
+              a.children.forEach((child) => {
+                currData.push({
+                  icon: child.meta.icon,
+                  title: child.meta.title,
+                  path: child.path,
+                });
+              });
+            }
+          });
+        }
+      });
+      return currData;
+    },
+  },
 };
 </script>
 

File diff suppressed because it is too large
+ 346 - 23270
src/views/stateMonitor/factoryMonitor/photovoltaic/lightBoosterStation/components/shanyinrongxin.vue


+ 19 - 19
src/views/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitor/index.vue

@@ -485,10 +485,10 @@ export default {
         { text: "光照强度(W/m²)", code: "speed" },
         { text: "预测功率(MW)", code: "ycgl" },
         { text: "保证功率(MW)", code: "bzgl" },
-        { text: "理论功率(MW)", code: "llgl" },
+        // { text: "理论功率(MW)", code: "llgl" },
         { text: "实际功率(MW)", code: "sjgl" },
-        { text: "AGC指令", code: "agc" },
-        { text: "出线功率(MW)", code: "cxgl" },
+        // { text: "AGC指令", code: "agc" },
+        // { text: "出线功率(MW)", code: "cxgl" },
       ],
       //   期次右侧
       subTitleDatas: [
@@ -545,12 +545,12 @@ export default {
           key: "bzgl",
           ratio: 1000,
         },
-        {
-          text: "理论功率",
-          color: "#9CA5A8",
-          key: "llgl",
-          ratio: 1000,
-        },
+        // {
+        //   text: "理论功率",
+        //   color: "#9CA5A8",
+        //   key: "llgl",
+        //   ratio: 1000,
+        // },
         {
           text: "实际功率",
           color: "#9CA5A8",
@@ -569,11 +569,11 @@ export default {
           stse: "QCAMC",
           sts: "SSZBZGL",
         },
-        {
-          statiomName: "理论功率",
-          stse: "QCAMC",
-          sts: "SSZNHGLZS",
-        },
+        // {
+        //   statiomName: "理论功率",
+        //   stse: "QCAMC",
+        //   sts: "SSZNHGLZS",
+        // },
         {
           statiomName: "实际功率",
           stse: "QCAMC",
@@ -648,11 +648,11 @@ export default {
           stse: "CZMC",
           sts: "SSZBZGL",
         },
-        {
-          statiomName: "理论功率",
-          stse: "CZMC",
-          sts: "SSZNHGLZS",
-        },
+        // {
+        //   statiomName: "理论功率",
+        //   stse: "CZMC",
+        //   sts: "SSZNHGLZS",
+        // },
         {
           statiomName: "实际功率",
           stse: "CZMC",

File diff suppressed because it is too large
+ 361 - 19756
src/views/stateMonitor/factoryMonitor/windPowerPlant/boosterStation/components/NJL.vue


File diff suppressed because it is too large
+ 3 - 6
src/views/stateMonitor/factoryMonitor/windPowerPlant/boosterStation/components/PDL.vue


File diff suppressed because it is too large
+ 4 - 4
src/views/stateMonitor/factoryMonitor/windPowerPlant/boosterStation/components/XWT.vue


File diff suppressed because it is too large
+ 273 - 16246
src/views/stateMonitor/factoryMonitor/windPowerPlant/boosterStation/components/YF.vue


+ 25 - 56
src/views/stateMonitor/factoryMonitor/windPowerPlant/index.vue

@@ -14,66 +14,35 @@ export default {
   },
   data() {
     return {
-      routerData: [
-        {
-          icon: "svg-station-surveillance",
-          title: "场站监视",
-          path: "/monitor/factoryMonitor/windPowerPlant/windhome",
-        },
-        {
-          icon: "svg-s指标列表",
-          title: "数据指标",
-          path: "/monitor/factoryMonitor/windPowerPlant/DataTarget",
-        },
-        {
-          icon: "svg-matrix",
-          title: "矩阵监视",
-          path: "/monitor/factoryMonitor/windPowerPlant/matrixMonitor",
-        },
-        {
-          icon: "svg-wind-site",
-          title: "风机设备",
-          path: "/monitor/factoryMonitor/windPowerPlant/draughtFan",
-        },
-        {
-          icon: "svg-s升压站",
-          title: "升压站",
-          path: "/monitor/factoryMonitor/windPowerPlant/boosterStation",
-        },
-        {
-          icon: "svg-s测风塔",
-          title: "测风塔",
-          path: "/monitor/factoryMonitor/windPowerPlant/windPower",
-        },
-        // {
-        //   icon: "icon-all",
-        //   title: "总貌图",
-        //   path: "/monitor/factoryMonitor/windPowerPlant/generalPicture",
-        // },
-        {
-          icon: "svg-s地图",
-          title: "地貌图",
-          path: "/monitor/factoryMonitor/windPowerPlant/geomorphologicMap",
-        },
-      ],
     };
   },
   methods: {},
-  //   computed: {
-  //     routerData() {
-  //       const result = this.$store.state.user.MenuList.find((item) => {
-  //         return item.permission == "stateMonitor";
-  //       });
-  //       const result1 = result.children.find((item1) => {
-  //         return item1.permission == "factoryMonitor";
-  //       });
-  //       const res = result1.children.find((item) => {
-  //         return item.permission == "windPowerPlant";
-  //       });
+  computed: {
+    routerData() {
 
-  //       return res.children;
-  //     },
-  //   },
+      let currData = [];
+      let stateRoutes = this.$store.state.routes.routes;
+      stateRoutes.forEach((route) => {
+        if (route.path == "/stateMonitor") {
+          route.children.forEach((croute) => {
+            if (croute.path == "factoryMonitor") {
+              let a = croute.children.find(
+                (item) => item.path == "windPowerPlant"
+              );
+              a.children.forEach((child) => {
+                currData.push({
+                  icon: child.meta.icon,
+                  title: child.meta.title,
+                  path: child.path,
+                });
+              });
+            }
+          });
+        }
+      });
+      return currData;
+    },
+  },
 };
 </script>
 <style>

+ 20 - 20
src/views/stateMonitor/factoryMonitor/windPowerPlant/matrixMonitor/index.vue

@@ -481,12 +481,12 @@ export default {
       //   右侧标签
       unpaidList: [
         { text: "风速(m/s)", code: "speed" },
-        { text: "预测功率(MW)", code: "ycgl",},
+        { text: "预测功率(MW)", code: "ycgl" },
         { text: "保证功率(MW)", code: "bzgl", ratio: 1000 },
-        { text: "理论功率(MW)", code: "llgl", ratio: 1000 },
+        // { text: "理论功率(MW)", code: "llgl", ratio: 1000 },
         { text: "实际功率(MW)", code: "sjgl", ratio: 1000 },
-        { text: "AGC指令", code: "agc", ratio: 1000 },
-        { text: "出线功率(MW)", code: "cxgl", ratio: 1000 },
+        // { text: "AGC指令", code: "agc", ratio: 1000 },
+        // { text: "出线功率(MW)", code: "cxgl", ratio: 1000 },
       ],
       //   期次右侧
       subTitleDatas: [
@@ -543,12 +543,12 @@ export default {
           key: "bzgl",
           ratio: 1000,
         },
-        {
-          text: "理论功率",
-          color: "#9CA5A8",
-          key: "llgl",
-          ratio: 1000,
-        },
+        // {
+        //   text: "理论功率",
+        //   color: "#9CA5A8",
+        //   key: "llgl",
+        //   ratio: 1000,
+        // },
         {
           text: "实际功率",
           color: "#9CA5A8",
@@ -567,11 +567,11 @@ export default {
           stse: "QCAMC",
           sts: "SSZBZGL",
         },
-        {
-          statiomName: "理论功率",
-          stse: "QCAMC",
-          sts: "SSZNHGLZS",
-        },
+        // {
+        //   statiomName: "理论功率",
+        //   stse: "QCAMC",
+        //   sts: "SSZNHGLZS",
+        // },
         {
           statiomName: "实际功率",
           stse: "QCAMC",
@@ -646,11 +646,11 @@ export default {
           stse: "CZMC",
           sts: "SSZBZGL",
         },
-        {
-          statiomName: "理论功率",
-          stse: "CZMC",
-          sts: "SSZNHGLZS",
-        },
+        // {
+        //   statiomName: "理论功率",
+        //   stse: "CZMC",
+        //   sts: "SSZNHGLZS",
+        // },
         {
           statiomName: "实际功率",
           stse: "CZMC",

+ 11 - 0
src/views/stateMonitor/index.vue

@@ -0,0 +1,11 @@
+<template>
+  <router-view />
+</template>
+
+<script>
+export default {
+  name: "stateMonitor", //安全监视
+};
+</script>
+
+<style></style>