Browse Source

首页72小时功率曲线逻辑修改、组件替换

Koishi 3 years ago
parent
commit
5625de2165
100 changed files with 8619 additions and 49320 deletions
  1. 1 0
      .gitignore
  2. 747 0
      public/static/3d/fanvar.gltf
  3. BIN
      public/static/3d/fanvar_binary.bin
  4. 535 0
      public/static/3d/lightvar.gltf
  5. BIN
      public/static/3d/lightvar_binary.bin
  6. 6 2
      public/static/config/modeConfig.js
  7. 0 4917
      public/static/js/videoPlayer/adapter.js
  8. 0 2377
      public/static/js/videoPlayer/bootstrap.js
  9. 0 7
      public/static/js/videoPlayer/bootstrap.min.js
  10. 0 22
      public/static/js/videoPlayer/flowplayer-3.2.13.min.js
  11. 0 7
      public/static/js/videoPlayer/flv.min.js
  12. 0 33
      public/static/js/videoPlayer/h5scluster.js
  13. 0 184
      public/static/js/videoPlayer/h5sevent.js
  14. 0 278
      public/static/js/videoPlayer/h5spbcontrol.js
  15. 0 1
      public/static/js/videoPlayer/h5splayer.js
  16. 0 110
      public/static/js/videoPlayer/h5splayerhelper.js
  17. 0 214
      public/static/js/videoPlayer/jQuery.md5.js
  18. 0 10220
      public/static/js/videoPlayer/jquery-3.1.1.js
  19. 0 1
      public/static/js/videoPlayer/linkplayer.js
  20. 0 1217
      public/static/js/videoPlayer/platform.js
  21. 0 26804
      public/static/js/videoPlayer/video.js
  22. 9 8
      src/App.vue
  23. 1 0
      src/assets/icon/svg/weather/天气1.svg
  24. 1 0
      src/assets/icon/svg/weather/日出1.svg
  25. 1 0
      src/assets/icon/svg/weather/日落1.svg
  26. 1 0
      src/assets/icon/svg/weather/气压1.svg
  27. 1 0
      src/assets/icon/svg/weather/温度1.svg
  28. 1 0
      src/assets/icon/svg/weather/湿度1.svg
  29. 1 0
      src/assets/icon/svg/weather/风速.svg
  30. 1 0
      src/assets/icon/svg/功率.svg
  31. BIN
      src/assets/png/3dcloud.png
  32. BIN
      src/assets/png/3dmap.png
  33. 4 0
      src/assets/png/direction/e.svg
  34. 4 0
      src/assets/png/direction/n.svg
  35. 4 0
      src/assets/png/direction/ne.svg
  36. 4 0
      src/assets/png/direction/nw.svg
  37. 4 0
      src/assets/png/direction/s.svg
  38. 4 0
      src/assets/png/direction/se.svg
  39. 4 0
      src/assets/png/direction/sw.svg
  40. 4 0
      src/assets/png/direction/w.svg
  41. BIN
      src/assets/png/weather/cloud.png
  42. BIN
      src/assets/png/weather/rain.png
  43. BIN
      src/assets/png/weather/sun.png
  44. 5 2
      src/assets/styles/app.less
  45. 38 0
      src/assets/styles/el-override/el-input.less
  46. 4 0
      src/assets/styles/el-override/el-pagination.less
  47. 2 1
      src/assets/styles/el-override/el-table.less
  48. 7 1
      src/assets/styles/table.less
  49. 501 0
      src/components/arcgis/MHS_FDC.vue
  50. 751 0
      src/components/arcgis/PL_GDC.vue
  51. 14 18
      src/components/arcgis/arcgis.vue
  52. 1 1
      src/components/chart/bar/horizontal-bar-chart.vue
  53. 2 1
      src/components/chart/bar/list-bar-chart2.vue
  54. 6 3
      src/components/chart/bar/multiple-bar-chart.vue
  55. 199 0
      src/components/chart/bar/percent-bar-3.vue
  56. 9 9
      src/components/chart/bar/single-bar-chart.vue
  57. 5 2
      src/components/chart/combination/area-bar-chart.vue
  58. 117 19
      src/components/chart/combination/bar-line-chart.vue
  59. 0 2
      src/components/chart/combination/multiple-bar-line-chart.vue
  60. 786 0
      src/components/chart/combination/scatter-line-chart.vue
  61. 1 1
      src/components/chart/combination/vertival-bar-line-chart.vue
  62. 6 4
      src/components/chart/line/double-line-chart.vue
  63. 289 0
      src/components/chart/line/double-line-chartold.vue
  64. 157 40
      src/components/chart/line/img-line-chart.vue
  65. 6 10
      src/components/chart/line/multi-arrow-line-chart.vue
  66. 233 55
      src/components/chart/line/multiple-y-line-chart.vue
  67. 97 0
      src/components/coms/cards/percent-card-2.0.1.vue
  68. 0 1
      src/components/coms/panel/panel-no-title.vue
  69. 5 1
      src/components/coms/panel/panel.vue
  70. 10 1
      src/components/coms/table/check-table.vue
  71. 276 0
      src/components/coms/table/group-table.vue
  72. 19 105
      src/components/coms/table/table.vue
  73. 11 2
      src/components/coms/table/table2.vue
  74. 179 0
      src/components/other/fj/index.vue
  75. 4 3
      src/components/three/wave.vue
  76. 764 714
      src/router/index.js
  77. 19 1
      src/views/About.vue
  78. 11 13
      src/views/Agc/Agc.vue
  79. 22 4
      src/views/Agc/components/agc-panel.vue
  80. 518 456
      src/views/Decision/Decision1.vue
  81. 23 5
      src/views/Decision/Decision1Mx.vue
  82. 9 1
      src/views/Decision/Decision2.vue
  83. 10 2
      src/views/Decision/Decision2Cjdb.vue
  84. 9 1
      src/views/Decision/Decision2Cndb.vue
  85. 9 1
      src/views/Decision/Decision2Xldb.vue
  86. 5 6
      src/views/Decision/Decision2Xmdb.vue
  87. 9 1
      src/views/Decision/Decision3.vue
  88. 2 2
      src/views/Decision/table.vue
  89. 1220 1133
      src/views/Demo.vue
  90. 30 22
      src/views/HealthControl/Health0.vue
  91. 201 151
      src/views/HealthControl/Health10.vue
  92. 8 20
      src/views/HealthControl/Health2.vue
  93. 9 21
      src/views/HealthControl/Health3.vue
  94. 3 1
      src/views/HealthControl/Health4.vue
  95. 0 1
      src/views/HealthControl/Health5.vue
  96. 47 51
      src/views/HealthControl/Health6.vue
  97. 546 0
      src/views/HealthControl/HealthDay.vue
  98. 8 0
      src/views/HealthControl/HealthMonth.vue
  99. 59 29
      src/views/HealthControl/HealthTab1.vue
  100. 0 0
      src/views/HealthControl/HealthTab2.vue

+ 1 - 0
.gitignore

@@ -1,5 +1,6 @@
 node_modules
 dist
+dist.rar
 webpack.config.js
 .vscode
 .vscode/

+ 747 - 0
public/static/3d/fanvar.gltf

