소스 검색

添加动态切换菜单缩略图

darker 3 년 전
부모
커밋
646a7a1f07
90개의 변경된 파일6244개의 추가작업 그리고 4328개의 파일을 삭제
  1. 90 89
      package.json
  2. BIN
      public/favicon.ico
  3. 7 1
      src/App.vue
  4. 11 0
      src/assets/icon/svg/menu/dbgl.svg
  5. 11 0
      src/assets/icon/svg/menu/dlyc.svg
  6. 11 0
      src/assets/icon/svg/menu/fjfx.svg
  7. 11 0
      src/assets/icon/svg/menu/jjyx.svg
  8. 11 0
      src/assets/icon/svg/menu/phb.svg
  9. 11 0
      src/assets/icon/svg/menu/qxfx.svg
  10. 11 0
      src/assets/icon/svg/menu/q健康.svg
  11. 13 0
      src/assets/icon/svg/menu/q实时监视.svg
  12. 12 0
      src/assets/icon/svg/menu/q曲线.svg
  13. 12 0
      src/assets/icon/svg/menu/q趋势.svg
  14. 11 0
      src/assets/icon/svg/menu/slgl.svg
  15. 11 0
      src/assets/icon/svg/menu/s升压站.svg
  16. 12 0
      src/assets/icon/svg/menu/s地图.svg
  17. 12 0
      src/assets/icon/svg/menu/s场站监视.svg
  18. 12 0
      src/assets/icon/svg/menu/s总貌.svg
  19. 16 0
      src/assets/icon/svg/menu/s指标列表.svg
  20. 11 0
      src/assets/icon/svg/menu/s测风塔.svg
  21. 13 0
      src/assets/icon/svg/menu/ztfx.svg
  22. 11 0
      src/assets/icon/svg/menu/专家知识.svg
  23. 11 0
      src/assets/icon/svg/menu/健康管理.svg
  24. 11 0
      src/assets/icon/svg/menu/全生命周期.svg
  25. 13 0
      src/assets/icon/svg/menu/原始数据查询.svg
  26. 12 0
      src/assets/icon/svg/menu/可靠性分析.svg
  27. 11 0
      src/assets/icon/svg/menu/安全管控.svg
  28. 12 0
      src/assets/icon/svg/menu/报表管理.svg
  29. 11 0
      src/assets/icon/svg/menu/报表首页.svg
  30. 12 0
      src/assets/icon/svg/menu/故障诊断.svg
  31. 11 0
      src/assets/icon/svg/menu/智慧检修.svg
  32. 11 0
      src/assets/icon/svg/menu/智能报表.svg
  33. 11 0
      src/assets/icon/svg/menu/沙盘.svg
  34. 11 0
      src/assets/icon/svg/menu/等级评估.svg
  35. 12 0
      src/assets/icon/svg/menu/统计分析.svg
  36. 12 0
      src/assets/icon/svg/menu/能效分析.svg
  37. 14 0
      src/assets/icon/svg/menu/自定制报表管理.svg
  38. 11 0
      src/assets/icon/svg/menu/预警记录.svg
  39. 14 0
      src/assets/icon/svg/menu/风光资源分析.svg
  40. 11 0
      src/assets/styles/el-override/el-table.less
  41. BIN
      src/assets/userhead.jpg
  42. 1 1
      src/components/coms/panel/panel-sand-toolbar.vue
  43. 1 1
      src/components/coms/panel/panel-sand.vue
  44. 18 2
      src/components/coms/table/group-table.vue
  45. 70 0
      src/components/coms/wt-chooser/wt-chooser.vue
  46. 795 784
      src/router/index.js
  47. 474 518
      src/views/Decision/Decision1.vue
  48. 47 24
      src/views/Decision/Decision1Mx.vue
  49. 8 1
      src/views/Decision/Decision3Db.vue
  50. 2 1
      src/views/Decision/Decision4.vue
  51. 21 105
      src/views/Decision/table.vue
  52. 66 16
      src/views/HealthControl/Health0.vue
  53. 859 852
      src/views/HealthControl/Health10.vue
  54. 4 4
      src/views/HealthControl/Health4.vue
  55. 29 27
      src/views/HealthControl/Health6.vue
  56. 0 8
      src/views/HealthControl/HealthMonth.vue
  57. 7 0
      src/views/HealthControl/HealthTab3.vue
  58. 28 5
      src/views/HealthControl/HealthTab4.vue
  59. 0 8
      src/views/HealthControl/HealthYear.vue
  60. 34 22
      src/views/HealthControl/fault-diagnosis.vue
  61. 79 72
      src/views/HealthControl/healthLineChart.vue
  62. 298 289
      src/views/HealthControl/healthLineChart2.vue
  63. 130 0
      src/views/HealthControl/healthTab4History.vue
  64. 25 171
      src/views/HealthControl/infotrack2.vue
  65. 0 2
      src/views/Home/Home.vue
  66. 77 42
      src/views/Home/components/power-review.vue
  67. 3 3
      src/views/LightMatrix1/LightMatrix1.vue
  68. 8 8
      src/views/LightMatrix3/LightMatrix3.vue
  69. 2 0
      src/views/NewPages/alarm-center-2.vue
  70. 17 6
      src/views/NewPages/forecast-system.vue
  71. 1 1
      src/views/NewPages/personnel.vue
  72. 410 369
      src/views/NewPages/power-benchmarking.vue
  73. 5 5
      src/views/NewPages/znzhfx.vue
  74. 552 0
      src/views/Others/index.vue
  75. 2 1
      src/views/SandTable/SandTable.vue
  76. 1 1
      src/views/SandTable/component/ThreeModel1.vue
  77. 1 1
      src/views/SandTable/component/p-panel.vue
  78. 203 203
      src/views/WindSite/WindSite.vue
  79. 11 11
      src/views/WindSite/pages/Home/Home.vue
  80. 9 3
      src/views/WindSite/pages/Home/light-matrix.vue
  81. 2 1
      src/views/WindSite/pages/Map.vue
  82. 6 2
      src/views/WindSite/pages/Matrix.vue
  83. 171 120
      src/views/WindSite/pages/Tower.vue
  84. 1 1
      src/views/WindSite/pages/Tower/WindTower.vue
  85. 20 12
      src/views/layout/Header.vue
  86. 607 531
      src/views/layout/Menu.vue
  87. 21 3
      src/views/singleAnalysis/index.vue
  88. 582 0
      src/views/windAnalysis/phdffx.vue
  89. 0 0
      tests/unit/test..js
  90. 5 1
      vue.config.js

+ 90 - 89
package.json

@@ -1,89 +1,90 @@
-{
-  "name": "electronic-map",
-  "version": "0.1.0",
-  "private": true,
-  "scripts": {
-    "serve": "vue-cli-service serve",
-    "build": "vue-cli-service build",
-    "test:unit": "vue-cli-service test:unit",
-    "lint": "vue-cli-service lint"
-  },
-  "dependencies": {
-    "@antv/x6": "^1.24.4",
-    "@arcgis/core": "^4.19.3",
-    "axios": "^0.21.1",
-    "core-js": "^3.6.5",
-    "echarts": "^5.1.1",
-    "echarts-gl": "^2.0.4",
-    "element-plus": "^1.0.2-beta.53",
-    "file-saver": "^2.0.5",
-    "font-awesome": "^4.7.0",
-    "html2canvas": "^1.0.0-rc.7",
-    "jquery": "^3.6.0",
-    "jspdf": "^2.3.1",
-    "stompjs": "^2.3.3",
-    "three": "^0.129.0",
-    "vivus": "^0.4.6",
-    "vue": "^3.0.0",
-    "vue-axios": "^3.2.4",
-    "vue-router": "^4.0.0-0",
-    "vuex": "^4.0.0-0",
-    "xlsx": "^0.17.0"
-  },
-  "devDependencies": {
-    "@vue/cli-plugin-babel": "~4.5.0",
-    "@vue/cli-plugin-eslint": "~4.5.0",
-    "@vue/cli-plugin-router": "~4.5.0",
-    "@vue/cli-plugin-unit-mocha": "~4.5.0",
-    "@vue/cli-plugin-vuex": "~4.5.0",
-    "@vue/cli-service": "~4.5.0",
-    "@vue/compiler-sfc": "^3.0.0",
-    "@vue/test-utils": "^2.0.0-0",
-    "babel-eslint": "^10.1.0",
-    "chai": "^4.1.2",
-    "eslint": "^6.7.2",
-    "eslint-plugin-vue": "^7.0.0",
-    "less": "^3.0.4",
-    "less-loader": "^5.0.0",
-    "sass": "^1.27.0",
-    "sass-loader": "^10.0.4",
-    "script-loader": "^0.7.2",
-    "style-resources-loader": "^1.4.1",
-    "svg-sprite-loader": "^6.0.7",
-    "svgo-loader": "^3.0.0"
-  },
-  "eslintConfig": {
-    "root": true,
-    "env": {
-      "node": true
-    },
-    "extends": [
-      "plugin:vue/vue3-essential",
-      "eslint:recommended"
-    ],
-    "parserOptions": {
-      "parser": "babel-eslint"
-    },
-    "rules": {
-      "no-debugger": "off",
-      "no-console": "off",
-      "no-unused-vars": "off"
-    },
-    "overrides": [
-      {
-        "files": [
-          "**/__tests__/*.{j,t}s?(x)",
-          "**/tests/unit/**/*.spec.{j,t}s?(x)"
-        ],
-        "env": {
-          "mocha": true
-        }
-      }
-    ]
-  },
-  "browserslist": [
-    "> 1%",
-    "last 2 versions",
-    "not dead"
-  ]
-}
+{
+  "name": "electronic-map",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "servebig": "node --max-old-space-size=6000  ./node_modules/@vue/cli-service/bin/vue-cli-service.js serve",
+    "build": "vue-cli-service build",
+    "test:unit": "vue-cli-service test:unit",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "@antv/x6": "^1.24.4",
+    "@arcgis/core": "^4.19.3",
+    "axios": "^0.21.1",
+    "core-js": "^3.6.5",
+    "echarts": "^5.1.1",
+    "echarts-gl": "^2.0.4",
+    "element-plus": "^1.0.2-beta.53",
+    "file-saver": "^2.0.5",
+    "font-awesome": "^4.7.0",
+    "html2canvas": "^1.0.0-rc.7",
+    "jquery": "^3.6.0",
+    "jspdf": "^2.3.1",
+    "stompjs": "^2.3.3",
+    "three": "^0.129.0",
+    "vivus": "^0.4.6",
+    "vue": "^3.0.0",
+    "vue-axios": "^3.2.4",
+    "vue-router": "^4.0.0-0",
+    "vuex": "^4.0.0-0",
+    "xlsx": "^0.17.0"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "~4.5.0",
+    "@vue/cli-plugin-eslint": "~4.5.0",
+    "@vue/cli-plugin-router": "~4.5.0",
+    "@vue/cli-plugin-unit-mocha": "~4.5.0",
+    "@vue/cli-plugin-vuex": "~4.5.0",
+    "@vue/cli-service": "~4.5.0",
+    "@vue/compiler-sfc": "^3.0.0",
+    "@vue/test-utils": "^2.0.0-0",
+    "babel-eslint": "^10.1.0",
+    "chai": "^4.1.2",
+    "eslint": "^6.7.2",
+    "eslint-plugin-vue": "^7.0.0",
+    "less": "^3.0.4",
+    "less-loader": "^5.0.0",
+    "sass": "^1.27.0",
+    "sass-loader": "^10.0.4",
+    "script-loader": "^0.7.2",
+    "style-resources-loader": "^1.4.1",
+    "svg-sprite-loader": "^6.0.7",
+    "svgo-loader": "^3.0.0"
+  },
+  "eslintConfig": {
+    "root": true,
+    "env": {
+      "node": true
+    },
+    "extends": [
+      "plugin:vue/vue3-essential",
+      "eslint:recommended"
+    ],
+    "parserOptions": {
+      "parser": "babel-eslint"
+    },
+    "rules": {
+      "no-debugger": "off",
+      "no-console": "off",
+      "no-unused-vars": "off"
+    },
+    "overrides": [
+      {
+        "files": [
+          "**/__tests__/*.{j,t}s?(x)",
+          "**/tests/unit/**/*.spec.{j,t}s?(x)"
+        ],
+        "env": {
+          "mocha": true
+        }
+      }
+    ]
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not dead"
+  ]
+}

BIN
public/favicon.ico


+ 7 - 1
src/App.vue

@@ -201,6 +201,7 @@ export default {
       // 当前子系统
       root: "",
       isLogined: true,
+      memuCloseTimeout: null,
     };
   },
 