@@ -0,0 +1,747 @@
+{
+    "asset": {
+        "copyright": "2020 (c) Adobe Inc.",
+        "generator": "Adobe Dimension - a39c749b7f1dd68e8fcb597e3575f0bb9d09bfc8",
+        "version": "2.0"
+    },
+    "accessors": [
+        {
+            "bufferView": 0,
+            "componentType": 5126,
+            "count": 13056,
+            "type": "VEC3",
+            "max": [
+                0.011221112683415413,
+                0.11740083247423172,
+                0.02024685963988304
+            ],
+            "min": [
+                -0.013411412015557289,
+                -0.07223401963710785,
+                0.0027049516793340446
+            ]
+        },
+        {
+            "bufferView": 1,
+            "componentType": 5126,
+            "count": 13056,
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 2,
+            "componentType": 5126,
+            "count": 13056,
+            "type": "VEC2"
+        },
+        {
+            "bufferView": 3,
+            "componentType": 5125,
+            "count": 13056,
+            "type": "SCALAR",
+            "max": [
+                13055.0
+            ],
+            "min": [
+                0.0
+            ]
+        },
+        {
+            "bufferView": 4,
+            "componentType": 5126,
+            "count": 204,
+            "type": "VEC3",
+            "max": [
+                0.0033453553915023805,
+                0.004675381816923618,
+                0.038124099373817447
+            ],
+            "min": [
+                -0.0032793614082038404,
+                -0.0018486910266801715,
+                -0.00942382775247097
+            ]
+        },
+        {
+            "bufferView": 5,
+            "componentType": 5126,
+            "count": 204,
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "componentType": 5126,
+            "count": 204,
+            "type": "VEC2"
+        },
+        {
+            "bufferView": 7,
+            "componentType": 5125,
+            "count": 204,
+            "type": "SCALAR",
+            "max": [
+                203.0
+            ],
+            "min": [
+                0.0
+            ]
+        },
+        {
+            "bufferView": 8,
+            "componentType": 5126,
+            "count": 756,
+            "type": "VEC3",
+            "max": [
+                0.014427456073462963,
+                0.014790236949920655,
+                0.036329951137304309
+            ],
+            "min": [
+                -0.013931798748672009,
+                -0.014883722178637982,
+                -0.04279765114188194
+            ]
+        },
+        {
+            "bufferView": 9,
+            "componentType": 5126,
+            "count": 756,
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 10,
+            "componentType": 5126,
+            "count": 756,
+            "type": "VEC2"
+        },
+        {
+            "bufferView": 11,
+            "componentType": 5125,
+            "count": 756,
+            "type": "SCALAR",
+            "max": [
+                755.0
+            ],
+            "min": [
+                0.0
+            ]
+        },
+        {
+            "bufferView": 12,
+            "componentType": 5126,
+            "count": 96,
+            "type": "VEC3",
+            "max": [
+                0.002180294832214713,
+                0.002180294832214713,
+                0.0017989004263654352
+            ],
+            "min": [
+                -0.0021802950650453569,
+                -0.002180294832214713,
+                0.00009284965199185535
+            ]
+        },
+        {
+            "bufferView": 13,
+            "componentType": 5126,
+            "count": 96,
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 14,
+            "componentType": 5126,
+            "count": 96,
+            "type": "VEC2"
+        },
+        {
+            "bufferView": 15,
+            "componentType": 5125,
+            "count": 96,
+            "type": "SCALAR",
+            "max": [
+                95.0
+            ],
+            "min": [
+                0.0
+            ]
+        },
+        {
+            "bufferView": 16,
+            "componentType": 5126,
+            "count": 216,
+            "type": "VEC3",
+            "max": [
+                0.00047969480510801077,
+                0.0004724071768578142,
+                0.002878570696339011
+            ],
+            "min": [
+                -0.00047969480510801077,
+                -0.00047240720596164465,
+                0.0
+            ]
+        },
+        {
+            "bufferView": 17,
+            "componentType": 5126,
+            "count": 216,
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 18,
+            "componentType": 5126,
+            "count": 216,
+            "type": "VEC2"
+        },
+        {
+            "bufferView": 19,
+            "componentType": 5125,
+            "count": 216,
+            "type": "SCALAR",
+            "max": [
+                215.0
+            ],
+            "min": [
+                0.0
+            ]
+        },
+        {
+            "bufferView": 20,
+            "componentType": 5126,
+            "count": 2304,
+            "type": "VEC3",
+            "max": [
+                0.10547731816768646,
+                0.10547731816768646,
+                0.003030103398486972
+            ],
+            "min": [
+                -0.10547731816768646,
+                -0.10547731816768646,
+                0.0
+            ]
+        },
+        {
+            "bufferView": 21,
+            "componentType": 5126,
+            "count": 2304,
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 22,
+            "componentType": 5126,
+            "count": 2304,
+            "type": "VEC2"
+        },
+        {
+            "bufferView": 23,
+            "componentType": 5125,
+            "count": 2304,
+            "type": "SCALAR",
+            "max": [
+                2303.0
+            ],
+            "min": [
+                0.0
+            ]
+        }
+    ],
+    "bufferViews": [
+        {
+            "buffer": 0,
+            "byteOffset": 0,
+            "byteLength": 156672,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 156672,
+            "byteLength": 156672,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 313344,
+            "byteLength": 104448,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 417792,
+            "byteLength": 52224,
+            "target": 34963
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 470016,
+            "byteLength": 2448,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 472464,
+            "byteLength": 2448,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 474912,
+            "byteLength": 1632,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 476544,
+            "byteLength": 816,
+            "target": 34963
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 477360,
+            "byteLength": 9072,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 486432,
+            "byteLength": 9072,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 495504,
+            "byteLength": 6048,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 501552,
+            "byteLength": 3024,
+            "target": 34963
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 504576,
+            "byteLength": 1152,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 505728,
+            "byteLength": 1152,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 506880,
+            "byteLength": 768,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 507648,
+            "byteLength": 384,
+            "target": 34963
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 508032,
+            "byteLength": 2592,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 510624,
+            "byteLength": 2592,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 513216,
+            "byteLength": 1728,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 514944,
+            "byteLength": 864,
+            "target": 34963
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 515808,
+            "byteLength": 27648,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 543456,
+            "byteLength": 27648,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 571104,
+            "byteLength": 18432,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 589536,
+            "byteLength": 9216,
+            "target": 34963
+        }
+    ],
+    "buffers": [
+        {
+            "byteLength": 598752,
+            "uri": "fanvar_binary.bin"
+        }
+    ],
+    "cameras": [
+        {
+            "perspective": {
+                "znear": 0.00018717249622568488,
+                "yfov": 0.6024156808853149,
+                "zfar": 10.294486999511719,
+                "aspectRatio": 1.3333333730697632
+            },
+            "type": "perspective",
+            "name": "render_camera"
+        }
+    ],
+    "materials": [
+        {
+            "pbrMetallicRoughness": {
+                "metallicFactor": 0.0,
+                "roughnessFactor": 0.6000000238418579
+            },
+            "name": "25215",
+            "doubleSided": true
+        }
+    ],
+    "meshes": [
+        {
+            "name": "Box719",
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": 1,
+                        "POSITION": 0,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Cylinder881",
+            "primitives": [
+                {
+                    "attributes": {
+                        "POSITION": 4,
+                        "NORMAL": 5,
+                        "TEXCOORD_0": 6
+                    },
+                    "indices": 7,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Cylinder882",
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": 9,
+                        "POSITION": 8,
+                        "TEXCOORD_0": 10
+                    },
+                    "indices": 11,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Cone277",
+            "primitives": [
+                {
+                    "attributes": {
+                        "POSITION": 12,
+                        "NORMAL": 13,
+                        "TEXCOORD_0": 14
+                    },
+                    "indices": 15,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Cylinder883",
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": 17,
+                        "POSITION": 16,
+                        "TEXCOORD_0": 18
+                    },
+                    "indices": 19,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box720",
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": 1,
+                        "POSITION": 0,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box721",
+            "primitives": [
+                {
+                    "attributes": {
+                        "POSITION": 0,
+                        "NORMAL": 1,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Cylinder884",
+            "primitives": [
+                {
+                    "attributes": {
+                        "POSITION": 20,
+                        "NORMAL": 21,
+                        "TEXCOORD_0": 22
+                    },
+                    "indices": 23,
+                    "material": 0
+                }
+            ]
+        }
+    ],
+    "nodes": [
+        {
+            "translation": [
+                -11.440691947937012,
+                -1.1253594160079957,
+                11.870344161987305
+            ],
+            "rotation": [
+                -0.12059047073125839,
+                0.379409521818161,
+                0.04995020851492882,
+                0.9159756302833557
+            ],
+            "scale": [
+                1.0,
+                1.0,
+                0.9999999403953552
+            ],
+            "camera": 0,
+            "name": "render_camera_n3d"
+        },
+        {
+            "children": [
+                2
+            ],
+            "translation": [
+                -11.940691947937012,
+                -1.4253594875335694,
+                11.370344161987305
+            ],
+            "name": "fanvar"
+        },
+        {
+            "children": [
+                3,
+                4,
+                5,
+                6,
+                7,
+                8,
+                9,
+                10
+            ],
+            "translation": [
+                11.940667152404786,
+                5.136477947235107,
+                -11.370344161987305
+            ],
+            "rotation": [
+                -0.7071067690849304,
+                0.0,
+                0.0,
+                0.7071067690849304
+            ],
+            "scale": [
+                100.0,
+                100.0,
+                100.0
+            ],
+            "name": "fan"
+        },
+        {
+            "translation": [
+                0.013397247530519963,
+                -0.005721631925553083,
+                0.0017039866652339697
+            ],
+            "rotation": [
+                0.18382014334201814,
+                0.6827958822250366,
+                -0.6827934980392456,
+                0.18382878601551057
+            ],
+            "scale": [
+                0.15742753446102143,
+                0.15742753446102143,
+                0.15326982736587525
+            ],
+            "mesh": 0,
+            "name": "Box719"
+        },
+        {
+            "translation": [
+                0.006399879232048988,
+                -0.0013367461506277323,
+                -0.0275834072381258
+            ],
+            "mesh": 1,
+            "name": "Cylinder881"
+        },
+        {
+            "translation": [
+                0.006413211580365896,
+                -0.00017086027946788818,
+                0.010534534230828286
+            ],
+            "rotation": [
+                0.6996442079544067,
+                0.10246176272630692,
+                -0.10246184468269348,
+                0.699643611907959
+            ],
+            "scale": [
+                0.15742747485637666,
+                0.15742747485637666,
+                0.15742747485637666
+            ],
+            "mesh": 2,
+            "name": "Cylinder882"
+        },
+        {
+            "translation": [
+                0.006461353041231632,
+                -0.008173293434083462,
+                0.010590333491563797
+            ],
+            "rotation": [
+                0.6500799655914307,
+                -0.27820178866386416,
+                0.27820196747779848,
+                0.6500795483589172
+            ],
+            "scale": [
+                1.0,
+                1.0,
+                2.4167239665985109
+            ],
+            "mesh": 3,
+            "name": "Cone277"
+        },
+        {
+            "translation": [
+                0.006452121771872044,
+                -0.00868171639740467,
+                0.0104585075750947
+            ],
+            "rotation": [
+                -0.49999988079071047,
+                -0.5000001192092896,
+                -0.49999988079071047,
+                0.5000001192092896
+            ],
+            "mesh": 4,
+            "name": "Cylinder883"
+        },
+        {
+            "translation": [
+                0.010709802620112896,
+                -0.005721667315810919,
+                0.02103104256093502
+            ],
+            "rotation": [
+                0.683228611946106,
+                0.1822049766778946,
+                -0.18219634890556336,
+                0.6832308769226074
+            ],
+            "scale": [
+                0.15742753446102143,
+                0.15742753446102143,
+                0.15326984226703645
+            ],
+            "mesh": 5,
+            "name": "Box720"
+        },
+        {
+            "translation": [
+                -0.004684195853769779,
+                -0.0057218605652451519,
+                0.009040119126439095
+            ],
+            "rotation": [
+                0.49940842390060427,
+                -0.5005908608436585,
+                0.5005971789360046,
+                0.49940213561058047
+            ],
+            "scale": [
+                0.15742753446102143,
+                0.15742753446102143,
+                0.15326984226703645
+            ],
+            "mesh": 6,
+            "name": "Box721"
+        },
+        {
+            "translation": [
+                0.006561756134033203,
+                0.0,
+                -0.03711118549108505
+            ],
+            "scale": [
+                0.15742747485637666,
+                0.15742747485637666,
+                0.15742747485637666
+            ],
+            "mesh": 7,
+            "name": "Cylinder884"
+        }
+    ],
+    "scenes": [
+        {
+            "nodes": [
+                0,
+                1
+            ],
+            "name": "scene"
+        }
+    ],
+    "scene": 0
+}

BIN
public/static/3d/fanvar_binary.bin


+ 535 - 0
public/static/3d/lightvar.gltf

@@ -0,0 +1,535 @@
+{
+    "asset": {
+        "copyright": "2020 (c) Adobe Inc.",
+        "generator": "Adobe Dimension - a39c749b7f1dd68e8fcb597e3575f0bb9d09bfc8",
+        "version": "2.0"
+    },
+    "accessors": [
+        {
+            "bufferView": 0,
+            "componentType": 5126,
+            "count": 36,
+            "type": "VEC3",
+            "max": [
+                0.010735392570495606,
+                0.004967136308550835,
+                0.004486432299017906
+            ],
+            "min": [
+                -0.010735392570495606,
+                -0.004967136308550835,
+                0.0
+            ]
+        },
+        {
+            "bufferView": 1,
+            "componentType": 5126,
+            "count": 36,
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 2,
+            "componentType": 5126,
+            "count": 36,
+            "type": "VEC2"
+        },
+        {
+            "bufferView": 3,
+            "componentType": 5125,
+            "count": 36,
+            "type": "SCALAR",
+            "max": [
+                35.0
+            ],
+            "min": [
+                0.0
+            ]
+        }
+    ],
+    "bufferViews": [
+        {
+            "buffer": 0,
+            "byteOffset": 0,
+            "byteLength": 432,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 432,
+            "byteLength": 432,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 864,
+            "byteLength": 288,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 1152,
+            "byteLength": 144,
+            "target": 34963
+        }
+    ],
+    "buffers": [
+        {
+            "byteLength": 1296,
+            "uri": "lightvar_binary.bin"
+        }
+    ],
+    "cameras": [
+        {
+            "perspective": {
+                "znear": 0.00023857674386817962,
+                "yfov": 0.6024156808853149,
+                "zfar": 13.121721267700196,
+                "aspectRatio": 1.3333333730697632
+            },
+            "type": "perspective",
+            "name": "render_camera"
+        }
+    ],
+    "materials": [
+        {
+            "pbrMetallicRoughness": {
+                "baseColorFactor": [
+                    0.0,
+                    0.016807375475764276,
+                    0.05612849444150925,
+                    1.0
+                ],
+                "metallicFactor": 0.0,
+                "roughnessFactor": 0.7071067690849304
+            },
+            "name": "12 - Default",
+            "doubleSided": true
+        }
+    ],
+    "meshes": [
+        {
+            "name": "Box659",
+            "primitives": [
+                {
+                    "attributes": {
+                        "POSITION": 0,
+                        "NORMAL": 1,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box662",
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": 1,
+                        "POSITION": 0,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box660",
+            "primitives": [
+                {
+                    "attributes": {
+                        "POSITION": 0,
+                        "NORMAL": 1,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box663",
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": 1,
+                        "POSITION": 0,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box666",
+            "primitives": [
+                {
+                    "attributes": {
+                        "POSITION": 0,
+                        "NORMAL": 1,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box665",
+            "primitives": [
+                {
+                    "attributes": {
+                        "POSITION": 0,
+                        "NORMAL": 1,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box661",
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": 1,
+                        "POSITION": 0,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box668",
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": 1,
+                        "POSITION": 0,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box669",
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": 1,
+                        "POSITION": 0,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box664",
+            "primitives": [
+                {
+                    "attributes": {
+                        "POSITION": 0,
+                        "NORMAL": 1,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box667",
+            "primitives": [
+                {
+                    "attributes": {
+                        "POSITION": 0,
+                        "NORMAL": 1,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        },
+        {
+            "name": "Box670",
+            "primitives": [
+                {
+                    "attributes": {
+                        "POSITION": 0,
+                        "NORMAL": 1,
+                        "TEXCOORD_0": 2
+                    },
+                    "indices": 3,
+                    "material": 0
+                }
+            ]
+        }
+    ],
+    "nodes": [
+        {
+            "translation": [
+                0.22498351335525514,
+                0.39790037274360659,
+                35.385826110839847
+            ],
+            "rotation": [
+                -0.12059047073125839,
+                0.379409521818161,
+                0.04995020851492882,
+                0.9159756302833557
+            ],
+            "scale": [
+                1.0,
+                1.0,
+                0.9999999403953552
+            ],
+            "camera": 0,
+            "name": "render_camera_n3d"
+        },
+        {
+            "children": [
+                2
+            ],
+            "translation": [
+                -0.2750164866447449,
+                0.0979003757238388,
+                34.885826110839847
+            ],
+            "name": "light"
+        },
+        {
+            "children": [
+                3,
+                4,
+                5,
+                6,
+                7,
+                8,
+                9,
+                10,
+                11,
+                12,
+                13,
+                14
+            ],
+            "translation": [
+                0.2750164270401001,
+                0.1264212280511856,
+                -34.88582992553711
+            ],
+            "rotation": [
+                -0.7071067690849304,
+                0.0,
+                0.0,
+                0.7071067690849304
+            ],
+            "scale": [
+                100.0,
+                100.0,
+                100.0
+            ],
+            "name": "light"
+        },
+        {
+            "translation": [
+                0.021191921085119249,
+                0.035402219742536548,
+                -0.002243216149508953
+            ],
+            "rotation": [
+                0.0,
+                0.0,
+                -0.14833155274391175,
+                0.9889376759529114
+            ],
+            "mesh": 0,
+            "name": "Box659"
+        },
+        {
+            "translation": [
+                0.01723325625061989,
+                0.02250267006456852,
+                -0.002243216149508953
+            ],
+            "rotation": [
+                0.0,
+                0.0,
+                -0.14833155274391175,
+                0.9889376759529114
+            ],
+            "mesh": 1,
+            "name": "Box662"
+        },
+        {
+            "translation": [
+                -0.0013512963196262718,
+                0.04179275408387184,
+                -0.002243216149508953
+            ],
+            "rotation": [
+                0.0,
+                0.0,
+                -0.14833155274391175,
+                0.9889376759529114
+            ],
+            "mesh": 2,
+            "name": "Box660"
+        },
+        {
+            "translation": [
+                -0.005161983892321587,
+                0.029375456273555757,
+                -0.002243216149508953
+            ],
+            "rotation": [
+                0.0,
+                0.0,
+                -0.14833155274391175,
+                0.9889376759529114
+            ],
+            "mesh": 3,
+            "name": "Box663"
+        },
+        {
+            "translation": [
+                -0.009120659902691841,
+                0.01647598296403885,
+                -0.002243216149508953
+            ],
+            "rotation": [
+                0.0,
+                0.0,
+                -0.14833155274391175,
+                0.9889376759529114
+            ],
+            "mesh": 4,
+            "name": "Box666"
+        },
+        {
+            "translation": [
+                0.013274568133056164,
+                0.009603194892406464,
+                -0.002243216149508953
+            ],
+            "rotation": [
+                0.0,
+                0.0,
+                -0.14833155274391175,
+                0.9889376759529114
+            ],
+            "mesh": 5,
+            "name": "Box665"
+        },
+        {
+            "translation": [
+                -0.01662297546863556,
+                -0.012505950406193734,
+                -0.002243216149508953
+            ],
+            "rotation": [
+                0.0,
+                0.0,
+                -0.09154288470745087,
+                0.9958011507987976
+            ],
+            "mesh": 6,
+            "name": "Box661"
+        },
+        {
+            "translation": [
+                0.0071365367621183399,
+                -0.016811523586511613,
+                -0.002243216149508953
+            ],
+            "rotation": [
+                0.0,
+                0.0,
+                -0.09154288470745087,
+                0.9958011507987976
+            ],
+            "mesh": 7,
+            "name": "Box668"
+        },
+        {
+            "translation": [
+                0.004712914116680622,
+                -0.02988225780427456,
+                -0.002243216149508953
+            ],
+            "rotation": [
+                0.0,
+                0.0,
+                -0.09154288470745087,
+                0.9958011507987976
+            ],
+            "mesh": 8,
+            "name": "Box669"
+        },
+        {
+            "translation": [
+                -0.019046595320105554,
+                -0.025576705113053323,
+                -0.002243216149508953
+            ],
+            "rotation": [
+                0.0,
+                0.0,
+                -0.09154288470745087,
+                0.9958011507987976
+            ],
+            "mesh": 9,
+            "name": "Box664"
+        },
+        {
+            "translation": [
+                -0.021451115608215333,
+                -0.03854431211948395,
+                -0.002243216149508953
+            ],
+            "rotation": [
+                0.0,
+                0.0,
+                -0.09154288470745087,
+                0.9958011507987976
+            ],
+            "mesh": 10,
+            "name": "Box667"
+        },
+        {
+            "translation": [
+                0.0023083947598934175,
+                -0.04284980520606041,
+                -0.002243216149508953
+            ],
+            "rotation": [
+                0.0,
+                0.0,
+                -0.09154288470745087,
+                0.9958011507987976
+            ],
+            "mesh": 11,
+            "name": "Box670"
+        }
+    ],
+    "scenes": [
+        {
+            "nodes": [
+                0,
+                1
+            ],
+            "name": "scene"
+        }
+    ],
+    "scene": 0
+}

BIN
public/static/3d/lightvar_binary.bin


+ 6 - 2
public/static/config/modeConfig.js

@@ -7,8 +7,11 @@ let baseURL = null;
 // websocket 服务器地址
 let websocketUrl = null;
 
+// 适配器地址
+const adapterUrl = "http://10.155.32.4:8011/";
+
 if (localTest) {
-    baseURL = "http://192.168.10.12:8082/" // 联机调试 - 石林
+    baseURL = "http://192.168.10.13:8082/" // 联机调试 - 石林
         // baseURL = "http://10.155.32.33:9001/" // 联机调试 - 谢生杰
 } else {
     baseURL = "http://10.155.32.4:8082/" // 正式环境
@@ -18,5 +21,6 @@ websocketUrl = (baseURL.replace(/http:\/\/|https:\/\//g, "")) + "gyee-websocket"
 
 window.__MODE__ = {
     baseURL,
-    websocketUrl
+    websocketUrl,
+    adapterUrl
 };

File diff suppressed because it is too large
+ 0 - 4917
public/static/js/videoPlayer/adapter.js


File diff suppressed because it is too large
+ 0 - 2377
public/static/js/videoPlayer/bootstrap.js


File diff suppressed because it is too large
+ 0 - 7
public/static/js/videoPlayer/bootstrap.min.js


File diff suppressed because it is too large
+ 0 - 22
public/static/js/videoPlayer/flowplayer-3.2.13.min.js


File diff suppressed because it is too large
+ 0 - 7
public/static/js/videoPlayer/flv.min.js


+ 0 - 33
public/static/js/videoPlayer/h5scluster.js

@@ -1,33 +0,0 @@
-function H5SClusterHttpGet(url)
-{
-    var xmlHttp = new XMLHttpRequest();
-    xmlHttp.open("GET", url, false );
-    xmlHttp.send( null );
-    return xmlHttp.responseText;
-}
-
-function H5SClusterGetConf(conf)
-{
-    var strStatusUrl =  conf.protocol + '//' + conf.host + conf.rootpath +
-                'api/v1/cluster/GetClusterStatus';
-    console.log(strStatusUrl);        
-    var strStatus = H5SClusterHttpGet(strStatusUrl);
-    console.log(strStatus);
-    var strStatusJson = JSON.parse(strStatus);
-    if (strStatusJson["bEnable"] == true)
-    {
-        console.log("Cluster enable");
-        var strProtocol = "http";
-        if (conf.protocol == "https:")
-        {
-            strProtocol = "https";
-        }
-        var strAddrUrl =  conf.protocol + '//' + conf.host + conf.rootpath +
-                    'api/v1/cluster/GetServiceAddr?service=' + strProtocol + '&token=' + conf.token;
-        var strAddr = H5SClusterHttpGet(strAddrUrl);
-        console.log(strAddr);
-        var strAddrJson = JSON.parse(strAddr);
-        conf.host = strAddrJson["strAddr"] + ':' + strAddrJson["nPort"];
-        console.log("Cluster get play host", conf.host);
-    }
-}

+ 0 - 184
public/static/js/videoPlayer/h5sevent.js

@@ -1,184 +0,0 @@
-/** 
- *=================Event API
- *
- */
-/** 
- * Interface with h5s Event API
- * @constructor
- * @param 
- var conf = {
-	protocol: window.location.protocol, // {string} - 'http:' or 'https:'
-	host: window.location.host, //{string} - 'localhost:8080'
-	rootpath:window.location.pathname, // {string} - path of the app running
-	callback: EventCB, //{function}(event(string), userdata(object)) 
-	userdata: user data // user data
-	session:'c1782caf-b670-42d8-ba90-2244d0b0ee83', //{string} - session got from login
-	consolelog: 'true' // 'true' or 'false' enable/disable console.log
-};
-*/
-
-function H5sEvent(conf)
-{
-	this.wsSocket;
-	this.keepaliveTimerId;
-	this.bNeedReconnect = false;
-	this.bDisConnected = false;
-	
-	this._debug = true;	
-	if (conf.consolelog !== undefined)
-	{
-		if (conf.consolelog === 'false')
-		{
-			this._debug = false;	
-		}
-	}	
-	
-
-	this._conf = conf;	
-}
-
-H5sEvent.prototype.ReconnectFunction = function() 
-{
-	//if(this._debug === true) console.log('Try Reconnect...', this.bNeedReconnect);
-	if (this.bNeedReconnect === true)
-	{
-		if(this._debug === true) console.log('Reconnect...');
-		
-		this.setupWebSocket(this._token);
-		this.bNeedReconnect = false;
-	}
-	//if(this._debug === true) console.log('Try Reconnect...', this.bNeedReconnect);
-}
-	
-	
-H5sEvent.prototype.H5SWebSocketClient = function(h5spath) 
-{
-	var socket;
-	if(this._debug === true) console.log("H5SWebSocketClient");
-	try {
-		//alert(this._conf.protocol);
-		if (this._conf.protocol == "http:") 
-		{
-			if (typeof MozWebSocket != "undefined")
-			{
-				socket = new MozWebSocket('ws://' + this._conf.host  +  h5spath);
-			}else
-			{
-				socket = new WebSocket('ws://' + this._conf.host +  h5spath);
-			}
-		}
-		if (this._conf.protocol == "https:")
-		{	
-			//alert(this._conf.host);
-			if(this._debug === true) console.log(this._conf.host);
-			if (typeof MozWebSocket != "undefined")
-			{
-				socket = new MozWebSocket('wss://' + this._conf.host +  h5spath);
-			}else
-			{
-				socket = new WebSocket('wss://' + this._conf.host + h5spath);
-			}				
-		}
-		if(this._debug === true) console.log(this._conf.host);
-	} catch (e) {
-		alert('error');
-		return;
-	}
-	return socket;
-}
-
-H5sEvent.prototype.keepaliveTimer = function()	
-{
-	try {
-		var j = {};
-		j.type = "keepalive";
-		this.wsSocket.send(JSON.stringify(j));
-	} catch (e) {
-	  if(this._debug === true) console.log(e);
-	}
-}
-
-
-H5sEvent.prototype.onWebSocketData = function(msg)	
-{
-	
-	if (this._conf.callback != undefined)
-	{
-		this._conf.callback(msg.data, this._conf.userdata);
-	}
-} 
-	
-
-H5sEvent.prototype.setupWebSocket = function(token)	
-{	
-	var h5spath = "api/v1/h5seventapi";
-
-	h5spath = this._conf.rootpath + h5spath + '?session=' + this._conf.session;
-	
-	if(this._debug === true) console.log(h5spath);
-	
-	this.wsSocket = this.H5SWebSocketClient(h5spath);
-	if(this._debug === true) console.log("setupWebSocket", this.wsSocket);
-	this.wsSocket.binaryType = 'arraybuffer';
-	this.wsSocket.h5 = this;
-	this.wsSocket.onmessage = this.onWebSocketData.bind(this);
-	
-	this.wsSocket.onopen = function()
-	{
-		if(this.h5._debug === true) console.log("wsSocket.onopen", this.h5);
-		
-		this.h5.keepaliveTimerId = setInterval(this.h5.keepaliveTimer.bind(this.h5), 1000);
-
-	}
-	
-	this.wsSocket.onclose = function () {
-		if(this.h5._debug === true) console.log("wsSocket.onclose", this.h5);
-		if (this.h5.bDisConnected === true)
-		{
-			if(this.h5._debug === true) console.log("wsSocket.onclose disconnect");
-		}else
-		{
-			this.h5.bNeedReconnect = true;
-		}
-		
-		this.h5.CleanupWebSocket(this.h5);
-	}
-
-}
-
-
-H5sEvent.prototype.CleanupWebSocket = function(h5sPlayer)
-{
-	if(h5sPlayer._debug === true) console.log('CleanupWebSocket', h5sPlayer);
-	clearInterval(h5sPlayer.keepaliveTimerId);
-	h5sPlayer.emptyBuffCnt = 0;
-	h5sPlayer.lastBuffTime = 0;
-	h5sPlayer.buffTimeSameCnt = 0;
-}
-
-
-/** 
- * Connect a websocket Stream to videoElement 
-*/
-H5sEvent.prototype.connect = function() {
-	/* start connect to server */
-	this.setupWebSocket(this._token);
-	this.reconnectTimerId = setInterval(this.ReconnectFunction.bind(this), 3000);
-}
-
-
-/** 
- * Disconnect a websocket Stream and clear videoElement source
-*/
-H5sEvent.prototype.disconnect = function() {
-	if(this._debug === true) console.log("disconnect", this);
-	this.bDisConnected = true;
-	clearInterval(this.reconnectTimerId);
-	
-	if (this.wsSocket != null)
-	{
-		this.wsSocket.close();
-		this.wsSocket = null;
-	}
-	if(this._debug === true) console.log("disconnect", this);
-} 

+ 0 - 278
public/static/js/videoPlayer/h5spbcontrol.js

@@ -1,278 +0,0 @@
-/** 
- * Interface with h5s websocket pb ctonrol API
- * @constructor
- * @param 
- var pbconf1 = {
-	begintime: '2019-03-23T120101+08',//{string} begintime 0 for fileplayback
-	endtime: '2019-03-23T150101+08',//{string} endtime 0 for fileplayback
-	serverpb: 'true', //'true' or 'false' playback from h5stream record, default false 
-	filename: 'token1.mp4', // file name need to playback (begintime == 0 & endtime == 0 and serverpb is true)
-	callback: PlaybackCB, //{function}(event(string), userdata(object)) 
-	userdata:  user data // user data
-};
- 
- var conf = {
-	protocol: window.location.protocol, // {string} - 'http:' or 'https:'
-	host: window.location.host, //{string} - 'localhost:8080'
-	rootpath:window.location.pathname, // {string} - path of the app running
-	token:'token1', // {string} - token of stream
-	streamprofile: 'main', // {string} - stream profile, main/sub or other predefine transcoding profile
-	pbconf: pbconf1, //This is optional, if no pbconf, this will be live.
-	session:'c1782caf-b670-42d8-ba90-2244d0b0ee83', //{string} - session got from login
-	consolelog: 'true' // 'true' or 'false' enable/disable console.log
-};                     
-*/
-
-function H5sPbControl(conf)
-{
-	this.wsSocket;
-	this.keepaliveTimerId;
-	this.bDisConnected = false;
-	
-	this._debug = true;	
-	if (conf.consolelog !== undefined)
-	{
-		if (conf.consolelog === 'false')
-		{
-			this._debug = false;	
-		}
-	}	
-	
-	this._conf = conf;
-	if(this._debug === true) console.log("[PBCONTROL] Websocket Conf:", conf);
-	
-	this._pbconf = conf.pbconf;
-	
-	this._token = conf.token;
-}
-	
-H5sPbControl.prototype.H5SWebSocketClient = function(h5spath) 
-{
-	var socket;
-	if(this._debug === true) console.log("[PBCONTROL] H5SWebSocketClient");
-	try {
-		//alert(this._conf.protocol);
-		if (this._conf.protocol == "http:") 
-		{
-			if (typeof MozWebSocket != "undefined")
-			{
-				socket = new MozWebSocket('ws://' + this._conf.host  +  h5spath);
-			}else
-			{
-				socket = new WebSocket('ws://' + this._conf.host +  h5spath);
-			}
-		}
-		if (this._conf.protocol == "https:")
-		{	
-			//alert(this._conf.host);
-			if(this._debug === true) console.log(this._conf.host);
-			if (typeof MozWebSocket != "undefined")
-			{
-				socket = new MozWebSocket('wss://' + this._conf.host +  h5spath);
-			}else
-			{
-				socket = new WebSocket('wss://' + this._conf.host + h5spath);
-			}				
-		}
-		if(this._debug === true) console.log(this._conf.host);
-	} catch (e) {
-		alert('error');
-		return;
-	}
-	return socket;
-}
-
-H5sPbControl.prototype.keepaliveTimer = function()	
-{
-	try {
-		var j = {};
-		j.cmd = "H5_KEEPALIVE";
-		this.wsSocket.send(JSON.stringify(j));
-	} catch (e) {
-	  if(this._debug === true) console.log(e);
-	}
-}
-
-H5sPbControl.prototype.onWebSocketData = function(msg)	
-{	
-	if(typeof msg.data === 'string')
-	{
-		if(this._debug === true) console.log("[PBCONTROL] string");
-		if (this._pbconf != undefined && this._pbconf.callback != undefined)
-		{
-			this._pbconf.callback(msg.data, this._pbconf.userdata);
-		}
-		return;
-	}
-	
-	if (this.bDisConnected === true)
-	{
-		return;
-	}
-} 
-
-H5sPbControl.prototype.setupWebSocket = function(token)	
-{
-	var h5spath = "api/v1/h5spbcontrolapi";
-	var streamprofile = 'main';
-	if (this._conf.streamprofile === undefined)
-	{}else 
-	{
-		streamprofile = this._conf.streamprofile;
-	}
-	
-	if (this._pbconf === undefined)
-	{
-		h5spath = this._conf.rootpath + h5spath + "?token=" + token 
-						+ "&profile=" + streamprofile + '&session=' + this._conf.session;
-	}else 
-	{
-		var serverpb = 'false';
-		var filename = 'fake';
-		if (this._pbconf.serverpb === undefined)
-		{}else 
-		{
-			serverpb = this._pbconf.serverpb;
-		}
-
-		if (this._pbconf.filename === undefined)
-		{}else 
-		{
-			filename = this._pbconf.filename;
-		}		
-		
-		h5spath = this._conf.rootpath + h5spath + "?token=" + token 
-								+ "&playback=true"
-								+ '&profile=' + streamprofile
-								+ "&serverpb=" + serverpb
-								+ "&begintime=" + encodeURIComponent(this._pbconf.begintime)//this._pbconf.begintime
-								+ "&endtime=" + encodeURIComponent(this._pbconf.endtime)//this._pbconf.endtime
-								+ "&filename=" + filename//file name
-								+ '&session=' + this._conf.session;
-	}				+ '&session=' + this._conf.session;
-
-	
-	
-	if(this._debug === true) console.log(h5spath);
-	
-	this.wsSocket = this.H5SWebSocketClient(h5spath);
-	if(this._debug === true) console.log("[PBCONTROL] setupWebSocket", this.wsSocket);
-	this.wsSocket.binaryType = 'arraybuffer';
-	this.wsSocket.h5 = this;
-	this.wsSocket.onmessage = this.onWebSocketData.bind(this);
-	
-	this.wsSocket.onopen = function()
-	{
-		if(this.h5._debug === true) console.log("[PBCONTROL] wsSocket.onopen", this.h5);
-		this.h5.keepaliveTimerId = setInterval(this.h5.keepaliveTimer.bind(this.h5), 1000);
-
-		var j = {};
-		j.type = "H5S_WS_CONNECTED";
-		if (this.h5._pbconf != undefined && this.h5._pbconf.callback != undefined)
-		{
-			this.h5._pbconf.callback(JSON.stringify(j), this.h5._pbconf.userdata);
-		}
-	}
-	
-	this.wsSocket.onclose = function () {
-		if(this.h5._debug === true) console.log("[PBCONTROL] wsSocket.onclose", this.h5);
-		
-		var j = {};
-		j.type = "H5S_WS_DISCONNECTED";
-		if (this.h5._pbconf != undefined && this.h5._pbconf.callback != undefined)
-		{
-			this.h5._pbconf.callback(JSON.stringify(j), this.h5._pbconf.userdata);
-		}
-		
-		this.h5.CleanupWebSocket(this.h5);
-	}
-
-}
-	
-H5sPbControl.prototype.CleanupWebSocket = function(h5sPlayer)
-{
-	if(h5sPlayer._debug === true) console.log('[PBCONTROL] CleanupWebSocket', h5sPlayer);
-	clearInterval(h5sPlayer.keepaliveTimerId);
-}
-
-
-/** 
- * Connect a websocket Stream to videoElement 
-*/
-H5sPbControl.prototype.connect = function() {
-	/* start connect to server */
-	this.setupWebSocket(this._token);
-}
-
-
-/** 
- * Disconnect a websocket Stream and clear videoElement source
-*/
-H5sPbControl.prototype.disconnect = function() {
-	if(this._debug === true) console.log("[PBCONTROL] disconnect", this);
-	this.bDisConnected = true;
-	clearInterval(this.reconnectTimerId);
-	
-	try {
-		if (this.wsSocket != null)
-		{
-			this.wsSocket.close();
-			this.wsSocket = null;
-		}
-	}
-	catch (e){}
-	
-	if(this._debug === true) console.log("[PBCONTROL] disconnect", this);
-}
-
-H5sPbControl.prototype.start = function(){
-	try {
-		var j = {};
-		j.cmd = "H5_START";
-		this.wsSocket.send(JSON.stringify(j));
-	} catch (e) {
-	  if(this._debug === true) console.log(e);
-	}
-}
-
-H5sPbControl.prototype.pause = function(){
-	try {
-		var j = {};
-		j.cmd = "H5_PAUSE";
-		this.wsSocket.send(JSON.stringify(j));
-	} catch (e) {
-	  if(this._debug === true) console.log(e);
-	}
-}
-
-H5sPbControl.prototype.resume = function(){
-	try {
-		var j = {};
-		j.cmd = "H5_RESUME";
-		this.wsSocket.send(JSON.stringify(j));
-	} catch (e) {
-	  if(this._debug === true) console.log(e);
-	}
-}
-
-H5sPbControl.prototype.seek = function(nTime){
-	try {
-		var j = {};
-		j.cmd = "H5_SEEK";
-		j.nSeekTime = nTime;
-		this.wsSocket.send(JSON.stringify(j));
-	} catch (e) {
-	  if(this._debug === true) console.log(e);
-	}
-}
-
-H5sPbControl.prototype.speed = function(nSpeed){
-	try {
-		var j = {};
-		j.cmd = "H5_SPEED";
-		j.nSpeed = nSpeed;
-		this.wsSocket.send(JSON.stringify(j));
-	} catch (e) {
-	  if(this._debug === true) console.log(e);
-	}
-}

File diff suppressed because it is too large
+ 0 - 1
public/static/js/videoPlayer/h5splayer.js


+ 0 - 110
public/static/js/videoPlayer/h5splayerhelper.js

@@ -1,110 +0,0 @@
-/** 
- * Check platform and OS
-	(platform.name); // 'Safari'
-	(platform.version); // '11.1'
-	(platform.product); // 'iPad'
-	(platform.manufacturer); // 'Apple'
-	(platform.layout); // 'WebKit'
-	(platform.os.family); // 'iOS'
-	(platform.description);// 'Safari 11.1 on Apple iPad (iOS 11.0)'
- 
-*/
-function H5siOS() {
-    var browserName=platform.os.family;  
-    if(/ios/i.test(browserName) ){  
-        return true;  
-    } 
-	return false;
-}
-
-function H5sChromeBrowser(){  
-    var browserName=platform.name;  
-    if(/chrome/i.test(browserName) ){  
-        return true;  
-    }  
-    return false;
-}  
-
-
-function H5sEdgeBrowser(){  
-    var browserName=platform.name;  
-    if(/edge/i.test(browserName) ){  
-        return true;  
-    }  
-    return false;
-} 
-
-function H5sSafariBrowser(){  
-    var browserName=platform.name;  
-	console.log(browserName);
-    if(/safari/i.test(browserName) ){  
-        return true;  
-    }  
-    return false;
-}
-
-function H5sAndriodPlatform(){  
-    var browserName=platform.os.family;  
-    if(/android/i.test(browserName) ){  
-        return true;  
-    }  
-    return false;
-}
-
-/** 
- *=================H5Player Create
- *
- */
- 
-function H5sPlayerCreate(conf) {
-	var player;
-
-	if (H5siOS())
-	{
-        player = new H5sPlayerRTC(conf);
-	}else{
-        player = new H5sPlayerWS(conf);
-	}
-	return player;
-}
-
-
-function GetURLParameter(sParam)
-{
-    var sPageURL = window.location.search.substring(1);
-    var sURLVariables = sPageURL.split('&');
-    for (var i = 0; i < sURLVariables.length; i++) 
-    {
-        var sParameterName = sURLVariables[i].split('=');
-        if (sParameterName[0] == sParam) 
-        {
-            return sParameterName[1];
-        }
-    }
-}
-
-
-function H5sSnapshot(vid, fileName)
-{
-	var video = vid;
-	var w = video.videoWidth;//video.videoWidth * scaleFactor;
-	var h = video.videoHeight;//video.videoHeight * scaleFactor;
-	var canvas = document.createElement('canvas');
-	canvas.width = w;
-	canvas.height = h;
-	var ctx = canvas.getContext('2d');
-	ctx.drawImage(video, 0, 0, w, h);
-	var MIME_TYPE = "image/png";
-	var imgURL = canvas.toDataURL(MIME_TYPE);
-
-	var dlLink = document.createElement('a');
-	dlLink.download = fileName;
-	dlLink.href = imgURL;
-	dlLink.dataset.downloadurl = [MIME_TYPE, dlLink.download, dlLink.href].join(':');
-
-	document.body.appendChild(dlLink);
-	dlLink.click();
-	document.body.removeChild(dlLink);           
-}
- 
-

+ 0 - 214
public/static/js/videoPlayer/jQuery.md5.js

@@ -1,214 +0,0 @@
-	/**
-	 * jQuery MD5 hash algorithm function
-	 * 
-	 * 	<code>
-	 * 		Calculate the md5 hash of a String 
-	 * 		String $.md5 ( String str )
-	 * 	</code>
-	 * 
-	 * Calculates the MD5 hash of str using the » RSA Data Security, Inc. MD5 Message-Digest Algorithm, and returns that hash. 
-	 * MD5 (Message-Digest algorithm 5) is a widely-used cryptographic hash function with a 128-bit hash value. MD5 has been employed in a wide variety of security applications, and is also commonly used to check the integrity of data. The generated hash is also non-reversable. Data cannot be retrieved from the message digest, the digest uniquely identifies the data.
-	 * MD5 was developed by Professor Ronald L. Rivest in 1994. Its 128 bit (16 byte) message digest makes it a faster implementation than SHA-1.
-	 * This script is used to process a variable length message into a fixed-length output of 128 bits using the MD5 algorithm. It is fully compatible with UTF-8 encoding. It is very useful when u want to transfer encrypted passwords over the internet. If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag). 
-	 * This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin.
-	 * 
-	 * Example
-	 * 	Code
-	 * 		<code>
-	 * 			$.md5("I'm Persian."); 
-	 * 		</code>
-	 * 	Result
-	 * 		<code>
-	 * 			"b8c901d0f02223f9761016cfff9d68df"
-	 * 		</code>
-	 * 
-	 * @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com >
-	 * @link http://www.semnanweb.com/jquery-plugin/md5.html
-	 * @see http://www.webtoolkit.info/
-	 * @license http://www.gnu.org/licenses/gpl.html [GNU General Public License]
-	 * @param {jQuery} {md5:function(string))
-	 * @return string
-	 */
-	(function($){
-		var rotateLeft = function(lValue, iShiftBits) {
-			return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
-		}
-		var addUnsigned = function(lX, lY) {
-			var lX4, lY4, lX8, lY8, lResult;
-			lX8 = (lX & 0x80000000);
-			lY8 = (lY & 0x80000000);
-			lX4 = (lX & 0x40000000);
-			lY4 = (lY & 0x40000000);
-			lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
-			if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
-			if (lX4 | lY4) {
-				if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
-				else return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
-			} else {
-				return (lResult ^ lX8 ^ lY8);
-			}
-		}
-		var F = function(x, y, z) {
-			return (x & y) | ((~ x) & z);
-		}
-		var G = function(x, y, z) {
-			return (x & z) | (y & (~ z));
-		}
-		var H = function(x, y, z) {
-			return (x ^ y ^ z);
-		}
-		var I = function(x, y, z) {
-			return (y ^ (x | (~ z)));
-		}
-		var FF = function(a, b, c, d, x, s, ac) {
-			a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));
-			return addUnsigned(rotateLeft(a, s), b);
-		};
-		var GG = function(a, b, c, d, x, s, ac) {
-			a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));
-			return addUnsigned(rotateLeft(a, s), b);
-		};
-		var HH = function(a, b, c, d, x, s, ac) {
-			a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));
-			return addUnsigned(rotateLeft(a, s), b);
-		};
-		var II = function(a, b, c, d, x, s, ac) {
-			a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));
-			return addUnsigned(rotateLeft(a, s), b);
-		};
-		var convertToWordArray = function(string) {
-			var lWordCount;
-			var lMessageLength = string.length;
-			var lNumberOfWordsTempOne = lMessageLength + 8;
-			var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64;
-			var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16;
-			var lWordArray = Array(lNumberOfWords - 1);
-			var lBytePosition = 0;
-			var lByteCount = 0;
-			while (lByteCount < lMessageLength) {
-				lWordCount = (lByteCount - (lByteCount % 4)) / 4;
-				lBytePosition = (lByteCount % 4) * 8;
-				lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
-				lByteCount++;
-			}
-			lWordCount = (lByteCount - (lByteCount % 4)) / 4;
-			lBytePosition = (lByteCount % 4) * 8;
-			lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
-			lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
-			lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
-			return lWordArray;
-		};
-		var wordToHex = function(lValue) {
-			var WordToHexValue = "", WordToHexValueTemp = "", lByte, lCount;
-			for (lCount = 0; lCount <= 3; lCount++) {
-				lByte = (lValue >>> (lCount * 8)) & 255;
-				WordToHexValueTemp = "0" + lByte.toString(16);
-				WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2);
-			}
-			return WordToHexValue;
-		};
-		var uTF8Encode = function(string) {
-			string = string.replace(/\x0d\x0a/g, "\x0a");
-			var output = "";
-			for (var n = 0; n < string.length; n++) {
-				var c = string.charCodeAt(n);
-				if (c < 128) {
-					output += String.fromCharCode(c);
-				} else if ((c > 127) && (c < 2048)) {
-					output += String.fromCharCode((c >> 6) | 192);
-					output += String.fromCharCode((c & 63) | 128);
-				} else {
-					output += String.fromCharCode((c >> 12) | 224);
-					output += String.fromCharCode(((c >> 6) & 63) | 128);
-					output += String.fromCharCode((c & 63) | 128);
-				}
-			}
-			return output;
-		};
-		$.extend({
-			md5: function(string) {
-				var x = Array();
-				var k, AA, BB, CC, DD, a, b, c, d;
-				var S11=7, S12=12, S13=17, S14=22;
-				var S21=5, S22=9 , S23=14, S24=20;
-				var S31=4, S32=11, S33=16, S34=23;
-				var S41=6, S42=10, S43=15, S44=21;
-				string = uTF8Encode(string);
-				x = convertToWordArray(string);
-				a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
-				for (k = 0; k < x.length; k += 16) {
-					AA = a; BB = b; CC = c; DD = d;
-					a = FF(a, b, c, d, x[k+0],  S11, 0xD76AA478);
-					d = FF(d, a, b, c, x[k+1],  S12, 0xE8C7B756);
-					c = FF(c, d, a, b, x[k+2],  S13, 0x242070DB);
-					b = FF(b, c, d, a, x[k+3],  S14, 0xC1BDCEEE);
-					a = FF(a, b, c, d, x[k+4],  S11, 0xF57C0FAF);
-					d = FF(d, a, b, c, x[k+5],  S12, 0x4787C62A);
-					c = FF(c, d, a, b, x[k+6],  S13, 0xA8304613);
-					b = FF(b, c, d, a, x[k+7],  S14, 0xFD469501);
-					a = FF(a, b, c, d, x[k+8],  S11, 0x698098D8);
-					d = FF(d, a, b, c, x[k+9],  S12, 0x8B44F7AF);
-					c = FF(c, d, a, b, x[k+10], S13, 0xFFFF5BB1);
-					b = FF(b, c, d, a, x[k+11], S14, 0x895CD7BE);
-					a = FF(a, b, c, d, x[k+12], S11, 0x6B901122);
-					d = FF(d, a, b, c, x[k+13], S12, 0xFD987193);
-					c = FF(c, d, a, b, x[k+14], S13, 0xA679438E);
-					b = FF(b, c, d, a, x[k+15], S14, 0x49B40821);
-					a = GG(a, b, c, d, x[k+1],  S21, 0xF61E2562);
-					d = GG(d, a, b, c, x[k+6],  S22, 0xC040B340);
-					c = GG(c, d, a, b, x[k+11], S23, 0x265E5A51);
-					b = GG(b, c, d, a, x[k+0],  S24, 0xE9B6C7AA);
-					a = GG(a, b, c, d, x[k+5],  S21, 0xD62F105D);
-					d = GG(d, a, b, c, x[k+10], S22, 0x2441453);
-					c = GG(c, d, a, b, x[k+15], S23, 0xD8A1E681);
-					b = GG(b, c, d, a, x[k+4],  S24, 0xE7D3FBC8);
-					a = GG(a, b, c, d, x[k+9],  S21, 0x21E1CDE6);
-					d = GG(d, a, b, c, x[k+14], S22, 0xC33707D6);
-					c = GG(c, d, a, b, x[k+3],  S23, 0xF4D50D87);
-					b = GG(b, c, d, a, x[k+8],  S24, 0x455A14ED);
-					a = GG(a, b, c, d, x[k+13], S21, 0xA9E3E905);
-					d = GG(d, a, b, c, x[k+2],  S22, 0xFCEFA3F8);
-					c = GG(c, d, a, b, x[k+7],  S23, 0x676F02D9);
-					b = GG(b, c, d, a, x[k+12], S24, 0x8D2A4C8A);
-					a = HH(a, b, c, d, x[k+5],  S31, 0xFFFA3942);
-					d = HH(d, a, b, c, x[k+8],  S32, 0x8771F681);
-					c = HH(c, d, a, b, x[k+11], S33, 0x6D9D6122);
-					b = HH(b, c, d, a, x[k+14], S34, 0xFDE5380C);
-					a = HH(a, b, c, d, x[k+1],  S31, 0xA4BEEA44);
-					d = HH(d, a, b, c, x[k+4],  S32, 0x4BDECFA9);
-					c = HH(c, d, a, b, x[k+7],  S33, 0xF6BB4B60);
-					b = HH(b, c, d, a, x[k+10], S34, 0xBEBFBC70);
-					a = HH(a, b, c, d, x[k+13], S31, 0x289B7EC6);
-					d = HH(d, a, b, c, x[k+0],  S32, 0xEAA127FA);
-					c = HH(c, d, a, b, x[k+3],  S33, 0xD4EF3085);
-					b = HH(b, c, d, a, x[k+6],  S34, 0x4881D05);
-					a = HH(a, b, c, d, x[k+9],  S31, 0xD9D4D039);
-					d = HH(d, a, b, c, x[k+12], S32, 0xE6DB99E5);
-					c = HH(c, d, a, b, x[k+15], S33, 0x1FA27CF8);
-					b = HH(b, c, d, a, x[k+2],  S34, 0xC4AC5665);
-					a = II(a, b, c, d, x[k+0],  S41, 0xF4292244);
-					d = II(d, a, b, c, x[k+7],  S42, 0x432AFF97);
-					c = II(c, d, a, b, x[k+14], S43, 0xAB9423A7);
-					b = II(b, c, d, a, x[k+5],  S44, 0xFC93A039);
-					a = II(a, b, c, d, x[k+12], S41, 0x655B59C3);
-					d = II(d, a, b, c, x[k+3],  S42, 0x8F0CCC92);
-					c = II(c, d, a, b, x[k+10], S43, 0xFFEFF47D);
-					b = II(b, c, d, a, x[k+1],  S44, 0x85845DD1);
-					a = II(a, b, c, d, x[k+8],  S41, 0x6FA87E4F);
-					d = II(d, a, b, c, x[k+15], S42, 0xFE2CE6E0);
-					c = II(c, d, a, b, x[k+6],  S43, 0xA3014314);
-					b = II(b, c, d, a, x[k+13], S44, 0x4E0811A1);
-					a = II(a, b, c, d, x[k+4],  S41, 0xF7537E82);
-					d = II(d, a, b, c, x[k+11], S42, 0xBD3AF235);
-					c = II(c, d, a, b, x[k+2],  S43, 0x2AD7D2BB);
-					b = II(b, c, d, a, x[k+9],  S44, 0xEB86D391);
-					a = addUnsigned(a, AA);
-					b = addUnsigned(b, BB);
-					c = addUnsigned(c, CC);
-					d = addUnsigned(d, DD);
-				}
-				var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);
-				return tempValue.toLowerCase();
-			}
-		});
-	})(jQuery);

File diff suppressed because it is too large
+ 0 - 10220
public/static/js/videoPlayer/jquery-3.1.1.js


File diff suppressed because it is too large
+ 0 - 1
public/static/js/videoPlayer/linkplayer.js


File diff suppressed because it is too large
+ 0 - 1217
public/static/js/videoPlayer/platform.js


File diff suppressed because it is too large
+ 0 - 26804
public/static/js/videoPlayer/video.js


+ 9 - 8
src/App.vue

@@ -1,7 +1,7 @@
 <template>
   <div v-if="isLogined" class="main">
     <div class="header-body">
-      <div class="header-title">
+      <div class="header-title" @mouseenter="showMenu">
         <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="16.667vh" height="3.704vh" viewBox="0 0 377.437 91.615" enable-background="new 0 0 377.437 91.615" xml:space="preserve">
           <g id="图层_1">
             <g>
@@ -172,8 +172,8 @@ l16.229-16.229l16.229,16.229l42.867-42.867C115.034,45.228,109.133,42.189,102.956
       </div>
       <div class="header-menu-body"><Header @onMenuClick="HeaderMenuClick" /></div>
     </div>
-    <div class="menu-body" @mouseenter="showMenu" @mouseleave="hideMenu"><Menu :root="root" /></div>
-    <div class="main-body" :class="{ 'show-menu': isShowMenu }">
+    <div class="menu-body" :class="{ hover: isShowMenu }" @mouseenter="showMenu" @mouseleave="hideMenu"><Menu :root="root" /></div>
+    <div class="main-body">
       <router-view />
     </div>
   </div>
@@ -223,10 +223,10 @@ export default {
             method: "POST", // 请求方式,默认为 GET ,可缺省
             subUrl: "admin/usermenu", // 请求接口地址,必传项
             success() {
-              that.BASE.showMsg({
-                msg: "登陆成功",
-                type: "success",
-              });
+              // that.BASE.showMsg({
+              //   msg: "登陆成功",
+              //   type: "success",
+              // });
               // that.$router.push('/'); // 跳转到首页
             },
           });
@@ -324,7 +324,8 @@ body {
     transition-timing-function: ease-in;
     transform: translate(-@menuWidth);
 
-    &:hover {
+    &:hover,
+    &.hover {
       opacity: 1;
       transition: opacity 0.2s;
       transition-timing-function: ease-out;

File diff suppressed because it is too large
+ 1 - 0
src/assets/icon/svg/weather/天气1.svg


File diff suppressed because it is too large
+ 1 - 0
src/assets/icon/svg/weather/日出1.svg


File diff suppressed because it is too large
+ 1 - 0
src/assets/icon/svg/weather/日落1.svg


File diff suppressed because it is too large
+ 1 - 0
src/assets/icon/svg/weather/气压1.svg


File diff suppressed because it is too large
+ 1 - 0
src/assets/icon/svg/weather/温度1.svg


File diff suppressed because it is too large
+ 1 - 0
src/assets/icon/svg/weather/湿度1.svg


File diff suppressed because it is too large
+ 1 - 0
src/assets/icon/svg/weather/风速.svg


File diff suppressed because it is too large
+ 1 - 0
src/assets/icon/svg/功率.svg


BIN
src/assets/png/3dcloud.png


BIN
src/assets/png/3dmap.png


+ 4 - 0
src/assets/png/direction/e.svg

@@ -0,0 +1,4 @@
+<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
+    <path transform="rotate(90, 512, 512)" fill="#606769"
+        d="M481.40237431 959.20431408l56.28935586 0 0-711.56197453 139.16205511 0-167.38743941-223.02022163-167.3874394 223.02022163 139.32468148 0 0 711.56197453z"></path>
+</svg>

+ 4 - 0
src/assets/png/direction/n.svg

@@ -0,0 +1,4 @@
+<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
+    <path transform="rotate(0, 512, 512)" fill="#606769"
+        d="M481.40237431 959.20431408l56.28935586 0 0-711.56197453 139.16205511 0-167.38743941-223.02022163-167.3874394 223.02022163 139.32468148 0 0 711.56197453z"></path>
+</svg>

+ 4 - 0
src/assets/png/direction/ne.svg

@@ -0,0 +1,4 @@
+<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
+    <path transform="rotate(45, 512, 512)" fill="#606769"
+        d="M481.40237431 959.20431408l56.28935586 0 0-711.56197453 139.16205511 0-167.38743941-223.02022163-167.3874394 223.02022163 139.32468148 0 0 711.56197453z"></path>
+</svg>

+ 4 - 0
src/assets/png/direction/nw.svg

@@ -0,0 +1,4 @@
+<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
+    <path transform="rotate(-45, 512, 512)" fill="#606769"
+        d="M481.40237431 959.20431408l56.28935586 0 0-711.56197453 139.16205511 0-167.38743941-223.02022163-167.3874394 223.02022163 139.32468148 0 0 711.56197453z"></path>
+</svg>

+ 4 - 0
src/assets/png/direction/s.svg

@@ -0,0 +1,4 @@
+<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
+    <path transform="rotate(180, 512, 512)" fill="#606769"
+        d="M481.40237431 959.20431408l56.28935586 0 0-711.56197453 139.16205511 0-167.38743941-223.02022163-167.3874394 223.02022163 139.32468148 0 0 711.56197453z"></path>
+</svg>

+ 4 - 0
src/assets/png/direction/se.svg

@@ -0,0 +1,4 @@
+<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
+    <path transform="rotate(135, 512, 512)" fill="#606769"
+        d="M481.40237431 959.20431408l56.28935586 0 0-711.56197453 139.16205511 0-167.38743941-223.02022163-167.3874394 223.02022163 139.32468148 0 0 711.56197453z"></path>
+</svg>

+ 4 - 0
src/assets/png/direction/sw.svg

@@ -0,0 +1,4 @@
+<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
+    <path transform="rotate(-135, 512, 512)" fill="#606769"
+        d="M481.40237431 959.20431408l56.28935586 0 0-711.56197453 139.16205511 0-167.38743941-223.02022163-167.3874394 223.02022163 139.32468148 0 0 711.56197453z"></path>
+</svg>

+ 4 - 0
src/assets/png/direction/w.svg

@@ -0,0 +1,4 @@
+<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
+    <path transform="rotate(-90, 512, 512)" fill="#606769"
+        d="M481.40237431 959.20431408l56.28935586 0 0-711.56197453 139.16205511 0-167.38743941-223.02022163-167.3874394 223.02022163 139.32468148 0 0 711.56197453z"></path>
+</svg>

BIN
src/assets/png/weather/cloud.png


BIN
src/assets/png/weather/rain.png


BIN
src/assets/png/weather/sun.png


+ 5 - 2
src/assets/styles/app.less

@@ -89,7 +89,10 @@
   }
 }
 
-
 .el-col + .el-col {
   padding-left: 1.481vh;
-}
+}
+
+.blur {
+  backdrop-filter: blur(3px);
+}

+ 38 - 0
src/assets/styles/el-override/el-input.less

@@ -14,6 +14,10 @@ body {
       cursor: not-allowed;
     }
 
+    &.is-in-pagination .el-input__inner[type="number"] {
+      width: 48px;
+    }
+
     .el-input__inner[type="number"] {
       width: 200px;
 
@@ -194,6 +198,7 @@ body {
 
   // Cascader 级联选择器
   .el-cascader {
+    line-height: 30px;
     .el-cascader__tags {
       .el-tag {
         color: white;
@@ -204,6 +209,20 @@ body {
         }
       }
     }
+
+    .el-input__suffix {
+      right: 0px;
+    }
+
+  }
+
+  .el-select {
+    .el-input.is-focus .el-input__inner {
+      border-color: @green;
+    }
+    .el-input__inner:focus {
+      border-color: @green;
+    }
   }
 
   .el-popper {
@@ -227,6 +246,25 @@ body {
         color: @green;
       }
     }
+
+    &.el-select__popper[role="tooltip"] {
+      border-color: @picker-bg-color;
+      background: @picker-bg-color;
+
+      .el-cascader-menu {
+        border-color: @gray;
+      }
+
+      .el-select-dropdown__item.hover,
+      .el-select-dropdown__item:hover {
+        background: fade(@green, 20);
+        color: @green;
+      }
+
+      .el-select-dropdown__item.selected {
+        color: @green;
+      }
+    }
   }
 }
 

+ 4 - 0
src/assets/styles/el-override/el-pagination.less

@@ -32,5 +32,9 @@
       background: fade(@gray, 20);
       border: 1px solid fade(@gray, 20);
     }
+
+    .el-pagination__sizes .el-input .el-input__inner:hover {
+      border-color: @green;
+    }
   }
 }

+ 2 - 1
src/assets/styles/el-override/el-table.less

@@ -1,6 +1,6 @@
 // el-table
 .main-body {
-  .el-table {
+  .custom-table.el-table {
     background: transparent;
     border: 0px;
 
@@ -25,6 +25,7 @@
       height: 27px;
       line-height: 27px;
       font-size: 12px;
+      color: @gray-l;
     }
 
     th {

+ 7 - 1
src/assets/styles/table.less

@@ -44,7 +44,7 @@
       }
 
       td {
-        padding: 0.556vh 0;
+        padding: 4px;
         color: @rowGray;
         text-align: center;
         font-size: @fontsize-s;
@@ -52,6 +52,12 @@
         overflow: hidden;
         text-overflow: ellipsis;
 
+        & > span {
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+        }
+
         &.light,
         &.always-light {
           color: @green !important;

+ 501 - 0
src/components/arcgis/MHS_FDC.vue

@@ -0,0 +1,501 @@
+<template>
+  <div style="width: 100%; height: 100%">
+    <arcgis
+      class="arcgis-layer"
+      @when="when"
+      ref="arcgis"
+      :data="arcgisData"
+      @clickMap="clickMap"
+    >
+      <template
+        v-for="(fan, index) of fans"
+        :key="index"
+        v-slot:[fan.attributes.code]
+      >
+        <svg
+          v-if="fan.attributes.code != '升压站'"
+          @click="clickFan(fan.attributes.code)"
+          class="can-click esri-component"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          xmlns:xlink="http://www.w3.org/1999/xlink"
+          viewBox="0 0 200 240"
+          enable-background="new 0 0 200 240"
+          xml:space="preserve"
+          width="66"
+          height="66"
+        >
+          <!-- 底座 -->
+          <g>
+            <path
+              fill-rule="evenodd"
+              clip-rule="evenodd"
+              :fill="colors[fan.attributes.state][2]"
+              d="M100.681,156.137c24.579,0,44.505,8.548,44.505,19.094
+                            c0,10.545-19.926,19.093-44.505,19.093c-24.577,0-42.878-8.548-42.878-19.093C57.803,164.685,76.104,156.137,100.681,156.137z"
+            />
+          </g>
+          <!-- 后面的脑袋 -->
+          <g>
+            <path
+              fill-rule="evenodd"
+              clip-rule="evenodd"
+              :fill="colors[fan.attributes.state][0]"
+              d="M92.875,76.372l27.897-18.417c0,0,4.108-0.096,7.891,2.681
+                                c4.305,3.156,1.86,9.235,1.86,9.235l-24.374,23.292L92.875,76.372z"
+            />
+          </g>
+          <!-- 柱 -->
+          <g>
+            <path
+              fill-rule="evenodd"
+              clip-rule="evenodd"
+              :fill="colors[fan.attributes.state][0]"
+              d="M92.152,175.229h18.689l-4.876-94.254H97.84L92.152,175.229z"
+            />
+          </g>
+          <!-- 风扇 -->
+          <g>
+            <path
+              fill-rule="evenodd"
+              clip-rule="evenodd"
+              :fill="colors[fan.attributes.state][1]"
+              d="M109.007,85.525l-16.061,0.268l7.396-83.773L109.007,85.525z"
+            />
+            <path
+              fill-rule="evenodd"
+              clip-rule="evenodd"
+              :fill="colors[fan.attributes.state][1]"
+              d="M95.219,75.597l8.265,13.771l-76.25,35.483L95.219,75.597z
+                            M99.108,89.634l7.795-14.04l68.854,48.291L99.108,89.634z"
+            />
+            <animateTransform
+              v-if="fan.attributes.rotate"
+              attributeName="transform"
+              attributeType="XML"
+              type="rotate"
+              from="0 100 82"
+              to="359 100 82"
+              :dur="fan.attributes.dur + 's'"
+              repeatCount="indefinite"
+            />
+          </g>
+          <!-- 前面的尖 -->
+          <g>
+            <path
+              fill-rule="evenodd"
+              clip-rule="evenodd"
+              :fill="colors[fan.attributes.state][2]"
+              d="M92.863,72.903c0,0,13.912-0.343,17.098,4.352
+                            c2.984,4.397-2.58,15.473-2.58,15.473l-24.376,0.436L92.863,72.903z"
+            />
+          </g>
+          <!-- 文字 -->
+          <g>
+            <text
+              x="100"
+              y="240"
+              fill="#ffffff"
+              font-size="40"
+              text-anchor="middle"
+              alignment-baseline="baseline"
+            >
+              {{ fan.attributes.code }}
+            </text>
+          </g>
+        </svg>
+        <div v-if="fan.attributes.code == '升压站'">
+          <div class="syz-img">
+            <img :src="syzImg" />
+          </div>
+          <div class="white font-sm mr-t-8" style="text-align: center">
+            {{ fan.attributes.code }}
+          </div>
+        </div>
+      </template>
+    </arcgis>
+  </div>
+</template>
+
+<script>
+import arcgis from "./arcgis.vue";
+import dataService from "@/helper/data.js";
+
+export default {
+  // 名称
+  name: "Map",
+  // 使用组件
+  components: {
+    arcgis,
+  },
+  props: {
+    wpId: {
+      type: String,
+      default: "",
+    },
+  },
+  // 数据
+  data() {
+    return {
+      wpnumMap: {}, //风机监视数量
+      wpInfoMap: {}, //风机详情
+      fjmap: [], // 风机名
+      sourceId: "",
+      arcgisData: {
+        mode: "2D", // 模式 2D 3D
+        title: "宁夏地图", // 标题
+        center: [107.0391975, 37.31469028], // 初始中心点 106.230909, 38.487193
+        height: 654, // 3D地图初始相机高度
+        tilt: 65, // 俯视角
+        scale: 30000,
+        rotation: -45,
+        ox: -600,
+        oy: -50,
+      },
+      showPopup: false,
+      mapToolIndex: 0,
+      fans: [],
+      colors: {
+        0: ["#05bb4c", "#4ad476", "#9fedb2"],
+        1: ["#4b55ae", "#959dc7", "#d3d6e0"],
+        2: ["#BA3237", "#d4807d", "#eddad8"],
+        3: ["#606769", "#757575", "#AFAFAF"],
+        4: ["#e17e23", "#fabf78", "#ffebcc"],
+        5: ["#c531c7", "#e080dc", "#fadef7"],
+        6: ["#c531c7", "#e080dc", "#fadef7"],
+      },
+      syzImg: require("@assets/png/booster-station.png"),
+    };
+  },
+  created() {
+    let that = this;
+    that.sourceId = this.wpId;
+    that.$nextTick(() => {
+      that.requestData();
+    });
+  },
+  // 函数
+  methods: {
+    select(res) {
+      this.$router.replace({
+        path: `/monitor/windsite/map/${res.code}`,
+      });
+    },
+    // 风机状态监视
+    requestData() {
+      let that = this;
+      that.API.requestData({
+        method: "POST",
+        subUrl: "monitor/findGeneralAppearance",
+        data: {
+          wpId: that.wpId,
+        },
+        success(res) {
+          if (res.code == 200) {
+            that.wpnumMap = res.data.fczbmap.jczbmap;
+            that.wpInfoMap = res.data.wxssmap;
+            that.fjmap = res.data.fjmap[0];
+          }
+        },
+      });
+    },
+    when: function () {
+      let jsonObj = dataService.get("arcgis-nx-fc1");
+      this.fans = jsonObj;
+      jsonObj.forEach((item) => {
+        let obj = this.fjmap.find((t) => {
+          let wtid = t.wtId.replace("01_", "");
+          if (wtid == item.attributes.code) return t;
+        });
+        if (obj) {
+          item.attributes.state = String(obj.fjzt);
+        } else {
+          item.attributes.state = "4";
+        }
+        switch (item.attributes.state) {
+          case "0": //待机
+            item.attributes.rotate = false; // 转
+            item.attributes.dur = 8; // 转一圈时间
+            break;
+          case "1": //运行
+            item.attributes.rotate = true; // 转
+            item.attributes.dur = 2; // 转一圈时间
+            break;
+          case "2": //故障
+            item.attributes.rotate = false; // 不转
+            item.attributes.dur = 8;
+            break;
+          case "3": //中断
+            item.attributes.rotate = false; // 不转
+            item.attributes.dur = 8;
+            break;
+          case "4": //维护
+            item.attributes.rotate = false; // 不转
+            item.attributes.dur = 8;
+            break;
+          case "5": //限电
+            item.attributes.rotate = true; // 转
+            item.attributes.dur = 6;
+            break;
+          case "6": //停机
+            item.attributes.rotate = false; // 不转
+            item.attributes.dur = 8;
+            break;
+          default:
+            item.attributes.rotate = false;
+            item.attributes.dur = 8;
+            break;
+        }
+        this.$refs.arcgis.addHtmlPoint(
+          [item.geometry.x, item.geometry.y],
+          item.attributes.code,
+          33,
+          50,
+          false
+        );
+      });
+      let lineJsonObj = dataService.get("arcgis-nx-fc1-line");
+      this.$refs.arcgis.addFanByJson(jsonObj, lineJsonObj);
+    },
+    clickMap: function (info) {
+      console.log(info);
+    },
+    clickFan: function (code) {
+      let wtId = code.replace("G", "G01_");
+      this.$router.push(`/monitor/windsite/info/${this.wpId}/${wtId}`);
+    },
+    popupBack: function () {
+      this.showPopup = false;
+    },
+    clickMapTool: function (index) {
+      //   this.mapToolIndex = index;
+      this.showPopup = !this.showPopup;
+    },
+  },
+  watch: {
+    wpId(res) {
+      this.sourceId = res;
+      if (res) {
+        this.requestData();
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+@titleHeight: 40px;
+
+.map-1 {
+  width: 100%;
+  height: calc(100vh - 90px);
+  display: flex;
+  flex-direction: column;
+
+  .btn-group-tabs {
+    display: flex;
+    flex-direction: row;
+  }
+
+  .can-click {
+    cursor: pointer;
+  }
+
+  .syz-img {
+    width: 65px;
+    height: 47px;
+
+    img {
+      width: 100%;
+      height: 100%;
+    }
+  }
+
+  .panel-title {
+    width: 100%;
+    background-color: fade(@darkgray, 40%);
+    margin-top: 16px;
+    padding: 6px;
+    display: flex;
+    align-items: center;
+
+    .panel-title-name {
+      color: @green;
+      display: flex;
+      align-items: center;
+      line-height: 0;
+      font-size: 0;
+
+      i,
+      span {
+        margin: 0 0 0 16px;
+        line-height: 0;
+        font-size: 13px;
+      }
+    }
+
+    .sub-title-item {
+      display: flex;
+      align-items: center;
+      margin-left: 16px;
+
+      .sub-title {
+        font-size: 13px;
+        margin-left: 6px;
+      }
+
+      .sub-count {
+        font-size: 13px;
+        font-weight: 500;
+      }
+
+      img {
+        height: 31px;
+      }
+    }
+  }
+
+  .panel-body {
+    flex-grow: 1;
+    background-color: fade(@darkgray, 20%);
+    padding: 8px;
+    overflow: auto;
+    position: relative;
+
+    .arcgis-layer {
+      z-index: 1;
+    }
+
+    .map-popup-panel {
+      width: 760px;
+      position: absolute;
+      left: 71px;
+      top: 22px;
+      z-index: 2;
+
+      .map-popup-panel-header {
+        width: 100%;
+        background: fade(#152221, 90%);
+        display: flex;
+
+        .map-popup-panel-title {
+          padding: 17px 24px;
+          font-size: @fontsize-s;
+          position: relative;
+
+          &::before,
+          &::after {
+            position: absolute;
+            width: calc(50% - 6px);
+            bottom: 0;
+            border-bottom: 2px solid @green;
+          }
+
+          &::before {
+            content: "";
+            left: 0;
+          }
+
+          &::after {
+            content: "";
+            right: 0;
+          }
+
+          span {
+            position: absolute;
+            width: 11.3px;
+            height: 11.3px;
+            border-left: 2px solid @green;
+            border-top: 2px solid @green;
+            left: calc(50% - 5.65px);
+            bottom: -3px;
+            transform: rotate(45deg);
+          }
+        }
+
+        .map-popup-panel-date {
+          flex-grow: 1;
+          padding: 17px 24px;
+          font-size: @fontsize-s;
+          text-align: right;
+          border-bottom: 2px solid @green;
+        }
+
+        .map-popup-panel-back {
+          margin-left: auto;
+          width: 54px;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          position: relative;
+          cursor: pointer;
+
+          &::after {
+            content: "";
+            position: absolute;
+            left: 0;
+            height: 50%;
+            border-left: 1px solid @gray;
+            top: 25%;
+          }
+        }
+      }
+
+      .map-popup-panel-body {
+        background: fade(#152221, 75%);
+        border: 1px solid fade(@darkgray, 40);
+        border-top: 0px;
+
+        .table-form {
+          .text,
+          .unit {
+            font-weight: 400;
+          }
+
+          .unit {
+            min-width: auto;
+          }
+
+          .value,
+          .unit {
+            text-align: left;
+          }
+        }
+      }
+    }
+
+    .map-tool {
+      position: absolute;
+      right: 22px;
+      top: 22px;
+      z-index: 2;
+      background: #152221af;
+      padding: 18px 14px;
+
+      .m-btn {
+        width: 124px;
+        height: 44px;
+        background: #152221bf;
+        border: 1px solid #152221bf;
+        color: #ffffff;
+        transition: all 0.3s;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        cursor: pointer;
+
+        &:hover,
+        &.active {
+          background: #05bb4c33;
+          border: 1px solid #05bb4c;
+          color: #05bb4c;
+        }
+
+        + .m-btn {
+          margin-top: 16px;
+        }
+      }
+    }
+  }
+}
+</style>

+ 751 - 0
src/components/arcgis/PL_GDC.vue

@@ -0,0 +1,751 @@
+<template>
+  <div style="width: 100%; height: 100%">
+    <arcgis @when="when" ref="arcgis" :data="arcgisData" @clickMap="clickMap">
+      <template v-slot:content>
+        <div class="panel-box">
+          <div
+            class="panel-item"
+            :class="panel.line"
+            v-for="(panel, index) of panels"
+            :key="index"
+          >
+            <svg
+              v-show="panel.type != 'none' && panel.type != 'syz'"
+              viewBox="0 0 800 800"
+              version="1.1"
+              xmlns="http://www.w3.org/2000/svg"
+              xmlns:xlink="http://www.w3.org/1999/xlink"
+              xml:space="preserve"
+            >
+              <defs>
+                <rect
+                  id="fill-rect"
+                  x="5"
+                  y="5"
+                  rx="8"
+                  ry="8"
+                  width="90"
+                  height="340"
+                  fill="#303B6F"
+                />
+                <rect
+                  id="none-rect"
+                  x="5"
+                  y="5"
+                  rx="8"
+                  ry="8"
+                  width="90"
+                  height="120"
+                  fill="#303B6F"
+                />
+                <g id="panel-deepblue">
+                  <polygon
+                    fill="#FFFFFF"
+                    points="300 13.73 60.07 13.73 60.07 13.73 22.48 13.73 0 109.84 0 109.84 0 109.84 0 109.84 0 109.84 22.48 205.95 272.88 205.95 272.88 205.61 300 205.61 300 13.73"
+                  />
+                  <polygon
+                    fill="#5C9BAF"
+                    points="250.4 109.84 3.26 109.84 29 0 276.14 0 250.4 109.84"
+                  />
+                  <polygon
+                    fill="#00486B"
+                    points="29 219.68 276.14 219.68 250.4 109.84 3.26 109.84 29 219.68"
+                  />
+                </g>
+                <g id="panel-blue">
+                  <polygon
+                    fill="#FFFFFF"
+                    points="300 13.73 60.07 13.73 60.07 13.73 22.48 13.73 0 109.84 0 109.84 0 109.84 0 109.84 0 109.84 22.48 205.95 272.88 205.95 272.88 205.61 300 205.61 300 13.73"
+                  />
+                  <polygon
+                    fill="#23ABFF"
+                    points="250.4 109.84 3.26 109.84 29 0 276.14 0 250.4 109.84"
+                  />
+                  <polygon
+                    fill="#0E6BBB"
+                    points="29 219.68 276.14 219.68 250.4 109.84 3.26 109.84 29 219.68"
+                  />
+                </g>
+                <g id="panel-red">
+                  <polygon
+                    fill="#FFFFFF"
+                    points="290 13.27 58.07 13.27 58.07 13.27 21.73 13.27 0 106.18 0 106.18 0 106.18 0 106.18 0 106.18 21.73 199.09 263.79 199.09 263.79 198.75 290 198.75 290 13.27"
+                  />
+                  <polygon
+                    fill="#EC1208"
+                    points="242.05 106.18 3.15 106.18 28.04 0 266.94 0 242.05 106.18"
+                  />
+                  <polygon
+                    fill="#AA0607"
+                    points="28.04 212.36 266.94 212.36 242.05 106.18 3.15 106.18 28.04 212.36"
+                  />
+                </g>
+              </defs>
+              <!-- 底图 左右两列矩形 -->
+              <g>
+                <use xlink:href="#fill-rect" x="50" y="50" />
+                <use xlink:href="#fill-rect" x="150" y="50" />
+                <use xlink:href="#fill-rect" x="550" y="50" />
+                <use xlink:href="#fill-rect" x="650" y="50" />
+                <use xlink:href="#fill-rect" x="50" y="400" />
+                <use xlink:href="#fill-rect" x="150" y="400" />
+                <use xlink:href="#fill-rect" x="550" y="400" />
+                <use xlink:href="#fill-rect" x="650" y="400" />
+              </g>
+
+              <!-- 中间上矩形 全部 -->
+              <g
+                :style="
+                  'display: ' +
+                  (panel.type == 'fill' || panel.type == 'bottom'
+                    ? 'block'
+                    : 'none')
+                "
+              >
+                <use xlink:href="#fill-rect" x="250" y="50" />
+                <use xlink:href="#fill-rect" x="350" y="50" />
+                <use xlink:href="#fill-rect" x="450" y="50" />
+              </g>
+
+              <!-- 中间上矩形 一半 -->
+              <g
+                :style="'display: ' + (panel.type == 'top' ? 'block' : 'none')"
+              >
+                <use xlink:href="#none-rect" x="250" y="270" />
+                <use xlink:href="#none-rect" x="350" y="270" />
+                <use xlink:href="#none-rect" x="450" y="270" />
+              </g>
+
+              <!-- 中间上逆变器 深蓝色 -->
+              <g
+                :style="
+                  'display: ' +
+                  (panel.type == 'top' && panel.state == 'deepblue'
+                    ? 'block'
+                    : 'none')
+                "
+                class="can-click esri-component"
+                @click.prevent="clickEl(panel)"
+              >
+                <use xlink:href="#panel-deepblue" x="250" y="50" />
+              </g>
+
+              <!-- 中间上逆变器 蓝色 -->
+              <g
+                :style="
+                  'display: ' +
+                  (panel.type == 'top' && panel.state == 'blue'
+                    ? 'block'
+                    : 'none')
+                "
+                class="can-click esri-component"
+                @click.prevent="clickEl(panel)"
+              >
+                <use xlink:href="#panel-blue" x="250" y="50" />
+              </g>
+
+              <!-- 中间上逆变器 红色 -->
+              <g
+                :style="
+                  'display: ' +
+                  (panel.type == 'top' && panel.state == 'red'
+                    ? 'block'
+                    : 'none')
+                "
+                class="can-click esri-component"
+                @click.prevent="clickEl(panel)"
+              >
+                <use xlink:href="#panel-red" x="250" y="50" />
+              </g>
+
+              <!-- 中间上文字 -->
+              <g
+                :style="'display: ' + (panel.type == 'top' ? 'block' : 'none')"
+                class="can-click esri-component"
+                @click.prevent="clickEl(panel)"
+              >
+                <text
+                  x="420"
+                  y="220"
+                  fill="#ffffff"
+                  font-size="150"
+                  text-anchor="middle"
+                  transform="rotate(-90 400 180)"
+                >
+                  {{ panel.code }}
+                </text>
+              </g>
+
+              <!-- 中间下矩形 全部 -->
+              <g
+                :style="
+                  'display: ' +
+                  (panel.type == 'fill' || panel.type == 'top'
+                    ? 'block'
+                    : 'none')
+                "
+              >
+                <use xlink:href="#fill-rect" x="250" y="400" />
+                <use xlink:href="#fill-rect" x="350" y="400" />
+                <use xlink:href="#fill-rect" x="450" y="400" />
+              </g>
+
+              <!-- 中间下矩形 一半 -->
+              <g
+                :style="
+                  'display: ' + (panel.type == 'bottom' ? 'block' : 'none')
+                "
+              >
+                <use xlink:href="#none-rect" x="250" y="400" />
+                <use xlink:href="#none-rect" x="350" y="400" />
+                <use xlink:href="#none-rect" x="450" y="400" />
+              </g>
+
+              <!-- 中间下逆变器 深蓝色 -->
+              <g
+                :style="
+                  'display: ' +
+                  (panel.type == 'bottom' && panel.state == 'deepblue'
+                    ? 'block'
+                    : 'none')
+                "
+                class="can-click esri-component"
+                @click.prevent="clickEl(panel)"
+              >
+                <use xlink:href="#panel-deepblue" x="250" y="530" />
+              </g>
+
+              <!-- 中间下逆变器 蓝色 -->
+              <g
+                :style="
+                  'display: ' +
+                  (panel.type == 'bottom' && panel.state == 'blue'
+                    ? 'block'
+                    : 'none')
+                "
+                class="can-click esri-component"
+                @click.prevent="clickEl(panel)"
+              >
+                <use xlink:href="#panel-blue" x="250" y="530" />
+              </g>
+
+              <!-- 中间下逆变器 红色 -->
+              <g
+                :style="
+                  'display: ' +
+                  (panel.type == 'bottom' && panel.state == 'red'
+                    ? 'block'
+                    : 'none')
+                "
+                class="can-click esri-component"
+                @click.prevent="clickEl(panel)"
+              >
+                <use xlink:href="#panel-red" x="250" y="530" />
+              </g>
+
+              <!-- 中间下文字 -->
+              <g
+                :style="
+                  'display: ' + (panel.type == 'bottom' ? 'block' : 'none')
+                "
+                class="can-click"
+                @click.prevent="clickEl(panel)"
+              >
+                <text
+                  x="460"
+                  y="740"
+                  fill="#ffffff"
+                  font-size="150"
+                  text-anchor="middle"
+                  transform="rotate(-90 400 700)"
+                >
+                  {{ panel.code }}
+                </text>
+              </g>
+            </svg>
+            <div v-show="panel.type == 'syz'" class="panel-syz">
+              <img :src="syzImg" class="syz-img" />
+              <div class="syz-text">升压站</div>
+            </div>
+          </div>
+          <!-- <img :src="tempImg" style="width: 800px; height: 700px;"> -->
+        </div>
+      </template>
+    </arcgis>
+  </div>
+</template>
+
+<script>
+import arcgis from "./arcgis.vue";
+import dataService from "@/helper/data.js";
+
+export default {
+  // 名称
+  name: "Map",
+  // 使用组件
+  components: {
+    arcgis,
+  },
+  props: {
+    wpId: {
+      type: String,
+      default: "",
+    },
+  },
+  // 数据
+  data() {
+    return {
+      wpnumMap: {}, //风机监视数量
+      wpInfoMap: {}, //风机详情
+      fjmap: [], // 风机名
+      sourceId: "",
+      arcgisData: {
+        mode: "2D", // 模式 2D 3D
+        title: "宁夏地图", // 标题
+        center: [106.48638888888888, 38.924166666666665], // 初始中心点
+        height: 654, // 3D地图初始相机高度
+        tilt: 65, // 俯视角
+        scale: 15000,
+        rotation: 180,
+      },
+      tempImg: require("@assets/temp1.png"),
+      syzImg: require("@assets/png/booster-station.png"),
+      showPopup: true,
+      panels: [
+        // fill top bottom none syz // red blue deepblue
+        { id: "00", type: "fill", code: "", state: "", line: "" },
+        { id: "01", type: "fill", code: "", state: "", line: "" },
+        { id: "02", type: "fill", code: "", state: "", line: "" },
+        { id: "03", type: "fill", code: "", state: "", line: "" },
+        { id: "04", type: "fill", code: "", state: "", line: "" },
+        { id: "05", type: "fill", code: "", state: "", line: "" },
+        {
+          id: "06",
+          type: "bottom",
+          code: "12",
+          state: "deepblue",
+          line: "bottom",
+        },
+        { id: "07", type: "none", code: "", state: "", line: "bottom" },
+        { id: "08", type: "fill", code: "", state: "", line: "" },
+        { id: "09", type: "fill", code: "", state: "", line: "" },
+
+        {
+          id: "10",
+          type: "top",
+          code: "36",
+          state: "deepblue",
+          line: "top left",
+        },
+        {
+          id: "11",
+          type: "top",
+          code: "32",
+          state: "deepblue",
+          line: "top left",
+        },
+        { id: "12", type: "top", code: "28", state: "deepblue", line: "top" },
+        { id: "13", type: "top", code: "24", state: "deepblue", line: "top" },
+        { id: "14", type: "top", code: "20", state: "deepblue", line: "top" },
+        {
+          id: "15",
+          type: "top",
+          code: "16",
+          state: "deepblue",
+          line: "top right",
+        },
+        { id: "16", type: "fill", code: "", state: "", line: "bottom right" },
+        { id: "17", type: "syz", code: "", state: "", line: "bottom right" },
+        { id: "18", type: "top", code: "5", state: "deepblue", line: "top" },
+        {
+          id: "19",
+          type: "top",
+          code: "4",
+          state: "deepblue",
+          line: "top right",
+        },
+
+        {
+          id: "20",
+          type: "bottom",
+          code: "37",
+          state: "deepblue",
+          line: "bottom left",
+        },
+        { id: "21", type: "fill", code: "", state: "deepblue", line: "left" },
+        { id: "22", type: "fill", code: "", state: "deepblue", line: "" },
+        { id: "23", type: "fill", code: "", state: "deepblue", line: "" },
+        { id: "24", type: "fill", code: "", state: "deepblue", line: "" },
+        { id: "25", type: "fill", code: "", state: "deepblue", line: "" },
+        {
+          id: "26",
+          type: "bottom",
+          code: "13",
+          state: "deepblue",
+          line: "bottom",
+        },
+        { id: "27", type: "fill", code: "", state: "", line: "" },
+        { id: "28", type: "fill", code: "", state: "deepblue", line: "" },
+        { id: "29", type: "fill", code: "", state: "deepblue", line: "right" },
+
+        { id: "30", type: "none", code: "", state: "", line: "" },
+        { id: "31", type: "top", code: "33", state: "deepblue", line: "top" },
+        { id: "32", type: "top", code: "29", state: "deepblue", line: "top" },
+        { id: "33", type: "top", code: "25", state: "deepblue", line: "top" },
+        { id: "34", type: "top", code: "21", state: "deepblue", line: "top" },
+        {
+          id: "35",
+          type: "top",
+          code: "17",
+          state: "deepblue",
+          line: "top right",
+        },
+        { id: "36", type: "fill", code: "", state: "deepblue", line: "" },
+        { id: "37", type: "top", code: "1", state: "deepblue", line: "top" },
+        { id: "38", type: "top", code: "2", state: "deepblue", line: "top" },
+        { id: "39", type: "top", code: "3", state: "deepblue", line: "top" },
+
+        { id: "40", type: "none", code: "", state: "", line: "" },
+        { id: "41", type: "fill", code: "", state: "", line: "" },
+        { id: "42", type: "fill", code: "", state: "", line: "" },
+        { id: "43", type: "fill", code: "", state: "", line: "" },
+        { id: "44", type: "fill", code: "", state: "", line: "" },
+        { id: "45", type: "fill", code: "", state: "", line: "" },
+        {
+          id: "46",
+          type: "bottom",
+          code: "14",
+          state: "deepblue",
+          line: "bottom left",
+        },
+        {
+          id: "47",
+          type: "bottom",
+          code: "10",
+          state: "deepblue",
+          line: "bottom",
+        },
+        {
+          id: "48",
+          type: "bottom",
+          code: "8",
+          state: "deepblue",
+          line: "bottom",
+        },
+        {
+          id: "49",
+          type: "bottom",
+          code: "6",
+          state: "deepblue",
+          line: "bottom",
+        },
+
+        { id: "50", type: "none", code: "", state: "", line: "" },
+        { id: "51", type: "top", code: "34", state: "red", line: "top left" },
+        { id: "52", type: "top", code: "30", state: "deepblue", line: "top" },
+        { id: "53", type: "top", code: "26", state: "deepblue", line: "top" },
+        { id: "54", type: "top", code: "22", state: "deepblue", line: "top" },
+        { id: "55", type: "top", code: "18", state: "deepblue", line: "top" },
+        { id: "56", type: "fill", code: "", state: "", line: "" },
+        { id: "57", type: "fill", code: "", state: "", line: "" },
+        { id: "58", type: "fill", code: "", state: "", line: "" },
+        { id: "59", type: "fill", code: "", state: "", line: "right" },
+
+        { id: "60", type: "none", code: "", state: "", line: "" },
+        { id: "61", type: "fill", code: "", state: "", line: "left" },
+        { id: "62", type: "fill", code: "", state: "", line: "" },
+        { id: "63", type: "fill", code: "", state: "", line: "" },
+        { id: "64", type: "fill", code: "", state: "", line: "" },
+        { id: "65", type: "fill", code: "", state: "", line: "" },
+        {
+          id: "66",
+          type: "bottom",
+          code: "15",
+          state: "deepblue",
+          line: "bottom",
+        },
+        {
+          id: "67",
+          type: "bottom",
+          code: "11",
+          state: "deepblue",
+          line: "bottom",
+        },
+        {
+          id: "68",
+          type: "bottom",
+          code: "9",
+          state: "deepblue",
+          line: "bottom",
+        },
+        {
+          id: "69",
+          type: "bottom",
+          code: "7",
+          state: "deepblue",
+          line: "bottom right",
+        },
+
+        { id: "70", type: "none", code: "", state: "", line: "" },
+        { id: "71", type: "top", code: "35", state: "blue", line: "top" },
+        { id: "72", type: "top", code: "31", state: "deepblue", line: "top" },
+        { id: "73", type: "top", code: "27", state: "deepblue", line: "top" },
+        { id: "74", type: "top", code: "23", state: "deepblue", line: "top" },
+        { id: "75", type: "top", code: "19", state: "deepblue", line: "top" },
+        { id: "76", type: "fill", code: "", state: "", line: "" },
+        { id: "77", type: "fill", code: "", state: "", line: "" },
+        { id: "78", type: "fill", code: "", state: "", line: "" },
+        { id: "79", type: "fill", code: "", state: "", line: "" },
+      ],
+    };
+  },
+  created() {
+    let that = this;
+    that.sourceId = this.wpId;
+    that.$nextTick(() => {});
+  },
+  // 函数
+  methods: {
+    when: function () {
+      this.$refs.arcgis.addHtmlPoint(
+        [106.48638888888888, 38.924166666666665],
+        "content",
+        400,
+        350
+      );
+    },
+    clickMap: function (info) {
+      console.log(info);
+    },
+    popupBack: function () {
+      this.showPopup = false;
+    },
+    clickEl: function (item) {
+      console.log(item);
+      this.showPopup = true;
+    },
+  },
+  watch: {
+    wpId(res) {
+      this.sourceId = res;
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+@titleHeight: 40px;
+
+.map-1 {
+  width: 100%;
+  height: calc(100vh - 90px);
+  display: flex;
+  flex-direction: column;
+
+  .btn-group-tabs {
+    display: flex;
+    flex-direction: row;
+  }
+
+  .can-click {
+    cursor: pointer;
+  }
+
+  .syz-img {
+    width: 65px;
+    height: 47px;
+
+    img {
+      width: 100%;
+      height: 100%;
+    }
+  }
+
+  .panel-title {
+    width: 100%;
+    background-color: fade(@darkgray, 40%);
+    margin-top: 16px;
+    padding: 6px;
+    display: flex;
+    align-items: center;
+
+    .panel-title-name {
+      color: @green;
+      display: flex;
+      align-items: center;
+      line-height: 0;
+      font-size: 0;
+
+      i,
+      span {
+        margin: 0 0 0 16px;
+        line-height: 0;
+        font-size: 13px;
+      }
+    }
+
+    .sub-title-item {
+      display: flex;
+      align-items: center;
+      margin-left: 16px;
+
+      .sub-title {
+        font-size: 13px;
+        margin-left: 6px;
+      }
+
+      .sub-count {
+        font-size: 13px;
+        font-weight: 500;
+      }
+
+      img {
+        height: 31px;
+      }
+    }
+  }
+
+  .panel-body {
+    flex-grow: 1;
+    background-color: fade(@darkgray, 20%);
+    padding: 8px;
+    overflow: auto;
+    position: relative;
+
+    .arcgis-layer {
+      z-index: 1;
+    }
+
+    .map-popup-panel {
+      width: 760px;
+      position: absolute;
+      left: 71px;
+      top: 22px;
+      z-index: 2;
+
+      .map-popup-panel-header {
+        width: 100%;
+        background: fade(#152221, 90%);
+        display: flex;
+
+        .map-popup-panel-title {
+          padding: 17px 24px;
+          font-size: @fontsize-s;
+          position: relative;
+
+          &::before,
+          &::after {
+            position: absolute;
+            width: calc(50% - 6px);
+            bottom: 0;
+            border-bottom: 2px solid @green;
+          }
+
+          &::before {
+            content: "";
+            left: 0;
+          }
+
+          &::after {
+            content: "";
+            right: 0;
+          }
+
+          span {
+            position: absolute;
+            width: 11.3px;
+            height: 11.3px;
+            border-left: 2px solid @green;
+            border-top: 2px solid @green;
+            left: calc(50% - 5.65px);
+            bottom: -3px;
+            transform: rotate(45deg);
+          }
+        }
+
+        .map-popup-panel-date {
+          flex-grow: 1;
+          padding: 17px 24px;
+          font-size: @fontsize-s;
+          text-align: right;
+          border-bottom: 2px solid @green;
+        }
+
+        .map-popup-panel-back {
+          margin-left: auto;
+          width: 54px;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          position: relative;
+          cursor: pointer;
+
+          &::after {
+            content: "";
+            position: absolute;
+            left: 0;
+            height: 50%;
+            border-left: 1px solid @gray;
+            top: 25%;
+          }
+        }
+      }
+
+      .map-popup-panel-body {
+        background: fade(#152221, 75%);
+        border: 1px solid fade(@darkgray, 40);
+        border-top: 0px;
+
+        .table-form {
+          .text,
+          .unit {
+            font-weight: 400;
+          }
+
+          .unit {
+            min-width: auto;
+          }
+
+          .value,
+          .unit {
+            text-align: left;
+          }
+        }
+      }
+    }
+
+    .map-tool {
+      position: absolute;
+      right: 22px;
+      top: 22px;
+      z-index: 2;
+      background: #152221af;
+      padding: 18px 14px;
+
+      .m-btn {
+        width: 124px;
+        height: 44px;
+        background: #152221bf;
+        border: 1px solid #152221bf;
+        color: #ffffff;
+        transition: all 0.3s;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        cursor: pointer;
+
+        &:hover,
+        &.active {
+          background: #05bb4c33;
+          border: 1px solid #05bb4c;
+          color: #05bb4c;
+        }
+
+        + .m-btn {
+          margin-top: 16px;
+        }
+      }
+    }
+  }
+}
+</style>

+ 14 - 18
src/components/arcgis/arcgis.vue

@@ -26,11 +26,7 @@
     import "@arcgis/core/assets/esri/themes/light/main.css";
 
     const mapUrl = "http://10.155.32.4:9080/arcgis/rest/services/nxmap/MapServer"; // ArcMap地址
-<<<<<<< HEAD
     // const mapUrl = "http://10.155.32.4:9080/arcgis/rest/services/NX_MAP_15/MapServer"; // ArcMap地址
-=======
-    // const mapUrl = "http://172.16.6.30:12345/arcgis/rest/services/NX_MAP_15/MapServer"; // ArcMap地址
->>>>>>> 84b3bdb1c8b5dee538537f2bc2e6fd922c5d99a0
     let basemap = null;
     let map = null;
     let view = null;
@@ -79,37 +75,37 @@
             return {
                 fanStateImgMapping: [{
                         name: "待机",
-                        code: "dj",
+                        code: "0",
                         img: require("@assets/map/fan/green.png")
                     },
                     {
                         name: "运行",
-                        code: "yx",
+                        code: "1",
                         img: require("@assets/map/fan/blue.png")
                     },
                     {
-                        name: "限电",
-                        code: "xd",
-                        img: require("@assets/map/fan/purple.png")
-                    },
-                    {
                         name: "故障",
-                        code: "gz",
+                        code: "2",
                         img: require("@assets/map/fan/red.png")
                     },
                     {
+                        name: "离线",
+                        code: "3",
+                        img: require("@assets/map/fan/black.png")
+                    },               
+                    {
                         name: "检修",
-                        code: "jx",
+                        code: "4",
                         img: require("@assets/map/fan/orange.png")
                     },
                     {
-                        name: "离线",
-                        code: "lx",
-                        img: require("@assets/map/fan/black.png")
+                        name: "限电",
+                        code: "5",
+                        img: require("@assets/map/fan/purple.png")
                     },
                     {
-                        name: "受累",
-                        code: "sl",
+                        name: "限停",
+                        code: "6",
                         img: require("@assets/map/fan/white.png")
                     },
                 ],

+ 1 - 1
src/components/chart/bar/horizontal-bar-chart.vue

@@ -80,7 +80,7 @@ export default {
           containLabel: true,
         },
         tooltip: {
-          trigger: "item",
+          trigger: "axis",
           backgroundColor: "rgba(0,0,0,0.4)",
           borderColor: partten.getColor("gray"),
           textStyle: {

+ 2 - 1
src/components/chart/bar/list-bar-chart2.vue

@@ -98,8 +98,9 @@ export default {
         grid: {
           left: 16,
           top: 16, // 设置条形图的边s距
-          right: 80,
+          right: 110,
           bottom: 0,
+          containLabel: true,
         },
         yAxis: [
           {

+ 6 - 3
src/components/chart/bar/multiple-bar-chart.vue

@@ -269,18 +269,21 @@ export default {
         },
         grid: {
           top: 32,
-          left: 40,
-          right: this.ydata.length > 1 ? 40 : 14,
-          bottom: 24,
+          left: 8,
+          right: 8,
+          bottom: 0,
+          containLabel: true,
         },
         xAxis: [
           {
             type: "category",
             data: this.xdata,
+            nameLocation: "center",
             axisPointer: {
               type: "shadow",
             },
             axisLabel: {
+              interval: 0,
               fontSize: 12,
             },
           },

+ 199 - 0
src/components/chart/bar/percent-bar-3.vue

@@ -0,0 +1,199 @@
+<template>
+  <div class="chart" :id="id"></div>
+</template>
+
+<script>
+import util from "@/helper/util.js";
+import partten from "@/helper/partten.js";
+import * as echarts from "echarts";
+
+export default {
+  name: "dsah-pie",
+  componentName: "dsah-pie",
+  props: {
+    width: {
+      type: String,
+      default: "7.407vh",
+    },
+    height: {
+      type: String,
+      default: "7.407vh",
+    },
+    // 传入数据
+    value: {
+      type: Number,
+      default: 25,
+    },
+    // 颜色 green yellow (partten中支持的颜色)
+    color: {
+      type: String,
+      default: "green",
+    },
+    fontsize: {
+      type: Number,
+      default: 12,
+    },
+  },
+  data() {
+    return {
+      id: "",
+      chart: null,
+    };
+  },
+  computed: {
+    colorValue() {
+      return partten.getColor(this.color);
+    },
+    text() {
+      return this.value + "%";
+    },
+  },
+  created() {
+    this.id = "pie-chart-" + util.newGUID();
+  },
+  methods: {
+    initChart() {
+      let chart = echarts.init(this.$el);
+
+      let option = {
+        title: [
+          {
+            text: this.text,
+            x: "43%",
+            y: "32%",
+            textAlign: "center",
+            textStyle: {
+              fontSize: this.fontsize,
+              fontFamily: "Bicubik",
+              fontWeight: "400",
+              color: partten.getColor(this.colors),
+              textAlign: "center",
+            },
+          },
+        ],
+        polar: {
+          radius: ["100%", "85%"],
+          center: ["50%", "50%"],
+        },
+        angleAxis: {
+          max: 100,
+          show: false,
+          startAngle: 180,
+        },
+        radiusAxis: {
+          type: "category",
+          show: true,
+          axisLabel: {
+            show: false,
+          },
+          axisLine: {
+            show: false,
+          },
+          axisTick: {
+            show: false,
+          },
+        },
+        series: [
+          {
+            name: "",
+            z: "3",
+            type: "bar",
+            roundCap: true,
+            barWidth: 60,
+            showBackground: true,
+            backgroundStyle: {
+              color: partten.getColor(this.colors) + "30",
+            },
+            data: [this.value],
+            coordinateSystem: "polar",
+            itemStyle: {
+              normal: {
+                color: partten.getColor(this.colors),
+                //    new echarts.graphic.LinearGradient(1, 0, 0, 0, [
+                //     {
+                //       offset: 0,
+                //       color: "#0ff",
+                //     },
+                //     {
+                //       offset: 1,
+                //       color: "#02aeff",
+                //     },
+                //   ]),
+              },
+            },
+          },
+          {
+            type: "pie",
+            radius: ["100%", "97%"],
+            startAngle: 180,
+            center: ["50%", "50%"],
+            data: [
+              {
+                hoverOffset: 1,
+                value: 100,
+                name: "",
+                itemStyle: {
+                  color: partten.getColor(this.colors),
+                },
+                label: {
+                  show: false,
+                },
+                labelLine: {
+                  normal: {
+                    smooth: true,
+                    lineStyle: {
+                      width: 0,
+                    },
+                  },
+                },
+                hoverAnimation: false,
+              },
+              {
+                label: {
+                  show: false,
+                },
+                labelLine: {
+                  normal: {
+                    smooth: true,
+                    lineStyle: {
+                      width: 0,
+                    },
+                  },
+                },
+                value: 0,
+                hoverAnimation: false,
+                itemStyle: {
+                  color: "transparent",
+                },
+              },
+            ],
+          },
+        ],
+      };
+
+      chart.setOption(option);
+    },
+  },
+  mounted() {
+    this.$nextTick(() => {
+      this.$el.style.width = this.width;
+      this.$el.style.height = this.height;
+      this.initChart();
+    });
+  },
+  updated() {
+    this.$nextTick(() => {
+      this.initChart();
+    });
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.chart {
+  width: 100%;
+  height: 100%;
+  display: block;
+  margin: auto;
+}
+</style>

+ 9 - 9
src/components/chart/bar/single-bar-chart.vue

@@ -79,15 +79,15 @@ export default {
             show: false,
           },
         },
-        tooltip: {
-          trigger: "axis",
-          backgroundColor: "rgba(0,0,0,0.4)",
-          borderColor: partten.getColor("gray"),
-          textStyle: {
-            color: "#fff",
-            fontSize: 14,
-          },
-        },
+        // tooltip: {
+        //   trigger: "axis",
+        //   backgroundColor: "rgba(0,0,0,0.4)",
+        //   borderColor: partten.getColor("gray"),
+        //   textStyle: {
+        //     color: "#fff",
+        //     fontSize: 14,
+        //   },
+        // },
         grid: {
           left: 16,
           top: 16, // 设置条形图的边s距

+ 5 - 2
src/components/chart/combination/area-bar-chart.vue

@@ -171,7 +171,10 @@ export default {
         },
         tooltip: {
           show: true,
-          trigger: "item",
+          trigger: "axis",
+          axisPointer: {
+            type: "line",
+          },
           backgroundColor: "rgba(0,0,0,0.4)",
           borderColor: partten.getColor("gray"),
           textStyle: {
@@ -317,7 +320,7 @@ export default {
             opacity: 0.2,
           },
           tooltip: {
-            show: true,
+            show: false,
             formatter: function(params) {
               return params.marker + params.name + ": " + params.value[2] + "s";
             },

+ 117 - 19
src/components/chart/combination/bar-line-chart.vue

@@ -24,8 +24,25 @@ export default {
       type: Object,
       default: () => {
         return {
-          area: ["风场1", "风场2", "风场3", "风场4", "风场5", "风场6", "风场7", "风场8", "风场9"],
-          legend: ["实际电量", "计划检修损失", "非计划检修损失", "限电损失", "受累损失", "性能损失"],
+          area: [
+            "风场1",
+            "风场2",
+            "风场3",
+            "风场4",
+            "风场5",
+            "风场6",
+            "风场7",
+            "风场8",
+            "风场9",
+          ],
+          legend: [
+            "实际电量",
+            "计划检修损失",
+            "非计划检修损失",
+            "限电损失",
+            "受累损失",
+            "性能损失",
+          ],
           data: [
             [1320, 1302, 901, 634, 1390, 1330, 1320, 1000, 500],
             [320, 302, 301, 334, 390, 330, 320, 100, 50],
@@ -60,19 +77,32 @@ export default {
     // 颜色
     color: {
       type: Array,
-      default: () => ["#323E6F", "#1DA0D7", "#02BB4C", "#DB5520", "#EDB32F", "#EDEB2F"],
+      default: () => ["#323E6F", "#e17e23", "#ba3237#", "c531c7", "#ffffff", "#EDEB2F"],
+    },
+    // 每页显示个数
+    pageSize: {
+      type: Number,
+      default: 20,
     },
   },
   data() {
     return {
       id: "",
       chart: null,
+      areaData: [],
     };
   },
   computed: {
     legend() {
       return this.bardata.legend;
     },
+    end() {
+      var result = 20;
+      if (this.areaData) {
+        result = parseInt((this.pageSize / this.areaData.length) * 100);
+      }
+      return result;
+    },
   },
   methods: {
     initChart() {
@@ -108,19 +138,64 @@ export default {
             fontSize: util.vh(16),
           },
         },
+        dataZoom: [
+          {
+            type: "inside",
+            start: 0,
+            end: this.end,
+            yAxisIndex: [0],
+          },
+          {
+            start: 0,
+            end: this.end,
+            bottom: 40,
+            yAxisIndex: [0],
+            backgroundColor: "transparent",
+            // handleIcon: "path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z",
+            handleStyle: {
+              color: partten.getColor("green"),
+            },
+            moveHandleSize: 0,
+            // dataBackground: {
+            //   lineStyle: {
+            //     color: partten.getColor("gray"),
+            //   },
+            //   areaStyle: {
+            //     color: partten.getColor("gray"),
+            //   },
+            // },
+            // selectedDataBackground: {
+            //   lineStyle: {
+            //     color: partten.getColor("yellow"),
+            //   },
+            //   areaStyle: {
+            //     color: partten.getColor("yellow"),
+            //   },
+            // },
+            fillerColor: "transparent",
+            textStyle: {
+              color: partten.getColor("grayl"),
+            },
+            borderColor: partten.getColor("gray"),
+            brushSelect: false,
+          },
+        ],
         yAxis: [
           {
             type: "category",
             axisLabel: {
               color: partten.getColor("gray"),
             },
+            inverse: true,
+            // minInterval: 10,
+            // maxInterval: 10,
             axisLine: {
               show: false,
             },
             axisTick: {
               show: false,
             },
-            data: this.bardata.area,
+            data: this.areaData,
           },
         ],
         xAxis: [
@@ -168,20 +243,22 @@ export default {
         ],
         series: [],
       };
-      // bar data
-      for (var i = 0; i < this.bardata.legend.length; i++) {
-        option.series.push({
-          name: this.bardata.legend[i],
-          type: "bar",
-          stack: "总量",
-          barWidth: "10%",
-          label: {
-            show: false,
-            position: "insideRight",
-          },
-          data: this.bardata.data[i],
-        });
-      }
+
+      if (this.bardata && this.bardata.legend)
+        // bar data
+        for (var i = 0; i < this.bardata.legend.length; i++) {
+          option.series.push({
+            name: this.bardata.legend[i],
+            type: "bar",
+            stack: "总量",
+            barWidth: 16,
+            label: {
+              show: false,
+              position: "insideRight",
+            },
+            data: this.bardata.data[i],
+          });
+        }
 
       // line data
       if (this.lineData.length > 0) {
@@ -199,12 +276,17 @@ export default {
           },
         });
       }
-
       chart.setOption(option);
     },
   },
   created() {
     this.id = "pie-chart-" + util.newGUID();
+    if (this.bardata.area && this.bardata.area.length < this.pageSize) {
+      this.areaData = this.bardata.area;
+      for (let i = this.bardata.area.length; i <= this.pageSize; i++) {
+        this.areaData.push("");
+      }
+    }
   },
   mounted() {
     this.$nextTick(() => {
@@ -218,6 +300,22 @@ export default {
       this.initChart();
     });
   },
+  beforeUpdate(){
+	  this.areaData = this.bardata.area;
+  },
+  beforeUpdate(){
+  	  this.areaData = this.bardata.area;
+  },
+  watch: {
+    bardata(val) {
+      if (val.area && val.area.length < this.pageSize) {
+        this.areaData = val.area;
+        for (let i = val.area.length; i <= this.pageSize; i++) {
+          this.areaData.push("");
+        }
+      }
+    },
+  },
 };
 </script>
 

+ 0 - 2
src/components/chart/combination/multiple-bar-line-chart.vue

@@ -210,7 +210,6 @@ export default {
   watch: {
     barData: {
       handler(newValue, oldValue) {
-        console.warn(newValue);
         this.newbarData = newValue;
         this.initChart();
       },
@@ -218,7 +217,6 @@ export default {
     },
     lineData : {
       handler(newValue, oldValue) {
-        console.warn(newValue);
         this.newlineData = newValue;
         this.initChart();
       },

+ 786 - 0
src/components/chart/combination/scatter-line-chart.vue

@@ -0,0 +1,786 @@
+<template>
+  <div class="chart" :id="id"></div>
+</template>
+
+<script>
+import util from "@/helper/util.js";
+import partten from "@/helper/partten.js";
+import * as echarts from "echarts";
+
+export default {
+  props: {
+    width: {
+      type: String,
+      default: "100%",
+    },
+    height: {
+      type: String,
+      default: "350px",
+    },
+    // 传入数据
+    data: {
+      type: Array,
+      default: () => [
+        {
+          title: "男",
+          value: [
+            [161.2, 51.6],
+            [167.5, 59.0],
+            [159.5, 49.2],
+            [157.0, 63.0],
+            [155.8, 53.6],
+            [170.0, 59.0],
+            [159.1, 47.6],
+            [166.0, 69.8],
+            [176.2, 66.8],
+            [160.2, 75.2],
+            [172.5, 55.2],
+            [170.9, 54.2],
+            [172.9, 62.5],
+            [153.4, 42.0],
+            [160.0, 50.0],
+            [147.2, 49.8],
+            [168.2, 49.2],
+            [175.0, 73.2],
+            [157.0, 47.8],
+            [167.6, 68.8],
+            [159.5, 50.6],
+            [175.0, 82.5],
+            [166.8, 57.2],
+            [176.5, 87.8],
+            [170.2, 72.8],
+            [174.0, 54.5],
+            [173.0, 59.8],
+            [179.9, 67.3],
+            [170.5, 67.8],
+            [160.0, 47.0],
+            [154.4, 46.2],
+            [162.0, 55.0],
+            [176.5, 83.0],
+            [160.0, 54.4],
+            [152.0, 45.8],
+            [162.1, 53.6],
+            [170.0, 73.2],
+            [160.2, 52.1],
+            [161.3, 67.9],
+            [166.4, 56.6],
+            [168.9, 62.3],
+            [163.8, 58.5],
+            [167.6, 54.5],
+            [160.0, 50.2],
+            [161.3, 60.3],
+            [167.6, 58.3],
+            [165.1, 56.2],
+            [160.0, 50.2],
+            [170.0, 72.9],
+            [157.5, 59.8],
+            [167.6, 61.0],
+            [160.7, 69.1],
+            [163.2, 55.9],
+            [152.4, 46.5],
+            [157.5, 54.3],
+            [168.3, 54.8],
+            [180.3, 60.7],
+            [165.5, 60.0],
+            [165.0, 62.0],
+            [164.5, 60.3],
+            [156.0, 52.7],
+            [160.0, 74.3],
+            [163.0, 62.0],
+            [165.7, 73.1],
+            [161.0, 80.0],
+            [162.0, 54.7],
+            [166.0, 53.2],
+            [174.0, 75.7],
+            [172.7, 61.1],
+            [167.6, 55.7],
+            [151.1, 48.7],
+            [164.5, 52.3],
+            [163.5, 50.0],
+            [152.0, 59.3],
+            [169.0, 62.5],
+            [164.0, 55.7],
+            [161.2, 54.8],
+            [155.0, 45.9],
+            [170.0, 70.6],
+            [176.2, 67.2],
+            [170.0, 69.4],
+            [162.5, 58.2],
+            [170.3, 64.8],
+            [164.1, 71.6],
+            [169.5, 52.8],
+            [163.2, 59.8],
+            [154.5, 49.0],
+            [159.8, 50.0],
+            [173.2, 69.2],
+            [170.0, 55.9],
+            [161.4, 63.4],
+            [169.0, 58.2],
+            [166.2, 58.6],
+            [159.4, 45.7],
+            [162.5, 52.2],
+            [159.0, 48.6],
+            [162.8, 57.8],
+            [159.0, 55.6],
+            [179.8, 66.8],
+            [162.9, 59.4],
+            [161.0, 53.6],
+            [151.1, 73.2],
+            [168.2, 53.4],
+            [168.9, 69.0],
+            [173.2, 58.4],
+            [171.8, 56.2],
+            [178.0, 70.6],
+            [164.3, 59.8],
+            [163.0, 72.0],
+            [168.5, 65.2],
+            [166.8, 56.6],
+            [172.7, 105.2],
+            [163.5, 51.8],
+            [169.4, 63.4],
+            [167.8, 59.0],
+            [159.5, 47.6],
+            [167.6, 63.0],
+            [161.2, 55.2],
+            [160.0, 45.0],
+            [163.2, 54.0],
+            [162.2, 50.2],
+            [161.3, 60.2],
+            [149.5, 44.8],
+            [157.5, 58.8],
+            [163.2, 56.4],
+            [172.7, 62.0],
+            [155.0, 49.2],
+            [156.5, 67.2],
+            [164.0, 53.8],
+            [160.9, 54.4],
+            [162.8, 58.0],
+            [167.0, 59.8],
+            [160.0, 54.8],
+            [160.0, 43.2],
+            [168.9, 60.5],
+            [158.2, 46.4],
+            [156.0, 64.4],
+            [160.0, 48.8],
+            [167.1, 62.2],
+            [158.0, 55.5],
+            [167.6, 57.8],
+            [156.0, 54.6],
+            [162.1, 59.2],
+            [173.4, 52.7],
+            [159.8, 53.2],
+            [170.5, 64.5],
+            [159.2, 51.8],
+            [157.5, 56.0],
+            [161.3, 63.6],
+            [162.6, 63.2],
+            [160.0, 59.5],
+            [168.9, 56.8],
+            [165.1, 64.1],
+            [162.6, 50.0],
+            [165.1, 72.3],
+            [166.4, 55.0],
+            [160.0, 55.9],
+            [152.4, 60.4],
+            [170.2, 69.1],
+            [162.6, 84.5],
+            [170.2, 55.9],
+            [158.8, 55.5],
+            [172.7, 69.5],
+            [167.6, 76.4],
+            [162.6, 61.4],
+            [167.6, 65.9],
+            [156.2, 58.6],
+            [175.2, 66.8],
+            [172.1, 56.6],
+            [162.6, 58.6],
+            [160.0, 55.9],
+            [165.1, 59.1],
+            [182.9, 81.8],
+            [166.4, 70.7],
+            [165.1, 56.8],
+            [177.8, 60.0],
+            [165.1, 58.2],
+            [175.3, 72.7],
+            [154.9, 54.1],
+            [158.8, 49.1],
+            [172.7, 75.9],
+            [168.9, 55.0],
+            [161.3, 57.3],
+            [167.6, 55.0],
+            [165.1, 65.5],
+            [175.3, 65.5],
+            [157.5, 48.6],
+            [163.8, 58.6],
+            [167.6, 63.6],
+            [165.1, 55.2],
+            [165.1, 62.7],
+            [168.9, 56.6],
+            [162.6, 53.9],
+            [164.5, 63.2],
+            [176.5, 73.6],
+            [168.9, 62.0],
+            [175.3, 63.6],
+            [159.4, 53.2],
+            [160.0, 53.4],
+            [170.2, 55.0],
+            [162.6, 70.5],
+            [167.6, 54.5],
+            [162.6, 54.5],
+            [160.7, 55.9],
+            [160.0, 59.0],
+            [157.5, 63.6],
+            [162.6, 54.5],
+            [152.4, 47.3],
+            [170.2, 67.7],
+            [165.1, 80.9],
+            [172.7, 70.5],
+            [165.1, 60.9],
+            [170.2, 63.6],
+            [170.2, 54.5],
+            [170.2, 59.1],
+            [161.3, 70.5],
+            [167.6, 52.7],
+            [167.6, 62.7],
+            [165.1, 86.3],
+            [162.6, 66.4],
+            [152.4, 67.3],
+            [168.9, 63.0],
+            [170.2, 73.6],
+            [175.2, 62.3],
+            [175.2, 57.7],
+            [160.0, 55.4],
+            [165.1, 104.1],
+            [174.0, 55.5],
+            [170.2, 77.3],
+            [160.0, 80.5],
+            [167.6, 64.5],
+            [167.6, 72.3],
+            [167.6, 61.4],
+            [154.9, 58.2],
+            [162.6, 81.8],
+            [175.3, 63.6],
+            [171.4, 53.4],
+            [157.5, 54.5],
+            [165.1, 53.6],
+            [160.0, 60.0],
+            [174.0, 73.6],
+            [162.6, 61.4],
+            [174.0, 55.5],
+            [162.6, 63.6],
+            [161.3, 60.9],
+            [156.2, 60.0],
+            [149.9, 46.8],
+            [169.5, 57.3],
+            [160.0, 64.1],
+            [175.3, 63.6],
+            [169.5, 67.3],
+            [160.0, 75.5],
+            [172.7, 68.2],
+            [162.6, 61.4],
+            [157.5, 76.8],
+            [176.5, 71.8],
+            [164.4, 55.5],
+            [160.7, 48.6],
+            [174.0, 66.4],
+            [163.8, 67.3],
+          ],
+        },
+        {
+          title: "女",
+          value: [
+            [174.0, 65.6],
+            [175.3, 71.8],
+            [193.5, 80.7],
+            [186.5, 72.6],
+            [187.2, 78.8],
+            [181.5, 74.8],
+            [184.0, 86.4],
+            [184.5, 78.4],
+            [175.0, 62.0],
+            [184.0, 81.6],
+            [180.0, 76.6],
+            [177.8, 83.6],
+            [192.0, 90.0],
+            [176.0, 74.6],
+            [174.0, 71.0],
+            [184.0, 79.6],
+            [192.7, 93.8],
+            [171.5, 70.0],
+            [173.0, 72.4],
+            [176.0, 85.9],
+            [176.0, 78.8],
+            [180.5, 77.8],
+            [172.7, 66.2],
+            [176.0, 86.4],
+            [173.5, 81.8],
+            [178.0, 89.6],
+            [180.3, 82.8],
+            [180.3, 76.4],
+            [164.5, 63.2],
+            [173.0, 60.9],
+            [183.5, 74.8],
+            [175.5, 70.0],
+            [188.0, 72.4],
+            [189.2, 84.1],
+            [172.8, 69.1],
+            [170.0, 59.5],
+            [182.0, 67.2],
+            [170.0, 61.3],
+            [177.8, 68.6],
+            [184.2, 80.1],
+            [186.7, 87.8],
+            [171.4, 84.7],
+            [172.7, 73.4],
+            [175.3, 72.1],
+            [180.3, 82.6],
+            [182.9, 88.7],
+            [188.0, 84.1],
+            [177.2, 94.1],
+            [172.1, 74.9],
+            [167.0, 59.1],
+            [169.5, 75.6],
+            [174.0, 86.2],
+            [172.7, 75.3],
+            [182.2, 87.1],
+            [164.1, 55.2],
+            [163.0, 57.0],
+            [171.5, 61.4],
+            [184.2, 76.8],
+            [174.0, 86.8],
+            [174.0, 72.2],
+            [177.0, 71.6],
+            [186.0, 84.8],
+            [167.0, 68.2],
+            [171.8, 66.1],
+            [182.0, 72.0],
+            [167.0, 64.6],
+            [177.8, 74.8],
+            [164.5, 70.0],
+            [192.0, 101.6],
+            [175.5, 63.2],
+            [171.2, 79.1],
+            [181.6, 78.9],
+            [167.4, 67.7],
+            [181.1, 66.0],
+            [177.0, 68.2],
+            [174.5, 63.9],
+            [177.5, 72.0],
+            [170.5, 56.8],
+            [182.4, 74.5],
+            [197.1, 90.9],
+            [180.1, 93.0],
+            [175.5, 80.9],
+            [180.6, 72.7],
+            [184.4, 68.0],
+            [175.5, 70.9],
+            [180.6, 72.5],
+            [177.0, 72.5],
+            [177.1, 83.4],
+            [181.6, 75.5],
+            [176.5, 73.0],
+            [175.0, 70.2],
+            [174.0, 73.4],
+            [165.1, 70.5],
+            [177.0, 68.9],
+            [192.0, 102.3],
+            [176.5, 68.4],
+            [169.4, 65.9],
+            [182.1, 75.7],
+            [179.8, 84.5],
+            [175.3, 87.7],
+            [184.9, 86.4],
+            [177.3, 73.2],
+            [167.4, 53.9],
+            [178.1, 72.0],
+            [168.9, 55.5],
+            [157.2, 58.4],
+            [180.3, 83.2],
+            [170.2, 72.7],
+            [177.8, 64.1],
+            [172.7, 72.3],
+            [165.1, 65.0],
+            [186.7, 86.4],
+            [165.1, 65.0],
+            [174.0, 88.6],
+            [175.3, 84.1],
+            [185.4, 66.8],
+            [177.8, 75.5],
+            [180.3, 93.2],
+            [180.3, 82.7],
+            [177.8, 58.0],
+            [177.8, 79.5],
+            [177.8, 78.6],
+            [177.8, 71.8],
+            [177.8, 116.4],
+            [163.8, 72.2],
+            [188.0, 83.6],
+            [198.1, 85.5],
+            [175.3, 90.9],
+            [166.4, 85.9],
+            [190.5, 89.1],
+            [166.4, 75.0],
+            [177.8, 77.7],
+            [179.7, 86.4],
+            [172.7, 90.9],
+            [190.5, 73.6],
+            [185.4, 76.4],
+            [168.9, 69.1],
+            [167.6, 84.5],
+            [175.3, 64.5],
+            [170.2, 69.1],
+            [190.5, 108.6],
+            [177.8, 86.4],
+            [190.5, 80.9],
+            [177.8, 87.7],
+            [184.2, 94.5],
+            [176.5, 80.2],
+            [177.8, 72.0],
+            [180.3, 71.4],
+            [171.4, 72.7],
+            [172.7, 84.1],
+            [172.7, 76.8],
+            [177.8, 63.6],
+            [177.8, 80.9],
+            [182.9, 80.9],
+            [170.2, 85.5],
+            [167.6, 68.6],
+            [175.3, 67.7],
+            [165.1, 66.4],
+            [185.4, 102.3],
+            [181.6, 70.5],
+            [172.7, 95.9],
+            [190.5, 84.1],
+            [179.1, 87.3],
+            [175.3, 71.8],
+            [170.2, 65.9],
+            [193.0, 95.9],
+            [171.4, 91.4],
+            [177.8, 81.8],
+            [177.8, 96.8],
+            [167.6, 69.1],
+            [167.6, 82.7],
+            [180.3, 75.5],
+            [182.9, 79.5],
+            [176.5, 73.6],
+            [186.7, 91.8],
+            [188.0, 84.1],
+            [188.0, 85.9],
+            [177.8, 81.8],
+            [174.0, 82.5],
+            [177.8, 80.5],
+            [171.4, 70.0],
+            [185.4, 81.8],
+            [185.4, 84.1],
+            [188.0, 90.5],
+            [188.0, 91.4],
+            [182.9, 89.1],
+            [176.5, 85.0],
+            [175.3, 69.1],
+            [175.3, 73.6],
+            [188.0, 80.5],
+            [188.0, 82.7],
+            [175.3, 86.4],
+            [170.5, 67.7],
+            [179.1, 92.7],
+            [177.8, 93.6],
+            [175.3, 70.9],
+            [182.9, 75.0],
+            [170.8, 93.2],
+            [188.0, 93.2],
+            [180.3, 77.7],
+            [177.8, 61.4],
+            [185.4, 94.1],
+            [168.9, 75.0],
+            [185.4, 83.6],
+            [180.3, 85.5],
+            [174.0, 73.9],
+            [167.6, 66.8],
+            [182.9, 87.3],
+            [160.0, 72.3],
+            [180.3, 88.6],
+            [167.6, 75.5],
+            [186.7, 101.4],
+            [175.3, 91.1],
+            [175.3, 67.3],
+            [175.9, 77.7],
+            [175.3, 81.8],
+            [179.1, 75.5],
+            [181.6, 84.5],
+            [177.8, 76.6],
+            [182.9, 85.0],
+            [177.8, 102.5],
+            [184.2, 77.3],
+            [179.1, 71.8],
+            [176.5, 87.9],
+            [188.0, 94.3],
+            [174.0, 70.9],
+            [167.6, 64.5],
+            [170.2, 77.3],
+            [167.6, 72.3],
+            [188.0, 87.3],
+            [174.0, 80.0],
+            [176.5, 82.3],
+            [180.3, 73.6],
+            [167.6, 74.1],
+            [188.0, 85.9],
+            [180.3, 73.2],
+            [167.6, 76.3],
+            [183.0, 65.9],
+            [183.0, 90.9],
+            [179.1, 89.1],
+            [170.2, 62.3],
+            [177.8, 82.7],
+            [179.1, 79.1],
+            [190.5, 98.2],
+            [177.8, 84.1],
+            [180.3, 83.2],
+            [180.3, 83.2],
+          ],
+        },
+      ],
+    },
+    xTitle: {
+      type: String,
+      default: "x轴标题",
+    },
+    yTitle: {
+      type: String,
+      default: "Y轴标题",
+    },
+    showLegend: {
+      type: Boolean,
+      default: true,
+    },
+    lineData: {
+      type: Object,
+      default: () => {
+        return {
+          xTitle: "折线X",
+          yTitle: "折线y",
+          legends: ["1", "2", "3"],
+          data: [[1, 2, 3, 4]],
+        };
+      },
+    },
+  },
+  data() {
+    return {
+      id: "",
+      chart: null,
+      color: ["#05bb4c", "#f8de5b", "#4b55ae", "#fa8c16"],
+    };
+  },
+  computed: {
+    series() {
+      let result = [];
+      this.data.forEach((element, index) => {
+        result.push({
+          name: element.title,
+          type: "scatter",
+          emphasis: {
+            focus: "series",
+          },
+          data: element.value,
+          markLine: {
+            data: [
+              {
+                type: "max",
+                name: "最大值",
+                label: {
+                  color: partten.getColor("gray"),
+                },
+              },
+              {
+                type: "min",
+                name: "最小值",
+                label: {
+                  color: partten.getColor("gray"),
+                },
+              },
+            ],
+          },
+        });
+      });
+      return result;
+    },
+    legend() {
+      let result = [];
+      if (this.data && this.data.length > 0)
+        result.push(
+          this.data.map((t) => {
+            return t.title;
+          })
+        );
+
+      if (this.lineData && this.lineData.legends && this.lineData.legends.legends > 0) result.push(this.lineData.legends);
+      return result;
+    },
+  },
+  methods: {
+    resize() {},
+    initChart() {
+      let that = this;
+      const chart = echarts.init(this.$el);
+
+      let option = {
+        color: this.color,
+        grid: {
+          top: 40,
+          left: 40,
+          right: 64,
+          bottom: 24,
+          containLabel: true,
+        },
+        tooltip: {
+          trigger: "item",
+          showDelay: 0,
+          backgroundColor: "rgba(0,0,0,0.4)",
+          borderColor: partten.getColor("gray"),
+          textStyle: {
+            fontSize: util.vh(16),
+            color: "#fff",
+          },
+          formatter: function(params) {
+            if (params.componentType == "markLine") {
+              return params.name + "<br />" + params.value;
+            }
+            var msg = params.seriesName + "<br />";
+            msg += params.marker + that.xTitle + ":" + params.value[0] + "<br />";
+            msg += params.marker + that.yTitle + ":" + params.value[1] + "<br />";
+            return msg;
+          },
+          axisPointer: {
+            show: true,
+            type: "cross",
+            lineStyle: {
+              type: "dashed",
+              width: 1,
+            },
+          },
+        },
+        legend: {
+          show: this.showLegend,
+          data: this.legend,
+          right: "40",
+          icon: "circle",
+          itemWidth: 6,
+          inactiveColor: partten.getColor("gray"),
+          textStyle: {
+            color: partten.getColor("grayl"),
+            fontSize: 12,
+          },
+        },
+        xAxis: [
+          {
+            name: this.xTitle,
+            type: "value",
+            scale: true,
+            axisLabel: {
+              formatter: "{value}",
+            },
+            splitLine: {
+              show: false,
+            },
+          },
+        ],
+        yAxis: [
+          {
+            type: "value",
+            name: this.yTitle,
+            scale: true,
+            axisLabel: {
+              formatter: "{value}",
+            },
+            splitLine: {
+              show: false,
+            },
+          },
+        ],
+        series: this.series,
+      };
+
+      if (this.lineData && this.lineData.data) {
+        option.xAxis.push({
+          type: "category",
+          // name: this.lineData.xTitle,
+          boundaryGap: false,
+          axisLabel: {
+            show: false,
+          },
+          axisLine: {
+            show: false,
+          },
+          data: this.lineData.legends,
+        });
+
+        option.yAxis.push({
+          type: "value",
+          // name: this.lineData.yTitle,
+          axisLabel: {
+            show: false,
+          },
+          axisLine: {
+            show: false,
+          },
+          //分格线
+          splitLine: {
+            show: false,
+          },
+        });
+
+        this.lineData.data.forEach((value, index) => {
+          option.series.push({
+            name: this.lineData.legends[index],
+            type: "line",
+            smooth: true,
+            showSymbol: false,
+            zlevel: index,
+            lineStyle: {
+              show: false,
+            },
+            yAxisIndex: 0,
+            xAxisIndex: 1,
+            data: value,
+          });
+        });
+      }
+
+      chart.clear();
+      chart.setOption(option);
+
+      this.resize = function() {
+        chart.resize();
+      };
+
+      window.addEventListener("resize", this.resize);
+    },
+  },
+  created() {
+    this.id = "pie-chart-" + util.newGUID();
+  },
+  mounted() {
+    this.$nextTick(() => {
+      this.$el.style.width = this.width;
+      this.$el.style.height = this.height;
+      this.initChart();
+    });
+  },
+  updated() {
+    this.$nextTick(() => {
+      this.initChart();
+    });
+  },
+  unmounted() {
+    window.removeEventListener("resize", this.resize);
+  },
+};
+</script>
+
+<style lang="less">
+.chart {
+  width: 100%;
+  height: 100%;
+  display: inline-block;
+}
+</style>

+ 1 - 1
src/components/chart/combination/vertival-bar-line-chart.vue

@@ -46,7 +46,7 @@ export default {
     // 单位
     units: {
       type: Array,
-      default: () => ["健康趋势", "风机健康状态数量"],
+      default: () => ["", "风机健康状态数量"],
     },
     // 显示 legend
     showLegend: {

+ 6 - 4
src/components/chart/line/double-line-chart.vue

@@ -123,7 +123,7 @@ export default {
     return {
       id: "",
       chart: null,
-      color: ["#05bb4c", "#f8de5b", "#4b55ae", "#fa8c16", "#1DA0D7","#DD5044"],
+      color: ["#05bb4c", "#f8de5b", "#4b55ae", "#fa8c16", "#1DA0D7", "#DD5044"],
       newlist: null,
     };
   },
@@ -149,9 +149,11 @@ export default {
       });
     },
     legend() {
-      return this.newlist.map((t) => {
-        return t.title;
-      });
+      if (this.newlist) {
+        return this.newlist.map((t) => {
+          return t.title;
+        });
+      }
     },
     xdata() {
       return this.newlist[0].value.map((t) => {

+ 289 - 0
src/components/chart/line/double-line-chartold.vue

@@ -0,0 +1,289 @@
+<template>
+  <div class="chart" :id="id"></div>
+</template>
+
+<script>
+import util from "@/helper/util.js";
+import partten from "@/helper/partten.js";
+import * as echarts from "echarts";
+
+export default {
+  name: "double-line-chart",
+  componentName: "double-line-chart",
+  props: {
+    width: {
+      type: String,
+      default: "100%",
+    },
+    height: {
+      type: String,
+      default: "13.889vh",
+    },
+    // 传入数据
+    list: {
+      type: Array,
+      default: () => [
+        {
+          title: "绿线",
+          smooth: true,
+          value: [
+            {
+              text: "",
+              value: 0,
+            },
+            {
+              text: "0:00",
+              value: 20,
+            },
+            {
+              text: "10:00",
+              value: 1,
+            },
+            {
+              text: "11:00",
+              value: 40,
+            },
+            {
+              text: "12:00",
+              value: 10,
+            },
+            {
+              text: "13:00",
+              value: 15,
+            },
+            {
+              text: "14:00",
+              value: 30,
+            },
+            {
+              text: "15:00",
+              value: 40,
+            },
+            {
+              text: "",
+              value: 10,
+            },
+          ],
+        },
+        {
+          title: "黄线",
+          smooth: true,
+          value: [
+            {
+              text: "",
+              value: 0,
+            },
+            {
+              text: "0:00",
+              value: 40,
+            },
+            {
+              text: "10:00",
+              value: 20,
+            },
+            {
+              text: "11:00",
+              value: 20,
+            },
+            {
+              text: "12:00",
+              value: 10,
+            },
+            {
+              text: "13:00",
+              value: 40,
+            },
+            {
+              text: "14:00",
+              value: 50,
+            },
+            {
+              text: "15:00",
+              value: 40,
+            },
+            {
+              text: "",
+              value: 10,
+            },
+          ],
+        },
+      ],
+    },
+    // 单位
+    unit: {
+      type: String,
+      default: "",
+    },
+    showLegend: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      id: "",
+      chart: null,
+      color: ["#05bb4c", "#f8de5b", "#4b55ae", "#fa8c16"],
+    };
+  },
+  computed: {
+    colorValue() {
+      return partten.getColor(this.color);
+    },
+    datas() {
+      return this.list.map((t) => {
+        return t.value;
+      });
+    },
+    legend() {
+      if (this.newlist) {
+        return this.newlist.map((t) => {
+          return t.title;
+        });
+      } else {
+        return "";
+      }
+    },
+    xdata() {
+      if (this.list) {
+        return this.list[0].value.map((t) => {
+          return t.text;
+        });
+      } else {
+        return "";
+      }
+    },
+    series() {
+      let result = [];
+      this.list.forEach((value, index) => {
+        result.push({
+          name: value.title,
+          type: "line",
+          smooth: value.smooth,
+          showSymbol: false,
+          zlevel: index,
+          lineStyle: {
+            normal: {
+              color: this.color[index],
+              width: 1,
+            },
+          },
+          yAxisIndex: value.yAxisIndex,
+          data: value.value.map((t) => {
+            return t.value;
+          }),
+        });
+      });
+
+      return result;
+    },
+    yAxis() {
+      let result = [];
+      result.push({
+        type: "value",
+        name: this.unit,
+        axisLabel: {
+          formatter: "{value}",
+          fontSize: util.vh(14),
+        },
+        boundaryGap: false,
+        //分格线
+        splitLine: {
+          show: false,
+        },
+      });
+      return result;
+    },
+  },
+  methods: {
+    resize() {},
+    initChart() {
+      const chart = echarts.init(this.$el);
+
+      let option = {
+        color: this.color,
+        tooltip: {
+          trigger: "axis",
+          backgroundColor: "rgba(0,0,0,0.4)",
+          borderColor: partten.getColor("gray"),
+          textStyle: {
+            color: "#fff",
+            fontSize: util.vh(16),
+          },
+        },
+        legend: {
+          show: this.showLegend,
+          data: this.legend,
+          right: 56,
+          icon: "circle",
+          itemWidth: 6,
+          inactiveColor: partten.getColor("gray"),
+          textStyle: {
+            color: partten.getColor("grayl"),
+            fontSize: 12,
+          },
+        },
+        grid: {
+          top: 16,
+          left: 32,
+          right: 8,
+          bottom: 24,
+        },
+        xAxis: [
+          {
+            type: "category",
+            boundaryGap: false,
+            axisLabel: {
+              formatter: "{value}",
+              textStyle: {
+                color: partten.getColor("gray"),
+                fontSize: util.vh(14),
+              },
+            },
+            data: this.xdata,
+          },
+        ],
+        yAxis: this.yAxis,
+        series: this.series,
+      };
+
+      chart.clear();
+      chart.setOption(option);
+
+      this.resize = function() {
+        chart.resize();
+      };
+
+      window.addEventListener("resize", this.resize);
+    },
+  },
+  created() {
+    this.$nextTick(() => {
+      this.id = "pie-chart-" + util.newGUID();
+    });
+  },
+  mounted() {
+    this.$nextTick(() => {
+      this.$el.style.width = this.width;
+      this.$el.style.height = this.height;
+      this.initChart();
+    });
+  },
+  updated() {
+    this.$nextTick(() => {
+      this.initChart();
+    });
+  },
+  unmounted() {
+    window.removeEventListener("resize", this.resize);
+  },
+};
+</script>
+
+<style lang="less">
+.chart {
+  width: 100%;
+  height: 100%;
+  display: inline-block;
+}
+</style>

+ 157 - 40
src/components/chart/line/img-line-chart.vue

@@ -3,8 +3,6 @@
 </template>
 
 <script>
-import SunImg from "../../../assets/sun.png";
-import CloudImg from "../../../assets/cloud.png";
 import util from "@/helper/util.js";
 import partten from "@/helper/partten.js";
 import * as echarts from "echarts";
@@ -32,66 +30,98 @@ export default {
             {
               text: "1",
               value: 1,
+              weather: "sun",
+              direction: "n",
             },
             {
               text: "2",
               value: 2,
+              weather: "sun",
+              direction: "s",
             },
             {
               text: "3",
               value: 1,
+              weather: "sun",
+              direction: "w",
             },
             {
               text: "4",
               value: 3,
+              weather: "sun",
+              direction: "e",
             },
             {
               text: "5",
               value: 3,
+              weather: "sun",
+              direction: "nw",
             },
             {
               text: "6",
               value: 3,
+              weather: "sun",
+              direction: "ne",
             },
             {
               text: "7",
               value: 3,
+              weather: "sun",
+              direction: "se",
             },
             {
               text: "8",
               value: 3,
+              weather: "sun",
+              direction: "sw",
             },
             {
               text: "9",
               value: 3,
+              weather: "sun",
+              direction: "sw",
             },
             {
               text: "10",
               value: 3,
+              weather: "sun",
+              direction: "sw",
             },
             {
               text: "11",
               value: 3,
+              weather: "sun",
+              direction: "sw",
             },
             {
               text: "12",
               value: 3,
+              weather: "sun",
+              direction: "sw",
             },
             {
               text: "13",
               value: 3,
+              weather: "sun",
+              direction: "sw",
             },
             {
               text: "14",
               value: 3,
+              weather: "sun",
+              direction: "sw",
             },
             {
               text: "15",
               value: 3,
+              weather: "sun",
+              direction: "sw",
             },
             {
               text: "16",
               value: 3,
+              weather: "sun",
+              direction: "sw",
             },
           ],
         },
@@ -134,6 +164,21 @@ export default {
       id: "",
       chart: null,
       color: ["#05bb4c", "#4b55ae", "#fa8c16", "#f8de5b"],
+      imgs: {
+        sun: require("@assets/png/weather/sun.png"),
+        cloud: require("@assets/png/weather/cloud.png"),
+        rain: require("@assets/png/weather/rain.png"),
+      },
+      directions: {
+        n: require("@assets/png/direction/n.svg"),
+        s: require("@assets/png/direction/s.svg"),
+        w: require("@assets/png/direction/w.svg"),
+        e: require("@assets/png/direction/e.svg"),
+        nw: require("@assets/png/direction/nw.svg"),
+        ne: require("@assets/png/direction/ne.svg"),
+        sw: require("@assets/png/direction/sw.svg"),
+        se: require("@assets/png/direction/se.svg"),
+      },
     };
   },
   computed: {
@@ -148,7 +193,21 @@ export default {
       });
     },
     yAxis() {
-      let result = [];
+      let result = [
+        {
+          type: "value",
+          name: "",
+          axisLabel: {
+            show: false,
+          },
+          //分格线
+          splitLine: {
+            show: false,
+          },
+          min: 0,
+          max: 10,
+        },
+      ];
       this.units.forEach((value, index) => {
         result.push({
           type: "value",
@@ -173,52 +232,89 @@ export default {
       let result = [];
 
       this.list.forEach((value, index) => {
-        var imgaa = new Image();
-        var randon = Math.round(Math.random() * 1);
-        if (randon == 0) {
-          imgaa.src = SunImg;
-        } else {
-          imgaa.src = CloudImg;
-        }
         if (index == 0) {
           result.push({
             name: value.title,
             type: "line",
             smooth: true,
             zlevel: index,
-            label: {
-              show: true,
-              position: "top",
-              // formatter: ["  {weather| }"].join("\n"),
-              formatter: function(e) {
-                return ["  {weather| }"];
+            lineStyle: {
+              normal: {
+                color: this.color[index],
+                width: 1,
               },
-              rich: {
-                weather: {
-                  height: 15,
-                  backgroundColor: {
-                    image: imgaa,
+            },
+            yAxisIndex: value.yAxisIndex,
+            data: value.value.map((t) => {
+              return {
+                value: t.value,
+                label: {
+                  show: true,
+                  position: "top",
+                  formatter: function (e) {
+                    return ["  {weather| }"];
                   },
+                  rich: {
+                    weather: {
+                      height: 15,
+                      backgroundColor: {
+                        image: this.imgs[t.weather],
+                      },
+                    },
+                  },
+                  borderWidth: 1,
+                  borderRadius: 4,
+                  padding: [4, 10],
+                  lineHeight: 26,
+                  distance: 20,
                 },
-              },
-              // backgroundColor: {
-              //   image: imgaa,
-              // },
-              borderWidth: 1,
-              borderRadius: 4,
-              padding: [4, 10],
-              lineHeight: 26,
-              distance: 20,
-            },
+              };
+            }),
+          });
+          result.push({
+            name: "风向",
+            type: "bar",
+            smooth: true,
+            zlevel: 9999,
             lineStyle: {
               normal: {
                 color: this.color[index],
                 width: 1,
               },
             },
-            yAxisIndex: value.yAxisIndex,
+            yAxisIndex: 0,
+            barGap: "0%",
+            barCategoryGap: "0%",
+            clip: false,
             data: value.value.map((t) => {
-              return t.value;
+              return {
+                value: -2,
+                label: {
+                  show: true,
+                  position: "inside",
+                  formatter: function (e) {
+                    return ["  {direction| }"];
+                  },
+                  rich: {
+                    direction: {
+                      height: 20,
+                      backgroundColor: {
+                        image: this.directions[t.direction],
+                      },
+                    },
+                  },
+                  borderWidth: 1,
+                  borderRadius: 4,
+                  padding: [4, 10],
+                  lineHeight: 26,
+                  distance: 20,
+                },
+                itemStyle: {
+                  borderWidth: 1,
+                  borderColor: "#606769",
+                  color: "transparent",
+                },
+              };
             }),
           });
         } else {
@@ -265,6 +361,24 @@ export default {
             color: "#fff",
             fontSize: util.vh(16),
           },
+          formatter: function (params) {
+            let str = "";
+            for (let i = 0; i < params.length; i++) {
+              if (params[i].seriesName == "风向") {
+                continue;
+              }
+              if (i == 0) {
+                str += `${params[i].name}<br/>${params[i].seriesName}: ${
+                  params[i].data.value ? params[i].data.value : params[i].data
+                }<br/>`;
+                continue;
+              }
+              str += `${params[i].seriesName}: ${
+                params[i].data.value ? params[i].data.value : params[i].data
+              }<br/>`;
+            }
+            return str;
+          },
         },
         legend: {
           show: this.showLegend,
@@ -279,23 +393,26 @@ export default {
           },
         },
         grid: {
-          top: util.vh(32),
-          left: util.vh(40),
-          right: util.vh(40),
-          bottom: util.vh(24),
+          top: 32,
+          left: 8,
+          right: 8,
+          bottom: 32,
+          containLabel: true,
         },
         xAxis: [
           {
             type: "category",
-            boundaryGap: false,
+            // boundaryGap: false,
             axisLabel: {
               formatter: "{value}",
-              fontSize: util.vh(14),
+              fontSize: 14,
               textStyle: {
                 color: partten.getColor("gray"),
               },
             },
             data: this.xdata,
+            offset: 32,
+            axisLine: { onZero: true },
           },
         ],
         yAxis: this.yAxis,
@@ -305,7 +422,7 @@ export default {
       chart.clear();
       chart.setOption(option);
 
-      this.resize = function() {
+      this.resize = function () {
         chart.resize();
       };
 

+ 6 - 10
src/components/chart/line/multi-arrow-line-chart.vue

@@ -148,16 +148,12 @@ export default {
         var arrowArr = [];
         data.forEach((dvalue, dindex) => {
           var item = dvalue;
-          if (dindex < data.length / 2) {
-            arrowArr.push({
-              symbol: "arrow",
-              symbolSize: 12,
-              symbolRotate: -90,
-              value: item,
-            });
-          } else {
-            arrowArr.push({ symbol: "none", value: item });
-          }
+          arrowArr.push({
+            symbol: "arrow",
+            symbolSize: 12,
+            symbolRotate: -90,
+            value: item,
+          });
         });
         result.push({
           name: value.title,

+ 233 - 55
src/components/chart/line/multiple-y-line-chart.vue

@@ -25,12 +25,7 @@ export default {
             default: () => [
                 {
                     title: "机舱震动x方向",
-                    yAxis: {
-                      min: -0.01,
-                      max: 0,
-                      unit: "",
-                      position: "left",
-                    },
+                    yAxisIndex: 0,
                     value: [
                         {
                             text: "-0.003",
@@ -44,16 +39,35 @@ export default {
                             text: "-0.003",
                             value: -0.006,
                         },
+                        {
+                            text: "-0.003",
+                            value: -0.003,
+                        },
+                        {
+                            text: "-0.002",
+                            value: -0.002,
+                        },
+                        {
+                            text: "-0.003",
+                            value: -0.006,
+                        },
+                        {
+                            text: "-0.003",
+                            value: -0.003,
+                        },
+                        {
+                            text: "-0.002",
+                            value: -0.002,
+                        },
+                        {
+                            text: "-0.003",
+                            value: -0.006,
+                        },
                     ],
                 },
                 {
                     title: "机舱震动y方向",
-                    yAxis: {
-                      min: -0.01,
-                      max: 0,
-                      unit: "",
-                      position: "right",
-                    },
+                    yAxisIndex: 1,
                     value: [
                         {
                             text: "-0.01",
@@ -67,16 +81,35 @@ export default {
                             text: "-0.008",
                             value: -0.008,
                         },
+                        {
+                            text: "-0.01",
+                            value: -0.01,
+                        },
+                        {
+                            text: "-0.005",
+                            value: -0.005,
+                        },
+                        {
+                            text: "-0.008",
+                            value: -0.008,
+                        },
+                        {
+                            text: "-0.01",
+                            value: -0.01,
+                        },
+                        {
+                            text: "-0.005",
+                            value: -0.005,
+                        },
+                        {
+                            text: "-0.008",
+                            value: -0.008,
+                        },
                     ],
                 },
                 {
                     title: "机舱震动最大偏移值",
-                    yAxis: {
-                      min: 0,
-                      max: 1,
-                      unit: "",
-                      position: "left",
-                    },
+                    yAxisIndex: 2,
                     value: [
                         {
                             text: "1",
@@ -90,16 +123,35 @@ export default {
                             text: "0.5",
                             value: 0.5,
                         },
+                        {
+                            text: "1",
+                            value: 1,
+                        },
+                        {
+                            text: "0.05",
+                            value: 0.05,
+                        },
+                        {
+                            text: "0.5",
+                            value: 0.5,
+                        },
+                        {
+                            text: "1",
+                            value: 1,
+                        },
+                        {
+                            text: "0.05",
+                            value: 0.05,
+                        },
+                        {
+                            text: "0.5",
+                            value: 0.5,
+                        },
                     ],
                 },
                 {
                     title: "风速1",
-                    yAxis: {
-                      min: 0,
-                      max: 10,
-                      unit: "",
-                      position: "right",
-                    },
+                    yAxisIndex: 3,
                     value: [
                         {
                             text: "1",
@@ -113,16 +165,35 @@ export default {
                             text: "3",
                             value: 1,
                         },
+                        {
+                            text: "1",
+                            value: 1,
+                        },
+                        {
+                            text: "5",
+                            value: 5,
+                        },
+                        {
+                            text: "3",
+                            value: 1,
+                        },
+                        {
+                            text: "1",
+                            value: 1,
+                        },
+                        {
+                            text: "5",
+                            value: 5,
+                        },
+                        {
+                            text: "3",
+                            value: 1,
+                        },
                     ],
                 },
                 {
                     title: "风速2",
-                    yAxis: {
-                      min: 0,
-                      max: 10,
-                      unit: "",
-                      position: "left",
-                    },
+                    yAxisIndex: 4,
                     value: [
                         {
                             text: "1",
@@ -136,6 +207,30 @@ export default {
                             text: "3",
                             value: 1,
                         },
+                        {
+                            text: "1",
+                            value: 1,
+                        },
+                        {
+                            text: "2",
+                            value: 2,
+                        },
+                        {
+                            text: "3",
+                            value: 1,
+                        },
+                        {
+                            text: "1",
+                            value: 1,
+                        },
+                        {
+                            text: "2",
+                            value: 2,
+                        },
+                        {
+                            text: "3",
+                            value: 1,
+                        },
                     ],
                 },
             ],
@@ -144,6 +239,47 @@ export default {
             type: Boolean,
             default: false,
         },
+        // 轴
+        yAxises: {
+            type: Array,
+            default: () => [
+                {
+                    name: '机舱震动x方向',
+                    min: -0.01,
+                    max: 0,
+                    unit: "",
+                    position: "left",
+                },
+                {
+                    name: '机舱震动y方向',
+                    min: -0.01,
+                    max: 0,
+                    unit: "",
+                    position: "right",
+                },
+                {
+                    name: '机舱震动最大偏移值',
+                    min: 0,
+                    max: 1,
+                    unit: "",
+                    position: "left",
+                },
+                {
+                    name: '风速1',
+                    min: 0,
+                    max: 10,
+                    unit: "",
+                    position: "right",
+                },
+                {
+                    name: '风速2',
+                    min: 0,
+                    max: 10,
+                    unit: "",
+                    position: "left",
+                },
+            ],
+        },
     },
     data() {
         return {
@@ -166,15 +302,15 @@ export default {
         yAxis() {
             let result = [];
             let p = {left: 0, right: 0};
-            this.list.forEach((item, index) => {
+            this.yAxises.forEach((item, index) => {
                 result.push({
                     type: "value",
-                    name: `${item.title}${item.yAxis.unit}`,
-                    nameLocation: p[item.yAxis.position] % 2 == 0 ? "end" : "start",
-                    min: item.yAxis.min,
-                    max: item.yAxis.max,
-                    position: item.yAxis.position,
-                    offset: p[item.yAxis.position] * 60,
+                    name: `${item.name}${item.unit}`,
+                    nameLocation: p[item.position] % 2 == 0 ? "end" : "start",
+                    min: item.min,
+                    max: item.max,
+                    position: item.position,
+                    offset: p[item.position] * 60,
                     axisLabel: {
                         formatter: "{value}",
                         fontSize: util.vh(14),
@@ -193,7 +329,7 @@ export default {
                       show: true
                     }
                 });
-                p[item.yAxis.position]++;
+                p[item.position]++;
             });
 
             return result;
@@ -213,7 +349,7 @@ export default {
                             width: 1,
                         },
                     },
-                    yAxisIndex: index,
+                    yAxisIndex: value.yAxisIndex,
                     data: value.value.map((t) => {
                         return t.value;
                     }),
@@ -224,17 +360,31 @@ export default {
         },
     },
     methods: {
+        resize() {},
         initChart() {
             const chart = echarts.init(this.$el);
 
-            let option = {
+            let option = this.option();
+            console.log(option)
+            chart.clear();
+            chart.setOption(option);
+
+            this.resize = function() {
+                chart.resize();
+            };
+
+            window.addEventListener("resize", this.resize);
+        },
+        option: function () {
+            return {
                 color: this.color,
                 tooltip: {
                     trigger: "axis",
-                    backgroundColor: partten.getColor("gray"),
+                    backgroundColor: "rgba(0,0,0,0.4)",
+                    borderColor: partten.getColor("gray"),
                     textStyle: {
                         color: "#fff",
-                        fontSize: util.vh(16),
+                        fontSize: 14,
                     },
                 },
                 legend: {
@@ -249,11 +399,36 @@ export default {
                         fontSize: 12,
                     },
                 },
+                dataZoom: [{
+                    show: true,
+                    height: 30,
+                    xAxisIndex: [0],
+                    bottom: 30,
+                    "start": 0,
+                    "end": 10,
+                    handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z',
+                    handleSize: '110%',
+                    handleStyle: {
+                        color: "#05bb4c",
+                    },
+                    textStyle:{
+                        color:"rgba(204,187,225,0.5)",
+                    },
+                    fillerColor:"rgba(5,187,76,0.4)",
+                    borderColor: "rgba(5,187,76,0.5)",
+
+                }, {
+                    type: "inside",
+                    show: true,
+                    height: 15,
+                    start: 1,
+                    end: 35
+                }],
                 grid: {
                     top: util.vh(80),
                     left: util.vh(80),
                     right: util.vh(80),
-                    bottom: util.vh(24),
+                    bottom: util.vh(64),
                     containLabel: true,
                 },
                 xAxis: [
@@ -273,15 +448,20 @@ export default {
                 yAxis: this.yAxis,
                 series: this.series,
             };
-            console.log(option)
+        },
+        datazoom: function (start, end) {
+            const chart = echarts.getInstanceByDom(this.$el);
+            chart.dispatchAction({
+                type: 'dataZoom',
+                start: start,
+                end: end,
+            });
+        },
+        reload: function () {
+            const chart = echarts.getInstanceByDom(this.$el);
             chart.clear();
+            let option = this.option();
             chart.setOption(option);
-
-            this.resize = function() {
-                chart.resize();
-            };
-
-            window.addEventListener("resize", this.resize);
         },
     },
     created() {
@@ -289,11 +469,9 @@ export default {
     },
     mounted() {
         this.$nextTick(() => {
-            setTimeout(() => {
-                this.$el.style.width = this.width;
-                this.$el.style.height = this.height;
-                this.initChart();
-            }, 1000);
+            this.$el.style.width = this.width;
+            this.$el.style.height = this.height;
+            this.initChart();
         });
     },
     updated() {

+ 97 - 0
src/components/coms/cards/percent-card-2.0.1.vue

@@ -0,0 +1,97 @@
+<template>
+  <div class="percent-card">
+    <div class="card-chart">
+      <div class="card-title gray">{{ title }}</div>
+      <percent-bar width="64px" height="64px" :value="percent" :color="color" />
+    </div>
+    <div class="card-info">
+      <div class="card-value">
+        <span class="value-text gray">{{ TotalText }}</span>
+        <span class="white font-num">{{ TotalValue }}</span>
+      </div>
+      <div class="card-value">
+        <span class="value-text gray">{{ ActualText }}</span>
+        <span class="white font-num">{{ ActualValue }}</span>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+// 百分比card2
+// 使用位置 驾驶舱首页 计划电量完成情况 中的百分比卡片
+import PercentBar from "../../chart/bar/percent-bar-3.vue";
+export default {
+  components: {
+    PercentBar,
+  },
+  props: {
+    title: {
+      type: String,
+      default: "月计划完成率",
+    },
+    TotalText: {
+      type: String,
+      default: "实际",
+    },
+    TotalValue: {
+      type: Number,
+      default: 100,
+    },
+    ActualText: {
+      type: String,
+      default: "计划",
+    },
+    ActualValue: {
+      type: Number,
+      default: 25,
+    },
+    color: {
+      type: String,
+      default: "green",
+    },
+  },
+  computed: {
+    percent() {
+      return (this.ActualValue / this.TotalValue) * 100;
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.percent-card {
+  display: flex;
+
+  .card-chart {
+    display: flex;
+    align-items: center;
+  }
+
+  .card-title {
+    text-align: center;
+    width: 100%;
+    font-size: 12px;
+    color: #ffffff;
+  }
+
+  .card-info {
+    margin: 0 0.741vh;
+
+    .card-value {
+      font-size: @fontsize-s;
+      font-weight: 400;
+      margin-top: 1.1111vh;
+
+      .value-text {
+        margin-right: 0.741vh;
+        font-family: @font-family-num;
+      }
+    }
+
+    .card-text {
+      font-size: @fontsize;
+    }
+  }
+}
+</style>

+ 0 - 1
src/components/coms/panel/panel-no-title.vue

@@ -33,7 +33,6 @@ export default {
     },
   },
 };
-s;
 </script>
 <style lang="less" scoped>
 .com-panel {

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

@@ -7,7 +7,7 @@
       </div>
       <div class="panel-tools">{{ subTitle }}</div>
     </div>
-    <div class="panel-body">
+    <div class="panel-body" :class="{ blur: bgBlur }">
       <slot></slot>
     </div>
   </div>
@@ -28,6 +28,10 @@ export default {
       type: Boolean,
       default: true,
     },
+    bgBlur: {
+      type: Boolean,
+      default: false,
+    },
   },
   computed: {
     // 是否存在标题

+ 10 - 1
src/components/coms/table/check-table.vue

@@ -29,7 +29,7 @@
         </tr>
       </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="currentPage4" :page-size="pageSize" layout="total, prev, pager, next, jumper" :total="data.total" v-bind="elPaggingProps"> </el-pagination>
   </table>
 </template>
 
@@ -90,6 +90,15 @@ export default {
       type: Boolean,
       default: true,
     },
+    elPaggingProps: {
+      type: Object,
+      default: () => {
+        return {
+          layout: "total, sizes, prev, pager, next, jumper",
+          // "page-sizes": [100, 200, 300, 400],
+        };
+      },
+    },
   },
   // 自定义事件
   emits: {

+ 276 - 0
src/components/coms/table/group-table.vue

@@ -0,0 +1,276 @@
+<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">
+      <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"
+          :key="sub"
+          :label="sub.name"
+          :prop="sub.field"
+          :width="sub.width"
+          :sortable="sub.sortable"
+          :show-overflow-tooltip="!sub.slot"
+          :fixed="sub.fixed"
+          :align="sub.align ? sub.align : 'center'"
+          :resizable="sub.resizable"
+          :header-align="'center'"
+        >
+          <template v-if="sub.slot == true" #default="item">
+            <slot :name="sub.field" :column="sub" :row="item.row" :all="item" :data="item.row[item.field]"></slot>
+          </template>
+        </el-table-column>
+      </el-table-column>
+      <el-table-column
+        v-if="!col.child"
+        :label="col.name"
+        :prop="col.field"
+        :width="col.width"
+        :sortable="col.sortable"
+        :show-overflow-tooltip="!col.slot"
+        :fixed="col.fixed"
+        :align="col.align ? col.align : 'center'"
+        :resizable="col.resizable"
+        :header-align="'center'"
+      >
+        <template v-if="col.slot == true" #default="item">
+          <slot :name="col.field" :column="col" :row="item.row" :all="item" :data="item.row[col.field]"></slot>
+        </template>
+      </el-table-column>
+    </template>
+  </el-table>
+  <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>
+</template>
+
+<script>
+export default {
+  // 名称
+  name: "ComTable",
+  // 使用组件
+  components: {},
+  // 传入参数
+  props: {
+    /**
+             * {
+                    column: [{
+                        name: "风机名称",
+                        child:[{
+                            field: "name",
+                            width:'', // 宽度
+                            click:function(){} // 点击事件
+                            sortable:fasle,
+                            slot:false,
+                            fixed:false,
+                            align:'center',
+                            resizable :false,
+                        }]
+                    }],
+                    total:200
+                }
+             */
+    data: Object,
+    height: {
+      type: String,
+      default: "",
+    },
+    pageSize: {
+      type: Number,
+      default: 0,
+    },
+    customClass: {
+      type: String,
+      default: "",
+    },
+    elPaggingProps: {
+      type: Object,
+      default: () => {
+        return {
+          layout: "total, sizes, prev, pager, next, jumper",
+          // "page-sizes": [100, 200, 300, 400],
+        };
+      },
+    },
+  },
+  emits: {
+    onPagging: null,
+    headerClick: null,
+  },
+  // 数据
+  data() {
+    return {
+      currentPage: 1,
+    };
+  },
+  computed: {
+    tableData() {
+      let that = this;
+      if (this.sortCol == "") {
+        return this.data.data;
+      } else {
+        let data = this.data.data;
+
+        data.sort((a, b) => {
+          let rev = 1;
+          if (that.sortType == "ASC") rev = 1;
+          else if (that.sortType == "DESC") rev = -1;
+
+          if (a[that.sortCol] > b[that.sortCol]) return rev * 1;
+          if (a[that.sortCol] < b[that.sortCol]) return rev * -1;
+          return 0;
+        });
+        return data;
+      }
+    },
+    pageable() {
+      return this.pageSize != 0;
+    },
+    pages() {
+      if (this.pageable) return parseInt(this.data.total / this.pageSize) + 1;
+      else return 0;
+    },
+    startRow() {
+      if (this.pageable) return (this.currentPage - 1) * this.pageSize;
+      else return 0;
+    },
+    endRow() {
+      if (this.pageable) return this.currentPage * this.pageSize;
+      else return this.data.data.length;
+    },
+  },
+  // 函数
+  methods: {
+    onClick(row, column, cell, event) {
+      if (column.rawColumnKey.click) column.rawColumnKey.click(event, row);
+    },
+    onHeaderClick(column, event) {
+      this.$emit("headerClick", { event: event, col: column.rawColumnKey, data: this.data.data });
+    },
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.$emit("onPagging", {
+        pageIndex: this.currentPage,
+        pageSize: this.pageSize,
+        start: this.startRow,
+        end: this.endRow,
+      });
+    },
+  },
+  // 生命周期钩子
+  beforeCreate() {
+    // 创建前
+  },
+  created() {
+    // 创建后
+  },
+  beforeMount() {
+    // 渲染前
+  },
+  mounted() {
+    // 渲染后
+  },
+  beforeUpdate() {},
+  updated() {},
+};
+</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;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+
+        &.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>

+ 19 - 105
src/components/coms/table/table.vue

@@ -18,12 +18,12 @@
             @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>
       </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>
 
@@ -70,6 +70,11 @@ export default {
       type: Boolean,
       default: true,
     },
+    // 列高亮
+    showColHover: {
+      type: Boolean,
+      default: false,
+    },
     canScroll: {
       type: Boolean,
       default: true,
@@ -82,6 +87,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: {
@@ -172,7 +187,7 @@ export default {
     hover(row, col) {
       if (this.showHover) {
         this.hoverRow = row;
-        this.hoverCol = col;
+        if (this.showColHover) this.hoverCol = col;
       }
     },
     leave() {
@@ -207,105 +222,4 @@ 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>
+<style lang="less"></style>

+ 11 - 2
src/components/coms/table/table2.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-table stripe :data="data.data" :height="height" style="width: 100%" @cell-click="onClick">
+  <el-table class="custom-table" stripe :data="data.data" :height="height" style="width: 100%" @cell-click="onClick">
     <el-table-column
       v-for="col in data.column"
       :key="col"
@@ -18,7 +18,7 @@
       </template>
     </el-table-column>
   </el-table>
-  <el-pagination class="mg-t-8" v-if="pageable" @current-change="handleCurrentChange" :current-page="currentPage" :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>
 </template>
 
 <script>
@@ -54,6 +54,15 @@ export default {
       type: Number,
       default: 0,
     },
+    elPaggingProps: {
+      type: Object,
+      default: () => {
+        return {
+          layout: "total, sizes, prev, pager, next, jumper",
+          // "page-sizes": [100, 200, 300, 400],
+        };
+      },
+    },
   },
   // 自定义事件
   emits: {

+ 179 - 0
src/components/other/fj/index.vue

@@ -0,0 +1,179 @@
+<template>
+  <svg
+    :id="fjId"
+    version="1.1"
+    xmlns="http://www.w3.org/2000/svg"
+    xmlns:xlink="http://www.w3.org/1999/xlink"
+    viewBox="0 0 93.5 96.5"
+    enable-background="new 0 0 93.5 96.5"
+    xml:space="preserve"
+    :width="fjWidth"
+    :height="fjHeight"
+  >
+    <defs>
+      <rect
+        id="SVGID_1_"
+        x="-260.14"
+        y="-365.945"
+        width="595.28"
+        height="841.89"
+      />
+      <rect
+        id="SVGID_3_"
+        x="-260.14"
+        y="-365.945"
+        width="595.28"
+        height="841.89"
+      />
+    </defs>
+    <clipPath id="SVGID_2_">
+      <use xlink:href="#SVGID_1_" overflow="visible" />
+    </clipPath>
+    <clipPath id="SVGID_4_">
+      <use xlink:href="#SVGID_3_" overflow="visible" />
+    </clipPath>
+    <g>
+      <path
+        fill="#D8D8D8"
+        d="M45.96,39.183l-2.22,50.288c0,0,1.916,0.747,3.605,0.747c1.738,0,3.752-0.747,3.752-0.747l-2.181-50.288
+        H45.96z"
+      />
+    </g>
+    <g>
+      <g>
+        <path
+          :fill="background"
+          d="M45.427,37.35l3.854,1.471c0,0,10.131-21.287,10.834-32.815C52.61,15.16,45.427,37.35,45.427,37.35"
+        />
+        <path
+          :fill="background"
+          d="M49.088,38.821l-3.163,2.647c0,0,13.648,19.221,23.373,25.454C64.962,55.908,49.088,38.821,49.088,38.821"
+        />
+        <path
+          :fill="background"
+          d="M45.749,41.592l0.022-4.125c0,0-23.489-2-34.528,1.396C22.452,42.669,45.749,41.592,45.749,41.592"
+        />
+      </g>
+      <g>
+        <path
+          fill="#D8D8D8"
+          d="M49.095,38.328l11.02-32.752c0,0-0.102,2.009-0.186,2.674c-0.068,0.56-0.282,1.67-0.402,2.222
+        c-0.1,0.454-0.421,1.81-0.421,1.81s-0.583,2.35-0.815,3.123c-0.767,2.562-2.484,7.63-3.438,10.129
+        c-0.805,2.119-2.529,6.314-3.434,8.393c-0.492,1.132-2.029,4.5-2.029,4.5"
+        />
+        <path
+          fill="#D8D8D8"
+          d="M46.446,41.545l23.227,25.585c0,0-1.705-1.066-2.244-1.465c-0.457-0.334-1.32-1.061-1.744-1.436
+        c-0.348-0.307-1.375-1.248-1.375-1.248s-1.769-1.656-2.33-2.234c-1.863-1.918-5.451-5.889-7.17-7.938
+        c-1.456-1.737-4.28-5.287-5.654-7.091c-0.748-0.98-2.939-3.965-2.939-3.965"
+        />
+        <path
+          fill="#D8D8D8"
+          d="M45.376,37.815l-34.535,1.201c0,0,1.915-0.614,2.569-0.768c0.548-0.131,1.662-0.324,2.22-0.406
+        c0.459-0.066,1.843-0.241,1.843-0.241s2.405-0.28,3.211-0.335c2.667-0.181,8.015-0.356,10.691-0.345
+        c2.267,0.01,6.798,0.149,9.064,0.265c1.231,0.064,4.926,0.318,4.926,0.318"
+        />
+      </g>
+      <animateTransform
+        attributeName="transform"
+        attributeType="XML"
+        type="rotate"
+        from="0 46.75 39.182"
+        to="359 46.75 39.182"
+        :dur="rotate"
+        repeatCount="indefinite"
+      />
+    </g>
+    <g>
+      <path
+        fill="#60BFD6"
+        d="M42.686,39.182c0,2.504,2.117,4.545,4.732,4.545s4.733-2.041,4.733-4.545c0-2.512-2.118-4.544-4.733-4.544
+        S42.686,36.67,42.686,39.182"
+      />
+    </g>
+    <g>
+      <path
+        fill="#B1E1EB"
+        d="M44.4,39.182c0,1.561,1.353,2.831,3.017,2.831c1.663,0,3.02-1.27,3.02-2.831c0-1.56-1.356-2.829-3.02-2.829
+        C45.753,36.353,44.4,37.622,44.4,39.182"
+      />
+    </g>
+  </svg>
+</template>
+
+<script>
+export default {
+  // 名称
+  name: "fj",
+
+  props: {
+    id: {
+      type: String,
+      default: "fj-1",
+    },
+    speed: {
+      type: Number || String,
+      default: "0.5s",
+    },
+    color: {
+      type: String,
+      default: "#4b55ae",
+    },
+    width:{
+      type: String,
+      default: "43px",
+    },
+    height:{
+      type: String,
+      default: "46px",
+    }
+  },
+
+  // 数据
+  data() {
+    return {
+      fjId: "",
+      rotate: "",
+      background: "",
+      fjWidth:"",
+      fjHeight:""
+    };
+  },
+
+  // 函数
+  methods: {},
+
+  created() {
+    this.fjId = this.id;
+    this.rotate = this.speed;
+    this.background = this.color;
+    this.fjWidth = this.width;
+    this.fjHeight = this.height;
+  },
+
+  mounted() {},
+
+  unmounted() {},
+
+  watch: {
+    id(res) {
+      this.fjId = res;
+    },
+    speed(res) {
+      this.rotate = res;
+    },
+    color(res) {
+      this.background = res;
+    },
+    width(res) {
+      this.fjWidth = res;
+    },
+    height(res) {
+      this.fjHeight = res;
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+</style>

+ 4 - 3
src/components/three/wave.vue

@@ -56,7 +56,7 @@
                 const material = new THREE.ShaderMaterial({
                     uniforms: {
                         color: {
-                            value: new THREE.Color(0x05bb4c)
+                            value: new THREE.Color(0x05bb4c),
                         },
                     },
                     vertexShader: `attribute float scale;
@@ -68,8 +68,9 @@
                     fragmentShader: `uniform vec3 color;
                         void main() {
                             if ( length( gl_PointCoord - vec2( 0.5, 0.5 ) ) > 0.475 ) discard;
-                            gl_FragColor = vec4( color, 1.0 );
-                        }`
+                            gl_FragColor = vec4( color, 0.7 );
+                        }`,
+                    transparent: true,
                 });
                 particles = new THREE.Points(geometry, material);
                 scene.add(particles);

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


+ 19 - 1
src/views/About.vue

@@ -2,6 +2,14 @@
   <div class="about">
     <h1 @click="showDialog">This is an about page</h1>
     <HealthReport :show="show" :params="{ wtId: 'QG01_11', recorddate: '2021-06-19' }" @closed="(res) => { this.show=false; }" />
+    <div class="fjBox1">
+      <!-- 风机 SVG 使用方法 -->
+      <FJ id="fj-1" speed="5s" color="red" width="43px" height="46px" />
+      <FJ :speed="0.1" color="#1890ff" width="200px" height="210px" />
+      <FJ id="fj-3" speed="2s" width="80px" height="82px" />
+      <FJ />
+      <FJ :speed="1" />
+    </div>
     <!-- <list-bar-chart /> -->
   </div>
 </template>
@@ -9,6 +17,7 @@
 <script>
 // import ListBarChart from "../components/chart/bar/list-bar-chart.vue";
 import HealthReport from "@com/other/healthReport/index.vue";
+import FJ from "@com/other/fj/index.vue";
 // 导入header.vue文件
 export default {
   data () {
@@ -19,7 +28,8 @@ export default {
 
   components: {
     // ListBarChart,
-    HealthReport
+    HealthReport,
+    FJ
   },
 
   methods: {
@@ -29,3 +39,11 @@ export default {
   }
 };
 </script>
+<style lang="less" scoped>
+.fjBox{
+  display: flex;
+  justify-content: start;
+  align-items: center;
+  flex-wrap: wrap;
+}
+</style>

+ 11 - 13
src/views/Agc/Agc.vue

@@ -1,11 +1,10 @@
 <template>
   <div class="agc">
-    <div class="btn-group-tabs">
-      <!-- <BtnGroup2 :btnGroups="btnGroups" :rowIndex="0" :index="1" @select="select"></BtnGroup2> -->
-    </div>
-    <div class="panel-groups">
-      <AgcPanel class="panel-item" v-for="(data, index) of datas" :key="index" :data="data" chartType="multiple" :chartData="data.tb"></AgcPanel>
-    </div>
+    <el-scrollbar>
+      <div class="panel-groups">
+        <AgcPanel class="panel-item" v-for="(data, index) of datas" :key="index" :data="data"></AgcPanel>
+      </div>
+    </el-scrollbar>
   </div>
 </template>
 
@@ -96,7 +95,7 @@ export default {
         showLoading,
         method: "POST",
         subUrl: "genreset/getAgcValues",
-        // timeout: 600000,
+        timeout: 600000,
         success(res) {
           let datas = [];
           if (res.data) {
@@ -131,7 +130,6 @@ export default {
 
               keys.forEach((key, keyIndex) => {
                 pEle.tb.forEach((cEle, cIndex) => {
-                 // debugger;
                   tb[keyIndex].value.push({ text: new Date(cEle.time).formatDate("hh:mm"), value: cEle[keys[keyIndex]] || 0 });
                 });
               });
@@ -154,7 +152,7 @@ export default {
       that.requestData(false);
       that.timmer = setInterval(() => {
         that.requestData(false);
-      }, 10000);
+      }, 60000);
     });
   },
 
@@ -178,7 +176,7 @@ export default {
 <style lang="less" scoped>
 .agc {
   height: calc(100vh - 7.222vh);
-  overflow: auto;
+  overflow: hidden;
   .btn-group-tabs {
     display: flex;
     flex-direction: row;
@@ -195,10 +193,10 @@ export default {
     flex-wrap: wrap;
 
     .panel-item {
-      width: calc(25% - 1.204vh);
+      width: calc(25% - 12px);
       height: 29vh;
-      margin-left: 1.481vh;
-      margin-bottom: 1.481vh;
+      margin-left: 16px;
+      margin-bottom: 16px;
 
       &:nth-child(4n + 1) {
         margin-left: 0;

+ 22 - 4
src/views/Agc/components/agc-panel.vue

@@ -79,14 +79,14 @@
       </tbody>
     </table>
     <!-- 查看默认实例去除末尾参数 :list 即可 -->
-    <DoubleLineChart v-if="chartType === 'double'" height="13.889vh" :list="chartData"></DoubleLineChart>
-    <MultipleLineChart v-if="chartType === 'multiple'" height="13.889vh" :list="chartData" :hoverType="'axis'"></MultipleLineChart>
+    <DoubleLineChart v-if="chartType === 'double'" height="13.889vh" :list="data.tb || chartData"></DoubleLineChart>
+    <MultipleLineChart v-if="chartType === 'multiple'" height="13.889vh" :list="data.tb || chartData" :hoverType="'axis'"></MultipleLineChart>
   </ComPanel>
 </template>
 
 <script>
 import ComPanel from "@com/coms/panel/panel2.vue";
-import DoubleLineChart from "@com/chart/line/double-line-chart.vue";
+import DoubleLineChart from "@com/chart/line/marker-line-chart.vue";
 import MultipleLineChart from "@com/chart/line/multiple-line-chart.vue";
 export default {
   // 名称
@@ -106,7 +106,13 @@ export default {
     },
     chartData: {
       type: Array,
-      default: [],
+      default: [
+        {
+          title: "",
+          smooth: true,
+          value: [],
+        },
+      ],
     },
   },
   // 自定义事件
@@ -234,6 +240,13 @@ export default {
   },
   mounted() {
     // 渲染后
+    this.list = this.data || [
+      {
+        title: "",
+        yAxisIndex: 1, // 使用单位
+        value: [],
+      },
+    ];
   },
   beforeUpdate() {
     // 数据更新前
@@ -241,6 +254,11 @@ export default {
   updated() {
     // 数据更新后
   },
+  watch: {
+    daya(res) {
+      this.list = res;
+    },
+  },
 };
 </script>
 

+ 518 - 456
src/views/Decision/Decision1.vue

@@ -1,475 +1,537 @@
 <template>
-	<div class="decision-page-1">
-		<!-- 查询样式统一处理 样式在 assets/styles/form.less 文件中 -->
-		<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="value1" @change="ChangZhanChange(value1)" clearable placeholder="请选择"
-							popper-class="select">
-							<el-option v-for="item in ChangZhan" :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="value2" @change="XiangMuChange(value2)" multiple placeholder="请选择"
-							popper-class="select">
-							<el-option v-for="item in XiangMu" :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="value3" @change="XianLuChange(value3)" multiple placeholder="请选择"
-							popper-class="select">
-							<el-option v-for="item in XianLu" :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="value4" @change="BeginChange(value4)" type="date"
-							value-format="YYYY-MM-DD" placeholder="选择日期" popper-class="date-select">
-						</el-date-picker>
-					</div>
-				</div>
-				<div class="query-item">
-					<div class="lable">结束日期:</div>
-					<div class="search-input">
-						<el-date-picker v-model="value5" @change="EndChange(value5)" type="date"
-							value-format="YYYY-MM-DD" placeholder="选择日期" popper-class="date-select">
-						</el-date-picker>
-						<div class="unit svg-icon svg-icon-gray">
-							<svg-icon :svgid="''" />
-						</div>
-					</div>
-				</div>
-			</div>
-			<div class="query-actions">
-				<button class="btn green">搜索</button>
-				<button class="btn" @click="mxClick()">明细信息</button>
-				<button class="btn">导出</button>
-			</div>
-		</div>
-		<div class="actions mg-b-8">
-			<button class="btn" :class="TypeClass==1?'green':''" @click="TypeClick(1)">风场</button>
-			<button class="btn" :class="TypeClass==2?'green':''" @click="TypeClick(2)">项目</button>
-			<button class="btn" :class="TypeClass==3?'green':''" @click="TypeClick(3)">集电线路</button>
-		</div>
-		<el-row :type="'flex'" class="content">
-			<el-col :span="12" class="pd-r-8">
-				<toolbar-panel title="风机绩效榜" :showLine="false">
-					<bar-line-chart :height="'calc(100vh - 200px)'" :bardata="bardata" :lineData="lineData"
-						:color="barColor" lineName="理论发电量" />
-				</toolbar-panel>
-			</el-col>
-			<el-col :span="12" class="pd-l-8">
-				<panel :title="'项目列表'" :showLine="false">
-					<div class="project-table">
-						<!-- 分页Table -->
-						<Table :data="tableData"
-							:height="'calc(100vh - 32vh)'">
-							<template v-slot:tr v-if="tableData.data.length > 0">
-								<tr>
-									<td style="width: 50px;">
-										{{tableDataEnd.index}}
-									</td>
-									<td>
-										{{tableDataEnd.name}}
-									</td>
-									<td>
-										{{tableDataEnd.llfdl}}
-									</td>
-									<td>
-										{{tableDataEnd.sjfdl}}
-									</td>
-									<td>
-										{{tableDataEnd.speed}}
-									</td>
-									<td>
-										{{tableDataEnd.fjhjx}}
-									</td>
-									<td>
-										{{tableDataEnd.jhjx}}
-									</td>
-									<td>
-										{{tableDataEnd.sl}}
-									</td>
-									<td>
-										{{tableDataEnd.xd}}
-									</td>
-									<td>
-										{{tableDataEnd.xn}}
-									</td>
-									<td>
-										{{tableDataEnd.fnlly}}
-									</td>
-								</tr>
-							</template>
-						</Table>
-						<!-- <Table :data="tableData"></Table> -->
-					</div>
-				</panel>
-			</el-col>
-		</el-row>
-	</div>
+  <div class="decision-page-1">
+    <!-- 查询样式统一处理 样式在 assets/styles/form.less 文件中 -->
+    <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="value1"
+              @change="ChangZhanChange(value1)"
+              clearable
+              placeholder="请选择"
+              popper-class="select"
+            >
+              <el-option
+                v-for="item in ChangZhan"
+                :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="value2"
+              @change="XiangMuChange(value2)"
+              multiple
+              placeholder="请选择"
+              popper-class="select"
+            >
+              <el-option
+                v-for="item in XiangMu"
+                :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="value3"
+              @change="XianLuChange(value3)"
+              multiple
+              placeholder="请选择"
+              popper-class="select"
+            >
+              <el-option
+                v-for="item in XianLu"
+                :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="value4"
+              @change="BeginChange(value4)"
+              type="date"
+              value-format="YYYY-MM-DD"
+              placeholder="选择日期"
+              popper-class="date-select"
+            >
+            </el-date-picker>
+          </div>
+        </div>
+        <div class="query-item">
+          <div class="lable">结束日期:</div>
+          <div class="search-input">
+            <el-date-picker
+              v-model="value5"
+              @change="EndChange(value5)"
+              type="date"
+              value-format="YYYY-MM-DD"
+              placeholder="选择日期"
+              popper-class="date-select"
+            >
+            </el-date-picker>
+            <div class="unit svg-icon svg-icon-gray">
+              <svg-icon :svgid="''" />
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="query-actions">
+        <button class="btn green">搜索</button>
+        <button class="btn" @click="mxClick()">明细信息</button>
+        <button class="btn" @click="exportExcel()">导出</button>
+      </div>
+    </div>
+    <div class="actions mg-b-8">
+      <button
+        class="btn"
+        :class="TypeClass == 1 ? 'green' : ''"
+        @click="TypeClick(1)"
+      >
+        风场
+      </button>
+      <button
+        class="btn"
+        :class="TypeClass == 2 ? 'green' : ''"
+        @click="TypeClick(2)"
+      >
+        项目
+      </button>
+      <button
+        class="btn"
+        :class="TypeClass == 3 ? 'green' : ''"
+        @click="TypeClick(3)"
+      >
+        集电线路
+      </button>
+    </div>
+    <el-row :type="'flex'" class="content">
+      <el-col :span="12" class="pd-r-8">
+        <toolbar-panel title="风机绩效榜" :showLine="false">
+          <bar-line-chart
+            :height="'calc(100vh - 200px)'"
+            :bardata="bardata"
+            :lineData="lineData"
+            :color="barColor"
+            lineName="理论发电量"
+          />
+        </toolbar-panel>
+      </el-col>
+      <el-col :span="12" class="pd-l-8">
+        <panel :title="'项目列表'" :showLine="false">
+          <div class="project-table">
+            <!-- 分页Table -->
+            <Table
+              :data="tableData"
+              :pageSize="20"
+              @onPagging="onChangePage"
+              :height="'calc(100vh - 32vh)'"
+            ></Table>
+            <!-- <Table :data="tableData"></Table> -->
+          </div>
+        </panel>
+      </el-col>
+    </el-row>
+  </div>
 </template>
 
 <script>
-	import BarLineChart from "../../components/chart/combination/bar-line-chart.vue";
-	import Panel from "../../components/coms/panel/panel.vue";
-	import SvgIcon from "../../components/coms/icon/svg-icon.vue";
-	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
-	import Table from "./table.vue";
-	import partten from "@/helper/partten.js";
-	export default {
-		components: {
-			ToolbarPanel,
-			BarLineChart,
-			Panel,
-			Table,
-			partten,
-			SvgIcon
-		},
-		data() {
-			return {
-				tableData: {
-					column: [{
-							name: "",
-							field: "index",
-							is_num: false,
-							is_light: false,
-							width: "50px",
-						},
-						{
-							name: "名称",
-							field: "name",
-							is_num: false,
-							is_light: false,
-						},
-						{
-							name: "理论发电量",
-							field: "llfdl",
-							is_num: false,
-							is_light: false,
-							sortable: true
-						},
-						{
-							name: "SCADA发电量",
-							field: "sjfdl",
-							is_num: false,
-							is_light: false,
-							sortable: true
-						},
-						{
-							name: "风速",
-							field: "speed",
-							is_num: false,
-							is_light: false,
-							sortable: true
-						},
-						{
-							name: "非计划检修",
-							field: "fjhjx",
-							is_num: false,
-							is_light: false,
-							sortable: true
-						},
-						{
-							name: "计划检修",
-							field: "jhjx",
-							is_num: false,
-							is_light: false,
-							sortable: true
-						},
-						{
-							name: "受累",
-							field: "sl",
-							is_num: false,
-							is_light: false,
-							sortable: true
-						},
-						{
-							name: "限电",
-							field: "xd",
-							is_num: false,
-							is_light: false,
-							sortable: true
-						},
-						{
-							name: "性能",
-							field: "xn",
-							is_num: false,
-							is_light: false,
-							sortable: true
-						},
-						{
-							name: "风能利用率%",
-							field: "fnlly",
-							is_num: false,
-							is_light: false,
-							sortable: true
-						}
-					],
-					data: [],
-				},
-				tableDataEnd: [], //合计
-				ChangZhan: [], //场站
-				XiangMu: [], //项目
-				XianLu: [], //线路
-				value1: [],
-				value2: [],
-				value3: [],
-				value4: "",
-				value5: "",
-				barColor: [partten.getColor("purple"), partten.getColor("green"), partten.getColor("pink"), partten
-					.getColor("red"), partten.getColor("orange"), partten.getColor("grayl")
-				],
-				TypeClass: 1, //风场,项目,集电线路 的按钮颜色,默认第一个
-				bardata: [],
-				lineData: [],
-			};
-		},
-		created() {
-			this.ChangZhanVal();
-			this.value4 = this.getTime(1);
-			this.value5 = this.getTime(2);
-			this.AjaxCommon();
-		},
-		methods: {
-			ChangZhanVal() {
-				var that = this;
-				that.API.requestData({
-					method: "GET",
-					baseURL: "http://10.155.32.4:9001/",
-					subUrl: "benchmarking/wplist",
-					success(res) {
-						that.ChangZhan = res.data;
-					}
-				});
-			},
-			ChangZhanChange(val) {
-				this.TypeClass = "";
-				this.value1 = val;
-				this.value2 = [];
-				this.value3 = [];
-				this.AjaxCommon();
-				this.XiangMuVal(val);
-			},
-			XiangMuVal(val) {
-				var that = this;
-				that.API.requestData({
-					method: "GET",
-					baseURL: "http://10.155.32.4:9001/",
-					subUrl: "benchmarking/projectList",
-					data: {
-						wpids: val
-					},
-					success(res) {
-						that.XiangMu = res.data;
-					}
-				});
-			},
-			XiangMuChange(val) {
-				this.TypeClass = "";
-				this.value2 = val;
-				this.value3 = [];
-				this.AjaxCommon();
-				this.XianLuVal(val);
-			},
-			XianLuVal(val) {
-				var that = this;
-				that.API.requestData({
-					method: "GET",
-					baseURL: "http://10.155.32.4:9001/",
-					subUrl: "benchmarking/lineList",
-					data: {
-						projects: val
-					},
-					success(res) {
-						that.XianLu = res.data;
-					}
-				});
-			},
-			XianLuChange(val) {
-				this.TypeClass = "";
-				this.value3 = val;
-				this.AjaxCommon();
-			},
-			BeginChange(val) {
-				this.value4 = val;
-				this.AjaxCommon();
-			},
-			EndChange(val) {
-				this.value5 = val;
-				this.AjaxCommon();
-			},
-			TypeClick(val) {
-				this.TypeClass = val;
-				// 重置状态start
-				this.value1 = [];
-				this.value2 = [];
-				this.value3 = [];
-				this.value4 = this.getTime(1);
-				this.value5 = this.getTime(2);
-				this.AjaxCommon();
-				// 重置状态end
-			},
-			getTime(val) { //时间戳处理,val=1是默认开始时间(当前月第一天),val=2是默认结束时间(今天)
-				var date = new Date();
-				var year = date.getFullYear(),
-					month = date.getMonth() + 1,
-					day = date.getDate();
-				month >= 1 && month <= 9 ? (month = '0' + month) : '';
-				day >= 0 && day <= 9 ? (day = '0' + day) : '';
-				var begin = year + '-' + month + '-01';
-				var end = year + '-' + month + '-' + day;
-				if (val == 1) {
-					return begin;
-				} else if (val == 2) {
-					return end;
-				}
-			},
-			AjaxCommon() {
-				var that = this;
-				that.API.requestData({
-					method: "GET",
-					baseURL: "http://10.155.32.4:9001/",
-					subUrl: "benchmarking/fjjxb",
-					data: {
-						wpids: that.value1,
-						projectids: that.value2,
-						lineids: that.value3,
-						beginDate: that.value4,
-						endDate: that.value5,
-						type: that.TypeClass,
-						target: '',
-						sort: ''
-					},
-					success(res) {
-						console.log(res)
-						var name = [],
-							data = [],
-							llfdl = [],
-							legend = ["实际电量", "计划检修损失", "非计划检修损失", "限电损失", "受累损失", "性能损失"],
-							data2 = []; //项目列表
-						res.data.forEach((item, index) => {
-							name.push(item.name);
-							data.push([item.sjfdl, item.jhjx, item.fjhjx, item.xd, item.sl, item.xn])
-							llfdl.push(item.llfdl);
-							data2.push({
-								index: index + 1,
-								name: item.name,
-								llfdl: item.llfdl,
-								sjfdl: item.sjfdl,
-								speed: item.speed,
-								fjhjx: item.fjhjx,
-								jhjx: item.jhjx,
-								sl: item.sl,
-								xd: item.xd,
-								xn: item.xn,
-								fnlly: item.fnlly,
-								is_light: false
-							})
-						})
-						name.pop();
-						data.pop();
-						llfdl.pop();
-						if (data.length > 0) {
-							let arr1 = [];
-							const length = data[0].length;
-							for (var i = 0; i < length; i++) {
-								let arr2 = [];
-								data.forEach(ele => {
-									arr2.push(ele[i])
-								});
-								arr1.push(arr2);
-							}
-							that.lineData = llfdl;
-							that.bardata = {
-								area: name,
-								legend: legend,
-								data: arr1
-							};
+import BarLineChart from "../../components/chart/combination/bar-line-chart.vue";
+import Panel from "../../components/coms/panel/panel.vue";
+import SvgIcon from "../../components/coms/icon/svg-icon.vue";
+import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
+import Table from "../../components/coms/table/table.vue";
+import partten from "@/helper/partten.js";
+export default {
+  components: {
+    ToolbarPanel,
+    BarLineChart,
+    Panel,
+    Table,
+    partten,
+    SvgIcon,
+  },
+  data() {
+    return {
+      tableData: {
+        column: [
+          {
+            name: "",
+            field: "index",
+            is_num: false,
+            is_light: false,
+            width: "50px",
+          },
+          {
+            name: "名称",
+            field: "name",
+            is_num: false,
+            is_light: false,
+          },
+          {
+            name: "理论发电量",
+            field: "llfdl",
+            is_num: false,
+            is_light: false,
+            sortable: true,
+          },
+          {
+            name: "SCADA发电量",
+            field: "sjfdl",
+            is_num: false,
+            is_light: false,
+            sortable: true,
+          },
+          {
+            name: "风速",
+            field: "speed",
+            is_num: false,
+            is_light: false,
+            sortable: true,
+          },
+          {
+            name: "非计划检修",
+            field: "fjhjx",
+            is_num: false,
+            is_light: false,
+            sortable: true,
+          },
+          {
+            name: "计划检修",
+            field: "jhjx",
+            is_num: false,
+            is_light: false,
+            sortable: true,
+          },
+          {
+            name: "受累",
+            field: "sl",
+            is_num: false,
+            is_light: false,
+            sortable: true,
+          },
+          {
+            name: "限电",
+            field: "xd",
+            is_num: false,
+            is_light: false,
+            sortable: true,
+          },
+          {
+            name: "性能",
+            field: "xn",
+            is_num: false,
+            is_light: false,
+            sortable: true,
+          },
+          {
+            name: "风能利用率%",
+            field: "fnlly",
+            is_num: false,
+            is_light: false,
+            sortable: true,
+          },
+        ],
+        data: [],
+      },
+      ChangZhan: [], //场站
+      XiangMu: [], //项目
+      XianLu: [], //线路
+      value1: [],
+      value2: [],
+      value3: [],
+      value4: "",
+      value5: "",
+      barColor: [
+        partten.getColor("purple"),
+        partten.getColor("orange"),
+        partten.getColor("red"),
+        partten.getColor("pink"),
+        partten.getColor("grayl"),
+        partten.getColor("green"),
+      ],
+      TypeClass: 1, //风场,项目,集电线路 的按钮颜色,默认第一个
+      bardata: [],
+      lineData: [],
+    };
+  },
+  created() {
+    this.ChangZhanVal();
+    this.value4 = this.getTime(1);
+    this.value5 = this.getTime(2);
+    this.AjaxCommon();
+  },
+  methods: {
+    ChangZhanVal() {
+      var that = this;
+      that.API.requestData({
+        method: "GET",
+        baseURL: "http://10.155.32.4:9001/",
+        subUrl: "benchmarking/wplist",
+        success(res) {
+          that.ChangZhan = res.data;
+        },
+      });
+    },
+    ChangZhanChange(val) {
+      this.TypeClass = "";
+      this.value1 = val;
+      this.value2 = [];
+      this.value3 = [];
+      this.AjaxCommon();
+      this.XiangMuVal(val);
+    },
+    XiangMuVal(val) {
+      var that = this;
+      that.API.requestData({
+        method: "GET",
+        baseURL: "http://10.155.32.4:9001/",
+        subUrl: "benchmarking/projectList",
+        data: {
+          wpids: val,
+        },
+        success(res) {
+          that.XiangMu = res.data;
+        },
+      });
+    },
+    XiangMuChange(val) {
+      this.TypeClass = "";
+      this.value2 = val;
+      this.value3 = [];
+      this.AjaxCommon();
+      this.XianLuVal(val);
+    },
+    XianLuVal(val) {
+      var that = this;
+      that.API.requestData({
+        method: "GET",
+        baseURL: "http://10.155.32.4:9001/",
+        subUrl: "benchmarking/lineList",
+        data: {
+          projects: val,
+        },
+        success(res) {
+          that.XianLu = res.data;
+        },
+      });
+    },
+    XianLuChange(val) {
+      this.TypeClass = "";
+      this.value3 = val;
+      this.AjaxCommon();
+    },
+    BeginChange(val) {
+      this.value4 = val;
+      this.AjaxCommon();
+    },
+    EndChange(val) {
+      this.value5 = val;
+      this.AjaxCommon();
+    },
+    TypeClick(val) {
+      this.TypeClass = val;
+      // 重置状态start
+      this.value1 = [];
+      this.value2 = [];
+      this.value3 = [];
+      this.value4 = this.getTime(1);
+      this.value5 = this.getTime(2);
+      this.AjaxCommon();
+      // 重置状态end
+    },
+    getTime(val) {
+      //时间戳处理,val=1是默认开始时间(当前月第一天),val=2是默认结束时间(今天)
+      var date = new Date();
+      var year = date.getFullYear(),
+        month = date.getMonth() + 1,
+        day = date.getDate();
+      month >= 1 && month <= 9 ? (month = "0" + month) : "";
+      day >= 0 && day <= 9 ? (day = "0" + day) : "";
+      var begin = year + "-" + month + "-01";
+      var end = year + "-" + month + "-" + day;
+      if (val == 1) {
+        return begin;
+      } else if (val == 2) {
+        return end;
+      }
+    },
+    AjaxCommon() {
+      var that = this;
+      that.API.requestData({
+        method: "GET",
+        baseURL: "http://10.155.32.4:9001/",
+        subUrl: "benchmarking/fjjxb",
+        data: {
+          wpids: that.value1,
+          projectids: that.value2,
+          lineids: that.value3,
+          beginDate: that.value4,
+          endDate: that.value5,
+          type: that.TypeClass,
+          target: "",
+          sort: "",
+        },
+        success(res) {
+          var name = [],
+            data = [],
+            llfdl = [],
+            legend = [
+              "实际电量",
+              "计划检修损失",
+              "非计划检修损失",
+              "限电损失",
+              "受累损失",
+              "性能损失",
+            ],
+            data2 = []; //项目列表
+          res.data.forEach((item, index) => {
+            name.push(item.name);
+            data.push([
+              item.sjfdl,
+              item.jhjx,
+              item.fjhjx,
+              item.xd,
+              item.sl,
+              item.xn,
+            ]);
+            llfdl.push(item.llfdl);
+            data2.push({
+              index: index + 1,
+              name: item.name,
+              llfdl: item.llfdl,
+              sjfdl: item.sjfdl,
+              speed: item.speed,
+              fjhjx: item.fjhjx,
+              jhjx: item.jhjx,
+              sl: item.sl,
+              xd: item.xd,
+              xn: item.xn,
+              fnlly: item.fnlly,
+              is_light: false,
+            });
+          });
+          name.pop();
+          data.pop();
+          llfdl.pop();
+          if (data.length > 0) {
+            let arr1 = [];
+            const length = data[0].length;
+            for (var i = 0; i < length; i++) {
+              let arr2 = [];
+              data.forEach((ele) => {
+                arr2.push(ele[i]);
+              });
+              arr1.push(arr2);
+            }
+            that.lineData = llfdl;
+            that.bardata = {
+              area: name,
+              legend: legend,
+              data: arr1,
+            };
+          }
+          that.tableData.data = data2;
+        },
+      });
+    },
+    mxClick() {
+      this.$router.push("/decision/decision1Mx");
+    },
+    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.tableDataEnd = data2[data2.length - 1];
-						data2.pop();
-						that.tableData.data = data2;
-					}
-				});
-			},
-			mxClick() {
-				this.$router.push("/decision/decision1Mx")
-			},
-			onChangePage(params) {
-				console.log(params);
-			},
-		}
-	};
+      that.tableData.column.forEach((ele) => {
+        tHeader.push(ele.name);
+        filterVal.push(ele.field);
+      });
+
+      var list = that.tableData.data
+      const data = that.formatJson(filterVal, list);
+      export_json_to_excel(tHeader, data, "导出的Excel"); // 最后一个是表名字
+    },
+  },
+};
 </script>
 
 <style lang="less">
-	.decision-page-1 {
-		.com-panel .panel-title {
-			line-height: 3.4259vh;
-		}
+.decision-page-1 {
+  .com-panel .panel-title {
+    line-height: 3.4259vh;
+  }
 
-		.tools {
-			display: flex;
-			line-height: 3.4259vh;
+  .tools {
+    display: flex;
+    line-height: 3.4259vh;
 
-			.tool-block {
-				display: flex;
-				align-items: center;
-				margin-left: 0.741vh;
+    .tool-block {
+      display: flex;
+      align-items: center;
+      margin-left: 0.741vh;
 
-				.legend {
-					flex: auto;
-					width: 0.741vh;
-					height: 0.741vh;
-					margin-right: 0.741vh;
+      .legend {
+        flex: auto;
+        width: 0.741vh;
+        height: 0.741vh;
+        margin-right: 0.741vh;
 
-					&.long {
-						width: 2.963vh;
-						height: 0.37vh;
-					}
-				}
+        &.long {
+          width: 2.963vh;
+          height: 0.37vh;
+        }
+      }
 
-				.legend-text {
-					color: @gray-l;
-					font-size: @fontsize-s;
-				}
-			}
-		}
+      .legend-text {
+        color: @gray-l;
+        font-size: @fontsize-s;
+      }
+    }
+  }
 
-		.project-table {
-			overflow: auto;
+  .project-table {
+    overflow: auto;
 
-			tbody {
-				height: calc(100vh - 24.5vh);
-			}
+    tbody {
+      height: calc(100vh - 24.5vh);
+    }
 
-			td {
-				color: #b2bdc0;
-			}
-		}
+    td {
+      color: #b2bdc0;
+    }
+  }
 
-		.contentMx {
-			width: 100%;
-			overflow-x: auto;
-		}
+  .contentMx {
+    width: 100%;
+    overflow-x: auto;
+  }
 
-		.activeMx {
-			width: 150%;
-		}
-	}
+  .activeMx {
+    width: 150%;
+  }
+}
 </style>

+ 23 - 5
src/views/Decision/Decision1Mx.vue

@@ -56,7 +56,7 @@
 			<div class="query-actions">
 				<button class="btn" @click="mxClick()">搜索</button>
 				<button class="btn green">明细信息</button>
-				<button class="btn">导出</button>
+				<button class="btn" @click="exportExcel()">导出</button>
 			</div>
 		</div>
 		<div class="actions mg-b-8">
@@ -483,7 +483,6 @@
 								legend: legend,
 								data: arr1
 							};
-
 						}
 						that.tableDataEnd = data2[data2.length - 1];
 						data2.pop();
@@ -494,9 +493,28 @@
 			mxClick() {
 				this.$router.push("/decision/decision1")
 			},
-			thClick: function(i) {
-				console.log(i) // 当子组件触发按钮时,msg获取值为 哈哈啊哈哈
-			}
+			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'); // 最后一个是表名字
+			},
 		}
 	};
 </script>

+ 9 - 1
src/views/Decision/Decision2.vue

@@ -113,7 +113,7 @@
 	import DualPieChart from "../../components/chart/pie/dual-pie-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 Table from "./table.vue";
 	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
 	import Dayinfo from "./dayinfo.vue";
 	export default {
@@ -363,6 +363,7 @@
 
 											dataTab.push({ //表格
 												index: index + 1,
+												fdl:item.fdl,
 												name: item.name,
 												zhpm: item.zhpm,
 												gzssdl: item.gzssdl,
@@ -406,6 +407,13 @@
 						},
 						{
 							name: "",
+							field: "fdl",
+							is_num: false,
+							is_light: false,
+							display:"none",
+						},
+						{
+							name: "",
 							field: "check",
 							is_num: false,
 							is_light: false,

+ 10 - 2
src/views/Decision/Decision2Cjdb.vue

@@ -88,7 +88,7 @@
 	import DualPieChart from "../../components/chart/pie/dual-pie-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 Table from "./table.vue";
 	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
 	import Dayinfo from "./dayinfo.vue";
 	export default {
@@ -343,6 +343,7 @@
 											that.tableIdArr.push(item.id);
 											dataTab.push({ //表格
 												index: index + 1,
+												fdl:item.fdl,
 												name: item.name,
 												zhpm: item.zhpm,
 												gzssdl: item.gzssdl,
@@ -386,6 +387,13 @@
 						},
 						{
 							name: "",
+							field: "fdl",
+							is_num: false,
+							is_light: false,
+							display:"none",
+						},
+						{
+							name: "",
 							field: "check",
 							is_num: false,
 							is_light: false,
@@ -648,10 +656,10 @@
 							that.tableIdArr.push(item.id);
 							dataTab.push({ //表格
 								index: index + 1,
+								fdl: item.fdl,
 								name: item.name,
 								zhpm: item.zhpm,
 								fdlpm: item.fdlpm,
-								fdl: item.fdl,
 								gzssdlpm: item.gzssdlpm,
 								gzssdl: item.gzssdl,
 								jxssdlpm: item.jxssdlpm,

+ 9 - 1
src/views/Decision/Decision2Cndb.vue

@@ -78,7 +78,7 @@
 	import DualPieChart from "../../components/chart/pie/dual-pie-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 Table from "./table.vue";
 	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
 	import Dayinfo from "./dayinfo.vue";
 	export default {
@@ -328,6 +328,7 @@
 
 											dataTab.push({ //表格
 												index: index + 1,
+												fdl:item.fdl,
 												name: item.name,
 												zhpm: item.zhpm,
 												gzssdl: item.gzssdl,
@@ -369,6 +370,13 @@
 						},
 						{
 							name: "",
+							field: "fdl",
+							is_num: false,
+							is_light: false,
+							display:"none",
+						},
+						{
+							name: "",
 							field: "check",
 							is_num: false,
 							is_light: false,

+ 9 - 1
src/views/Decision/Decision2Xldb.vue

@@ -108,7 +108,7 @@
 	import DualPieChart from "../../components/chart/pie/dual-pie-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 Table from "./table.vue";
 	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
 	import Dayinfo from "./dayinfo.vue";
 	export default {
@@ -367,6 +367,7 @@
 
 											dataTab.push({ //表格
 												index: index + 1,
+												fdl:item.fdl,
 												name: item.name,
 												zhpm: item.zhpm,
 												gzssdl: item.gzssdl,
@@ -410,6 +411,13 @@
 						},
 						{
 							name: "",
+							field: "fdl",
+							is_num: false,
+							is_light: false,
+							display:"none",
+						},
+						{
+							name: "",
 							field: "check",
 							is_num: false,
 							is_light: false,

+ 5 - 6
src/views/Decision/Decision2Xmdb.vue

@@ -53,7 +53,7 @@
 			<toolbar-panel title="项目对标" :showLine="false"></toolbar-panel>
 			<div class="mg-b-16">
 				<div class="project-table">
-					<Table :data="tableData" :canScroll="false" ref="curRef" @onSort="onSort"></Table>
+					<Table :data="tableData" :canScroll="false" ref="curRef"></Table>
 				</div>
 			</div>
 			<el-row class="mg-b-16">
@@ -79,7 +79,7 @@
 			<el-col :span="24" class="pd-l-8">
 				<panel :title="'风机对标列表明细'" :showLine="false">
 					<div class="project-table">
-						<Table :data="tableDataDetail" ref="curRef" @onSort="onSort"></Table>
+						<Table :data="tableDataDetail" ref="curRef"></Table>
 					</div>
 				</panel>
 			</el-col>
@@ -589,7 +589,7 @@
 			this.ChangZhanVal();
 			this.value4 = this.getTime(1);
 			this.value5 = this.getTime(2);
-			this.AjaxCommon();
+			// this.AjaxCommon();
 		},
 		methods: {
 			ChangZhanVal() {
@@ -599,7 +599,9 @@
 					baseURL: "http://10.155.32.4:9001/",
 					subUrl: "benchmarking/wplist",
 					success(res) {
+						that.value1.push(res.data[0].id)
 						that.ChangZhan = res.data;
+						that.AjaxCommon();
 					}
 				});
 			},
@@ -930,9 +932,6 @@
 			back() {
 				this.detailShow = 1;
 				this.clearDb();
-			},
-			onSort(){
-				this.clearDb();
 			}
 		}
 	};

+ 9 - 1
src/views/Decision/Decision3.vue

@@ -117,7 +117,7 @@
 	import DualPieChart from "../../components/chart/pie/dual-pie-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 Table from "./table.vue";
 	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
 	import Dayinfo from "./dayinfo.vue";
 	
@@ -150,6 +150,13 @@
 						},
 						{
 							name: "",
+							field: "fdl",
+							is_num: false,
+							is_light: false,
+							display:"none",
+						},
+						{
+							name: "",
 							field: "check",
 							is_num: false,
 							is_light: false,
@@ -960,6 +967,7 @@
 
 							dataTab.push({ //表格
 								index: index + 1,
+								fdl:item.fdl,
 								name: item.name,
 								zhpm: item.zhpm,
 								gzssdl: item.gzssdl,

+ 2 - 2
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 }" @click="onSort(col)">
+        <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)">
           {{ col.name }}
         </th>
       </tr>
@@ -13,7 +13,7 @@
           <td
             v-for="(col, i) of data.column"
             :key="i"
-            :style="{ width: col.width }"
+            :style="{ width: col.width , display : col.display}"
             :class="{ light: hoverRow == row || hoverCol == col, num: col.is_num, 'always-light': col.is_light || row.is_light }"
             @mouseenter="hover(row, col)"
             @mouseleave="leave()"

File diff suppressed because it is too large
+ 1220 - 1133
src/views/Demo.vue


+ 30 - 22
src/views/HealthControl/Health0.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="health-0">
     <el-row>
-      <el-col :span="12">
+      <el-col :span="14">
         <el-row>
           <el-col :span="24">
             <div class="query mg-b-8">
@@ -69,7 +69,7 @@
               <div class="fan-code-label font-md gray-l">低频:</div>
               <div class="fan-code-value font-md green">{{stoptypemap && stoptypemap.top3type}}</div>
             </div>
-            <span class="svg-icon svg-icon-white svg-icon-md mg-l-16">
+            <!-- <span class="svg-icon svg-icon-white svg-icon-md mg-l-16">
               <SvgIcon svgid="svg-wind-site"></SvgIcon>
             </span>
             <div class="fan-code bg">
@@ -77,7 +77,7 @@
             </div>
             <div class="fan-code">
               <div class="fan-code-value nm font-md green">{{stoptypemap && stoptypemap.wtscore}}</div>
-            </div>
+            </div> -->
             <button class="btn mg-l-16" type="button"  @click="onClickReport()">
               <i class="el-icon-s-order mg-r-8"></i><span>健康报告</span>
             </button>
@@ -99,9 +99,9 @@
           </el-col>
           <el-col :span="6"></el-col>
           <el-col :span="6"></el-col>
-          <!-- <el-col :span="6">
-            <progress-bar title="风机" name="风机健康度" :progress='partmap && partmap.fj.smsyl' :color="partmap &&color(partmap.fj.jkzt)"></progress-bar>
-          </el-col> -->
+          <el-col :span="6">
+            <progress-bar title="风机" name="风机健康度" :progress='stoptypemap && stoptypemap.wtscore' :color="stoptypemap &&color('05bb4c')"></progress-bar>
+          </el-col>
         </el-row>
         <el-row>
           <el-col :span="6" class="mg-t-16">
@@ -132,7 +132,7 @@
           </el-col>
         </el-row>
       </el-col>
-      <el-col :span="12" class="health-0-right">
+      <el-col :span="10" class="health-0-right">
         <el-row>
           <el-col :span="24">
             <div class="table">
@@ -268,7 +268,7 @@ export default {
           },
           {
             name: "时间",
-            field: "time",
+            field: "name",
             width: "130px",
             is_num: false,
             is_light: false,
@@ -324,7 +324,7 @@ export default {
           },
           {
             name: "时间",
-            field: "time",
+            field: "name",
             width: "130px",
             is_num: false,
             is_light: false,
@@ -511,7 +511,7 @@ export default {
             is_light: false,
           },
           {
-            name: "时间",
+            name: "温度范围",
             field: "name",
             width: "130px",
             is_num: false,
@@ -713,9 +713,9 @@ export default {
     };
   },
   created() {
-      this.search()
-        this.wtid = this.$route.params.wtId;
-        this.wpid = this.$route.params.wpId;
+    this.wtid = this.$route.params.wtId;
+    this.wpid = this.$route.params.wpId;
+    this.search()
   },
   methods: {
     // 查看健康报告
@@ -812,17 +812,25 @@ export default {
         }
       }
 
-      .fan-code-text {
-        padding-right: 20px;
-        border-right: 1px solid #536268;
-      }
+            .fan-code-text {
+                padding-right: 20px;
+                border-right: 1px solid #536268;
+                overflow: hidden;
+                text-overflow:ellipsis;
+                white-space: nowrap;
+            }
 
-      .fan-code-label {
-        margin-left: 20px;
-      }
+            .fan-code-label {
+                margin-left: 20px;
+                min-width: 50px;
+            }
 
-      .fan-code-value {
-        margin-left: 20px;
+            .fan-code-value {
+                margin-left: 20px;
+                overflow: hidden;
+                text-overflow:ellipsis;
+                white-space: nowrap;
+                max-width: 112px;
 
         &.nm {
           margin-left: 0;

+ 201 - 151
src/views/HealthControl/Health10.vue

@@ -13,7 +13,7 @@
       </el-col>
       <el-col :span="12" class="wrong-list">
         <panel :title="'故障信息'" :showLine="false">
-          <div class="data-list" style="display:flex;">
+          <div class="data-list" style="display: flex">
             <Table :data="top10TableLeft" :canScroll="false" />
             <Table :data="top10TableRight" :canScroll="false" />
           </div>
@@ -24,47 +24,56 @@
       <el-col :span="12">
         <panel :title="'八大部件'" :showLine="false">
           <div class="table">
-            <table style="width:100%;" border="0" cellspacing="0">
+            <table style="width: 100%" border="0" cellspacing="0">
               <thead>
                 <tr>
-                  <th rowspan="1" class="type1" style="width:50px;"></th>
-                  <th rowspan="1" class="type1" style="width:105px;">健康度</th>
-                  <th rowspan="2" class="type1" style="width:400px;">
+                  <th rowspan="1" class="type1" style="width: 50px"></th>
+                  <th rowspan="1" class="type1" style="width: 105px">健康度</th>
+                  <th rowspan="2" class="type1" style="width: 400px">
                     MTBF(H/H)
                   </th>
-                  <th rowspan="1" class="type1" style="width:180px;"></th>
-                  <th rowspan="1" class="type1" style="width:100px;">
+                  <th rowspan="1" class="type1" style="width: 180px"></th>
+                  <th rowspan="1" class="type1" style="width: 100px">
                     MTTR(H)
                   </th>
                 </tr>
               </thead>
             </table>
             <el-scrollbar>
-              <div style="height:calc(100vh - 174px);">
-                <table style="width:100%;" border="0" cellspacing="0">
+              <div style="height: calc(100vh - 174px)">
+                <table style="width: 100%" border="0" cellspacing="0">
                   <tbody>
                     <tr v-for="(item, index) of partsArray" :key="index">
-                      <td style="width:50px;">
-                        {{item[1]}}
+                      <td style="width: 50px">
+                        {{ item[1] }}
                       </td>
-                      <td style="width:105px;">
-                        <div :style="'background-color: ' + item[0] + ';width:10px;height:10px;margin:0 auto;'"></div>
+                      <td style="width: 105px">
+                        <div
+                          :style="
+                            'background-color: ' +
+                            item[0] +
+                            ';width:10px;height:10px;margin:0 auto;'
+                          "
+                        ></div>
                       </td>
-                      <td style="width:400px;">
+                      <td style="width: 400px">
                         <div class="percent-item">
-                          {{item[3]}}%
-                          <div class="percent-bar" style="margin-right: 4px;">
-                            <div class="percent-value" :style="'width:' + item[3] +'%'"></div>
+                          {{ item[3] }}%
+                          <div class="percent-bar" style="margin-right: 4px">
+                            <div
+                              class="percent-value"
+                              :style="'width:' + item[3] + '%'"
+                            ></div>
                           </div>
                           <!-- 剩余9999/建个故障9999 -->
-                          {{item[4]}}
+                          {{ item[4] }}
                         </div>
                       </td>
-                      <td style="width:200px;">
+                      <td style="width: 200px">
                         <table-line-chart :height="'20px'" :list="item[8]" />
                       </td>
-                      <td style="width:#00bf4d">
-                        {{item[6]}}
+                      <td style="width: #00bf4d">
+                        {{ item[6] }}
                       </td>
                     </tr>
                   </tbody>
@@ -77,19 +86,42 @@
       <el-col :span="12">
         <div class="chart-title">
           <div class="title-panel" style="">
-            <span style="text-align: left;padding-left: 20px;font-size:12px;">故障信息 </span>
-            <span class="des-title">预计损失电量<span class="num">73824.0</span><span class="unit">Kwh</span></span>
-            <span class="des-title">预计检修时长<span class="num">29.33</span><span class="unit">H</span></span>
+            <span style="text-align: left; padding-left: 20px; font-size: 12px"
+              >故障信息
+            </span>
+            <span class="des-title"
+              >预计损失电量<span class="num">73824.0</span
+              ><span class="unit">Kwh</span></span
+            >
+            <span class="des-title"
+              >预计检修时长<span class="num">29.33</span
+              ><span class="unit">H</span></span
+            >
           </div>
-          <img-line-chart height="270px" :list="line.value" :units="line.units" />
+          <img-line-chart
+            height="270px"
+          />
         </div>
       </el-col>
     </el-row>
     <div class="fc-info mg-b-16">
       <panel :title="'曲线'" :showLine="false">
-        <zoom-line-chart height="35vh" :list="powerChartData.value" :units="powerChartData.units" />
+        <zoom-line-chart
+          height="35vh"
+          :list="powerChartData.value"
+          :units="powerChartData.units"
+        />
       </panel>
     </div>
+    <HealthReport
+      :show="healthReportShow"
+      :params="{ wtId: this.wtId, recorddate: this.recorddate }"
+      @closed="
+        (res) => {
+          this.healthReportShow = false;
+        }
+      "
+    />
   </div>
 </template>
 
@@ -101,18 +133,20 @@ import Table from "../../components/coms/table/table.vue";
 import TableLineChart from "../../components/chart/line/table-line-chart.vue";
 // import StrightLineChart from "../../components/chart/line/stright-line-chart.vue";
 import ImgLineChart from "../../components/chart/line/img-line-chart.vue";
-import ZoomLineChart from '../../components/chart/line/zoom-line-chart.vue';
+import ZoomLineChart from "../../components/chart/line/zoom-line-chart.vue";
+import HealthReport from "@com/other/healthReport/index.vue";
 
 export default {
-  setup () { },
+  setup() {},
   components: {
     Panel,
     Table,
     TableLineChart,
     ImgLineChart,
     ZoomLineChart,
+    HealthReport
   },
-  data () {
+  data() {
     const that = this;
     return {
       top5Table: {
@@ -133,7 +167,7 @@ export default {
             width: "45%",
           },
         ],
-        data: []
+        data: [],
       },
       dateTable: {
         column: [
@@ -151,12 +185,16 @@ export default {
             name: "健康情况",
             field: "",
             width: "30%",
-            template () {
+            template() {
               return "<div style='border: 1px solid #182238;background: #303f6e;width: 70%;margin: 0 auto;color:#FFF;cursor: pointer;'>查看报告</div>";
             },
+            click(e,row) {
+              that.recorddate = row.date;
+              that.healthReportShow = true;
+            },
           },
         ],
-        data: []
+        data: [],
       },
       top10TableLeft: {
         column: [
@@ -167,7 +205,7 @@ export default {
           },
           {
             name: "故障名称",
-            field: "warnDesc"
+            field: "warnDesc",
           },
           {
             name: "故障时间",
@@ -194,7 +232,7 @@ export default {
           },
           {
             name: "故障名称",
-            field: "warnDesc"
+            field: "warnDesc",
           },
           {
             name: "故障时间",
@@ -224,7 +262,11 @@ export default {
             name: "故障名称",
             field: "v1",
             template: function (data) {
-              return "<div style='overflow: hidden;text-overflow:ellipsis;white-space: nowrap;'>" + data + "</div>";
+              return (
+                "<div style='overflow: hidden;text-overflow:ellipsis;white-space: nowrap;'>" +
+                data +
+                "</div>"
+              );
             },
           },
           {
@@ -280,62 +322,84 @@ export default {
         ],
       },
       // 月发电量对比
-      line: {
+      weatherChart: {
         units: ["功率", "风速"],
         value: [
           {
             title: "应发功率",
-            yAxisIndex: 0,
+            yAxisIndex: 1,
             value: [
               {
                 text: "05-02 00:00",
                 value: 11,
+                weather: "sun",
+                direction: "n",
               },
               {
                 text: "05-04 00:00",
                 value: 11,
+                weather: "rain",
+                direction: "s",
               },
               {
                 text: "05-06 00:00",
                 value: 13,
+                weather: "sun",
+                direction: "w",
               },
               {
                 text: "05-08 00:00",
                 value: 12,
+                weather: "cloud",
+                direction: "e",
               },
               {
                 text: "05-10 00:00",
                 value: 13,
+                weather: "sun",
+                direction: "nw",
               },
               {
                 text: "05-12 00:00",
                 value: 12,
+                weather: "sun",
+                direction: "ne",
               },
               {
                 text: "05-14 00:00",
                 value: 11,
+                weather: "cloud",
+                direction: "sw",
               },
               {
                 text: "05-16 00:00",
                 value: 11,
+                weather: "sun",
+                direction: "se",
               },
               {
                 text: "05-18 00:00",
                 value: 13,
+                weather: "rain",
+                direction: "n",
               },
               {
                 text: "05-20 00:00",
                 value: 11,
+                weather: "cloud",
+                direction: "n",
               },
               {
                 text: "05-22 00:00",
                 value: 12,
+                weather: "sun",
+                direction: "n",
               },
             ],
           },
           {
             title: "实际功率",
-            yAxisIndex: 0,
+            yAxisIndex: 1,
             value: [
               {
                 text: "05-02 00:00",
@@ -387,102 +451,40 @@ export default {
       },
       powerChartData: {
         units: [""],
-        value: [{
-          title: "",
-          yAxisIndex: 0,
-          value: []
-        }],
-      },
-      line2: {
-        units: ["功率", "风速"],
         value: [
           {
-            title: "应发功率",
+            title: "",
             yAxisIndex: 0,
-            value: [
-              {
-                text: "05-02 00:00",
-                value: 1,
-              },
-              {
-                text: "05-04 00:00",
-                value: 3,
-              },
-              {
-                text: "05-06 00:00",
-                value: 4,
-              },
-              {
-                text: "05-08 00:00",
-                value: 2,
-              },
-              {
-                text: "05-10 00:00",
-                value: 3,
-              },
-              {
-                text: "05-12 00:00",
-                value: 5,
-              },
-              {
-                text: "05-14 00:00",
-                value: 1,
-              },
-              {
-                text: "05-16 00:00",
-                value: 1,
-              },
-              {
-                text: "05-18 00:00",
-                value: 3,
-              },
-              {
-                text: "05-20 00:00",
-                value: 4,
-              },
-              {
-                text: "05-22 00:00",
-                value: 2,
-              },
-              {
-                text: "05-24 00:00",
-                value: 3,
-              },
-              {
-                text: "05-26 00:00",
-                value: 5,
-              },
-              {
-                text: "05-28 00:00",
-                value: 1,
-              },
-            ],
+            value: [],
           },
         ],
       },
+      healthReportShow: false,
     };
   },
 
-  created () {
+  created() {
+    this.wpId = this.$route.params.wpId;
     this.wtId = this.$route.params.wtId;
     this.getTop5();
     this.renderDateTable();
     this.getTop10();
     this.getMtbfByBj();
     this.getFindPowerChar();
+    this.getWeather();
   },
 
   methods: {
     // 获取等级评价
-    getTop5 () {
+    getTop5() {
       let that = this;
       that.API.requestData({
         method: "POST",
         subUrl: "healthsub/gadaytop5",
         data: {
-          wtId: that.wtId
+          wtId: that.wtId,
         },
-        success (res) {
+        success(res) {
           let top5TableData = [];
           let index = 1;
           for (let key in res.data) {
@@ -492,48 +494,54 @@ export default {
               date: ele[1],
               rank: ele[2],
               wpId: ele[3],
-              wtId: ele[4]
+              wtId: ele[4],
             });
             index++;
           }
           that.top5Table.data = top5TableData;
-        }
+        },
       });
     },
 
     // 渲染健康报告表格
-    renderDateTable (day = 5) {
+    renderDateTable(day = 5) {
       let tableData = [];
       for (let i = 0; i < day; i++) {
         tableData.push({
-          index: (i + 1),
-          date: new Date((new Date().getTime() - 3600 * 1000 * 24 * (i + 1))).formatDate("yyyy-MM-dd hh:mm:ss"),
-          wtId: this.wtId
+          index: i + 1,
+          date: new Date(
+            new Date().getTime() - 3600 * 1000 * 24 * (i + 1)
+          ).formatDate("yyyy-MM-dd hh:mm:ss"),
+          wtId: this.wtId,
         });
       }
       this.dateTable.data = tableData;
     },
 
     // 获取等级评价
-    getTop10 () {
+    getTop10() {
       let that = this;
       that.API.requestData({
         method: "POST",
         subUrl: "healthsub/queryStopTop10",
         data: {
-          wtId: that.wtId
+          wtId: that.wtId,
         },
-        success (res) {
+        success(res) {
           let leftData = [];
           let rightData = [];
 
           res.data.forEach((ele, index) => {
             const item = {
-              index: (index + 1),
+              index: index + 1,
               warnDesc: ele.warnDesc,
-              startTime: new Date(ele.startTime).formatDate("yyyy-MM-dd hh:mm:ss"),
-              stopTime: new Date(ele.stopTime).formatDate("yyyy-MM-dd hh:mm:ss"),
-              stopHours: ele.stopHours
+              startTime: new Date(ele.startTime).formatDate(
+                "yyyy-MM-dd hh:mm:ss"
+              ),
+              stopTime: new Date(ele.stopTime).formatDate(
+                "yyyy-MM-dd hh:mm:ss"
+              ),
+              stopHours: ele.stopHours,
             };
             if (index < 5) {
               leftData.push(item);
@@ -544,83 +552,125 @@ export default {
 
           that.top10TableLeft.data = leftData;
           that.top10TableRight.data = rightData;
-        }
+        },
       });
     },
 
     // 获取八大部件
-    getMtbfByBj () {
+    getMtbfByBj() {
       let that = this;
       that.API.requestData({
         method: "POST",
         subUrl: "healthsub/getWtMttrandMtbfByBj",
         data: {
-          wtId: that.wtId
+          wtId: that.wtId,
         },
-        success (res) {
+        success(res) {
           let partsArray = [];
           for (let key in res.data) {
             let linChartData = [];
             res.data[key][2].split(",").forEach((ele, index) => {
               linChartData.push({
-                text: (index + 1),
+                text: index + 1,
                 value: ele,
               });
             });
             res.data[key].push(linChartData);
-            partsArray.push(res.data[key])
+            partsArray.push(res.data[key]);
           }
           that.partsArray = partsArray;
-        }
+        },
       });
     },
 
     // 获取发电曲线
-    getFindPowerChar () {
+    getFindPowerChar() {
       let that = this;
       that.API.requestData({
         method: "POST",
         subUrl: "healthsub/findPowerChar",
-        timeout: 300000,
         data: {
-          wtId: that.wtId
+          wtId: that.wtId,
         },
-        success (res) {
+        success(res) {
           let chartUnits = ["(WM)", "(m/s)"];
-          let chartData = [{
-            title: "理论功率",
-            yAxisIndex: 0,
-            value: []
-          }, {
-            title: "实际功率",
-            yAxisIndex: 0,
-            value: []
-          }, {
-            title: "实时风速",
-            yAxisIndex: 1,
-            value: []
-          }];
+          let chartData = [
+            {
+              title: "理论功率",
+              yAxisIndex: 0,
+              value: [],
+            },
+            {
+              title: "实际功率",
+              yAxisIndex: 0,
+              value: [],
+            },
+            {
+              title: "实时风速",
+              yAxisIndex: 1,
+              value: [],
+            },
+          ];
 
           res.data.timearr.forEach((time, index) => {
             chartData[0].value.push({
               text: new Date(time).formatDate("MM-dd hh:mm"),
-              value: res.data.llgl[index]
+              value: res.data.llgl[index],
             });
             chartData[1].value.push({
               text: new Date(time).formatDate("MM-dd hh:mm"),
-              value: res.data.sjgl[index]
+              value: res.data.sjgl[index],
             });
             chartData[2].value.push({
               text: new Date(time).formatDate("MM-dd hh:mm"),
-              value: res.data.ssfs[index]
+              value: res.data.ssfs[index],
             });
           });
           that.powerChartData.value = chartData;
           that.powerChartData.units = chartUnits;
-        }
+        },
       });
     },
-  }
+
+    // 获取天气信息
+    getWeather() {
+      let that = this;
+      that.API.requestData({
+        method: "POST",
+        subUrl: "healthsub/getWeatherRealDay5Info",
+        data: {
+          wpId: that.wpId,
+        },
+        success(res) {
+          console.log(123123, res);
+          let weatherChart = [];
+
+          let chartUnits = ["(m/s)", "(℃)"];
+          let chartData = [
+            {
+              title: "风速",
+              yAxisIndex: 0,
+              value: [],
+            },
+            {
+              title: "温度",
+              yAxisIndex: 1,
+              value: [],
+            },
+          ];
+
+          res.data.ls.forEach((item) => {
+            chartData[0].value.push({
+              text: "05-02 00:00",
+              value: 11,
+              weather: "sun",
+              direction: "n",
+            });
+          });
+        },
+      });
+    },
+  },
 };
 </script>
 

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

@@ -159,33 +159,21 @@ export default {
       let that = this;
       that.API.requestData({
         method: "POST",
+        timeout: 8000,
         subUrl: "recommen/findAllChartjz",
         data: {
           wpId: "0",
           type: that.type,
         },
         success(res) {
-          // 顶部图表绿线
-          let lineData = res.data.lvchart;
-
-          let area = res.data.datechart;
-          let legend = ["优数量", "良数量", "差数量"];
-          let data = [];
-
-          let dataLength = res.data.datechart.length;
-
-          for (let i = 0; i < dataLength; i++) {
-            data.push([res.data.yslchart[i], res.data.lslchart[i], res.data.cslchart[i]]);
+          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;
           }
-
-          let bardata = {
-            area,
-            legend,
-            data,
-          };
-
-          that.bardata = bardata;
-          that.lineData = lineData;
         },
       });
     },

+ 9 - 21
src/views/HealthControl/Health3.vue

@@ -179,33 +179,21 @@ export default {
       let that = this;
       that.API.requestData({
         method: "POST",
+        timeout: 8000,
         subUrl: "recommen/findAllChartjz",
         data: {
           wpId: that.wpId,
           type: that.type
         },
         success (res) {
-          // 顶部图表绿线
-          let lineData = res.data.lvchart;
-
-          let area = res.data.datechart;
-          let legend = ["优数量", "良数量", "差数量"];
-          let data = [];
-
-          let dataLength = res.data.datechart.length;
-
-          for(let i=0;i<dataLength;i++){
-            data.push([res.data.yslchart[i], res.data.lslchart[i], res.data.cslchart[i]]);
+          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;
           }
-
-          let bardata = {
-            area,
-            legend,
-            data
-          };
-
-          that.bardata = bardata;
-          that.lineData = lineData;
         }
       });
     },
@@ -258,7 +246,7 @@ export default {
     },
 
     jumpUrl(item){
-      this.$router.push(`/health/health0/${item[0]}`);
+      this.$router.push(`/health/health0/${this.wpId}/${item[0]}`);
     }
   }
 };

+ 3 - 1
src/views/HealthControl/Health4.vue

@@ -31,6 +31,7 @@ export default {
   data() {
     return {
       activeIndex:0,
+      wpId:"",
       wtId:"",
       menuDatas: [{
         icon: "svg-agc",
@@ -50,8 +51,9 @@ export default {
 
   created() {
    this.wtId = this.$route.params.wtId;
+   this.wpId = this.$route.params.wpId;
    this.menuDatas.forEach(ele=>{
-     ele.path += ('/'+this.wtId);
+     ele.path += ('/'+this.wpId + '/'+this.wtId);
    });
   },
   

+ 0 - 1
src/views/HealthControl/Health5.vue

@@ -89,7 +89,6 @@ export default {
     },
     // 跳转按钮
     onClickJump(item){
-      console.warn(item);
        this.$router.push({
         path: `/health/health0/${item.wpId}/${item.wtId}`
       });

+ 47 - 51
src/views/HealthControl/Health6.vue

@@ -63,7 +63,7 @@
     </row>
     <div class="mg-b-16">
       <panel :title="'健康状态占比'" :showLine="false">
-        <bar-line-chart :bardata="barData" :lineData="[]" :height="'250px'" />
+        <bar-line-chart :bardata="barData" :lineData="[]" :height="'250px'" :pageSize="6" />
       </panel>
     </div>
     <div class="mg-b-16 curStyle">
@@ -98,20 +98,20 @@ export default {
       type: "1",
       status: "1",
       healPieData: [],
-      stopPieData:[],
-      statusData:[],
-      barData:{
+      stopPieData: [],
+      statusData: [],
+      barData: {
         area: [],
         legend: [],
-        data: []
-      }
+        data: [],
+      },
     };
   },
-  created(){
+  created() {
     this.requestData();
   },
   methods: {
-    requestData(){
+    requestData() {
       this.getWpwarn();
       this.getStop();
       this.getWpOrProStatus();
@@ -119,18 +119,18 @@ export default {
     },
 
     // 获取健康走势图
-    getWpwarn(){
+    getWpwarn() {
       let that = this;
       that.API.requestData({
         method: "POST",
         subUrl: "healthoperation/countWpwarn",
         data: {
-          type: that.type
+          type: that.type,
         },
-        success (res) {
-          let healPieData=[];
+        success(res) {
+          let healPieData = [];
 
-          res.data.forEach(ele=>{
+          res.data.forEach((ele) => {
             healPieData.push({
               value: ele.value,
               unit: "次",
@@ -139,24 +139,23 @@ export default {
           });
 
           that.healPieData = healPieData;
-        }
+        },
       });
     },
 
-    
     // 获取故障统计图
-    getStop(){
+    getStop() {
       let that = this;
       that.API.requestData({
         method: "POST",
         subUrl: "healthoperation/countStop",
         data: {
-          type: that.type
+          type: that.type,
         },
-        success (res) {
-          let stopPieData=[];
+        success(res) {
+          let stopPieData = [];
 
-          res.data.forEach(ele=>{
+          res.data.forEach((ele) => {
             stopPieData.push({
               value: ele.value,
               unit: "次",
@@ -165,74 +164,73 @@ export default {
           });
 
           that.stopPieData = stopPieData;
-        }
+        },
       });
     },
 
     // 获取健康状态占比
-    getWpOrProStatus(){
+    getWpOrProStatus() {
       let that = this;
       that.API.requestData({
         method: "POST",
         subUrl: "healthoperation/countWpOrProStatus",
         data: {
-          type: that.type
+          type: that.type,
         },
-        success (res) {
+        success(res) {
           let barData = {
             area: res.data.name,
             legend: ["良好数量", "正常数量", "注意数量", "严重数量"],
-            data: []
+            data: [],
           };
 
-          let length=res.data.name.length;
+          let length = res.data.name.length;
 
-          for(let i=0;i<length;i++){
+          for (let i = 0; i < length; i++) {
             barData.data.push([]);
           }
 
-          for(let i=0;i<length;i++){
+          for (let i = 0; i < length; i++) {
             barData.data[i].push(res.data.lhList[i]);
             barData.data[i].push(res.data.hgList[i]);
             barData.data[i].push(res.data.zyList[i]);
             barData.data[i].push(res.data.yzList[i]);
           }
-          
-          that.barData=barData;
-        }
+
+          that.barData = barData;
+        },
       });
     },
 
     // 获取健康状态
-    getStatus(){
+    getStatus() {
       let that = this;
       that.API.requestData({
         method: "POST",
         subUrl: "healthoperation/findWpOrProStatusForHistory",
         data: {
           type: that.type,
-          status: that.status
+          status: that.status,
         },
-        success (res) {
-
+        success(res) {
           let statusData = [];
 
           const time = res.data.time;
 
-          for(let key in res.data){
-            if(key !== "name" && key !== "time"){
-              let item=res.data[key];
+          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,
-                value: []
-              }
+                value: [],
+              };
 
-              time.forEach((text, index)=>{
+              time.forEach((text, index) => {
                 statusItem.value.push({
-                  text:res.data.name[0][key],
-                  value:item[index]
+                  text: res.data.name[0][key],
+                  value: item[index],
                 });
               });
 
@@ -241,8 +239,7 @@ export default {
           }
 
           that.statusData = statusData;
-          
-        }
+        },
       });
     },
 
@@ -251,21 +248,20 @@ export default {
       this.requestData();
     },
 
-    changeStatus(status){
+    changeStatus(status) {
       this.status = status;
       this.getStatus();
-    }
+    },
   },
 };
 </script>
 
 <style lang="less">
 .health-6 {
-
-  .curStyle{
+  .curStyle {
     position: relative;
 
-    .selections{
+    .selections {
       position: absolute;
       display: flex;
       right: 0;
@@ -273,7 +269,7 @@ export default {
       width: 50%;
       justify-content: flex-end;
 
-      .item{
+      .item {
         flex: 0 0 80px;
         text-align: center;
         line-height: 33px;

+ 546 - 0
src/views/HealthControl/HealthDay.vue

@@ -0,0 +1,546 @@
+<template>
+	<div class="decision-page-2">
+		<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="value2" @change="MoKuaiChange(value2)" multiple placeholder="请选择"
+							popper-class="select">
+							<el-option v-for="item in MoKuai" :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="value1" @change="ChangZhanChange(value1)" multiple placeholder="请选择"
+							popper-class="select">
+							<el-option v-for="item in ChangZhan" :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-date-picker v-model="value4" @change="BeginChange(value4)" type="date"
+							value-format="YYYY-MM-DD" placeholder="选择日期" popper-class="date-select">
+						</el-date-picker>
+					</div>
+				</div>
+			</div>
+			<div class="query-actions">
+				<button class="btn" @click="dbfx">对比</button>
+			</div>
+		</div>
+
+		<div class="mg-b-16">
+			<div class="project-table">
+				<Table :data="tableData" :canScroll="false" ref="curRef"></Table>
+			</div>
+		</div>
+		<el-dialog title="对标排名分析" v-model="dialogVisible" width="70%" top="10vh" custom-class="modal"
+			:close-on-click-modal="false">
+			<dayinfo :radarValue="radarValue" :windNum="windNum" :windNum2="windNum2" :tabs="tabs"
+				:analyisDialog="analyisDialog" />
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+	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 Dayinfo from "./dayinfo.vue";
+	export default {
+		components: {
+			Panel,
+			Table,
+			SvgIcon,
+			Dayinfo
+		},
+		data() {
+			let that = this;
+			return {
+				tableIdArr: [], //放checkbox的id数组
+				tableId: [],
+				checkLength: 0, //对标分析只能选择2个
+				tableData: {
+					column: [{
+							name: "",
+							field: "index",
+							is_num: false,
+							is_light: false,
+						},
+						{
+							name: "",
+							field: "check",
+							is_num: false,
+							is_light: false,
+							template:() => {
+								return "<input class='check curCheckBox' type='CheckBox' />";
+							},
+							click: function(event, data) {
+								var dataId = that.tableIdArr[data.index - 1];
+								if (event.target.checked == false && that.checkLength <= 2) {
+									that.tableId.forEach((item, i) => {
+										if (item == dataId) {
+											that.tableId.splice(i, 1)
+										}
+									})
+									that.checkLength--;
+								} else if (event.target.checked && that.checkLength < 2) {
+									that.tableId.push(dataId)
+									that.checkLength++;
+								} else if (that.checkLength == 2) {
+									event.target.checked = false;
+								}
+							},
+						},
+						{
+							name: "风机编号",
+							field: "name",
+							is_num: false,
+							is_light: false,
+						},
+						{
+							name: "等级",
+							field: "dj",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						},
+						{
+							name: "综合排名",
+							field: "zhpm",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						},
+						{
+							name: "发电量",
+							field: "fdl",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						},
+						{
+							name: "理论发电量",
+							field: "llfdl",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						},
+						{
+							name: "平均风速",
+							field: "pjfs",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						},
+						{
+							name: "平均功率",
+							field: "pjgl",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						},
+						{
+							name: "故障损失电量",
+							field: "gzssdl",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						},
+						{
+							name: "限电损失电量",
+							field: "xdssdl",
+							is_num: false,
+							is_light: true,
+							sortable: true,
+						},
+						{
+							name: "维护损失电量",
+							field: "whssdl",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						},
+						{
+							name: "性能损失电量",
+							field: "xnssdl",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						},
+						{
+							name: "利用小时数",
+							field: "lyxss",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						}, {
+							name: "拟合优度",
+							field: "nhyd",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						}, {
+							name: "设备可利用率",
+							field: "sbklyl",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						}, {
+							name: "等效可用系数",
+							field: "dxkyxs",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						}, {
+							name: "有效风时数",
+							field: "yxfss",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						},{
+							name: "平均切入风速",
+							field: "pjqrfs",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						}, {
+							name: "静风频率",
+							field: "jfpl",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						}, {
+							name: "功率一致性系数",
+							field: "glyzxxs",
+							is_num: false,
+							is_light: false,
+							sortable: true,
+						}
+					],
+					data: [],
+				},
+				ChangZhan: [], //场站
+				MoKuai: [], //项目
+				value1: [],
+				value2: [],
+				value3: "",
+				dialogVisible: false,
+				radarValue: [],
+				windNum: 'dd',
+				windNum2: 'dd',
+				tabs: [],
+				analyisDialog: [],
+				ajaxData:[],
+			};
+		},
+		created() {
+			this.ChangZhanVal();
+			this.value3 = this.getTime(1);
+			this.AjaxCommon();
+			this.MoKuaiVal();
+		},
+		methods: {
+			MoKuaiVal(val) {
+				var that = this;
+				that.API.requestData({
+					method: "GET",
+					baseURL : "10.155.32.4:8034",
+					subUrl: "evaluation/modelMainList",
+					success(res) {
+						console.log(JSON.stringify(res))
+						that.MoKuai = res.data;
+					}
+				});
+			},
+			MoKuaiChange(val) {
+				this.value2 = val;
+				this.value3 = [];
+				this.AjaxCommon();
+				this.XianLuVal(val);
+				this.clearDb();
+			},
+			ChangZhanVal() {
+				var that = this;
+				that.API.requestData({
+					method: "GET",
+					baseURL : "10.155.32.4:8034",
+					subUrl: "evaluation/wplist",
+					success(res) {
+						that.ChangZhan = res.data;
+					}
+				});
+			},
+			ChangZhanChange(val) {
+				this.value1 = val;
+				this.value2 = [];
+				this.value3 = [];
+				this.AjaxCommon();
+				this.MoKuaiVal(val);
+				this.clearDb();
+			},
+			BeginChange(val) {
+				this.value4 = val;
+				this.AjaxCommon();
+				this.clearDb();
+			},
+			getTime(val) { //时间戳处理,val=1是默认开始时间(当前月第一天),val=2是默认结束时间(今天)
+				var date = new Date();
+				var year = date.getFullYear(),
+					month = date.getMonth() + 1,
+					day = date.getDate();
+				month >= 1 && month <= 9 ? (month = '0' + month) : '';
+				day >= 0 && day <= 9 ? (day = '0' + day) : '';
+				var begin = year + '-' + month + '-01';
+				var end = year + '-' + month + '-' + day;
+				if (val == 1) {
+					return begin;
+				} else if (val == 2) {
+					return end;
+				}
+			},
+			AjaxCommon() {
+				var that = this;
+				that.API.requestData({ //五项损失率
+					method: "GET",
+					baseURL : "10.155.32.4:8034",
+					subUrl: "evaluation/wxssl",
+					data: {
+						wpids: that.value1,
+						projectids: that.value2,
+						lineids: that.value3,
+						beginDate: that.value4,
+						endDate: that.value5,
+						target: '',
+						sort: ''
+					},
+					success(res) {
+						that.ajaxData = res.data;
+						var dataTab = []; //表格
+						res.data.forEach((item, index) => {
+							that.tableIdArr.push(item.id);
+							dataTab.push({ //表格
+								index: index + 1,
+								name: item.name,
+								dj: item.dj,
+								zhpm: item.zhpm,
+								fdl: item.fdl,
+								llfdl: item.llfdl,
+								pjfs: item.gzssdl,
+								pjgl: item.pjgl,
+								gzssdl: item.gzssdl,
+								lyxss: item.lyxss,
+								whssdl: item.whssdl,
+								xnssdl: item.xnssdl,
+								lyxss: item.lyxss,
+								nhyd: item.nhyd,
+								sbklyl: item.sbklyl,
+								dxkyxs: item.dxkyxs,
+								yxfss: item.yxfss,
+								pjqrfs: item.pjqrfs,
+								jfpl: item.jfpl,
+								glyzxxs: item.glyzxxs,
+								jxssl: item.jxssl,
+								qflpm: item.qflpm,
+								qfl: item.qfl,
+								xnsslpm: item.xnsslpm,
+								xnssl: item.xnssl,
+								slsslpm: item.slsslpm,
+								slssl: item.slssl,
+								is_light: false
+							})
+
+						})
+						that.tableData.data = dataTab;
+					}
+				});
+			},
+			AjaxDbfx() {
+				var that = this;
+				var data = that.ajaxData;
+				that.windNum = data[0].name;
+				that.windNum2 = data[1].name;
+				that.tabs = [{
+					name: "发电量",
+					windData1: data[0].fdl,
+					windData2: data[1].fdl
+				}, {
+					name: "故障损失电量",
+					windData1: data[0].gzssdl,
+					windData2: data[1].gzssdl
+				}, {
+					name: "检修损失电量",
+					windData1: data[0].jxssdl,
+					windData2: data[1].jxssdl
+				}, {
+					name: "性能未达标损失电量",
+					windData1: data[0].xnssdl,
+					windData2: data[1].xnssdl
+				}, {
+					name: "受累损失电量",
+					windData1: data[0].slssdl,
+					windData2: data[1].slssdl
+				}, {
+					name: "风能利用率",
+					windData1: data[0].fnlyl,
+					windData2: data[1].fnlyl
+				}, {
+					name: "故障损失率",
+					windData1: data[0].gzssl,
+					windData2: data[1].gzssl
+				}, {
+					name: "检修损失率",
+					windData1: data[0].jxssl,
+					windData2: data[1].jxssl
+				}, {
+					name: "弃风率",
+					windData1: data[0].qfl,
+					windData2: data[1].qfl
+				}, {
+					name: "性能损失率",
+					windData1: data[0].xnssl,
+					windData2: data[1].xnssl
+				}, {
+					name: "受累损失率",
+					windData1: data[0].slssl,
+					windData2: data[1].slssl
+				}];
+				
+				that.radarValue = [{
+					indicator: ["风能利用率", "故障损失率", "检修损失率", "弃风率", "性能损失率", "受累损失率"],
+					data: [{
+						value: [data[0].fnlylpm, data[0].gzsslpm, data[0].jxsslpm, data[0].qflpm,
+							data[0].xnsslpm, data[0].slsslpm
+						]
+					}, {
+						value: [data[1].fnlylpm, data[1].gzsslpm, data[1].jxsslpm, data[1].qflpm,
+							data[1].xnsslpm, data[1].slsslpm
+						]
+					}]
+				}];
+				
+				var analyis = [],
+					gzssdl = [],
+					jxssdl = [],
+					xnssdl = [],
+					xdssdl = [],
+					slssdl = [];
+				data.forEach((item, index) => {
+					gzssdl.push({
+						text: item.name,
+						value: item.gzssdl
+					});
+					jxssdl.push({
+						text: item.name,
+						value: item.jxssdl
+					});
+					xnssdl.push({
+						text: item.name,
+						value: item.xnssdl
+					});
+					xdssdl.push({
+						text: item.name,
+						value: item.xdssdl
+					});
+					slssdl.push({
+						text: item.name,
+						value: item.slssdl
+					});
+				})
+				analyis.push({
+					title: "故障损失电量",
+					yAxisIndex: 0,
+					value: gzssdl
+				}, {
+					title: "检修损失电量",
+					yAxisIndex: 0,
+					value: jxssdl
+				}, {
+					title: "性能损失电量",
+					yAxisIndex: 0,
+					value: xnssdl
+				}, {
+					title: "限电损失电量",
+					yAxisIndex: 0,
+					value: xdssdl
+				}, {
+					title: "受累损失电量",
+					yAxisIndex: 0,
+					value: slssdl
+				})
+				that.analyisDialog = analyis;
+				
+			},
+			tooltip(param, callback) {
+				var color = ["#05bb4c", "#4b55ae", "#fa8c16", "#f8de5b"];
+
+				var result = param[0].axisValue;
+				param.forEach((value, index) => {
+					result += "<br />" +
+						`<span style="display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:${color[index]};"></span>` +
+						value.seriesName + ":" + value.value;
+				});
+				callback(result);
+				return true;
+			},
+			dbfx() {
+				var that = this;
+				if (that.tableId.length == 2) {
+					that.dialogVisible = true;
+					this.AjaxDbfx();
+					this.clearDb();
+				}
+			},
+			clearDb(){//清空对标状态
+				this.$refs.curRef.clearCheckBox();
+				this.tableId = [];
+				this.checkLength = 0;
+			}
+		}
+	};
+</script>
+
+<style lang="less">
+	.decision-page-2 {
+		.content .project-table {
+			tbody {
+				height: calc(100vh - 24.5vh);
+			}
+		}
+
+		.project-table {
+			overflow: auto;
+
+			tbody {
+				height: 279px;
+			}
+
+			th,
+			td {
+				color: #b2bdc0;
+
+				&:nth-child(1) {
+					width: 50px;
+				}
+
+				&:nth-child(2) {
+					width: 50px;
+				}
+			}
+		}
+
+		.action {
+			text-decoration: underline;
+			color: @green;
+			cursor: pointer;
+		}
+	}
+</style>

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

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

+ 59 - 29
src/views/HealthControl/HealthTab1.vue

@@ -27,12 +27,16 @@
       </div>
     </div>
     <div class="health-report">
-      <panel class="health-report-panel" :title="'推荐检修风机'" :showLine="false">
+      <panel
+        class="health-report-panel"
+        :title="'推荐检修风机'"
+        :showLine="false"
+      >
         <div class="actions mg-b-16">
           <div class="item green" @click="onClickRecommon(1)">当日内推荐</div>
           <div class="item purple" @click="onClickRecommon(2)">三日内推荐</div>
           <div class="item gray" @click="onClickRecommon(3)">超三日推荐</div>
-          <div style="margin-left:450px">
+          <div style="margin-left: 450px">
             <button class="btn" @click="onClickCofirmAll()">全部确认</button>
             <button class="btn" @click="onClickIgnoreAll()">全部忽略</button>
           </div>
@@ -45,9 +49,17 @@
             </div>
             <div class="info">
               <p>推荐理由:{{ item.reason }}</p>
-              <p>推荐检修时间:{{new Date(item.recodedate).formatDate("yyyy-MM-dd hh:mm:ss")}}</p>
+              <p>
+                推荐检修时间:{{
+                  new Date(item.recodedate).formatDate("yyyy-MM-dd hh:mm:ss")
+                }}
+              </p>
               <p>推荐时间对应风速:{{ item.speed }} m/s</p>
-              <p>判断时间:{{new Date(item.createdate).formatDate("yyyy-MM-dd hh:mm:ss")}}</p>
+              <p>
+                判断时间:{{
+                  new Date(item.createdate).formatDate("yyyy-MM-dd hh:mm:ss")
+                }}
+              </p>
               <div class="actions mg-t-16">
                 <button class="btn success" @click="onClickCofirm(item)">
                   <i class="fa fa-check"></i>
@@ -63,7 +75,7 @@
         </div>
       </panel>
     </div>
-    <health-report :show="reportshow" :params="reportparams" @closed="closed"/>
+    <health-report :show="reportshow" :params="reportparams" @closed="closed" />
   </div>
 </template>
 
@@ -71,23 +83,28 @@
 import VertivalBarLineChart from "../../components/chart/combination/vertival-bar-line-chart.vue";
 import SvgIcon from "../../components/coms/icon/svg-icon.vue";
 import Panel from "../../components/coms/panel/panel.vue";
-import HealthReport from "../../components/other/healthReport/index.vue"
+import HealthReport from "../../components/other/healthReport/index.vue";
 
 export default {
-  components: { SvgIcon, Panel, VertivalBarLineChart, HealthReport},
+  components: { SvgIcon, Panel, VertivalBarLineChart, HealthReport },
   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"},
+        {
+          title: "30日健康趋势",
+          svgid: "svg-h-month",
+          active: false,
+          type: "month",
+        },
       ],
       bardata: { area: [], legend: [], data: [] }, // 损失电量分析echart数值
       lineData: [],
       recommenList: [], // 健康报告推荐
       recommenIndex: 1, // 记录当前是那个推荐
       reportshow: false, //是否显示健康报告
-      reportparams: undefined
+      reportparams: undefined,
     };
   },
   created() {
@@ -128,20 +145,26 @@ export default {
       }
     },
     // 查看健康报告
-    onClickReport(item){
-      this.reportshow = true
-      this.reportparams = {wtId: item.wtid, recorddate: new Date(item.recodedate).formatDate("yyyy-MM-dd")}
+    onClickReport(item) {
+      this.reportshow = true;
+      this.reportparams = {
+        wtId: item.wtid,
+        recorddate: new Date(item.createdate).formatDate("yyyy-MM-dd"),
+      };
     },
     // 关闭健康报告
-    closed(){
-      this.reportshow = false
+    closed() {
+      this.reportshow = false;
     },
     // 健康推荐提交
     onClickCofirm(item) {
       let that = this;
-      that.$confirm('确认提交?').then(_=> {
-        that.requestOption("recommen/confirpush", item.rid);
-      }).catch(_=>{})
+      that
+        .$confirm("确认提交?")
+        .then((_) => {
+          that.requestOption("recommen/confirpush", item.rid);
+        })
+        .catch((_) => {});
     },
     // 健康推荐取消
     onClickIgnore(item) {
@@ -150,16 +173,22 @@ export default {
     // 健康推荐提交全部
     onClickCofirmAll() {
       let that = this;
-      that.$confirm('确认全部提交?').then(_=> {
-        that.requestOptionAll("recommen/confirpushAll");
-      }).catch(_=>{})
+      that
+        .$confirm("确认全部提交?")
+        .then((_) => {
+          that.requestOptionAll("recommen/confirpushAll");
+        })
+        .catch((_) => {});
     },
     // 健康推荐取消全部
     onClickIgnoreAll() {
       let that = this;
-      that.$confirm('确认全部取消?').then(_=> {
-        that.requestOptionAll("recommen/ignorepushAll");
-      }).catch(_=>{})
+      that
+        .$confirm("确认全部取消?")
+        .then((_) => {
+          that.requestOptionAll("recommen/ignorepushAll");
+        })
+        .catch((_) => {});
     },
     // 健康报告推荐
     requestRecommen(url) {
@@ -201,6 +230,7 @@ export default {
       let that = this;
       that.API.requestData({
         method: "POST",
+        timeout: 8000,
         subUrl: "recommen/findAllChartjz",
         data: { wpId: 0, type: type },
         success(res) {
@@ -375,7 +405,7 @@ export default {
           flex-direction: row;
           justify-content: space-between;
           span {
-             cursor: pointer; 
+            cursor: pointer;
           }
         }
 
@@ -388,11 +418,11 @@ export default {
           p {
             margin: 0;
             line-height: 2;
-            overflow:hidden; 
-            text-overflow:ellipsis;
-            display:-webkit-box; 
-            -webkit-box-orient:vertical;
-            -webkit-line-clamp:2; 
+            overflow: hidden;
+            text-overflow: ellipsis;
+            display: -webkit-box;
+            -webkit-box-orient: vertical;
+            -webkit-line-clamp: 2;
           }
 
           .actions {

+ 0 - 0
src/views/HealthControl/HealthTab2.vue


Some files were not shown because too many files changed in this diff