@@ -242,9 +243,14 @@ export default {
     },
     showMenu() {
       this.isShowMenu = true;
+      this.memuCloseTimeout && clearTimeout(this.memuCloseTimeout);
     },
     hideMenu() {
-      this.isShowMenu = false;
+      const that = this;
+      this.memuCloseTimeout = setTimeout(function(){
+        that.isShowMenu = false;
+      }, 500 )
+      
     },
     login(params) {
       if (params.username && params.password) this.isLogined = true;

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/dbgl.svg


+ 11 - 0
src/assets/icon/svg/menu/dlyc.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="150px" height="150px" viewBox="0 0 150 150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 55.2 (78181) - https://sketchapp.com -->
+    <title>电量 (1)-01-01</title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="电量-(1)-01-01" fill="#2C2C2C" fill-rule="nonzero">
+            <path d="M75,0 C33.6,0 0,33.6 0,75 C0,116.4 33.6,150 75,150 C116.4,150 150,116.4 150,75 C150,33.6 116.4,0 75,0 Z M71.9,119 L78.4,85.8 L41.7,85.8 L78.3,31 L71.8,66.9 L108.3,66.9 L71.9,119 Z" id="形状"></path>
+        </g>
+    </g>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/fjfx.svg


+ 11 - 0
src/assets/icon/svg/menu/jjyx.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="151px" height="136px" viewBox="0 0 151 136" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 55.2 (78181) - https://sketchapp.com -->
+    <title>经济运行</title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="经济运行" fill="#2C2C2C" fill-rule="nonzero">
+            <path d="M142,0 C147,0 151,4.1 151,9 L151,9 L151,126.8 C151,131.8 146.9,135.8 142,135.8 L9,135.8 C4,135.8 0,131.7 0,126.8 L0,86.6 L35.3,56.9 L75.1,66 L102.5,44.2 L112.5,55 L128.1,10.2 L82.4,22.6 L92.2,33.2 L71.4,49.7 L31.3,40.5 L0,66.9 L0,9 C0,4 4.1,0 9,0 L9,0 L142,0 L142,0 Z M45.3,83 L30.3,83 L30.3,113.3 L45.4,113.3 L45.4,83 L45.3,83 Z M83,83 L68,83 L68,113.3 L83,113.3 L83,83 Z M120.8,68 L105.7,68 L105.7,113.3 L120.8,113.3 L120.8,68 Z" id="形状"></path>
+        </g>
+    </g>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/phb.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/qxfx.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/q健康.svg


+ 13 - 0
src/assets/icon/svg/menu/q实时监视.svg

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="175px" height="176px" viewBox="0 0 175 176" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 55.2 (78181) - https://sketchapp.com -->
+    <title>实时监视</title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="实时监视" transform="translate(0.085938, 0.500000)" fill="#000000" fill-rule="nonzero">
+            <path d="M140.039062,0 L174.414062,59.55 L63.2390625,123.75 L28.8640625,64.2 L140.026563,0 L140.039062,0 Z M135.126563,18.3125 L47.1640625,69.0875 L68.1390625,105.4125 L156.101562,54.6375 L135.126563,18.3125 Z" id="形状"></path>
+            <path d="M0.0515625,80.8125 L48.9015625,73.0625 L66.0140625,102.6875 L34.4390625,140.375 L0.0640625,80.8125 L0.0515625,80.8125 Z M21.4015625,90.9875 L36.4640625,117.075 L49.7015625,101.275 L41.8890625,87.7375 L21.3890625,90.9875 L21.4015625,90.9875 Z M112.514062,88.6375 L112.514062,174.825 L100.014062,174.825 L100.014062,88.625 L112.514062,88.6375 Z" id="形状"></path>
+            <polygon id="路径" points="153.201562 162.325 153.201562 174.825 106.264062 174.825 106.264062 162.325"></polygon>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icon/svg/menu/q曲线.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="205px" height="200px" viewBox="0 0 205 200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 55.2 (78181) - https://sketchapp.com -->
+    <title>曲线</title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="曲线" fill="#2C2C2C" fill-rule="nonzero">
+            <path d="M196,191.3 L9,191.3 L196,191.3 Z M77,131.8 L83.6,126.1 L182,40.5 L77,131.8 L77,131.8 Z" id="形状"></path>
+            <polyline id="路径" points="0.4 121.7 0.4 0 17.8 0 17.8 107.7 37.6 91.7 47.5 83.4 77.9 119.6 182.9 28.4 194.3 41.5 76.1 144.1 67.7 134.4 67.7 134.4 66.7 133.2 64.7 130.9 64.7 130.9 45.3 107.7 17.8 130 17.8 182.6 204.8 182.6 204.8 200 0.4 200 0.4 126.6"></polyline>
+        </g>
+    </g>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 12 - 0
src/assets/icon/svg/menu/q趋势.svg


+ 11 - 0
src/assets/icon/svg/menu/slgl.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="166px" height="172px" viewBox="0 0 166 172" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 55.2 (78181) - https://sketchapp.com -->
+    <title>三率</title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="三率" fill="#2C2C2C" fill-rule="nonzero">
+            <path d="M107.4,122.9 C93.9,122.9 82.9,133.9 82.9,147.4 C82.9,160.9 93.9,171.9 107.4,171.9 C120.9,171.9 131.9,160.9 131.9,147.4 C131.9,133.8 120.9,122.9 107.4,122.9 Z M35.3,84.2 C15.8,84.2 0,100 0,119.4 C0,138.9 15.8,154.7 35.3,154.7 C54.8,154.7 70.6,138.9 70.6,119.4 C70.6,100 54.8,84.2 35.3,84.2 Z M119.8,0 C94.4,0 73.9,20.6 73.9,45.9 C73.9,71.3 94.5,91.8 119.8,91.8 C145.2,91.8 165.700363,71.2 165.700363,45.9 C165.8,20.6 145.2,0 119.8,0 Z" id="形状"></path>
+        </g>
+    </g>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/s升压站.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 12 - 0
src/assets/icon/svg/menu/s地图.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 12 - 0
src/assets/icon/svg/menu/s场站监视.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 12 - 0
src/assets/icon/svg/menu/s总貌.svg


+ 16 - 0
src/assets/icon/svg/menu/s指标列表.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="176px" height="157px" viewBox="0 0 176 157" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 55.2 (78181) - https://sketchapp.com -->
+    <title>指标列表</title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="指标列表" transform="translate(-0.148438, 0.210938)" fill="#2C2C2C" fill-rule="nonzero">
+            <path d="M0.5,68.8 L69.3,68.8 L69.3,0 L0.5,0 L0.5,68.8 Z M13,12.5 L56.8,12.5 L56.8,56.3 L13,56.3 L13,12.5 Z" id="形状"></path>
+            <path d="M0.5,156.2 L69.3,156.2 L69.3,87.4 L0.5,87.4 L0.5,156.2 Z M13,100 L56.8,100 L56.8,143.8 L13,143.8 L13,100 Z" id="形状"></path>
+            <rect id="矩形" x="84.7" y="6.2" width="90.8" height="12.5"></rect>
+            <rect id="矩形" x="84.7" y="50" width="90.8" height="12.5"></rect>
+            <rect id="矩形" x="84.7" y="93.8" width="90.8" height="12.5"></rect>
+            <rect id="矩形" x="84.7" y="137.5" width="90.8" height="12.5"></rect>
+        </g>
+    </g>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/s测风塔.svg


+ 13 - 0
src/assets/icon/svg/menu/ztfx.svg

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="180px" height="180px" viewBox="0 0 180 180" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 55.2 (78181) - https://sketchapp.com -->
+    <title>专题 </title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="专题-" transform="translate(0.109375, -0.085938)" fill="#000000" fill-rule="nonzero">
+            <path d="M71.2239584,86.4192709 L7.5572916,54.4192709 C-2.4427084,49.4192709 -2.4427084,41.4192709 7.5572916,36.4192709 L71.2239584,4.08593745 C82.890625,-1.2473959 96.2239584,-1.2473959 107.890625,4.08593745 L171.890625,36.4192709 C181.890625,41.4192709 181.890625,49.4192709 171.890625,54.4192709 L107.890625,86.4192709 C96.2239584,91.4192709 82.890625,91.4192709 71.2239584,86.4192709 Z" id="路径"></path>
+            <path d="M171.890625,81.0859375 L153.223958,71.0859375 L107.890625,93.7526041 C96.2239584,99.0859375 82.890625,99.0859375 71.2239584,93.7526041 L26.5572916,71.4192709 L7.890625,81.4192709 C-2.109375,86.4192709 -2.109375,94.4192709 7.890625,99.4192709 L71.2239584,131.419271 C82.890625,136.752604 96.2239584,136.752604 107.890625,131.419271 L171.890625,99.0859375 C181.223958,94.0859375 181.223958,86.0859375 171.890625,81.0859375 Z" id="路径"></path>
+            <path d="M171.890625,126.085938 L153.223958,116.085938 L107.890625,138.419271 C96.2239584,143.752604 82.890625,143.752604 71.2239584,138.419271 L26.5572916,116.085938 L7.890625,126.085938 C-2.109375,131.085938 -2.109375,139.085938 7.890625,144.085938 L71.2239584,176.085938 C82.890625,181.419271 96.2239584,181.419271 107.890625,176.085938 L171.890625,143.752604 C181.223958,139.085938 181.223958,130.752604 171.890625,126.085938 L171.890625,126.085938 Z" id="路径"></path>
+        </g>
+    </g>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/专家知识.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/健康管理.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/全生命周期.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 13 - 0
src/assets/icon/svg/menu/原始数据查询.svg


+ 12 - 0
src/assets/icon/svg/menu/可靠性分析.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="126px" height="110px" viewBox="0 0 126 110" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 55.2 (78181) - https://sketchapp.com -->
+    <title>可靠性分析</title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.85">
+        <g id="可靠性分析" transform="translate(0.000000, -1.000000)" fill="#2347FA" fill-rule="nonzero">
+            <path d="M124.9,105.3 L65.7,2.7 C64.4,0.4 61.1,0.4 59.8,2.7 L0.5,105.3 C-0.8,107.6 0.8,110.4 3.5,110.4 L122,110.4 C124.6,110.4 126.2,107.6 124.9,105.3 Z M83.1,68.9 C83.1,80.1 74.2,89.1 63,89.3 C51.5,89.5 42.2,79.9 42.2,68.3 L42.2,68.1 C42.2,60.4 46.6,53.4 53.6,50.4 C68.7,43.8 83.1,54.7 83.1,68.9 C83.1,68.9 83.1,68.9 83.1,68.9 Z" id="形状"></path>
+            <polygon id="路径" points="59.6 71.9 54.5 66.8 52 69.4 59.6 77 73.4 63.3 70.8 60.7"></polygon>
+        </g>
+    </g>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/安全管控.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 12 - 0
src/assets/icon/svg/menu/报表管理.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/报表首页.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 12 - 0
src/assets/icon/svg/menu/故障诊断.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/智慧检修.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/智能报表.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/沙盘.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/等级评估.svg


+ 12 - 0
src/assets/icon/svg/menu/统计分析.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="160px" height="160px" viewBox="0 0 160 160" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 55.2 (78181) - https://sketchapp.com -->
+    <title>统计分析</title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="统计分析" transform="translate(0.000000, -0.156250)" fill="#2C2C2C" fill-rule="nonzero">
+            <path d="M75,10.15625 L75,87.74125 L149.955,87.74125 C148.59,127.97125 115.555,160.15625 75,160.15625 C33.58,160.15625 0,126.57625 0,85.15625 C0,43.73625 33.58,10.15625 75,10.15625 Z" id="路径"></path>
+            <path d="M85,0.15625 C126.42,0.15625 160,33.73625 160,75.15625 C160,76.02125 159.985,76.88625 159.955,77.74625 L85,77.74625 L85,0.15625 Z" id="路径"></path>
+        </g>
+    </g>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 12 - 0
src/assets/icon/svg/menu/能效分析.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 14 - 0
src/assets/icon/svg/menu/自定制报表管理.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 11 - 0
src/assets/icon/svg/menu/预警记录.svg


+ 14 - 0
src/assets/icon/svg/menu/风光资源分析.svg

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="130px" height="134px" viewBox="0 0 130 134" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 55.2 (78181) - https://sketchapp.com -->
+    <title>风光资源分析</title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="风光资源分析" fill="#B9B9B9" fill-rule="nonzero">
+            <path d="M125.4,76.4 L4.6,76.4 C2,76.4 0,79 0,82.1 C0,85.3 2.1,87.8 4.6,87.8 L125.4,87.8 C128,87.8 130,85.2 130,82.1 C130.1,78.9 128,76.4 125.4,76.4 Z" id="路径"></path>
+            <path d="M117.3,99.1 L12.7,99.1 C10.1,99.1 8.1,101.7 8.1,104.8 C8.1,108 10.2,110.5 12.7,110.5 L117.3,110.5 C119.9,110.5 121.9,107.9 121.9,104.8 C122,101.7 119.9,99.1 117.3,99.1 Z" id="路径"></path>
+            <path d="M99.2,121.9 L30.8,121.9 C28.2,121.9 26.2,124.5 26.2,127.6 C26.2,130.8 28.3,133.3 30.8,133.3 L99.2,133.3 C101.8,133.3 103.8,130.7 103.8,127.6 C103.9,124.4 101.8,121.9 99.2,121.9 Z" id="路径"></path>
+            <path d="M65,0 C29.1,0 0,29.1 0,65 L130,65 C130,29.1 100.9,0 65,0 Z" id="路径"></path>
+        </g>
+    </g>
+</svg>

+ 11 - 0
src/assets/styles/el-override/el-table.less

@@ -26,6 +26,11 @@
       line-height: 27px;
       font-size: 12px;
       color: @gray-l;
+
+      &.light,
+      &.always-light {
+        color: @green !important;
+      }
     }
 
     th {
@@ -36,10 +41,16 @@
       font-weight: normal;
       text-align: center;
       color: @gray-l;
+      cursor: pointer;
 
       &.is-leaf {
         border: 0px;
       }
+
+      &.light,
+      &.always-light {
+        color: @green !important;
+      }
     }
 
     th,

BIN
src/assets/userhead.jpg


+ 1 - 1
src/components/coms/panel/panel-sand-toolbar.vue

@@ -24,7 +24,7 @@ export default {
 </script>
 <style lang="less">
 .com-panel-sand {
-    background: #53626826;
+    background: #1a1f2fCC;
     padding: 0 1.481vh 1.481vh 1.481vh;
     border-top: 1px solid #15a952;
     position: relative;

+ 1 - 1
src/components/coms/panel/panel-sand.vue

@@ -29,7 +29,7 @@ export default {
 </script>
 <style lang="less">
 .com-panel-sand {
-    background: #53626826;
+    background: #1a1f2fCC;
     padding: 0 1.481vh 1.481vh 1.481vh;
     border-top: 1px solid #15a952;
     position: relative;

+ 18 - 2
src/components/coms/table/group-table.vue

@@ -1,10 +1,12 @@
 <template>
   <el-table class="custom-table" :class="customClass" stripe :data="data.data" :height="height" style="width: 100%" @cell-click="onClick" @header-click="onHeaderClick">
-    <template v-for="col in data.column" :key="col">
+    <template v-for="(col, cIndex) in data.column" :key="col">
       <el-table-column v-if="col.child && col.child.length > 0" :label="col.name" :key="col">
         <el-table-column
-          v-for="sub in col.child"
+          v-for="(sub, sindex) in col.child"
           :key="sub"
+          :index="cIndex"
+          :class-name="getClassName(cIndex, sindex)"
           :label="sub.name"
           :prop="sub.field"
           :width="sub.width"
@@ -89,6 +91,10 @@ export default {
         };
       },
     },
+    isColumnLight: {
+      type: Boolean,
+      default: true,
+    },
   },
   emits: {
     onPagging: null,
@@ -98,6 +104,8 @@ export default {
   data() {
     return {
       currentPage: 1,
+      headerIndex: -1,
+      subIndex: -1,
     };
   },
   computed: {
@@ -142,6 +150,10 @@ export default {
       if (column.rawColumnKey.click) column.rawColumnKey.click(event, row);
     },
     onHeaderClick(column, event) {
+      if (column.level == 2) {
+        this.headerIndex = column.index;
+        this.subIndex = column.no;
+      }
       this.$emit("headerClick", { event: event, col: column.rawColumnKey, data: this.data.data });
     },
     handleCurrentChange(val) {
@@ -153,6 +165,10 @@ export default {
         end: this.endRow,
       });
     },
+    getClassName(cindex, sindex) {
+      if (this.isColumnLight == true && cindex == this.headerIndex && sindex == this.subIndex) return "light";
+      return "";
+    },
   },
   // 生命周期钩子
   beforeCreate() {

+ 70 - 0
src/components/coms/wt-chooser/wt-chooser.vue

@@ -0,0 +1,70 @@
+<template>
+  <div class="query mg-b-8">
+    <div class="query-items">
+      <div class="query-item">
+        <div class="lable">风场:</div>
+        <div class="search-input">
+          <el-select v-model="wpId" clearable placeholder="请选择风场" popper-class="select" @change="getWtList">
+            <el-option v-for="item in wpList" :key="item.id" :label="item.name" :value="item.id">
+            </el-option>
+          </el-select>
+        </div>
+      </div>
+      <div class="query-item">
+        <div class="lable">风机:</div>
+        <div class="search-input">
+          <el-select v-model="wtId" clearable placeholder="请选择风机" popper-class="select" @change="wtChange">
+            <el-option v-for="item in wtList" :key="item.id" :label="item.name" :value="item.id">
+            </el-option>
+          </el-select>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  // 传参
+  props: {
+    wpId: { type: String, default: "MHS_FDC" },
+    wtId: { type: String, default: "MG01_01" },
+  },
+  // 事件
+  emits: {
+  },
+  data() {
+    return {
+      wpList: [],
+      wtList: [],
+    };
+  },
+  created() {
+    this.getWpList();
+    this.getWtList();
+  },
+  methods: {
+    async getWpList() {
+      const { data } = await this.API.requestData({
+        subUrl: "powercompare/windfarmAjax",
+      });
+      this.wpList = data.data;
+    },
+    async getWtList() {
+      const { data } = await this.API.requestData({
+        subUrl: "powercompare/windturbineAjax",
+        data: {
+          wpId: this.wpId,
+        },
+      });
+      this.wtList = data.data;
+    },
+    wtChange() {
+      this.$emit("change", { wtId: this.wtId, wpId: this.wpId });
+    },
+  },
+};
+</script>
+
+<style lang="less">
+</style>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 795 - 784
src/router/index.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 474 - 518
src/views/Decision/Decision1.vue


+ 47 - 24
src/views/Decision/Decision1Mx.vue

@@ -69,7 +69,7 @@
 				<el-row :type="'flex'" class="content">
 					<el-col :span="10" class="pd-r-8">
 						<toolbar-panel title="风机绩效榜明细" :showLine="false">
-							<bar-line-chart :height="'calc(100vh - 200px)'" :bardata="bardata" :lineData="lineData"
+							<bar-line-chart :height="'calc(100vh - 250px)'" :bardata="bardata" :lineData="lineData"
 								:color="barColor" lineName="理论发电量" />
 						</toolbar-panel>
 					</el-col>
@@ -82,7 +82,7 @@
 											<td>
 												{{tableDataEnd.index}}
 											</td>
-											<td>
+											<td style="width:150px">
 												{{tableDataEnd.name}}
 											</td>
 											<td>
@@ -173,6 +173,7 @@
 						{
 							name: "名称",
 							field: "name",
+							width: '150px',
 							is_num: false,
 							is_light: false,
 						},
@@ -302,7 +303,8 @@
 				value5: "",
 				barColor: [partten.getColor("purple"), partten.getColor("green"), partten.getColor("pink"), partten
 					.getColor("red"), partten.getColor("orange"), partten.getColor("grayl"), partten.getColor(
-					"yellow"), partten.getColor("gray"), partten.getColor("blue"), partten.getColor("cyan"), partten
+						"yellow"), partten.getColor("gray"), partten.getColor("blue"), partten.getColor("cyan"),
+					partten
 					.getColor("brown"), partten.getColor("mauve")
 				],
 				TypeClass: 1, //风场,项目,集电线路 的按钮颜色,默认第一个
@@ -493,33 +495,54 @@
 			mxClick() {
 				this.$router.push("/decision/decision1")
 			},
-			formatJson (filterVal, jsonData) {
-			  return jsonData.map(v => filterVal.map(j => v[j]));
+			formatJson(filterVal, jsonData) {
+				return jsonData.map(v => filterVal.map(j => v[j]));
 			},
-			exportExcel () {
-			  let that = this;
-			  const { export_json_to_excel } = require('@tools/excel/Export2Excel.js'); // 注意这个Export2Excel路径      
-			  let tHeader = []; // 上面设置Excel的表格第一行的标题       
-			  let filterVal = []; // 上面的index、nickName、name是tableData里对象的属性key值
-			
-			  that.tableData.column.forEach(ele => {
-			      tHeader.push(ele.name);
-			      filterVal.push(ele.field);
-			  });
-			
-			  var list = [];
-			  that.tableData.data.forEach((i,index) =>{
-				  list.push(i);
-			  })
-			  list.push(that.tableDataEnd)
-			  const data = that.formatJson(filterVal, list);
-			  export_json_to_excel(tHeader, data, '导出的Excel'); // 最后一个是表名字
+			exportExcel() {
+				let that = this;
+				const {
+					export_json_to_excel
+				} = require('@tools/excel/Export2Excel.js'); // 注意这个Export2Excel路径      
+				let tHeader = []; // 上面设置Excel的表格第一行的标题       
+				let filterVal = []; // 上面的index、nickName、name是tableData里对象的属性key值
+
+				that.tableData.column.forEach(ele => {
+					tHeader.push(ele.name);
+					filterVal.push(ele.field);
+				});
+
+				var list = [];
+				that.tableData.data.forEach((i, index) => {
+					list.push(i);
+				})
+				list.push(that.tableDataEnd)
+				const data = that.formatJson(filterVal, list);
+				export_json_to_excel(tHeader, data, '导出的Excel'); // 最后一个是表名字
 			},
 		}
 	};
 </script>
 
 <style lang="less">
+	.contentMx::-webkit-scrollbar {
+		width: 200px;
+		height: 20px;
+	}
+
+	.contentMx::-webkit-scrollbar-track-piece {
+		background-color: rgba(255, 255, 255, 0.05);
+		-webkit-border-radius: 4px;
+	}
+
+	.contentMx::-webkit-scrollbar-thumb {
+		background-color: fade(@gray, 75);
+		-webkit-border-radius: 4px;
+		outline: none;
+		outline-offset: 0px;
+		border: none;
+	}
+
+
 	.decision-page-1 {
 		.com-panel .panel-title {
 			line-height: 3.4259vh;
@@ -557,7 +580,7 @@
 			overflow: auto;
 
 			tbody {
-				height: calc(100vh - 24.5vh);
+				height: calc(100vh - 31.5vh);
 			}
 
 			td {

+ 8 - 1
src/views/Decision/Decision3Db.vue

@@ -153,7 +153,7 @@
 				value2: [],
 				value4: "",
 				fzyData: [],
-				list: [],
+				list: [{value: [{text: "",value: 0,}]}],
 				listName: [],
 				TypeClass:0,
 				ajaxArr:['daydjhxdbtop','monthdjhxdbtop','yeardjhxdbtop'],
@@ -241,6 +241,13 @@
 						let thisItem = [];
 						jfpl = data.pop(); //静风频率
 						fzy = data.pop(); //风资源
+						if(fzy['1'] == null){
+							that.BASE.showMsg({
+								msg:'此风机无数据',
+								type:'success'
+							});
+							return false;
+						}
 						data.forEach((ele, index) => {
 							for (let key in ele) {
 								if (key !== "name") {

+ 2 - 1
src/views/Decision/Decision4.vue

@@ -59,6 +59,7 @@
 						},
 						{
 							name: "值际",
+							width:"200px",
 							field: "dutyname",
 							is_num: false,
 							is_light: false,
@@ -97,7 +98,7 @@
 							name: "限电损失",
 							field: "rationingloss",
 							is_num: false,
-							is_light: true,
+							is_light: false,
 						},
 						{
 							name: "受累损失",

+ 21 - 105
src/views/Decision/table.vue

@@ -2,7 +2,7 @@
   <table class="com-table">
     <thead>
       <tr>
-        <th v-for="(col, index) of data.column" :key="index" :class="{ light: col.is_light }" :style="{ width: col.width , display : col.display }" @click="onSort(col)">
+        <th v-for="(col, index) of data.column" :key="index" :class="{ light: col.is_light }" :style="{ width: col.width }" @click="onSort(col)">
           {{ col.name }}
         </th>
       </tr>
@@ -13,18 +13,18 @@
           <td
             v-for="(col, i) of data.column"
             :key="i"
-            :style="{ width: col.width , display : col.display}"
+            :style="{ width: col.width ,cursor:col.cursor}"
             :class="{ light: hoverRow == row || hoverCol == col, num: col.is_num, 'always-light': col.is_light || row.is_light }"
             @mouseenter="hover(row, col)"
             @mouseleave="leave()"
           >
-            <component :is="col.type ? col.type : 'div'" v-bind="col.props" v-html="template(col, row[col.field])" @click="onClick(col, row)"> </component>
+            <component :is="col.type ? col.type : 'span'" v-bind="col.props" v-html="template(col, row[col.field])" @click="onClick(col, row)"> </component>
           </td>
         </tr>
 		<slot name="tr"></slot>
       </tbody>
     </el-scrollbar>
-    <el-pagination class="mg-t-8" v-if="pageable" @current-change="handleCurrentChange" :current-page="currentPage4" :page-size="pageSize" layout="total, prev, pager, next, jumper" :total="data.total"> </el-pagination>
+    <el-pagination class="mg-t-8" v-if="pageable" @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize" :total="data.total" v-bind="elPaggingProps"> </el-pagination>
   </table>
 </template>
 
@@ -71,6 +71,11 @@ export default {
       type: Boolean,
       default: true,
     },
+    // 列高亮
+    showColHover: {
+      type: Boolean,
+      default: false,
+    },
     canScroll: {
       type: Boolean,
       default: true,
@@ -83,6 +88,16 @@ export default {
       type: String,
       default: "",
     },
+    // 新增 支持 pagging 组件
+    elPaggingProps: {
+      type: Object,
+      default: () => {
+        return {
+          layout: "total, sizes, prev, pager, next, jumper",
+          // "page-sizes": [100, 200, 300, 400],
+        };
+      },
+    },
   },
   // 自定义事件
   emits: {
@@ -173,7 +188,7 @@ export default {
     hover(row, col) {
       if (this.showHover) {
         this.hoverRow = row;
-        this.hoverCol = col;
+        if (this.showColHover) this.hoverCol = col;
       }
     },
     leave() {
@@ -209,104 +224,5 @@ export default {
 </script>
 
 <style lang="less">
-@titleGray: #9ca5a8;
-@rowGray: #606769;
-@darkBack: #536268;
-.com-table {
-  width: 100%;
-  border-collapse: collapse;
-
-  thead {
-    tr {
-      display: table;
-      table-layout: fixed;
-      width: 100%;
-
-      th {
-        background-color: fade(@darkBack, 20%);
-        height: 30px;
-        line-height: 30px;
-        color: @titleGray;
-        font-weight: 400;
-        font-size: @fontsize-s;
-        position: sticky;
-        top: 0;
-        cursor: pointer;
-
-        &.light,
-        &.always-light {
-          color: @green;
-        }
-      }
-    }
-  }
-
-  tbody {
-    display: block;
-
-    tr {
-      display: table;
-      table-layout: fixed;
-      width: 100%;
-
-      &:nth-child(2n) {
-        background-color: fade(@rowGray, 20%);
-      }
-
-      td {
-        padding: 0.556vh 0;
-        color: @rowGray;
-        text-align: center;
-        font-size: @fontsize-s;
-        overflow: hidden; //隐藏文字
-        text-overflow: ellipsis; //显示 ...
-        white-space: nowrap; //不换行
-
-        &.light,
-        &.always-light {
-          color: @green !important;
-        }
-
-        &.num {
-          font-family: "Bicubik";
-          font-weight: 400;
-        }
-      }
-    }
-  }
-
-  .el-pagination {
-    color: @gray;
-    .el-pagination__total {
-      color: @gray;
-    }
-
-    button {
-      &.btn-next,
-      &.btn-prev {
-        background: center center no-repeat fade(@gray, 20);
-        color: @gray-l;
-      }
-      &:disabled {
-        color: @gray-l;
-        background-color: fade(@gray, 20);
-        cursor: not-allowed;
-      }
-    }
-
-    .el-pager li {
-      color: @gray-l;
-      background: fade(@gray, 20);
-      &.active {
-        color: @green;
-      }
-    }
-
-    .el-input__inner {
-      color: @gray-l;
-      background: fade(@gray, 20);
-      border: 1px solid fade(@gray, 20);
-    }
-  }
-}
 </style>
+

+ 66 - 16
src/views/HealthControl/Health0.vue

@@ -760,27 +760,77 @@ export default {
      this.searchWtHealthInfo()
     },
     async searchWtHealthInfo() {
-      const { data } = await this.API.requestData({
-        subUrl: "/healthsub//findWtHealthInfo",
-        showLoading: true,
+    //   const { data } = await this.API.requestData({
+    //     subUrl: "/healthsub//findWtHealthInfo",
+    //     showLoading: true,
+    //     method:'POST',
+    //     timeout: 30000, // 请求超时时间,默认 3s ,可缺省
+    //     data:{
+    //          wtId : this.value2
+    //     }
+    //   });
+    //  console.warn(data);
+    //  this.gztableData.data = data.data.gzls
+    //  this.yjtableData.data = data.data.yjls
+    //  this.yxtableData.data = data.data.bjyxls
+    //  this.tableData2.data =  data.data.djpgls
+    //  this.tableData11.data = data.data.wdls
+    //  this.tableData3.data = data.data.qxpcls
+    //  this.tableData4.data = data.data.jkls
+    //  this.partmap = data.data.partmap
+    //  this.stoptypemap = data.data.stoptypemap
+      this.search1();
+      this.search2();
+      this.search3();
+    },
+    search1(){
+      const that = this;
+      this.API.requestData({
+        subUrl: "healthsub/findWtHealthInfo1",
         method:'POST',
-        timeout: 30000, // 请求超时时间,默认 3s ,可缺省
+        timeout: 30000, 
         data:{
              wtId : this.value2
-        }
+        },
+        success(res) {
+          that.yjtableData.data = res.data.yjls;
+          that.partmap = res.data.partmap;
+          that.stoptypemap = res.data.stoptypemap;
+          that.gztableData.data = res.data.gzls;
+        },
+      });
+    },
+    search2(){
+      const that = this;
+      this.API.requestData({
+        subUrl: "healthsub/findWtHealthInfo2",
+        method:'POST',
+        timeout: 30000, 
+        data:{
+             wtId : this.value2
+        },
+        success(res) {
+          that.yxtableData.data = res.data.bjyxls;
+          that.tableData2.data =  res.data.djpgls;
+        },
+      });
+    },
+    search3(){
+      const that = this;
+      this.API.requestData({
+        subUrl: "healthsub/findWtHealthInfo3",
+        method:'POST',
+        timeout: 30000, 
+        data:{
+             wtId : this.value2
+        },
+        success(res) {
+          that.tableData3.data = res.data.qxpcls;
+          that.tableData11.data = res.data.wdls;
+          that.tableData4.data = res.data.jkls;
+        },
       });
-     console.warn(data);
-     this.gztableData.data = data.data.gzls
-     this.yjtableData.data = data.data.yjls
-     this.yxtableData.data = data.data.bjyxls
-     this.tableData2.data =  data.data.djpgls
-     this.tableData11.data = data.data.wdls
-     this.tableData3.data = data.data.qxpcls
-     this.tableData4.data = data.data.jkls
-     this.partmap = data.data.partmap
-     this.stoptypemap = data.data.stoptypemap
     },
-
     selectSvg: function (index) {
       this.activeIndex = index;
     },

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 859 - 852
src/views/HealthControl/Health10.vue


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

@@ -34,16 +34,16 @@ export default {
       wpId:"",
       wtId:"",
       menuDatas: [{
-        icon: "svg-agc",
+        icon: "svg-q实时监视",
         path: "/health/health0",
       },{
-        icon: "svg-agc",
+        icon: "svg-q健康",
         path: "/health/health10",
       },{
-        icon: "svg-agc",
+        icon: "svg-q趋势",
         path: "/health/health4/healthLineChart2",
       },{
-        icon: "svg-agc",
+        icon: "svg-q曲线",
         path: "/health/health4/healthLineChart",
       }]
     };

+ 29 - 27
src/views/HealthControl/Health6.vue

@@ -71,11 +71,11 @@
         <MultipleLineChart :list="statusData" :units="['']" :height="'250px'" />
       </panel>
       <div class="selections">
-        <div class="item" @click="changeStatus('1')" :class="{ active: status === '1' }">
-          <span>良好</span>
+        <div class="item" @click="changeStatus('1')" :class="{ green: status === '1' }">
+          良好
         </div>
-        <div class="item" @click="changeStatus('2')" :class="{ active: status === '2' }">
-          <span>注意</span>
+        <div class="item" @click="changeStatus('2')" :class="{ green: status === '2' }">
+          注意
         </div>
       </div>
     </div>
@@ -84,7 +84,7 @@
 
 <script>
 import BarLineChart from "../../components/chart/combination/bar-line-chart.vue";
-import MultipleLineChart from "../../components/chart/line/multiple-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";
@@ -216,20 +216,19 @@ export default {
           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],
-                yAxisIndex: 0,
+				smooth:true,
                 value: [],
               };
 
               time.forEach((text, index) => {
                 statusItem.value.push({
-                  text: res.data.name[0][key],
+                  text: text,
                   value: item[index],
                 });
               });
@@ -268,27 +267,31 @@ export default {
       top: 0;
       width: 50%;
       justify-content: flex-end;
-
+color: @gray;
       .item {
-        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;
-
+		  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;
+          // background: fade(@green, 20);
+          // border: 1px solid @green;
           color: @green;
-          cursor: pointer;
+          // cursor: pointer;
 
           i svg use {
             fill: @green;
@@ -348,7 +351,6 @@ export default {
         display: flex;
         height: 32px;
         align-items: center;
-
         .dot {
           width: 8px;
           height: 8px;

+ 0 - 8
src/views/HealthControl/HealthMonth.vue

@@ -1,8 +0,0 @@
-<template>
-</template>
-
-<script>
-</script>
-
-<style>
-</style>

+ 7 - 0
src/views/HealthControl/HealthTab3.vue

@@ -104,20 +104,24 @@ export default {
           { 
             name: "场站",
             field: "wfname",
+			width:'150px',
             is_light: false
           },
           { 
             name: "风机编号",
             field: "wtid",
+			width:'150px',
             is_light: false
           },
           { 
             name: "任务开始时间",
+			width:'200px',
             field: "operationdate",
             is_light: false
           },
           { 
             name: "任务接受时间",
+			width:'200px',
             field: "departuretime",
             is_light: false
           },
@@ -128,16 +132,19 @@ export default {
           },
           { 
             name: "受否下单",
+			width:'100px',
             field: "ismain",
             is_light: false
           },
           { 
             name: "任务状态",
+			width:'150px',
             field: "status",
             is_light: false
           },
           {
             name: "操作",
+			width:'100px',
             field: "",
             is_num: false,
             is_light: false,

+ 28 - 5
src/views/HealthControl/HealthTab4.vue

@@ -84,23 +84,35 @@
         custom-class="modal"
         :close-on-click-modal="false"
       >
-        <info-history :formdata="trackDate" />
+        <info-history :formdata="trackDate"/>
       </el-dialog>
     </div>
+	<el-dialog
+	  title="消缺历史"
+	  v-model="history"
+	  width="1400px"
+	  height="800px"
+	  custom-class="modal"
+	  :close-on-click-modal="false"
+	>
+	<History :formdata="trackDate"/>
+	</el-dialog>
   </div>
 </template>
 
 <script>
 import InfoHistory from "./infotrack2.vue";
+import History from "./healthTab4History.vue";
 import ComTable from "@com/coms/table/table.vue";
 import SvgIcon from "../../components/coms/icon/svg-icon.vue";
 import { warn } from "@vue/runtime-core";
 
 export default {
-  components: { InfoHistory, ComTable, SvgIcon },
+  components: { InfoHistory, ComTable, SvgIcon ,History},
   data() {
     const that = this;
     return {
+	  history:false,
       stations: [], // 场站
       windturbines: [], // 风机
       station: "",
@@ -111,21 +123,25 @@ export default {
         column: [
           {
             name: "场站",
+			width:'120px',
             field: "wfname",
             is_light: false,
           },
           {
             name: "风机编号",
+			width:'100px',
             field: "wtid",
             is_light: false,
           },
           {
             name: "任务开始时间",
+			width:'150px',
             field: "operationdate",
             is_light: false,
           },
           {
             name: "任务接受时间",
+			width:'150px',
             field: "departuretime",
             is_light: false,
           },
@@ -141,14 +157,21 @@ export default {
           },
           {
             name: "操作",
+			width:'170px',
             field: "",
             is_num: false,
             is_light: false,
             template() {
-              return "<el-button type='text' style='cursor: pointer;'>消缺跟踪</el-button>";
+              return "<el-button type='text' style='cursor: pointer;' value='gz'>消缺跟踪</el-button>&nbsp;&nbsp;<el-button type='text' style='cursor: pointer;' value='ls'>消缺历史</el-button>";
             },
             click(e, row) {
-              that.onClickTrack(row);
+				if('gz' == event.target.getAttribute("value")){
+					that.onClickTrack(row);
+				}
+				if('ls' == event.target.getAttribute("value")){
+					that.requestTrack(row);
+					that.history = true;
+				}
             },
           },
         ],
@@ -170,6 +193,7 @@ export default {
     },
     // 消缺跟踪
     onClickTrack(row) {
+	  this.dialogVisible = true;
       this.requestTrack(row);
     },
     // 历史查询
@@ -255,7 +279,6 @@ export default {
         success(res) {
           if (res.code == 200) {
             that.trackDate = res.data;
-            that.dialogVisible = true;
           }
         },
       });

+ 0 - 8
src/views/HealthControl/HealthYear.vue

@@ -1,8 +0,0 @@
-<template>
-</template>
-
-<script>
-</script>
-
-<style>
-</style>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 34 - 22
src/views/HealthControl/fault-diagnosis.vue


+ 79 - 72
src/views/HealthControl/healthLineChart.vue

@@ -1,73 +1,80 @@
-<template>
-  <div class="pageBox">
-    <simple-line-chart :height="'100px'" v-for="(item, index) in chartData" :key="index" :title="item.title" :data="item.data" :color="item.color" :lineTitle="item.lineTitle" />
-  </div>
-</template>
-
-<script>
-import SimpleLineChart from "../../components/chart/line/simple-line-chart.vue";
-export default {
-  setup() {},
-  components: { SimpleLineChart },
-  data() {
-    return {
-      chartData:[]
-    };
-  },
-
-  created() {
-    this.wtId = this.$route.params.wtId;
-    this.wpId = this.$route.params.wpId;
-    this.requestData();
-  },
-  
-  methods:{
-    requestData(){
-      let that=this;
-      that.API.requestData({
-        method: "POST",
-        subUrl: "healthsub/hsFjValueIndex",
-        data:{
-          wtId: that.wtId
-        },
-        success(res) {
-
-          const color=["green","yellow","purple","blue","orange"];
-          let chartData=[];
-          let lineTitle=[];
-
-          res.data.xData.forEach(ele=>{
-            lineTitle.push(new Date(ele).formatDate("hh:mm"));
-          });
-
-          res.data.datasets.forEach((ele,index)=>{
-            chartData.push({
-              title:ele.name,
-              data:ele.data,
-              color:color[index],
-              lineTitle
-            });
-          });
-          that.chartData=chartData;
-        },
-      });
-    }
-  }
-};
-</script>
-
-<style lang="less" scoped>
-.pageBox {
-  width: 100%;
-  height:calc(100% - 1.481vh * 2);
-  display: flex;
-  flex-direction: column;
-  justify-content: space-between;
-  margin:1.481vh 0;
-
-  .chart{
-    width: 100%;
-    height:25%;
-  }
-}
+<template>
+  <div class="pageBox">
+    <wt-chooser @change="switchWt" :wpId="wpId" :wtId="wtId"></wt-chooser>
+    <simple-line-chart :height="'100px'" v-for="(item, index) in chartData" :key="index" :title="item.title" :data="item.data" :color="item.color" :lineTitle="item.lineTitle" />
+  </div>
+</template>
+
+<script>
+import SimpleLineChart from "../../components/chart/line/simple-line-chart.vue";
+import WtChooser from "@com/coms/wt-chooser/wt-chooser.vue"
+export default {
+  setup() {},
+  components: { SimpleLineChart ,WtChooser},
+  data() {
+    return {
+      chartData:[]
+    };
+  },
+
+  created() {
+    this.wtId = this.$route.params.wtId;
+    this.wpId = this.$route.params.wpId;
+    this.requestData();
+  },
+  
+  methods:{
+    switchWt(data){
+      this.$router.push(`/health/health4/healthLineChart/${data.wpId}/${data.wtId}`);
+      this.wtId = this.$route.params.wtId;
+      this.wpId = this.$route.params.wpId;
+      this.requestData();
+    },
+    requestData(){
+      let that=this;
+      that.API.requestData({
+        method: "POST",
+        subUrl: "healthsub/hsFjValueIndex",
+        data:{
+          wtId: that.wtId
+        },
+        success(res) {
+
+          const color=["green","yellow","purple","blue","orange"];
+          let chartData=[];
+          let lineTitle=[];
+
+          res.data.xData.forEach(ele=>{
+            lineTitle.push(new Date(ele).formatDate("hh:mm"));
+          });
+
+          res.data.datasets.forEach((ele,index)=>{
+            chartData.push({
+              title:ele.name,
+              data:ele.data,
+              color:color[index],
+              lineTitle
+            });
+          });
+          that.chartData=chartData;
+        },
+      });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+.pageBox {
+  width: 100%;
+  height:calc(100% - 1.481vh * 2);
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+
+  .chart{
+    width: 100%;
+    height:25%;
+  }
+}
 </style>

+ 298 - 289
src/views/HealthControl/healthLineChart2.vue

@@ -1,289 +1,298 @@
-<template>
-  <div class="health-7">
-    <div class="power-info mg-b-16">
-      <div class="info-tab">
-        <div
-          class="tab"
-          v-for="(item, index) in infoList"
-          :key="index"
-          :class="item.active ? 'active' : ''"
-          @click="onClickInfo(item)"
-        >
-          <i class="svg-icon svg-icon svg-icon-sm">
-            <svg-icon :svgid="item.svgid" />
-          </i>
-          <span> {{ item.title }} </span>
-        </div>
-        <div class="empty"></div>
-      </div>
-      <div class="info-chart">
-        <panel class="info-chart-panel" :title="'健康趋势'">
-          <vertival-bar-line-chart :height="'310px'" :bardata="bardata" :lineData="lineData"/>
-        </panel>
-      </div>
-    </div>
-    <div class="fc-info mg-b-16">
-      <panel :title="'健康走势图'" :showLine="false">
-        <normal-line-chart :height="'150px'" />
-      </panel>
-    </div>
-    <div class="data-list">
-      <Table :data="tableData" :canScroll="true" />
-    </div>
-  </div>
-</template>
-
-<script>
-import VertivalBarLineChart from "../../components/chart/combination/vertival-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";
-export default {
-  setup() {},
-  components: { SvgIcon, Panel, VertivalBarLineChart, NormalLineChart, Table },
-  data() {
-    return {
-      infoList: [
-        // {title: '24小时健康趋势', svgid: 'svg-24-houre', active: false, type: 'houre'},
-        { title: "7日健康趋势", svgid: "svg-h-day", active: true, type: "day" },
-        { title: "30日健康趋势", svgid: "svg-h-month", active: false, type: "month"},
-      ],
-      tableData: {
-        column: [
-          { name: "部件名称",field: "name" },
-          { name: "MTBF(h)",field: "v1", is_num: true },
-          { name: "MTTR(h)",field: "v2", is_num: true },
-          { name: "损失电量(kw/h)",field: "v3",is_num: true },
-          { name: "当前状态",field: "v4",
-            template: function(data) {
-              if (data == 1) return "<div class='dot green'></div>";
-              else if (data == 2) return "<div class='dot purple'></div>";
-              else if (data == 3) return "<div class='dot yellow'></div>";
-              else if (data == 4) return "<div class='dot orange'></div>";
-            },
-          },
-        ],
-        data: [],
-      },
-      bardata: { area: [], legend: [], data: [] }, // 损失电量分析echart数值
-      lineData: [],
-      wtId: undefined,
-      wpId: undefined,
-      hisValue: {},  //健康走势图
-    };
-  },
-  created() {
-    this.wtId = this.$route.params.wtId;
-    this.wpId = this.$route.params.wpId;
-    this.requestCoulometry(2)
-    this.requestHisValue()
-    this.requestMttrrand()
-  },
-  methods:{
-     // 未确认缺陷按钮下的健康趋势选项
-    onClickInfo(item) {
-      this.infoList.forEach((element) => {
-        if (item.type == element.type) {
-          item.active = true;
-          switch (item.type) {
-            case "day":
-              this.requestCoulometry(2);
-              break;
-            case "month":
-              this.requestCoulometry(3);
-          }
-        } else {
-          element.active = false;
-        }
-      });
-    },
-    // 损失电量分析  type:1 表示24小时健康趋势,2 表示七天健康趋势 3 表示30天健康趋势
-    requestCoulometry(type) {
-      let that = this;
-      that.API.requestData({
-        method: "POST",
-        timeout: 8000,
-        subUrl: "recommen/findAllChartjz",
-        data: { wpId: 0, type: type },
-        success(res) {
-          if (res.code == 200) {
-            that.bardata.legend = ["优数量", "良数量", "差数量"];
-            that.lineData = res.data.lvchart;
-            that.bardata.area = res.data.datechart;
-            that.bardata.data[2] = res.data.cslchart;
-            that.bardata.data[1] = res.data.lslchart;
-            that.bardata.data[0] = res.data.yslchart;
-          }
-        },
-      });
-    },
-    //风机健康走势图
-    requestHisValue(){
-      let that = this;
-      that.API.requestData({
-        method: "POST",
-        subUrl: "healthsub/findWtHisValueForBj",
-        data: { wtId: that.wtId },
-        success(res) {
-          if(res.code == 200){
-            let data = res.data;
-            data.time = data.time.slice(0, 65)
-            that.hisValue = data
-          }
-        },
-      });
-    },
-    //部件健康情况
-    requestMttrrand(){
-      let that = this;
-      that.API.requestData({
-        method: "POST",
-        subUrl: "healthsub/getWtMttrandMtbfByBj",
-        data: { wtId: that.wtId },
-        success(res) {
-          if(res.code == 200){
-            let data = res.data;
-            that.tableData.data = [
-              {name:data.clx[1], v1:data.clx[4], v2:data.clx[5], v3:data.clx[6], v4:data.clx[0]},
-              {name:data.fdj[1], v1:data.fdj[4], v2:data.fdj[5], v3:data.fdj[6], v4:data.fdj[0]},
-              {name:data.bj[1], v1:data.bj[4], v2:data.bj[5], v3:data.bj[6], v4:data.bj[0]},
-              {name:data.zk[1], v1:data.zk[4], v2:data.zk[5], v3:data.zk[6], v4:data.zk[0]},
-              {name:data.zz[1], v1:data.zz[4], v2:data.zz[5], v3:data.zz[6], v4:data.zz[0]},
-              {name:data.ph[1], v1:data.ph[4], v2:data.ph[5], v3:data.ph[6], v4:data.ph[0]},
-              {name:data.jc[1], v1:data.jc[4], v2:data.jc[5], v3:data.jc[6], v4:data.jc[0]},
-              {name:data.bpq[1], v1:data.bpq[4], v2:data.bpq[5], v3:data.bpq[6], v4:data.bpq[0]},
-            ]
-          }
-        },
-      });
-    }
-  }
-};
-</script>
-
-<style lang="less">
-.health-7 {
-  // 电量健康情况
-  .power-info {
-    display: flex;
-    .info-tab {
-      flex: 0 0 156px;
-      display: flex;
-      flex-direction: column;
-      height: 350px;
-      margin-right: 1.4815vh;
-
-      .tab {
-        position: relative;
-        flex: 0 0 auto;
-        text-align: center;
-        line-height: 33px;
-        margin-right: 8px;
-        color: @gray-l;
-        font-size: 12px;
-        background: fade(@gray, 20);
-        border: 1px solid fade(@gray, 20);
-
-        display: flex;
-        align-items: center;
-
-        i {
-          margin: 0 1.4815vh;
-          svg use {
-            fill: @gray-l;
-          }
-        }
-
-        &:hover,
-        &.active {
-          background: fade(@green, 20);
-          border: 1px solid @green;
-          color: @green;
-          cursor: pointer;
-          i {
-            svg use {
-              fill: @green;
-            }
-          }
-        }
-
-        &.active::after {
-          box-sizing: content-box;
-          width: 0px;
-          height: 0px;
-          position: absolute;
-          right: -19px;
-          padding: 0;
-          border-bottom: 9px solid @green;
-          border-top: 9px solid transparent;
-          border-left: 9px solid transparent;
-          border-right: 9px solid transparent;
-          display: block;
-          content: "";
-          z-index: 10;
-          transform: rotate(90deg);
-        }
-
-        &.active::before {
-          box-sizing: content-box;
-          width: 0px;
-          height: 0px;
-          position: absolute;
-          right: -17px;
-          padding: 0;
-          border-bottom: 9px solid #063319;
-          border-top: 9px solid transparent;
-          border-left: 9px solid transparent;
-          border-right: 9px solid transparent;
-          display: block;
-          content: "";
-          z-index: 12;
-          transform: rotate(90deg);
-        }
-
-        & + .tab {
-          margin-top: 0.7407vh;
-        }
-
-        &:last-child {
-          text-align: center;
-          justify-content: center;
-        }
-      }
-
-      .empty {
-        flex: 1 0 auto;
-      }
-    }
-
-    .info-chart {
-      flex: 1 0 auto;
-    }
-  }
-
-  .data-list {
-    .dot {
-      width: 12px;
-      height: 12px;
-      margin: auto;
-
-      &.green {
-        background: @green;
-      }
-
-      &.purple {
-        background: @purple;
-      }
-
-      &.yellow {
-        background: @yellow;
-      }
-
-      &.orange {
-        background: @orange;
-      }
-    }
-  }
-}
-</style>
+<template>
+  <div class="health-7">
+    <wt-chooser @change="switchWt" :wpId="wpId" :wtId="wtId"></wt-chooser>
+    <div class="power-info mg-b-16">
+      <div class="info-tab">
+        <div
+          class="tab"
+          v-for="(item, index) in infoList"
+          :key="index"
+          :class="item.active ? 'active' : ''"
+          @click="onClickInfo(item)"
+        >
+          <i class="svg-icon svg-icon svg-icon-sm">
+            <svg-icon :svgid="item.svgid" />
+          </i>
+          <span> {{ item.title }} </span>
+        </div>
+        <div class="empty"></div>
+      </div>
+      <div class="info-chart">
+        <panel class="info-chart-panel" :title="'健康趋势'">
+          <vertival-bar-line-chart :height="'310px'" :bardata="bardata" :lineData="lineData"/>
+        </panel>
+      </div>
+    </div>
+    <div class="fc-info mg-b-16">
+      <panel :title="'健康走势图'" :showLine="false">
+        <normal-line-chart :height="'150px'" />
+      </panel>
+    </div>
+    <div class="data-list">
+      <Table :data="tableData" :canScroll="true" />
+    </div>
+  </div>
+</template>
+
+<script>
+import VertivalBarLineChart from "../../components/chart/combination/vertival-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"
+export default {
+  setup() {},
+  components: { SvgIcon, Panel, VertivalBarLineChart, NormalLineChart, Table, WtChooser },
+  data() {
+    return {
+      infoList: [
+        // {title: '24小时健康趋势', svgid: 'svg-24-houre', active: false, type: 'houre'},
+        { title: "7日健康趋势", svgid: "svg-h-day", active: true, type: "day" },
+        { title: "30日健康趋势", svgid: "svg-h-month", active: false, type: "month"},
+      ],
+      tableData: {
+        column: [
+          { name: "部件名称",field: "name" },
+          { name: "MTBF(h)",field: "v1", is_num: true },
+          { name: "MTTR(h)",field: "v2", is_num: true },
+          { name: "损失电量(kw/h)",field: "v3",is_num: true },
+          { name: "当前状态",field: "v4",
+            template: function(data) {
+              if (data == 1) return "<div class='dot green'></div>";
+              else if (data == 2) return "<div class='dot purple'></div>";
+              else if (data == 3) return "<div class='dot yellow'></div>";
+              else if (data == 4) return "<div class='dot orange'></div>";
+            },
+          },
+        ],
+        data: [],
+      },
+      bardata: { area: [], legend: [], data: [] }, // 损失电量分析echart数值
+      lineData: [],
+      wtId: undefined,
+      wpId: undefined,
+      hisValue: {},  //健康走势图
+    };
+  },
+  created() {
+    this.init();
+  },
+  methods:{
+    init(){
+      this.wtId = this.$route.params.wtId;
+      this.wpId = this.$route.params.wpId;
+      this.requestCoulometry(2);
+      this.requestHisValue();
+      this.requestMttrrand();
+    },
+    switchWt(data){
+      this.$router.push(`/health/health4/healthLineChart2/${data.wpId}/${data.wtId}`);
+      this.init();
+    },
+     // 未确认缺陷按钮下的健康趋势选项
+    onClickInfo(item) {
+      this.infoList.forEach((element) => {
+        if (item.type == element.type) {
+          item.active = true;
+          switch (item.type) {
+            case "day":
+              this.requestCoulometry(2);
+              break;
+            case "month":
+              this.requestCoulometry(3);
+          }
+        } else {
+          element.active = false;
+        }
+      });
+    },
+    // 损失电量分析  type:1 表示24小时健康趋势,2 表示七天健康趋势 3 表示30天健康趋势
+    requestCoulometry(type) {
+      let that = this;
+      that.API.requestData({
+        method: "POST",
+        timeout: 8000,
+        subUrl: "recommen/findAllChartjz",
+        data: { wpId: 0, type: type },
+        success(res) {
+          if (res.code == 200) {
+            that.bardata.legend = ["优数量", "良数量", "差数量"];
+            that.lineData = res.data.lvchart;
+            that.bardata.area = res.data.datechart;
+            that.bardata.data[2] = res.data.cslchart;
+            that.bardata.data[1] = res.data.lslchart;
+            that.bardata.data[0] = res.data.yslchart;
+          }
+        },
+      });
+    },
+    //风机健康走势图
+    requestHisValue(){
+      let that = this;
+      that.API.requestData({
+        method: "POST",
+        subUrl: "healthsub/findWtHisValueForBj",
+        data: { wtId: that.wtId },
+        success(res) {
+          if(res.code == 200){
+            let data = res.data;
+            data.time = data.time.slice(0, 65)
+            that.hisValue = data
+          }
+        },
+      });
+    },
+    //部件健康情况
+    requestMttrrand(){
+      let that = this;
+      that.API.requestData({
+        method: "POST",
+        subUrl: "healthsub/getWtMttrandMtbfByBj",
+        data: { wtId: that.wtId },
+        success(res) {
+          if(res.code == 200){
+            let data = res.data;
+            that.tableData.data = [
+              {name:data.clx[1], v1:data.clx[4], v2:data.clx[5], v3:data.clx[6], v4:data.clx[0]},
+              {name:data.fdj[1], v1:data.fdj[4], v2:data.fdj[5], v3:data.fdj[6], v4:data.fdj[0]},
+              {name:data.bj[1], v1:data.bj[4], v2:data.bj[5], v3:data.bj[6], v4:data.bj[0]},
+              {name:data.zk[1], v1:data.zk[4], v2:data.zk[5], v3:data.zk[6], v4:data.zk[0]},
+              {name:data.zz[1], v1:data.zz[4], v2:data.zz[5], v3:data.zz[6], v4:data.zz[0]},
+              {name:data.ph[1], v1:data.ph[4], v2:data.ph[5], v3:data.ph[6], v4:data.ph[0]},
+              {name:data.jc[1], v1:data.jc[4], v2:data.jc[5], v3:data.jc[6], v4:data.jc[0]},
+              {name:data.bpq[1], v1:data.bpq[4], v2:data.bpq[5], v3:data.bpq[6], v4:data.bpq[0]},
+            ]
+          }
+        },
+      });
+    }
+  }
+};
+</script>
+
+<style lang="less">
+.health-7 {
+  // 电量健康情况
+  .power-info {
+    display: flex;
+    .info-tab {
+      flex: 0 0 156px;
+      display: flex;
+      flex-direction: column;
+      height: 350px;
+      margin-right: 1.4815vh;
+
+      .tab {
+        position: relative;
+        flex: 0 0 auto;
+        text-align: center;
+        line-height: 33px;
+        margin-right: 8px;
+        color: @gray-l;
+        font-size: 12px;
+        background: fade(@gray, 20);
+        border: 1px solid fade(@gray, 20);
+
+        display: flex;
+        align-items: center;
+
+        i {
+          margin: 0 1.4815vh;
+          svg use {
+            fill: @gray-l;
+          }
+        }
+
+        &:hover,
+        &.active {
+          background: fade(@green, 20);
+          border: 1px solid @green;
+          color: @green;
+          cursor: pointer;
+          i {
+            svg use {
+              fill: @green;
+            }
+          }
+        }
+
+        &.active::after {
+          box-sizing: content-box;
+          width: 0px;
+          height: 0px;
+          position: absolute;
+          right: -19px;
+          padding: 0;
+          border-bottom: 9px solid @green;
+          border-top: 9px solid transparent;
+          border-left: 9px solid transparent;
+          border-right: 9px solid transparent;
+          display: block;
+          content: "";
+          z-index: 10;
+          transform: rotate(90deg);
+        }
+
+        &.active::before {
+          box-sizing: content-box;
+          width: 0px;
+          height: 0px;
+          position: absolute;
+          right: -17px;
+          padding: 0;
+          border-bottom: 9px solid #063319;
+          border-top: 9px solid transparent;
+          border-left: 9px solid transparent;
+          border-right: 9px solid transparent;
+          display: block;
+          content: "";
+          z-index: 12;
+          transform: rotate(90deg);
+        }
+
+        & + .tab {
+          margin-top: 0.7407vh;
+        }
+
+        &:last-child {
+          text-align: center;
+          justify-content: center;
+        }
+      }
+
+      .empty {
+        flex: 1 0 auto;
+      }
+    }
+
+    .info-chart {
+      flex: 1 0 auto;
+    }
+  }
+
+  .data-list {
+    .dot {
+      width: 12px;
+      height: 12px;
+      margin: auto;
+
+      &.green {
+        background: @green;
+      }
+
+      &.purple {
+        background: @purple;
+      }
+
+      &.yellow {
+        background: @yellow;
+      }
+
+      &.orange {
+        background: @orange;
+      }
+    }
+  }
+}
+</style>

+ 130 - 0
src/views/HealthControl/healthTab4History.vue

@@ -0,0 +1,130 @@
+<template>
+	<div>
+		<div class="diamain">
+			<div class="left">
+				<el-tree :data="data" :props="defaultProps" node-key="id" :default-expand-all="true"
+					custom-class="modal" @node-click="handleNodeClick"></el-tree>
+			</div>
+			<div class="right">
+				<div class="table-box">
+					<ComTable :data="tableData" height="700px"></ComTable>
+				</div>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	import ComTable from "@com/coms/table/table.vue";
+	export default {
+		components: {
+			ComTable
+		},
+		props: {
+			gridDatas: {},
+			chartDatas: {},
+			formdata: Object,
+		},
+		data() {
+			return {
+				form: {
+					wtId: "",
+					wpId: ""
+				},
+				tableData: {
+					column: [{
+							name: "消缺描述",
+							field: "xqms",
+							width:'400px',
+							is_light: false,
+						},
+						{
+							name: "消缺人员",
+							field: "xqry",
+							is_light: false,
+						},
+						{
+							name: "消缺时间",
+							field: "xqsj",
+							is_light: false,
+						},
+						{
+							name: "更换部件",
+							field: "ghbj",
+							is_light: false,
+						},
+						{
+							name: "更换原因",
+							field: "ghyy",
+							is_light: false,
+						},
+						{
+							name: "更换数量",
+							field: "ghsl",
+							is_light: false,
+						},
+					],
+					data: [],
+				},
+				data: [],
+				defaultProps: {
+					children: "children",
+					label: "label",
+				},
+			};
+		},
+		methods: {
+			async searchH() {
+				var that = this;
+				const {
+					data
+				} = await that.API.requestData({
+					method: "POST",
+					subUrl: "/recommen/findLocationTreeByWtId",
+					data: {
+						wtId: that.form.wtId,
+					},
+				});
+				that.dialogVisible = true;
+				that.data = data.data;
+				that.location = data.data[0].id;
+				that.searchTab();
+			},
+			async searchTab() {
+				var that = this;
+				const {
+					data
+				} = await that.API.requestData({
+					method: "POST",
+					subUrl: "/recommen/findWobugeqByLocation",
+					data: {
+						tablepar: {
+							pageNum: 1,
+							pageSize: 10,
+						},
+						location: that.location,
+					},
+				});
+				if(data.data && data.data[0] && data.data[0].xqsj){
+					data.data[0].xqsj = new Date(data.data[0].xqsj).formatDate("yyyy-MM-dd hh:mm:ss");
+				}
+				that.tableData.data = data.data;
+			},
+			handleNodeClick(data) {
+				this.location = data.id;
+			},
+		},
+		watch: {
+			formdata(res) {
+				if (res) {
+					this.form = this.formdata;
+					this.searchH();
+				}
+			}
+		}
+	};
+</script>
+
+<style lang="less">
+
+</style>

+ 25 - 171
src/views/HealthControl/infotrack2.vue

@@ -319,34 +319,6 @@
       :show="false"
       :formdata="formdata"
     ></defect-elimination-tracking>
-    <div class="dialog-box">
-      <el-dialog
-        title="消缺历史"
-        v-model="dialogVisible"
-        width="1200px"
-        height="800px"
-        custom-class="modal"
-        :close-on-click-modal="false"
-      >
-        <div class="diamain">
-          <div class="left">
-            <el-tree
-              :data="data"
-              :props="defaultProps"
-              node-key="id"
-              :default-expand-all="true"
-              custom-class="modal"
-              @node-click="handleNodeClick"
-            ></el-tree>
-          </div>
-          <div class="right">
-            <div class="table-box">
-              <ComTable :data="tableData" height="700px"></ComTable>
-            </div>
-          </div>
-        </div>
-      </el-dialog>
-    </div>
     <el-dialog
       title="查看监控视频"
       v-model="videoBoxShow"
@@ -400,103 +372,6 @@ export default {
       gisBoxShow: false,
       videoBoxShow: false,
       location: "",
-      tableData: {
-        column: [
-          {
-            name: "消缺描述",
-            field: "xqms",
-            is_light: false,
-          },
-          {
-            name: "消缺人员",
-            field: "xqry",
-            is_light: false,
-          },
-          {
-            name: "消缺时间",
-            field: "xqsj",
-            is_light: false,
-          },
-          {
-            name: "更换部件",
-            field: "ghbj",
-            is_light: false,
-          },
-          {
-            name: "更换原因",
-            field: "ghyy",
-            is_light: false,
-          },
-          {
-            name: "更换数量",
-            field: "ghsl",
-            is_light: false,
-          },
-        ],
-        data: [],
-      },
-      data: [
-        {
-          label: "一级 1",
-          children: [
-            {
-              label: "二级 1-1",
-              children: [
-                {
-                  label: "三级 1-1-1",
-                },
-              ],
-            },
-          ],
-        },
-        {
-          label: "一级 2",
-          children: [
-            {
-              label: "二级 2-1",
-              children: [
-                {
-                  label: "三级 2-1-1",
-                },
-              ],
-            },
-            {
-              label: "二级 2-2",
-              children: [
-                {
-                  label: "三级 2-2-1",
-                },
-              ],
-            },
-          ],
-        },
-        {
-          label: "一级 3",
-          children: [
-            {
-              label: "二级 3-1",
-              children: [
-                {
-                  label: "三级 3-1-1",
-                },
-              ],
-            },
-            {
-              label: "二级 3-2",
-              children: [
-                {
-                  label: "三级 3-2-1",
-                },
-              ],
-            },
-          ],
-        },
-      ],
-      defaultProps: {
-        children: "children",
-        label: "label",
-      },
-      dialogVisible: false,
       tabs: [
         {
           icon: "svg-gis",
@@ -510,10 +385,6 @@ export default {
           icon: "svg-jk",
           text: "监控视频",
         },
-        {
-          icon: "svg-jk",
-          text: "消缺历史",
-        },
       ],
       activeTab: 0,
       svgarr: [
@@ -575,14 +446,6 @@ export default {
       videoPlayer: null, // 视频播放实例
     };
   },
-  created() {
-    this.setData();
-  },
-
-  updated() {
-    this.setData();
-  },
-
   onmounted() {
     this.cancelPlay();
   },
@@ -610,10 +473,6 @@ export default {
         ? new Date(this.form.checktime).formatDate("yyyy-MM-dd hh:mm:ss")
         : null;
     },
-    handleNodeClick(data) {
-      this.location = data.id;
-      this.searchTab(data.id);
-    },
     DateformatDate(val) {
       return new Date(val).formatDate("yyyy-MM-dd hh:mm:ss");
     },
@@ -646,33 +505,6 @@ export default {
         return "流程未启动";
       }
     },
-    async searchH() {
-      const { data } = await this.API.requestData({
-        method: "POST",
-        subUrl: "/recommen/findLocationTreeByWtId",
-        data: {
-          wtId: this.form.wtId,
-        },
-      });
-      this.dialogVisible = true;
-      this.data = data.data;
-      this.location = data.data[0].id;
-      this.searchTab();
-    },
-    async searchTab() {
-      const { data } = await this.API.requestData({
-        method: "POST",
-        subUrl: "/recommen/findWobugeqByLocation",
-        data: {
-          tablepar: {
-            pageNum: 1,
-            pageSize: 10,
-          },
-          location: this.location,
-        },
-      });
-      this.tableData.data = data.data;
-    },
 
     showVideoBox() {
       this.videoBoxShow = true;
@@ -687,11 +519,33 @@ export default {
       } else if (index === 2) {
         this.showVideoBox();
       }
-      if (tab.text == "消缺历史") {
-        this.searchH();
-      }
     },
   },
+  watch: {
+  	formdata(res) {
+  		if (res) {
+  			this.form = this.formdata;
+  			this.form.tjss = this.form.tjss
+  			  ? new Date(this.form.tjss).formatDate("yyyy-MM-dd hh:mm:ss")
+  			  : null;
+  			this.form.prodtdepttime = this.form.prodtdepttime
+  			  ? new Date(this.form.prodtdepttime).formatDate("yyyy-MM-dd hh:mm:ss")
+  			  : null;
+  			this.form.departuretime = this.form.departuretime
+  			  ? new Date(this.form.departuretime).formatDate("yyyy-MM-dd hh:mm:ss")
+  			  : null;
+  			this.form.arrivaltime = this.form.arrivaltime
+  			  ? new Date(this.form.arrivaltime).formatDate("yyyy-MM-dd hh:mm:ss")
+  			  : null;
+  			this.form.repairedtime = this.form.repairedtime
+  			  ? new Date(this.form.repairedtime).formatDate("yyyy-MM-dd hh:mm:ss")
+  			  : null;
+  			this.form.checktime = this.form.checktime
+  			  ? new Date(this.form.checktime).formatDate("yyyy-MM-dd hh:mm:ss")
+  			  : null;
+  		}
+  	}
+  }
 };
 </script>
 

+ 0 - 2
src/views/Home/Home.vue

@@ -1005,8 +1005,6 @@ export default {
 
     // 点击地图展示类型
     changeShowType(wpId, planBtnName) {
-      console.log('changeShowType wpId: ' + wpId)
-      console.log('changeShowType planBtnName: ' + planBtnName)
       this.wpName = planBtnName;
       this.planBtnName = planBtnName;
       this.jczbmap = {};

+ 77 - 42
src/views/Home/components/power-review.vue

@@ -3,7 +3,20 @@
     <Row type="flex" justify="center" :align="'middle'">
       <!-- 功率复核 PowerLoad -->
       <Col v-for="item in PowerLoad" :key="item" :span="6">
-        <dash-pie-chart :title="item.title" :value="item.value" :max="item.max" height="10vh" @click="openDialog(item.dialogTitle, item.subUrl, item.targetName, item.dialogType)" />
+        <dash-pie-chart
+          :title="item.title"
+          :value="item.value"
+          :max="item.max"
+          height="10vh"
+          @click="
+            openDialog(
+              item.dialogTitle,
+              item.subUrl,
+              item.targetName,
+              item.dialogType
+            )
+          "
+        />
       </Col>
     </Row>
   </div>
@@ -21,76 +34,98 @@ export default {
     DashPieChart,
   },
 
-  data () {
+  data() {
     return {
       // 功率复核数据
       PowerLoad: [],
-      wpId:""
+      wpId: "",
     };
   },
 
   props: {
     data: {
       type: Array,
-      default: () => []
+      default: () => [],
+    },
+    id: {
+      type: String,
+      defaylt: "",
     },
-    id:{
-      type:String,
-      defaylt:""
-    }
   },
 
-  mounted () {
+  mounted() {
     this.PowerLoad = this.data;
     this.wpId = this.id;
   },
 
-  methods:{
-    openDialog(dialogTitle, subUrl, targetName, dialogType){
+  methods: {
+    openDialog(dialogTitle, subUrl, targetName, dialogType) {
       let that = this;
       that.API.requestData({
-          method: "POST",
-          subUrl,
-          data: {
-            id:that.wpId,
-            targetName
-          },
-          success (res) {
-            let powerLineChartData = {
-              // 图表所用单位
-              units: [""],
-              value: [],
-            };
+        method: "POST",
+        subUrl,
+        data: {
+          id: that.wpId,
+          targetName,
+        },
+        success(res) {
+          // let powerLineChartData = {
+          //   // 图表所用单位
+          //   units: [""],
+          //   value: [],
+          // };
 
-            res.data.forEach((pEle,pIndex)=>{
-              powerLineChartData.value.push({
-                title: pEle[0].name,
-                yAxisIndex: 0,
-                value: [],
-              });
+          // res.data.forEach((pEle, pIndex) => {
+          //   powerLineChartData.value.push({
+          //     title: pEle[0].name,
+          //     yAxisIndex: 0,
+          //     smooth: true,
+          //     value: [],
+          //   });
 
-              pEle.forEach(cEle=>{
-                powerLineChartData.value[pIndex].value.push({
-                  text: new Date(cEle.time).formatDate("hh:mm:ss"),
-                  value: cEle.value1
-                });
+          //   pEle.forEach((cEle) => {
+          //     powerLineChartData.value[pIndex].value.push({
+          //       text: new Date(cEle.time).formatDate("hh:mm:ss"),
+          //       value: cEle.value1,
+          //     });
+          //   });
+          // });
+
+          let powerLineChartData = [];
+
+          res.data.forEach((pEle, pIndex) => {
+            powerLineChartData.push({
+              title: pEle[0].name,
+              smooth: true,
+              value: [],
+            });
+
+            pEle.forEach((cEle) => {
+              powerLineChartData[pIndex].value.push({
+                text: new Date(cEle.time).formatDate("hh:mm:ss"),
+                value: cEle.value1,
               });
             });
+          });
 
-            that.$emit("chartClick", { dialogTitle, dialogType, data: powerLineChartData });
-          }
-        });
-    }
+          that.$emit("chartClick", {
+            dialogTitle,
+            dialogType,
+            data: powerLineChartData,
+          });
+        },
+      });
+    },
   },
 
   watch: {
-    data (res) {
+    data(res) {
       this.PowerLoad = res;
     },
-    id(res){
+    id(res) {
       this.wpId = res;
-    }
-  }
+    },
+  },
 };
 </script>
 

+ 3 - 3
src/views/LightMatrix1/LightMatrix1.vue

@@ -342,9 +342,9 @@ export default {
           path: `/monitor/windsite/info/${item.wpId}/${item.wtId}`,
         });
       } else {
-        // this.$router.push({
-        //   path: `/info/inverter-info/${item.wpId}/${item.wtId}`
-        // });
+        this.$router.push({
+          path: `windsite/inverter-info/${item.wpId}/${item.wtId}`
+        });
       }
     },
   },

+ 8 - 8
src/views/LightMatrix3/LightMatrix3.vue

@@ -469,10 +469,10 @@ export default {
 
 <style lang="less" scoped>
 @panelHeight: 60px;
-@titleHeight: 3.704vh;
+@titleHeight: 26px;
 
 .light-matrix {
-  width: calc(100% - 1.111vh);
+  // width: calc(100% - 1.111vh);
   height: calc(100vh - 7.222vh);
   display: flex;
   flex-direction: column;
@@ -756,16 +756,16 @@ export default {
 
     .panel-title {
       width: 100%;
-      height: @titleHeight;
       line-height: @titleHeight;
       background-color: fade(@darkgray, 40%);
 
       .panel-title-name {
-        font-size: @fontsize-s;
+        font-size: 12px;
         color: @green;
         display: flex;
+        flex-wrap: wrap;
         align-items: center;
-        padding: 0 16px;
+        padding-left: 16px;
 
         i {
           margin-right: 0.7407vh;
@@ -773,7 +773,7 @@ export default {
 
         .sub-title-item {
           display: flex;
-          flex: 1;
+          flex: 0 0 110px;
 
           .sub-title {
             flex: 0 0 auto;
@@ -834,13 +834,13 @@ export default {
 
       .blank {
         margin-right: 4px;
-        flex: 1 0 105px;
+        flex: 1 0 118px;
       }
 
       .card {
         margin-right: 4px;
         margin-top: 4px;
-        flex: 1 0 105px;
+        flex: 1 0 118px;
       }
 
       .card {

+ 2 - 0
src/views/NewPages/alarm-center-2.vue

@@ -174,6 +174,8 @@ export default {
         baseURL: "http://192.168.1.18:8075/",
         subUrl: "Stoptype/treeType",
       });
+
+      
       this.cascaderOptions = data.data;
       let arr = [];
       let columnObj = [

+ 17 - 6
src/views/NewPages/forecast-system.vue

@@ -72,21 +72,21 @@
         </el-col>
         <el-col :span="19">
           <panel :title="'损失电量分析'">
-            <multiple-bar-line-chart :height="'310px'" 
+            <multiple-bar-line-chart :height="'100%'" 
               :lineData="chart1Line" :barData="chart1Bar"
               :units="['功率(万kW)','电量(万kWh)']"/>
           </panel>
         </el-col>
       </el-row>
-      <el-row>
+      <el-row class="bottom-charts">
         <el-col :span="12">
           <panel :title="'超短期风功率预测'">
-            <arrow-line-chart :height="'310px'" :list="chart2List" :units="['功率(万kW)','风速(m/s)']"/>
+            <arrow-line-chart :height="'100%'"  :list="chart2List" :units="['功率(万kW)','风速(m/s)']"/>
           </panel>
         </el-col>
         <el-col :span="12">
           <panel :title="'短期风功率预测'">
-            <arrow-line-chart :height="'310px'" :list="chart3List" :units="['功率(万kW)','风速(m/s)']"/>
+            <arrow-line-chart :height="'100%'"  :list="chart3List" :units="['功率(万kW)','风速(m/s)']"/>
           </panel>
         </el-col>
       </el-row>
@@ -230,6 +230,16 @@ export default {
 
 <style lang="less">
 .forecast-system {
+  .com-panel{
+    .panel-body{
+      height: 43vh;
+    }
+  }
+  .bottom-charts{
+    .panel-body{
+      height: 35vh;
+    }
+  }
   .action-bar {
     .selections {
       flex: 1 0 auto;
@@ -281,7 +291,7 @@ export default {
           flex: 1 0 calc(100% / 3 - 8px);
           background: fade(@gray, 20);
           margin-bottom: 8px;
-
+          height: 10vh;
           .tag-title {
             font-size: 12px;
             color: @gray-l;
@@ -295,13 +305,14 @@ export default {
             font-size: 20px;
             color: @green;
             text-align: center;
-            padding: 12px 0;
+            padding: 3vh 0;
             .unit {
               position: absolute;
               color: @gray;
               font-size: 12px;
               bottom: 8px;
               right: 8px;
+              top: 40%;
             }
           }
 

+ 1 - 1
src/views/NewPages/personnel.vue

@@ -326,7 +326,7 @@ export default {
         const url = require(`@assets/person/${v}.jpg`);
         return url;
       } catch (error) {
-        return require("@assets/logo.png");
+        return require("@assets/userhead.jpg");
       }
     },
     clickBtn(btn, index) {

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 410 - 369
src/views/NewPages/power-benchmarking.vue


+ 5 - 5
src/views/NewPages/znzhfx.vue

@@ -4,8 +4,8 @@
       <el-row :gutter="20" class="table-panel">
         <el-col :span="24">
           <div class="back">
-            <button class="btn" type="button">
-              <span @click="onClickBack">返回</span>
+            <button class="btn" type="button" @click="back">
+              <span>返回</span>
             </button>
           </div>
           <div class="table-title">
@@ -507,9 +507,9 @@ export default {
       this.bar2data.data = arrwsdata;
       console.warn(this.bar2data);
     },
-      onClickBack(){
-       this.$router.go(-1);
-    },
+	back(){
+		this.$router.go(-1);
+	}
   },
 };
 </script>

+ 552 - 0
src/views/Others/index.vue

@@ -0,0 +1,552 @@
+<template>
+  <div class="swiperBox">
+    <el-carousel
+      style="width: 100%; margin: 5vh 0"
+      trigger="click"
+      type="card"
+      height="80vh"
+      :autoplay="false"
+      indicator-position="none"
+      :initial-index="1"
+      arrow="none"
+      @change="changeSwiper"
+    >
+      <!-- card-1 -->
+      <el-carousel-item style="padding: 20px; background: rgb(4, 12, 11)">
+        <div class="itemBox">
+          <p class="itemTitle">
+            原始数据查询
+            <!-- <i class="itemMoreBtn el-icon-more" @click="jumpUrl('/realSearch')"></i> -->
+          </p>
+          <div class="imageBox">
+            <div class="imgItem" @click="jumpUrl('/realSearch')">
+              <el-image class="img" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">测点数据查询</p>
+            </div>
+            <div class="imgItem" @click="jumpUrl('/historySearch')">
+              <el-image
+                class="img"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">测点历史数据查询</p>
+            </div>
+          </div>
+        </div>
+      </el-carousel-item>
+
+      <!-- card-2 -->
+      <el-carousel-item style="padding: 20px; background: rgb(4, 12, 11)">
+        <div class="itemBox">
+          <p class="itemTitle">
+            预警记录
+            <!-- <i class="itemMoreBtn el-icon-more" @click="jumpUrl('/realSearch')"></i> -->
+          </p>
+          <div class="imageBox1">
+            <div class="imgItem1" @click="jumpUrl('/new/alarmcenter')">
+              <el-image class="img1" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">预警管理</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/new/tjsj')">
+              <el-image
+                class="img1"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">停机事件管理</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/new/xdgl')">
+              <el-image class="img1" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">限电管理</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/alarmCenter/boosterAlarm')">
+              <el-image
+                class="img1"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">升压站报警</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/alarmCenter/scadaAlarm')">
+              <el-image class="img1" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">SCADA报警</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/alarmCenter/customAlarm')">
+              <el-image
+                class="img1"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">自定义报警</p>
+            </div>
+          </div>
+        </div>
+      </el-carousel-item>
+
+      <!-- card-3 -->
+      <el-carousel-item style="padding: 20px; background: rgb(4, 12, 11)">
+        <div class="itemBox">
+          <p class="itemTitle">
+            专家知识
+            <!-- <i class="itemMoreBtn el-icon-more" @click="jumpUrl('/realSearch')"></i> -->
+          </p>
+          <div class="imageBox1">
+            <div class="imgItem1" @click="jumpUrl('/knowledge')">
+              <el-image class="img1" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">故障知识列表</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/knowledge2')">
+              <el-image
+                class="img1"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">安全措施知识</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/knowledge6')">
+              <el-image class="img1" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">排查检修方案</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/knowledge7')">
+              <el-image
+                class="img1"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">预警知识</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/knowledge5')">
+              <el-image class="img1" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">特征参数</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/knowledge3')">
+              <el-image
+                class="img1"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">风险辨识知识</p>
+            </div>
+          </div>
+        </div>
+      </el-carousel-item>
+
+      <!-- card-4 -->
+      <el-carousel-item style="padding: 20px; background: rgb(4, 12, 11)">
+        <div class="itemBox">
+          <p class="itemTitle">
+            统计分析
+            <!-- <i class="itemMoreBtn el-icon-more" @click="jumpUrl('/realSearch')"></i> -->
+          </p>
+          <div class="imageBox">
+            <div class="imgItem" @click="jumpUrl('/tjfx')">
+              <el-image class="img" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">统计分析</p>
+            </div>
+            <div class="imgItem" @click="jumpUrl('/bdzcx')">
+              <el-image
+                class="img"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">表底值查询</p>
+            </div>
+          </div>
+        </div>
+      </el-carousel-item>
+        <!-- card-5 -->
+            <el-carousel-item style="padding: 20px; background: rgb(4, 12, 11)">
+        <div class="itemBox">
+          <p class="itemTitle">
+           报表管理
+            <!-- <i class="itemMoreBtn el-icon-more" @click="jumpUrl('/realSearch')"></i> -->
+          </p>
+          <div class="imageBox1">
+            <div class="imgItem1" @click="jumpUrl('/oafd')">
+              <el-image class="img1" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">OA日报</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/oagf')">
+              <el-image
+                class="img1"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">OA日报(光伏)</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/xnyrb')">
+              <el-image class="img1" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">新能源日报</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/missfdrb')">
+              <el-image
+                class="img1"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">国电电力MISS日报(风电)</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/missgfrb')">
+              <el-image class="img1" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">国电电力MISS日报(光伏)</p>
+            </div>
+            <div class="imgItem1" @click="jumpUrl('/xnyfdscyb')">
+              <el-image
+                class="img1"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">新能源风电生产月报</p>
+            </div>
+          </div>
+        </div>
+      </el-carousel-item>
+        <!-- card-6 -->
+                 <el-carousel-item style="padding: 20px; background: rgb(4, 12, 11)">
+        <div class="itemBox">
+          <p class="itemTitle">
+          自定制报表管理
+            <!-- <i class="itemMoreBtn el-icon-more" @click="jumpUrl('/realSearch')"></i> -->
+          </p>
+          <div class="imageBox2">
+            <div class="imgItem2" @click="jumpUrl('/fdczzdy')">
+              <el-image class="img2" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">风电场站自定义</p>
+            </div>
+            <div class="imgItem2" @click="jumpUrl('/fdxmzdy')">
+              <el-image
+                class="img2"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">风电项目自定义</p>
+            </div>
+            <div class="imgItem2" @click="jumpUrl('/gfczzdy')">
+              <el-image class="img2" src="./static/img/oa日报.png" fit="fill" />
+              <p class="imgTitle">光伏场站自定义</p>
+            </div>
+            <div class="imgItem2" @click="jumpUrl('/gfxmzdy')">
+              <el-image
+                class="img2"
+                src="./static/img/新能源日报.png"
+                fit="fill"
+              />
+              <p class="imgTitle">光伏项目自定义</p>
+            </div>
+         
+          </div>
+        </div>
+      </el-carousel-item>
+    </el-carousel>
+  </div>
+</template>
+
+<script>
+import $ from "jquery";
+export default {
+  // 名称
+  name: "cutAnalyse",
+
+  // 数据
+  data() {
+    const that = this;
+    return {};
+  },
+
+  // 函数
+  methods: {
+    // 切换走马灯,并重新渲染样式
+    changeSwiper(index) {
+      this.$nextTick(() => {
+        const swiperDom = $(".swiperBox .el-carousel__item");
+        swiperDom
+          .eq(index)
+          .css({ background: "rgb(4, 12, 11)", border: "1px solid #05bb4c" });
+        for (let i = 0; i < swiperDom.length; i++) {
+          if (i !== index) {
+            swiperDom
+              .eq(i)
+              .find(".el-carousel__mask")
+              .css({
+                background: "rgb(4, 12, 11)",
+              });
+            swiperDom.eq(i).css({
+              background: "rgb(4, 12, 11)",
+              border: "1px solid rgba(5, 187, 76, 0.5)",
+            });
+          }
+        }
+      });
+    },
+
+    // 页面跳转
+    jumpUrl(url) {
+      this.$router.push(url);
+    },
+  },
+
+  created() {},
+
+  mounted() {
+    this.$nextTick(() => {
+      this.changeSwiper(1);
+    });
+  },
+
+  unmounted() {},
+};
+</script>
+
+<style lang="less" scoped>
+.swiperBox,
+.itemBox {
+  width: 100%;
+  height: 100%;
+  font-size: 20px;
+
+  .itemTitle {
+    width: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    position: relative;
+
+    .itemMoreBtn {
+      cursor: pointer;
+      font-size: 22px;
+      position: absolute;
+      right: 0;
+      top: 0;
+    }
+  }
+
+  .inline {
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+    font-size: 24px;
+    margin-bottom: 30px;
+    width: 100%;
+    margin: 0 0 30px 0;
+    transition: 0.2s;
+
+    .l {
+      color: #b3bdc0;
+      width: 46%;
+      display: flex;
+      justify-content: flex-end;
+      align-items: center;
+      margin-right: 4%;
+      transition: 0.2s;
+    }
+
+    .r {
+      color: #05bb4c;
+      position: relative;
+      width: 46%;
+      display: flex;
+      justify-content: start;
+      align-items: center;
+      margin-left: 4%;
+
+      &::after {
+        content: "";
+        position: absolute;
+        height: 10px;
+        left: 30px;
+        top: calc(50% - 5px);
+        background-color: #edbf03;
+        border-radius: 2px;
+      }
+    }
+
+    .r1::after {
+      width: 30px;
+    }
+
+    .r2::after {
+      width: 60px;
+    }
+
+    .r3::after {
+      width: 90px;
+    }
+
+    .r4::after {
+      width: 120px;
+    }
+
+    &:hover {
+      width: 80%;
+      margin: 0 10% 30px 10%;
+      color: #05bb4c;
+      transition: 0.2s;
+    }
+
+    &:hover .l {
+      color: #05bb4c;
+      transition: 0.2s;
+    }
+  }
+
+  .imageBox {
+    width: 100%;
+    display: flex;
+    // justify-content: start;
+    justify-content: space-around;
+    align-items: center;
+    flex-wrap: wrap;
+    margin-top: 100px;
+
+    .imgItem {
+      cursor: pointer;
+      border: none;
+      margin-right: 1%;
+      margin-bottom: 20px;
+      display: flex;
+      justify-content: start;
+      align-items: center;
+      flex-direction: column;
+      // width: 32%;
+      width: 45%;
+
+      .img {
+        width: 100%;
+        // height: 150px;
+        height: 300px;
+        border: 1px solid #b3bdc0;
+        transition: 0.2s;
+
+        &:hover {
+          border: 1px solid #05bb4c;
+          transition: 0.2s;
+        }
+      }
+
+      p {
+        width: 100%;
+        font-size: 16px;
+        color: #b3bdc0;
+        text-align: center;
+        transition: 0.2s;
+      }
+
+      &:hover p {
+        transition: 0.2s;
+        color: #05bb4c;
+      }
+    }
+  }
+  .imageBox1 {
+    width: 100%;
+    display: flex;
+    // justify-content: start;
+    justify-content: space-around;
+    align-items: center;
+    flex-wrap: wrap;
+    margin-top: 100px;
+
+    .imgItem1 {
+      cursor: pointer;
+      border: none;
+      margin-right: 1%;
+      margin-bottom: 20px;
+      display: flex;
+      // justify-content: start;
+      justify-content: space-around;
+      align-items: center;
+      flex-direction: column;
+      width: 32%;
+
+      .img1 {
+        width: 100%;
+        height: 150px;
+        border: 1px solid #b3bdc0;
+        transition: 0.2s;
+
+        &:hover {
+          border: 1px solid #05bb4c;
+          transition: 0.2s;
+        }
+      }
+
+      p {
+        width: 100%;
+        font-size: 16px;
+        color: #b3bdc0;
+        text-align: center;
+        transition: 0.2s;
+      }
+
+      &:hover p {
+        transition: 0.2s;
+        color: #05bb4c;
+      }
+    }
+  }
+    .imageBox2 {
+    width: 100%;
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+    flex-wrap: wrap;
+    margin-top: 100px;
+
+    .imgItem2 {
+      cursor: pointer;
+      border: none;
+      margin-right: 1%;
+      margin-bottom: 20px;
+      display: flex;
+      justify-content: space-around;
+      align-items: center;
+      flex-direction: column;
+      width: 45%;
+
+      .img2 {
+        width: 100%;
+        height: 180px;
+        border: 1px solid #b3bdc0;
+        transition: 0.2s;
+
+        &:hover {
+          border: 1px solid #05bb4c;
+          transition: 0.2s;
+        }
+      }
+
+      p {
+        width: 100%;
+        font-size: 16px;
+        color: #b3bdc0;
+        text-align: center;
+        transition: 0.2s;
+      }
+
+      &:hover p {
+        transition: 0.2s;
+        color: #05bb4c;
+      }
+    }
+  }
+
+  .iframe {
+    border: 0;
+    overflow: scroll;
+    background: #fff;
+  }
+}
+</style>
+
+<style lang="less">
+.itemBox {
+  .el-form-item,
+  .el-form-item__label {
+    font-size: 16px;
+  }
+
+  .el-form-item__label {
+    text-align: left;
+  }
+}
+</style>

+ 2 - 1
src/views/SandTable/SandTable.vue

@@ -326,7 +326,7 @@ export default {
 
     .sand-table-bottom {
         position: absolute;
-        right: calc(50vw - 50.463vh);
+        right: calc(50vw - 545px);
         bottom: 0;
         z-index: 2;
         display: flex;
@@ -365,6 +365,7 @@ export default {
         .com-table thead tr th,
         .com-table tr td {
             padding: 0.556vh 0;
+            color: #fff;
         }
     }
 

+ 1 - 1
src/views/SandTable/component/ThreeModel1.vue

@@ -244,7 +244,7 @@ export default {
             };
             let fanAnimateFunction = function() {
                 // fanAnimateObj.fan.rotateOnAxis(new THREE.Vector3(0, 1, 0), fanAnimateObj.speed);
-                fanAnimateObj.fan.rotateY(-fanAnimateObj.speed);
+                fanAnimateObj.fan.rotateY(fanAnimateObj.speed);
                 // fanAnimateObj.fan1.rotateZ(fanAnimateObj.speed);
                 // fanAnimateObj.fan2.rotateZ(fanAnimateObj.speed);
                 // fanAnimateObj.fan3.rotateZ(fanAnimateObj.speed);

+ 1 - 1
src/views/SandTable/component/p-panel.vue

@@ -123,7 +123,7 @@ export default {
 
 <style lang="less">
 .p-panel {
-    background: #272e3d66;
+    background: #1a1f2fCC;
 
     .font-sm {
         font-size: 12px;

+ 203 - 203
src/views/WindSite/WindSite.vue

@@ -1,203 +1,203 @@
-<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>
-          <router-link v-for="(menuData, index) of menuDatas" :key="index" :to="menuData.path">
-            <div class="page-common-body-menu-item" @click="clickMenu(index)" :class="{ active: activeIndex == index }">
-              <span class="svg-icon" :class="activeIndex == index ? 'svg-icon-yellow' : 'svg-icon-green'">
-                <SvgIcon :svgid="menuData.icon"></SvgIcon>
-              </span>
-            </div>
-          </router-link>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import SvgIcon from "@com/coms/icon/svg-icon.vue";
-export default {
-  // 名称
-  name: "WindSite",
-  // 使用组件
-  components: {
-    SvgIcon,
-  },
-  // 数据
-  data() {
-    return {
-      activeIndex: 0,
-      menuDatas: [
-        {
-          icon: "svg-agc",
-          path: "/monitor/windsite/home",
-        },
-        {
-          icon: "svg-matrix",
-          path: "/monitor/windsite/draughtfanlist",
-        },
-        // {
-        //   icon: "svg-agc",
-        //   path: "/monitor/windsite/matrix",
-        // },
-        // {
-        //   icon: "svg-agc",
-        //   path: "/monitor/windsite/lightmatrix",
-        // },
-        // {
-        //   icon: "svg-intranet-involvement",
-        //   path: "/monitor/windsite/box",
-        // },
-        // {
-        //   icon: "svg-matrix",
-        //   path: "/monitor/windsite/info",
-        // },
-        {
-          icon: "svg-easy-compass",
-          path: "/monitor/windsite/tower",
-        },
-        // {
-        //   icon: "svg-easy-compass",
-        //   path: "/monitor/windsite/Inverter-Info",
-        // },
-        // {
-        //   icon: "svg-easy-compass",
-        //   path: "/monitor/windsite/map",
-        // },
-        // {
-        //   icon: "svg-easy-compass",
-        //   path: "/monitor/windsite/map1",
-        // },
-        {
-          icon: "svg-matrix",
-          path: "/monitor/windsite/matrix",
-        },
-        {
-          icon: "svg-matrix",
-          path: "/monitor/windsite/generalappearance",
-        },
-        {
-          icon: "svg-matrix",
-          path: "/monitor/windsite/boosterstation",
-        },
-        {
-          icon: "svg-matrix",
-          path: "/monitor/windsite/map",
-        },
-      ],
-    };
-  },
-  // 函数
-  methods: {
-    clickMenu: function(index) {
-      this.activeIndex = index;
-    },
-  },
-
-  created() {
-    this.menuDatas.forEach((ele) => {
-      ele.path = ele.path + "/" + this.$route.params.wpId;
-    });
-  },
-
-  mounted() {},
-};
-</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>
+<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>
+          <router-link v-for="(menuData, index) of menuDatas" :key="index" :to="menuData.path">
+            <div class="page-common-body-menu-item" @click="clickMenu(index)" :class="{ active: activeIndex == index }">
+              <span class="svg-icon" :class="activeIndex == index ? 'svg-icon-yellow' : 'svg-icon-green'">
+                <SvgIcon :svgid="menuData.icon"></SvgIcon>
+              </span>
+            </div>
+          </router-link>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import SvgIcon from "@com/coms/icon/svg-icon.vue";
+export default {
+  // 名称
+  name: "WindSite",
+  // 使用组件
+  components: {
+    SvgIcon,
+  },
+  // 数据
+  data() {
+    return {
+      activeIndex: 0,
+      menuDatas: [
+        {
+          icon: "svg-s场站监视",
+          path: "/monitor/windsite/home",
+        },
+        {
+          icon: "svg-s指标列表",
+          path: "/monitor/windsite/draughtfanlist",
+        },
+        // {
+        //   icon: "svg-agc",
+        //   path: "/monitor/windsite/matrix",
+        // },
+        // {
+        //   icon: "svg-agc",
+        //   path: "/monitor/windsite/lightmatrix",
+        // },
+        // {
+        //   icon: "svg-intranet-involvement",
+        //   path: "/monitor/windsite/box",
+        // },
+        // {
+        //   icon: "svg-matrix",
+        //   path: "/monitor/windsite/info",
+        // },
+        {
+          icon: "svg-s测风塔",
+          path: "/monitor/windsite/tower",
+        },
+        // {
+        //   icon: "svg-easy-compass",
+        //   path: "/monitor/windsite/Inverter-Info",
+        // },
+        // {
+        //   icon: "svg-easy-compass",
+        //   path: "/monitor/windsite/map",
+        // },
+        // {
+        //   icon: "svg-easy-compass",
+        //   path: "/monitor/windsite/map1",
+        // },
+        {
+          icon: "svg-matrix",
+          path: "/monitor/windsite/matrix",
+        },
+        {
+          icon: "svg-s总貌",
+          path: "/monitor/windsite/generalappearance",
+        },
+        {
+          icon: "svg-s升压站",
+          path: "/monitor/windsite/boosterstation",
+        },
+        {
+          icon: "svg-s地图",
+          path: "/monitor/windsite/map",
+        },
+      ],
+    };
+  },
+  // 函数
+  methods: {
+    clickMenu: function(index) {
+      this.activeIndex = index;
+    },
+  },
+
+  created() {
+    this.menuDatas.forEach((ele) => {
+      ele.path = ele.path + "/" + this.$route.params.wpId;
+    });
+  },
+
+  mounted() {},
+};
+</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>

+ 11 - 11
src/views/WindSite/pages/Home/Home.vue

@@ -75,10 +75,10 @@
                   </span>
                 </div>
                 <div class="status ">
-                  <span class="svg-icon svg-icon-yellow">
+                  <span class="svg-icon svg-icon-pink">
                     <svg-icon svgid="svg-limit-power" style="margin:3px 0.3704vh -3px 0;" />
                   </span>
-                  <span class="text yellow">
+                  <span class="text pink">
                     限电
                   </span>
                 </div>
@@ -237,7 +237,7 @@
 <script>
 import HoverBarChart from "../../../../components/chart/bar/hover-bar-chart.vue";
 import MultipleBarChart from "../../../../components/chart/bar/multiple-bar-chart.vue";
-import MultipleLineChart from "../../../../components/chart/line/multiple-line-chart.vue";
+import MultipleLineChart from "../../../../components/chart/line/double-line-chart.vue";
 import NormalLineChart from "../../../../components/chart/line/normal-line-chart.vue";
 import DualPieChart from "../../../../components/chart/pie/dual-pie-chart.vue";
 import BtnGroupDouble from "../../../../components/coms/btn/btn-group-double.vue";
@@ -452,42 +452,42 @@ export default {
               value: [
                 {
                   title: "应发功率",
-                  yAxisIndex: 1, // 使用单位
+                  smooth: true, // 使用单位
                   value: [],
                 },
                 {
                   title: "实发功率",
-                  yAxisIndex: 1, // 使用单位
+                  smooth: true, // 使用单位
                   value: [],
                 },
                 {
                   title: "理论功率",
-                  yAxisIndex: 1, // 使用单位
+                  smooth: true, // 使用单位
                   value: [],
                 },
                 {
                   title: "预测功率",
-                  yAxisIndex: 1, // 使用单位
+                  smooth: true, // 使用单位
                   value: [],
                 },
                 {
                   title: "保证功率",
-                  yAxisIndex: 1, // 使用单位
+                  smooth: true, // 使用单位
                   value: [],
                 },
                 {
                   title: "平均风速",
-                  yAxisIndex: 1, // 使用单位
+                  smooth: true, // 使用单位
                   value: [],
                 },
                 {
                   title: "小时预测功率",
-                  yAxisIndex: 1, // 使用单位
+                  smooth: true, // 使用单位
                   value: [],
                 },
                 {
                   title: "最有功率律",
-                  yAxisIndex: 1, // 使用单位
+                  smooth: true, // 使用单位
                   value: [],
                 },
               ],

+ 9 - 3
src/views/WindSite/pages/Home/light-matrix.vue

@@ -53,9 +53,15 @@ export default {
 
     // 页面跳转
     jumpUrl(wpId, wtId){
-      this.$router.push({
-        path: `/monitor/windsite/info/${wpId}/${wtId}`
-      });
+	  if (wpId.indexOf("FDC") !== -1) {
+	    this.$router.push({
+	      path: `/monitor/windsite/info/${wpId}/${wtId}`
+	    });
+	  } else {
+	    this.$router.push({
+	      path: `../../windsite/inverter-info/${wpId}/${wtId}`
+	    });
+	  }
     }
   },
   // 生命周期钩子

+ 2 - 1
src/views/WindSite/pages/Map.vue

@@ -17,7 +17,7 @@
         <div class="sub-title-item">
           <img src="../../../assets/map/fan/black.png" />
           <span class="sub-title gray">接入台数</span>
-          <span class="sub-count font-num white">{{ wpnumMap.jrts }}</span>
+          <span class="sub-count font-num gray">{{ wpnumMap.djts + wpnumMap.yxts + wpnumMap.xdts +wpnumMap.gzts +wpnumMap.whts + wpnumMap.lxts}}</span>
         </div>
         <div class="sub-title-item">
           <img src="../../../assets/map/fan/green.png" />
@@ -285,6 +285,7 @@ export default {
         success(res) {
           if (res.code == 200) {
             that.wpnumMap = res.data.fczbmap.jczbmap;
+			  console.log(that.wpnumMap)
             that.wpInfoMap = res.data.wxssmap;
             that.fjmap = res.data.fjmap[0];
           }

+ 6 - 2
src/views/WindSite/pages/Matrix.vue

@@ -23,9 +23,13 @@
             </div>
           </div>
           <div class="card-right">
+            <div class="num">{{ cItem.fs }} 
+				<block v-if='cItem.wpId.indexOf("FDC") !== -1'>m/s</block>
+				<block v-else>W/m²</block>
+			</div>
+			<div class="num" v-if='cItem.wpId.indexOf("FDC") == -1' style="height:0.25rem;"> </div>
             <div class="num">{{ cItem.gl }} kW</div>
-            <div class="num">{{ cItem.fs }} m/s</div>
-            <div class="num">{{ cItem.fdjzs }} rpm</div>
+            <div class="num" v-if='cItem.wpId.indexOf("FDC") !== -1'>{{ cItem.fdjzs }} rpm</div>
           </div>
         </div>
         <div class="card-percent">

+ 171 - 120
src/views/WindSite/pages/Tower.vue

@@ -1,4 +1,7 @@
 <template>
+  <div class="btn-group-tabs">
+      <BtnGroup2 :btnGroups="btnGroupsss" :rowIndex="rowIndex" :index="selectIndex" @select="select"></BtnGroup2>
+  </div>
   <div class="tower">
     <Wave></Wave>
     <Windmill class="windmill-1"></Windmill>
@@ -20,6 +23,7 @@
       :value="cftmap.FCCFTYQ || 0"
       height="9.722vh"
       width="9.722vh"
+      max="500"
     />
     <Panel class="panel-top" title="日资源玫瑰图" :bgBlur="true">
       <div class="direction-chart">
@@ -40,43 +44,17 @@
       </div>
     </Panel>
     <toolbar-panel class="rose-chart" title="功率曲线">
-      <template v-slot:tools>
-        <!--<div class="tools">
-                    <div class="tool-block">
-                        <div class="legend bg-green"></div>
-                        <div class="legend-text">应发功率</div>
-                    </div>
-                    <div class="tool-block">
-                        <div class="legend bg-purple"></div>
-                        <div class="legend-text">实际功率</div>
-                    </div>
-                    <div class="tool-block">
-                        <div class="legend bg-orange"></div>
-                        <div class="legend-text">理论功率</div>
-                    </div>
-                    <div class="tool-block">
-                        <div class="legend bg-yellow"></div>
-                        <div class="legend-text">预测功率4小时</div>
-                    </div>
-                    <div class="tool-block">
-                        <div class="legend bg-blue"></div>
-                        <div class="legend-text">保证功率</div>
-                    </div>
-                    <div class="tool-block">
-                        <div class="legend bg-pink"></div>
-                        <div class="legend-text">风速</div>
-                    </div>
-                </div>-->
-      </template>
-      <template v-slot:default>
-        <!-- 日发电量 -->
+      <!-- <template v-slot:tools>
+      </template> -->
+      <!-- <template v-slot:default> -->
         <multiple-line-chart
-          :list="Powertrend.value"
-          :units="Powertrend.units"
-          height="28vh"
+          height="220px"
+          :list="Powertrend"
+          :units="['(MW)']"
           :showLegend="true"
+          :hoverType="'axis'"
         />
-      </template>
+      <!-- </template> -->
     </toolbar-panel>
   </div>
 </template>
@@ -90,11 +68,13 @@ import MultipleLineChart from "@com/chart/line/normal-line-chart";
 import WindTower from "./Tower/WindTower.vue";
 import DashPieChart from "@com/chart/pie/dash-pie-chart.vue";
 import DirectionRadarChart from "@com/chart/radar/radar-chart.vue";
+import BtnGroup2 from "@com/coms/btn/btn-group-double.vue";
 export default {
   // 名称
   name: "Tower",
   // 使用组件
   components: {
+    BtnGroup2,
     Wave,
     Windmill,
     ToolbarPanel,
@@ -111,6 +91,9 @@ export default {
   // 数据
   data() {
     return {
+      btnGroupsss: [],
+      rowIndex:1,
+      selectIndex:1,
       timmer: null, // 计时器
       cftmap: {},
       glvos: [],
@@ -134,8 +117,7 @@ export default {
         ],
       },
       ymgtTitle: "",
-      // 日发电量
-      Powertrend: {
+      DayPower: {
         // 图表所用单位
         units: [""],
         value: [
@@ -146,132 +128,201 @@ export default {
           },
         ],
       },
+      // 72小时功率趋势图
+      Powertrend: [
+        {
+          title: "",
+          yAxisIndex: 0, // 使用单位
+          value: [],
+        },
+      ],
     };
   },
   // 函数
   methods: {
-    // 请求服务
-    requestData(showLoading) {
+    requestLine() {
       let that = this;
       that.API.requestData({
-        showLoading,
         method: "POST",
-        subUrl: "monitor/findCftInfo",
+        subUrl: "genreset/findPowerInfo",
+        timeout: 60000,
         data: {
-          wpId: that.wpId,
+          id: that.wpId,
         },
         success(res) {
-          let rmgtmap = {
-            indicator: [],
-            data: [
+
+          let rdlKey = ["value1", "value2", "value3", "speed"];
+          let DayPower = {
+            // 图表所用单位
+            units: ["(万kWh)", "(m/s)"],
+            value: [
               {
+                title: "发电量",
+                yAxisIndex: 0,
                 value: [],
-                name: "",
               },
-            ],
-          };
-
-          let ymgtmap = {
-            indicator: [],
-            data: [
               {
+                title: "上网电量",
+                yAxisIndex: 0,
+                value: [],
+              },
+              {
+                title: "购网电量",
+                yAxisIndex: 0,
+                value: [],
+              },
+              {
+                title: "实时风速",
+                yAxisIndex: 1,
                 value: [],
-                name: "",
               },
             ],
           };
 
-          res.data.rmgtmap.data.forEach((ele) => {
-            rmgtmap.indicator.push(ele.name);
-            rmgtmap.data[0].value.push(ele.data1);
-          });
-
-          res.data.ymgtmap.data.forEach((ele) => {
-            ymgtmap.indicator.push(ele.name);
-            ymgtmap.data[0].value.push(ele.data1);
-          });
-
-          that.rmgtmap = rmgtmap;
-          that.rmgtTitle = res.data.rmgtmap.jfpl;
-
-          that.ymgtmap = ymgtmap;
-          that.ymgtTitle = res.data.ymgtmap.jfpl;
-
-          let units = ["(万kw)", "(米/s)"];
-          let keyArray = [
+          let glKey = [
             "value1",
             "value2",
             "value3",
             "value4",
             "value5",
             "value6",
+            "value7",
+          ];
+          let Powertrend = [
+            {
+              title: "应发功率",
+              smooth: true,
+              value: [],
+            },
+            {
+              title: "实发功率",
+              smooth: true,
+              value: [],
+            },
+            {
+              title: "理论功率",
+              smooth: true,
+              value: [],
+            },
+            {
+              title: "4小时预测功率",
+              smooth: true,
+              value: [],
+            },
+            {
+              title: "保证功率",
+              smooth: true,
+              value: [],
+            },
+            {
+              title: "平均风速",
+              smooth: true,
+              value: [],
+            },
+            {
+              title: "24小时预测功率",
+              smooth: true,
+              value: [],
+            },
           ];
 
-          let Powertrend = {
-            units,
-            value: [
-              {
-                title: "应发功率",
-                yAxisIndex: 0, // 使用单位
-                value: [],
-              },
-              {
-                title: "实发功率",
-                yAxisIndex: 0, // 使用单位
-                value: [],
-              },
-              {
-                title: "理论功率",
-                yAxisIndex: 0, // 使用单位
-                value: [],
-              },
-              {
-                title: "预测功率",
-                yAxisIndex: 0, // 使用单位
-                value: [],
-              },
-              {
-                title: "保证功率",
-                yAxisIndex: 0, // 使用单位
-                value: [],
-              },
-              {
-                title: "保证功率",
-                yAxisIndex: 0, // 使用单位
-                value: [],
-              },
-              {
-                title: "平均风速",
-                yAxisIndex: 1, // 使用单位
-                value: [],
-              },
-            ],
-          };
+          rdlKey.forEach((keyEle, keyIndex) => {
+            res.data.rdlvos.forEach((cEle) => {
+              DayPower.value[keyIndex].value.push({
+                text: cEle.timestr,
+                value: cEle[keyEle],
+              });
+            });
+          });
 
-          keyArray.forEach((key, keyIndex) => {
-            res.data.glvos.forEach((ele) => {
-              Powertrend.value[keyIndex].value.push({
-                text: new Date(ele.time).formatDate("hh:mm"),
-                value: ele[key],
+          glKey.forEach((keyEle, keyIndex) => {
+            res.data.glvos.forEach((cEle) => {
+              Powertrend[keyIndex].value.push({
+                text: new Date(cEle.time).formatDate("hh:mm"),
+                value: cEle[keyEle],
               });
             });
           });
 
-          that.cftmap = res.data.cftmap;
+          that.DayPower = DayPower;
           that.Powertrend = Powertrend;
         },
       });
     },
+    requestData(showLoading) {
+      let that = this;
+      that.API.requestData({
+        showLoading,
+        method: "POST",
+        subUrl: "monitor/findCftInfo",
+        data: {
+          wpId: that.wpId,
+        },
+        success(res) {
+          that.cftmap = res.data.cftmap;
+        },
+      });
+    },
+    getWp () {
+      let that = this;
+      that.API.requestData({
+        method: "GET",
+        subUrl: "powercompare/windfarmAllAjax",
+        success (res) {
+          let btnGroups = [
+            {
+              icon: "svg-wind-site",
+              btns: [],
+            }
+          ];
+
+          res.data.forEach((ele, index) => {
+            if (ele.id.indexOf("FDC") !== -1) {
+              btnGroups[0].btns.push({
+                text: ele.name,
+                code: ele.id,
+              });
+            } 
+          });
+
+          that.btnGroupsss = btnGroups;
+          that.renderBtnActiveIndex();
+        },
+      });
+    },
+    renderBtnActiveIndex () {
+      this.btnGroupsss.forEach((pEle, pIndex) => {
+        pEle.btns.forEach((cEle, cIndex) => {
+          if (cEle.code === this.wpId) {
+            this.rowIndex = pIndex;
+            this.selectIndex = cIndex;
+          }
+        });
+      });
+    },
+
+    select (res) {
+      this.$router.replace({
+        path: `/monitor/windsite/tower/${res.code}`,
+      });
+      this.wpId = res.code;
+      this.renderBtnActiveIndex ();
+      this.requestData(false);
+      this.requestLine();
+    },
   },
 
   created() {
     let that = this;
     that.wpId = that.$route.params.wpId;
+    that.getWp();
     that.$nextTick(() => {
       that.requestData(false);
-      // that.timmer = setInterval(() => {
-      //   that.requestData(false);
-      // }, that.$store.state.websocketTimeSec);
+      that.requestLine();
+      that.timmer = setInterval(() => {
+        that.requestData(false);
+        that.requestLine();
+      }, 60 * 1000);
     });
   },
 
@@ -350,7 +401,7 @@ export default {
   .pie-left,
   .pie-right {
     position: fixed;
-    top: 8vh;
+    top: 11vh;
   }
 
   .pie-left {

+ 1 - 1
src/views/WindSite/pages/Tower/WindTower.vue

@@ -139,7 +139,7 @@ export default {
 .wind-tower {
   position: absolute;
   width: 64.352vh;
-  top: 0;
+  top: 10px;
   left: calc(50% - 31.759vh);
 
   #wind-tower-left {

+ 20 - 12
src/views/layout/Header.vue

@@ -29,21 +29,21 @@ export default {
       menus: [
         {
           id: 'monitor',
-          text: '状态监视',
+          text: '驾驶舱',
           path: '/monitor/home',
           isActive: true
         },
         {
           id: 'decision',
           text: '经济运行',
-          path: '/decision/decision1',
+          path: '/decision/pb',
           isActive: false
         },
         {
           id: 'health',
           text: '智慧检修',
           // path: '/sandtable',
-          path: '/health',
+          path: '/health/sandtable',
           isActive: false
         },
         // {
@@ -58,18 +58,26 @@ export default {
           path: '/new/personnel',
           isActive: false
         },
-        {
-          id: "bdzcx",
-          text: "智能报表",
-          path: "/reportPandect",
-          isActive: false,
-        },
-        {
-          id: 'realSearch',
+        // {
+        //   id: "znbb",
+        //   text: "智能报表",
+        //   path: "/znbb/reportPandect",
+        //   isActive: false,
+        // },
+
+        // {
+        //   id: 'realSearch',
+        //   text: '其他',
+        //   path: '/realSearch',
+        //   isActive: false
+        // }
+          {
+          id: 'others',
           text: '其他',
-          path: '/realSearch',
+          path: '/others',
           isActive: false
         }
+
       ],
       activeIndex: 0
       // menusDropdown: [

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 607 - 531
src/views/layout/Menu.vue


+ 21 - 3
src/views/singleAnalysis/index.vue

@@ -26,7 +26,17 @@
 			</div>
 		</div>
     <div class="df-table">
-      <ComTable height="78vh" :data="tableData"></ComTable>
+      <ComTable height="78vh" :data="tableData">
+		  
+		  <template v-slot:tr v-if="tableData.data.length > 0">
+		  	<tr>
+		  		<td v-for="(item , index) in tableData.column" key="index">
+		  			{{tableDataEnd[item.field]}}
+		  		</td>
+		  	</tr>
+		  </template>
+		  
+	  </ComTable>
     </div>
     <el-dialog title="切入切出风速整合历史" v-model="dialogShow" width="85%" top="10vh" custom-class="modal" :close-on-click-modal="true" @closed="dialogType = ''">
       test
@@ -35,7 +45,7 @@
 </template>
 
 <script>
-import ComTable from "@com/coms/table/table.vue";
+import ComTable from "../Decision/table.vue";
 export default {
   // 名称
   name: "cutAnalyse",
@@ -54,11 +64,13 @@ export default {
       wpId:"",
       recorddate:new Date((new Date().getTime() - 3600 * 1000 * 24)).formatDate("yyyy-MM-dd"),
       dialogShow:false,
+	  tableDataEnd: [], //合计
       tableData: {
         column: [
           {
             name: "机组编号",
             field: "windturbineName",
+			cursor: 'pointer',
             is_num: false,
             is_light: false,
             sortable: true,
@@ -238,6 +250,8 @@ export default {
                 ele[key] = ele[key] || 0;
               }
             });
+			that.tableDataEnd = res.data[res.data.length - 1];
+			res.data.pop();
             that.tableData.data = res.data;
           }
         });
@@ -288,7 +302,11 @@ export default {
         }
       });
 
-      const list = that.tableData.data; //把要导出的数据tableData存到list 
+	  var list = [];
+	  that.tableData.data.forEach((i,index) =>{
+	  				  list.push(i);
+	  })
+	  list.push(that.tableDataEnd)
       const data = that.formatJson(filterVal, list);
       export_json_to_excel(tHeader, data, '导出的Excel'); // 最后一个是表名字
     },

+ 582 - 0
src/views/windAnalysis/phdffx.vue

@@ -0,0 +1,582 @@
+<template>
+  <div id="phdffx">
+    <div class="query mg-b-8">
+      <div class="query-items">
+        <div class="query-item">
+          <div class="lable">场站:</div>
+          <div class="search-input">
+            <el-select v-model="wpId" clearable placeholder="请选择" popper-class="select" @change="(wpId) => { getTurbines() }">
+              <el-option v-for="item in wpList" :key="item.id" :value="item.id" :label="item.name"></el-option>
+            </el-select>
+          </div>
+        </div>
+        <div class="query-item">
+          <div class="lable">机组:</div>
+          <div class="search-input">
+            <el-select v-model="wtId" placeholder="请选择" popper-class="select">
+              <el-option v-for="item in wtList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+            </el-select>
+          </div>
+        </div>
+        <div class="query-item">
+          <div class="lable">开始日期:</div>
+          <div class="search-input">
+            <el-date-picker v-model="startDate" type="date" placeholder="开始日期" popper-class="date-select" value-format="YYYY-MM-DD"></el-date-picker>
+          </div>
+        </div>
+        <div class="query-item">
+          <div class="lable">结束日期:</div>
+          <div class="search-input">
+            <el-date-picker v-model="endDate" type="date" placeholder="开始日期" popper-class="date-select" value-format="YYYY-MM-DD"></el-date-picker>
+          </div>
+        </div>
+        <div class="query-actions">
+          <button class="btn green" @click="getCharts()">查询</button>
+        </div>
+      </div>
+    </div>
+    <div class="mg-b-16">
+      <panel :title="'偏航对风风速分析'" :showLine="false">
+        <!-- <LineChart :list="statusData" :units="['']" :height="'220px'" /> -->
+        <div class="chart" id="linechart1"></div>
+      </panel>
+    </div>
+    <div class="mg-b-16">
+      <panel :title="'偏航对风功率分析'" :showLine="false">
+        <div class="chart" id="linechart2"></div>
+      </panel>
+    </div>
+    <div class="mg-b-16">
+      <panel :title="'偏航对风分析'" :showLine="false">
+        <div class="chart" id="linechart3"></div>
+      </panel>
+    </div>
+    <el-dialog :title="'偏航对风分析明细'" v-model="dialogShow" width="80%" top="10vh" custom-class="modal dBody" :close-on-click-modal="true">
+      <div class="chart" id="linechartDialog"></div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import LineChart from "../../components/chart/line/normal-line-chart.vue";
+import Panel from "../../components/coms/panel/panel.vue";
+import util from "@/helper/util.js";
+import partten from "@/helper/partten.js";
+import * as echarts from "echarts";
+export default {
+  name: "phdffx",
+  components: { LineChart, Panel },
+  data() {
+    return {
+      wpList: [],
+      wpId: "MHS_FDC",
+      wtList: [],
+      wtId: "MG01_01",
+      startDate: "",
+      endDate: "",
+      line1XData: [],
+      line2XData: [],
+      dialogShow: false,
+    };
+  },
+  created() {
+    this.getStations();
+    this.getTurbines();
+    let end = new Date();
+    let start = new Date();
+    start.setDate(1);
+    this.endDate = end.formatDate("yyyy-MM-dd");
+    this.startDate = start.formatDate("yyyy-MM-dd");
+
+    this.getCharts();
+  },
+  methods: {
+    // 场站
+    async getStations() {
+      const res = await this.API.requestData({
+        method: "GET",
+        baseURL: "http://10.155.32.4:9001/",
+        subUrl: "benchmarking/wplist",
+      });
+      this.wpList = res.data.data;
+      // this.wpId = res.data.data[0].id;
+    },
+    async getTurbines() {
+      const res = await this.API.requestData({
+        method: "GET",
+        subUrl: "powercompare/windturbineAjax",
+        data: { wpId: this.wpId },
+      });
+      this.wtList = res.data.data;
+      this.wtId = res.data.data[0].id;
+    },
+    getCharts() {
+      this.getChart1();
+      this.getChart2();
+      this.getChart3();
+    },
+    async getChart1() {
+      const res = await this.API.requestData({
+        method: "POST",
+        subUrl: "yaw/getPassRate",
+        data: {
+          wtId: this.wtId,
+          beginDate: this.startDate,
+          endDate: this.endDate,
+          type: 2,
+        },
+      });
+      if (res && res.data && res.data.data) {
+        const xData = [];
+        const lData = [];
+        res.data.data.forEach((e) => {
+          xData.push(e.speed);
+          lData.push(e.passrate);
+        });
+        this.line1XData = xData;
+        let option = {
+          color: ["#05bb4c", "#4b55ae", "#fa8c16", "#f8de5b"],
+          tooltip: {
+            trigger: "axis",
+            backgroundColor: "rgba(0,0,0,0.4)",
+            borderColor: partten.getColor("gray"),
+            textStyle: {
+              color: "#fff",
+              fontSize: util.vh(16),
+            },
+          },
+          legend: {
+            show: false,
+            data: ["合格率(%)"],
+            right: 56,
+            icon: "circle",
+            itemWidth: 6,
+            inactiveColor: "#606769",
+            textStyle: {
+              color: partten.getColor("grayl"),
+              fontSize: 12,
+            },
+          },
+          grid: {
+            top: util.vh(40),
+            left: util.vh(60),
+            right: util.vh(100),
+            bottom: util.vh(24),
+          },
+          xAxis: [
+            {
+              name: "风速(m/s)",
+              type: "category",
+              boundaryGap: false,
+              axisLabel: {
+                formatter: "{value}",
+                fontSize: util.vh(14),
+                textStyle: {
+                  color: partten.getColor("gray"),
+                },
+              },
+              data: xData,
+            },
+          ],
+          yAxis: [
+            {
+              type: "value",
+              name: "合格率(%)",
+              axisLabel: {
+                formatter: "{value}",
+                fontSize: util.vh(14),
+              },
+              splitLine: {
+                lineStyle: {
+                  color: partten.getColor("gray") + 55,
+                  type: "dashed",
+                },
+              },
+            },
+          ],
+          series: [
+            {
+              name: "合格率",
+              type: "line",
+              smooth: true,
+              zlevel: 0,
+              lineStyle: {
+                normal: {
+                  color: "#05bb4c",
+                  width: 1,
+                },
+              },
+              yAxisIndex: 0,
+              data: lData,
+            },
+          ],
+        };
+        const chart = echarts.init(document.getElementById("linechart1"));
+        chart.clear();
+        chart.setOption(option);
+        this.resize = function () {
+          chart.resize();
+        };
+        chart.getZr().off("click");
+        chart.getZr().on("click", (params) => {
+          const pointInPixel = [params.offsetX, params.offsetY];
+          if (chart.containPixel("grid", pointInPixel)) {
+            let xIndex = chart.convertFromPixel({ seriesIndex: 0 }, [
+              params.offsetX,
+              params.offsetY,
+            ])[0];
+            // 图标点击事件
+            this.showDetail("2", this.line1XData[xIndex]);
+          }
+        });
+        window.addEventListener("resize", this.resize);
+      }
+    },
+    async getChart2() {
+      const res = await this.API.requestData({
+        method: "POST",
+        subUrl: "yaw/getPassRate",
+        data: {
+          wtId: this.wtId,
+          beginDate: this.startDate,
+          endDate: this.endDate,
+          type: 1,
+        },
+      });
+      if (res && res.data && res.data.data) {
+        const xData = [];
+        const lData = [];
+        res.data.data.forEach((e) => {
+          xData.push(e.power);
+          lData.push(e.passrate);
+        });
+        this.line2XData = xData;
+        let option = {
+          color: ["#05bb4c", "#4b55ae", "#fa8c16", "#f8de5b"],
+          tooltip: {
+            trigger: "axis",
+            backgroundColor: "rgba(0,0,0,0.4)",
+            borderColor: partten.getColor("gray"),
+            textStyle: {
+              color: "#fff",
+              fontSize: util.vh(16),
+            },
+          },
+          legend: {
+            show: false,
+            data: ["合格率(%)"],
+            right: 56,
+            icon: "circle",
+            itemWidth: 6,
+            inactiveColor: "#606769",
+            textStyle: {
+              color: partten.getColor("grayl"),
+              fontSize: 12,
+            },
+          },
+          grid: {
+            top: util.vh(40),
+            left: util.vh(60),
+            right: util.vh(100),
+            bottom: util.vh(24),
+          },
+          xAxis: [
+            {
+              name: "功率(kW)",
+              type: "category",
+              boundaryGap: false,
+              axisLabel: {
+                formatter: "{value}",
+                fontSize: util.vh(14),
+                textStyle: {
+                  color: partten.getColor("gray"),
+                },
+              },
+              data: xData,
+            },
+          ],
+          yAxis: [
+            {
+              type: "value",
+              name: "合格率(%)",
+              axisLabel: {
+                formatter: "{value}",
+                fontSize: util.vh(14),
+              },
+              splitLine: {
+                lineStyle: {
+                  color: partten.getColor("gray") + 55,
+                  type: "dashed",
+                },
+              },
+            },
+          ],
+          series: [
+            {
+              name: "合格率",
+              type: "line",
+              smooth: true,
+              zlevel: 0,
+              lineStyle: {
+                normal: {
+                  color: "#05bb4c",
+                  width: 1,
+                },
+              },
+              yAxisIndex: 0,
+              data: lData,
+            },
+          ],
+        };
+        const chart = echarts.init(document.getElementById("linechart2"));
+        chart.clear();
+        chart.setOption(option);
+        this.resize = function () {
+          chart.resize();
+        };
+        chart.getZr().off("click");
+        chart.getZr().on("click", (params) => {
+          const pointInPixel = [params.offsetX, params.offsetY];
+          if (chart.containPixel("grid", pointInPixel)) {
+            let xIndex = chart.convertFromPixel({ seriesIndex: 0 }, [
+              params.offsetX,
+              params.offsetY,
+            ])[0];
+            this.showDetail("1", this.line2XData[xIndex] / 100);
+          }
+        });
+        window.addEventListener("resize", this.resize);
+      }
+    },
+    async getChart3() {
+      const res = await this.API.requestData({
+        method: "POST",
+        subUrl: "yaw/getTotalRanges",
+        data: {
+          wtId: this.wtId,
+          beginDate: this.startDate,
+          endDate: this.endDate,
+          type: 1,
+        },
+      });
+      if (res && res.data && res.data.data) {
+        const xData = [];
+        const lData = [];
+        const dataMap = res.data.data;
+        for (let key in dataMap) {
+          let tmpKey = key.replace(/r/, "");
+          tmpKey = tmpKey.replace(/_/, "-");
+          if (tmpKey < 100) {
+            xData.push(tmpKey);
+            lData.push(dataMap[key]);
+          }
+        }
+        this.line3Data = lData;
+        let option = {
+          color: ["#05bb4c", "#4b55ae", "#fa8c16", "#f8de5b"],
+          tooltip: {
+            trigger: "axis",
+            backgroundColor: "rgba(0,0,0,0.4)",
+            borderColor: partten.getColor("gray"),
+            textStyle: {
+              color: "#fff",
+              fontSize: util.vh(16),
+            },
+          },
+          legend: {
+            show: false,
+            data: ["偏航次数"],
+            right: 56,
+            icon: "circle",
+            itemWidth: 6,
+            inactiveColor: "#606769",
+            textStyle: {
+              color: partten.getColor("grayl"),
+              fontSize: 12,
+            },
+          },
+          grid: {
+            top: util.vh(40),
+            left: util.vh(60),
+            right: util.vh(130),
+            bottom: util.vh(24),
+          },
+          xAxis: [
+            {
+              name: "对风偏差(度)",
+              type: "category",
+              boundaryGap: false,
+              axisLabel: {
+                formatter: "{value}",
+                fontSize: util.vh(14),
+                textStyle: {
+                  color: partten.getColor("gray"),
+                },
+              },
+              data: xData,
+            },
+          ],
+          yAxis: [
+            {
+              type: "value",
+              name: "数量",
+              axisLabel: {
+                formatter: "{value}",
+                fontSize: util.vh(14),
+              },
+              splitLine: {
+                lineStyle: {
+                  color: partten.getColor("gray") + 55,
+                  type: "dashed",
+                },
+              },
+            },
+          ],
+          series: [
+            {
+              name: "数量",
+              type: "line",
+              smooth: true,
+              zlevel: 0,
+              lineStyle: {
+                normal: {
+                  color: "#05bb4c",
+                  width: 1,
+                },
+              },
+              yAxisIndex: 0,
+              data: lData,
+            },
+          ],
+        };
+        const chart = echarts.init(document.getElementById("linechart3"));
+        chart.clear();
+        chart.setOption(option);
+        this.resize = function () {
+          chart.resize();
+        };
+        window.addEventListener("resize", this.resize);
+      }
+    },
+    async showDetail(type, value) {
+      this.dialogShow = true;
+      const res = await this.API.requestData({
+        method: "POST",
+        subUrl: "yaw/getRanges",
+        data: {
+          wtId: this.wtId,
+          beginDate: this.startDate,
+          endDate: this.endDate,
+          type: type,
+          value: value,
+        },
+      });
+      if (res && res.data && res.data.data) {
+        const xData = [];
+        const lData = [];
+        const dataMap = res.data.data;
+        for (let key in dataMap) {
+          let tmpKey = key.replace(/r/, "");
+          tmpKey = tmpKey.replace(/_/, "-");
+          if (tmpKey < 100) {
+            xData.push(tmpKey);
+            lData.push(dataMap[key]);
+          }
+        }
+        let option = {
+          color: ["#05bb4c", "#4b55ae", "#fa8c16", "#f8de5b"],
+          tooltip: {
+            trigger: "axis",
+            backgroundColor: "rgba(0,0,0,0.4)",
+            borderColor: partten.getColor("gray"),
+            textStyle: {
+              color: "#fff",
+              fontSize: util.vh(16),
+            },
+          },
+          legend: {
+            show: false,
+            data: ["偏航次数"],
+            right: 56,
+            icon: "circle",
+            itemWidth: 6,
+            inactiveColor: "#606769",
+            textStyle: {
+              color: partten.getColor("grayl"),
+              fontSize: 12,
+            },
+          },
+          grid: {
+            top: util.vh(40),
+            left: util.vh(60),
+            right: util.vh(130),
+            bottom: util.vh(24),
+          },
+          xAxis: [
+            {
+              name: "对风偏差(度)",
+              type: "category",
+              boundaryGap: false,
+              axisLabel: {
+                formatter: "{value}",
+                fontSize: util.vh(14),
+                textStyle: {
+                  color: partten.getColor("gray"),
+                },
+              },
+              data: xData,
+            },
+          ],
+          yAxis: [
+            {
+              type: "value",
+              name: "数量",
+              axisLabel: {
+                formatter: "{value}",
+                fontSize: util.vh(14),
+              },
+              splitLine: {
+                lineStyle: {
+                  color: partten.getColor("gray") + 55,
+                  type: "dashed",
+                },
+              },
+            },
+          ],
+          series: [
+            {
+              name: "数量",
+              type: "line",
+              smooth: true,
+              zlevel: 0,
+              lineStyle: {
+                normal: {
+                  color: "#05bb4c",
+                  width: 1,
+                },
+              },
+              yAxisIndex: 0,
+              data: lData,
+            },
+          ],
+        };
+        const chart = echarts.init(document.getElementById("linechartDialog"));
+        chart.clear();
+        chart.setOption(option);
+        this.resize = function () {
+          chart.resize();
+        };
+      }
+    },
+  },
+};
+</script>
+<style lang="less">
+#phdffx {
+  .chart {
+    width: 100%;
+    height: 220px;
+    display: block;
+    margin: auto;
+  }
+}
+</style>

+ 0 - 0
tests/unit/test..js


+ 5 - 1
vue.config.js

@@ -66,7 +66,11 @@ module.exports = {
   chainWebpack: (config) => {
 
     config.resolve.symlinks(true); // 修复热更新失效
-
+	config.plugin('html')
+	      .tap(args => {
+	        args[0].title = "智能综合分析系统";
+	        return args;
+	      })
     // 路径别名
     config.resolve.alias
       .set("@", resolve("src"))