Forráskód Böngészése

Merge branch 'yx' of http://61.161.152.110:10101/r/electronic-map into mw2

mw_666 3 éve
szülő
commit
fe8f2e7613
45 módosított fájl, 32561 hozzáadás és 3669 törlés
  1. 9 8
      src/App.vue
  2. 2 1
      src/assets/styles/el-override/el-table.less
  3. 14 14
      src/components/arcgis/arcgis.vue
  4. 1 1
      src/components/chart/bar/horizontal-bar-chart.vue
  5. 9 9
      src/components/chart/bar/single-bar-chart.vue
  6. 5 2
      src/components/chart/combination/area-bar-chart.vue
  7. 78 51
      src/components/chart/line/multiple-y-line-chart.vue
  8. 0 1
      src/components/coms/panel/panel-no-title.vue
  9. 1 1
      src/components/coms/table/group-table.vue
  10. 1 1
      src/components/coms/table/table2.vue
  11. 152 320
      src/router/index.js
  12. 1217 1132
      src/views/Demo.vue
  13. 3 3
      src/views/HealthControl/Health0.vue
  14. 1 1
      src/views/HealthControl/Health3.vue
  15. 2 0
      src/views/HealthControl/HealthTab4.vue
  16. 125 0
      src/views/HealthControl/assess/assessconfig.vue
  17. 2 2
      src/views/HealthControl/gradeassessment.vue
  18. 267 2
      src/views/HealthControl/fault-diagnosis.vue
  19. 2 2
      src/views/Home/Home.vue
  20. 180 47
      src/views/Home/components/map.vue
  21. 525 408
      src/views/Home/components/map/MHS_FDC.vue
  22. 761 0
      src/views/Home/components/map/NSS_FDC.vue
  23. 724 0
      src/views/Home/components/map/QS_FDC.vue
  24. 844 0
      src/views/Home/components/map/SBQ_FDC.vue
  25. 591 0
      src/views/Home/components/map/XS_FDC.vue
  26. 0 373
      src/views/Home/components/map/svg-map-xs.vue
  27. 474 403
      src/views/Home/components/map/svg-map.vue
  28. 0 7
      src/views/LightMatrix/LightMatrix.vue
  29. 4 0
      src/views/WindSite/WindSite.vue
  30. 1673 0
      src/views/WindSite/components/boosterstation/mch/BoosterStation.js
  31. 1349 0
      src/views/WindSite/components/boosterstation/mch/mch.vue
  32. 697 0
      src/views/WindSite/components/boosterstation/mch/previewPicture.vue
  33. 732 0
      src/views/WindSite/components/generalappearance/xh/previewPicture.vue
  34. 20896 0
      src/views/WindSite/components/generalappearance/xh/xh.vue
  35. 721 686
      src/views/WindSite/components/generalappearance/xs/previewPicture.vue
  36. 78 78
      src/views/WindSite/components/generalappearance/xs/xs.vue
  37. 0 1
      src/views/WindSite/pages/DraughtFanList.vue
  38. 13 11
      src/views/WindSite/pages/GeneralAppearance.vue
  39. 37 45
      src/views/WindSite/pages/Map.vue
  40. 1 1
      src/views/layout/Menu.vue
  41. 305 0
      src/views/malfunctionDiagnose/index.vue
  42. 30 30
      src/views/malfunctionStatistics/index.vue
  43. 1 1
      src/views/realSearch/index.vue
  44. 7 0
      src/views/warn/xdgl.vue
  45. 27 27
      src/views/warnStatistics/index.vue

+ 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;

+ 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 {

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

@@ -75,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: {

+ 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";
             },

+ 78 - 51
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",
@@ -72,12 +67,7 @@ export default {
                 },
                 {
                     title: "机舱震动y方向",
-                    yAxis: {
-                      min: -0.01,
-                      max: 0,
-                      unit: "",
-                      position: "right",
-                    },
+                    yAxisIndex: 1,
                     value: [
                         {
                             text: "-0.01",
@@ -119,12 +109,7 @@ export default {
                 },
                 {
                     title: "机舱震动最大偏移值",
-                    yAxis: {
-                      min: 0,
-                      max: 1,
-                      unit: "",
-                      position: "left",
-                    },
+                    yAxisIndex: 2,
                     value: [
                         {
                             text: "1",
@@ -166,12 +151,7 @@ export default {
                 },
                 {
                     title: "风速1",
-                    yAxis: {
-                      min: 0,
-                      max: 10,
-                      unit: "",
-                      position: "right",
-                    },
+                    yAxisIndex: 3,
                     value: [
                         {
                             text: "1",
@@ -213,12 +193,7 @@ export default {
                 },
                 {
                     title: "风速2",
-                    yAxis: {
-                      min: 0,
-                      max: 10,
-                      unit: "",
-                      position: "left",
-                    },
+                    yAxisIndex: 4,
                     value: [
                         {
                             text: "1",
@@ -264,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 {
@@ -286,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),
@@ -313,7 +329,7 @@ export default {
                       show: true
                     }
                 });
-                p[item.yAxis.position]++;
+                p[item.position]++;
             });
 
             return result;
@@ -333,7 +349,7 @@ export default {
                             width: 1,
                         },
                     },
-                    yAxisIndex: index,
+                    yAxisIndex: value.yAxisIndex,
                     data: value.value.map((t) => {
                         return t.value;
                     }),
@@ -344,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: {
@@ -418,15 +448,6 @@ export default {
                 yAxis: this.yAxis,
                 series: this.series,
             };
-            console.log(option)
-            chart.clear();
-            chart.setOption(option);
-
-            this.resize = function() {
-                chart.resize();
-            };
-
-            window.addEventListener("resize", this.resize);
         },
         datazoom: function (start, end) {
             const chart = echarts.getInstanceByDom(this.$el);
@@ -436,6 +457,12 @@ export default {
                 end: end,
             });
         },
+        reload: function () {
+            const chart = echarts.getInstanceByDom(this.$el);
+            chart.clear();
+            let option = this.option();
+            chart.setOption(option);
+        },
     },
     created() {
         this.id = "pie-chart-" + util.newGUID();

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

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

+ 1 - 1
src/components/coms/table/group-table.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-table :class="customClass" stripe :data="data.data" :height="height" style="width: 100%" @cell-click="onClick" @header-click="onHeaderClick">
+  <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

+ 1 - 1
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"

+ 152 - 320
src/router/index.js

@@ -67,201 +67,13 @@ const routes = [{
 	}, {
 		path: 'info/:wpId/:wtId', // 单机状态监视
 		component: () =>
-			import( /* webpackChunkName: "windsite" */ '../views/WindSite/WindSite.vue'),
-		children: [{
-			path: 'home/:wpId', // 场站监视
-			component: () =>
-				import( /* webpackChunkName: "windsitehome" */ '../views/WindSite/pages/Home/Home.vue'),
-		}, {
-			path: 'draughtfanlist/:wpId', // 风机列表
-			component: () =>
-				import( /* webpackChunkName: "windsitedraughtfanlist" */
-					'../views/WindSite/pages/DraughtFanList.vue'),
-		}, {
-			path: 'matrix/:wpId', // 风场矩阵
-			component: () =>
-				import( /* webpackChunkName: "windsitematrix" */ '../views/WindSite/pages/Matrix.vue'),
-		}, {
-			path: 'lightmatrix/:wpId',
-			component: () =>
-				import( /* webpackChunkName: "windsitelightmatrix" */
-					'../views/WindSite/pages/LightMatrix.vue'),
-		}, {
-			path: 'box/:wpId',
-			component: () =>
-				import( /* webpackChunkName: "windsitebox" */ '../views/WindSite/pages/Box.vue'),
-		}, {
-			path: 'tower/:wpId', // 测风塔
-			component: () =>
-				import( /* webpackChunkName: "windsitetower" */ '../views/WindSite/pages/Tower.vue'),
-		}, {
-			path: 'inverter-info/:wpId/:wtId',
-			component: () =>
-				import( /* webpackChunkName: "inverter-info" */
-					'../views/WindSite/pages/Inverter-Info.vue'),
-		}, {
-			path: 'map/:wpId',
-			component: () =>
-				import( /* webpackChunkName: "windsitemap" */ '../views/WindSite/pages/Map.vue'),
-		}, {
-			path: 'map1/:wpId',
-			component: () =>
-				import( /* webpackChunkName: "windsitemap1" */ '../views/WindSite/pages/Map1.vue'),
-		}, {
-			path: '/decision/decision1', //风机绩效榜
-			name: 'decision1',
-			component: () => import( /* webpackChunkName: "decision1" */ '../views/Decision/Decision1.vue'),
-		},
-		{
-			path: '/decision/decision1Mx', //风机绩效榜明细
-			name: 'decision1Mx',
-			component: () => import( /* webpackChunkName: "decision1Mx" */
-				'../views/Decision/Decision1Mx.vue'),
-		},
-
-		{
-			path: '/decision/decision2', //五项损失率
-			name: 'decision2',
-			component: () => import( /* webpackChunkName: "decision2" */ '../views/Decision/Decision2.vue'),
-		},
-		{
-			path: '/decision/decision2Cndb', //场内对标
-			name: 'decision2Cndb',
-			component: () => import( /* webpackChunkName: "decision2Cndb" */
-				'../views/Decision/Decision2Cndb.vue'),
-		},
-		{
-			path: '/decision/decision2Cjdb', //场际对标
-			name: 'decision2Cjdb',
-			component: () => import( /* webpackChunkName: "decision2Cjdb" */
-				'../views/Decision/Decision2Cjdb.vue'),
-		},
-		{
-			path: '/decision/decision2Xmdb', //项目对标
-			name: 'decision2Xmdb',
-			component: () => import( /* webpackChunkName: "decision2Xmdb" */
-				'../views/Decision/Decision2Xmdb.vue'),
-		},
-		{
-			path: '/decision/decision2Xldb', //线路对标
-			name: 'decision2Xldb',
-			component: () => import( /* webpackChunkName: "decision2Xldb" */
-				'../views/Decision/Decision2Xldb.vue'),
-		},
-		{
-			path: '/decision/decision3', //性能对标
-			name: 'decision3',
-			component: () => import( /* webpackChunkName: "decision3" */ '../views/Decision/Decision3.vue'),
-		},
-		{
-			path: '/decision/decision3db', //单机横向对比
-			name: 'decision3db',
-			component: () => import( /* webpackChunkName: "decision3db" */
-				'../views/Decision/Decision3Db.vue'),
-		},
-		{
-			path: '/decision/decision4', //值际对标
-			name: 'decision4',
-			component: () => import( /* webpackChunkName: "decision4" */ '../views/Decision/Decision4.vue'),
-		},
-		{
-			path: '/decision/decision4czzl', //操作指令统计
-			name: 'decision4czzl',
-			component: () => import( /* webpackChunkName: "decision4czzl" */
-				'../views/Decision/Decision4Czzl.vue'),
-		},
-		{
-			path: '/health',
-			name: 'health',
-			component: () => import('../views/HealthControl/Health.vue'),
-		},
-		{
-			path: '/health/health1',
-			name: 'health1',
-			component: () => import('../views/HealthControl/Health1.vue'),
-		},
-		{
-			path: '/health/health2', // 健康管理首页
-			name: 'health2',
-			component: () => import('../views/HealthControl/Health2.vue'),
-		},
-		{
-			path: '/health/health3/:wpId', // 场站健康管理
-			name: 'health3',
-			component: () => import('../views/HealthControl/Health3.vue'),
-		},
-		{
-			path: '/health/health4',
-			name: 'health4',
-			children: [{
-				path: 'healthLineChart/:wtId', // 风机健康趋势
-				component: () => import( /* webpackChunkName: "healthLineChart" */
-					'../views/HealthControl/healthLineChart.vue'),
-			},
-			{
-				path: 'healthLineChart2/:wtId', // 健康趋势
-				component: () => import( /* webpackChunkName: "healthLineChart2" */
-					'../views/HealthControl/healthLineChart2.vue'),
-			}
-			],
-			component: () => import('../views/HealthControl/Health4.vue'),
-		},
-		{
-			path: '/health/health5/',
-			name: 'health5',
-			component: () => import('../views/HealthControl/Health5.vue'),
-		},
-		{
-			path: '/health/health6', // 健康总览
-			name: 'health6',
-			component: () => import('../views/HealthControl/Health6.vue'),
-		},
-		{
-			path: '/cutAnalyse', // 切入切出分析
-			name: 'cutAnalyse',
-			component: () => import('../views/cutAnalyse/index.vue'),
-		},
-		{
-			path: '/cutAnalyse', // 切入切出分析
-			name: 'cutAnalyse',
-			component: () => import('../views/cutAnalyse/index.vue'),
-		},
-		{
-			path: '/wtSaturability', // 单机饱和度
-			name: 'wtSaturability',
-			component: () => import('../views/wtSaturability/index.vue'),
-		},
-		{
-			path: '/windAnalysis', // 风资源分析
-			name: 'windAnalysis',
-			component: () => import('../views/windAnalysis/index.vue'),
-		},
-		{
-			path: '/windAnalysis/fx', // 风向
-			name: 'fxzstmain',
-			component: () => import('../views/windAnalysis/fxzstmain.vue'),
-		},
-		{
-			path: 'boosterstation/:wpId', // 升压站
-			component: () =>
-				import( /* webpackChunkName: "boosterstation" */
-					'../views/WindSite/pages/BoosterStation.vue'),
-		},
-		{
-			path: "generalappearance/:wpId", // 总样貌
-			component: () =>
-				import( /* webpackChunkName: "generalappearance" */
-					"../views/WindSite/pages/GeneralAppearance.vue"),
-		},
-		]
-	},
-	{
-		path: '/monitor/lightmatrix', // 光伏明细矩阵
-		name: 'LightMatrix',
+			import( /* webpackChunkName: "info" */ '../views/WindSite/pages/Info/Info.vue'),
+	}, {
+		path: 'tower/:wpId', // 测风塔
 		component: () =>
 			import( /* webpackChunkName: "windsitetower" */ '../views/WindSite/pages/Tower.vue'),
 	}, {
-		path: 'inverter-info/:wpId',
+		path: 'inverter-info/:wpId/:wtId',
 		component: () =>
 			import( /* webpackChunkName: "inverter-info" */
 				'../views/WindSite/pages/Inverter-Info.vue'),
@@ -273,51 +85,6 @@ const routes = [{
 		path: 'map1/:wpId',
 		component: () =>
 			import( /* webpackChunkName: "windsitemap1" */ '../views/WindSite/pages/Map1.vue'),
-	}, {
-		path: '/decision/decision1', //风机绩效榜
-		name: 'decision1',
-		component: () => import( /* webpackChunkName: "decision1" */ '../views/Decision/Decision1.vue'),
-	},
-	{
-		path: '/decision/decision1Mx', //风机绩效榜明细
-		name: 'decision1Mx',
-		component: () => import( /* webpackChunkName: "decision1Mx" */
-			'../views/Decision/Decision1Mx.vue'),
-	},
-
-	{
-		path: '/decision/decision2', //五项损失率
-		name: 'decision2',
-		component: () => import( /* webpackChunkName: "decision2" */ '../views/Decision/Decision2.vue'),
-	},
-	{
-		path: '/decision/decision2Cndb', //场内对标
-		name: 'decision2Cndb',
-		component: () => import( /* webpackChunkName: "decision2Cndb" */
-			'../views/Decision/Decision2Cndb.vue'),
-	},
-	{
-		path: '/decision/decision2Cjdb', //场际对标
-		name: 'decision2Cjdb',
-		component: () => import( /* webpackChunkName: "decision2Cjdb" */
-			'../views/Decision/Decision2Cjdb.vue'),
-	},
-	{
-		path: '/decision/decision2Xmdb', //项目对标
-		name: 'decision2Xmdb',
-		component: () => import( /* webpackChunkName: "decision2Xmdb" */
-			'../views/Decision/Decision2Xmdb.vue'),
-	},
-	{
-		path: '/decision/decision2Xldb', //线路对标
-		name: 'decision2Xldb',
-		component: () => import( /* webpackChunkName: "decision2Xldb" */
-			'../views/Decision/Decision2Xldb.vue'),
-	},
-	{
-		path: '/decision/decision3', //性能对标
-		name: 'decision3',
-		component: () => import( /* webpackChunkName: "decision3" */ '../views/Decision/Decision3.vue'),
 	},
 	{
 		path: '/decision/decision3db', //单机横向对比
@@ -326,83 +93,6 @@ const routes = [{
 			'../views/Decision/Decision3Db.vue'),
 	},
 	{
-		path: '/decision/decision4', //值际对标
-		name: 'decision4',
-		component: () => import( /* webpackChunkName: "decision4" */ '../views/Decision/Decision4.vue'),
-	},
-	{
-		path: '/decision/decision4czzl', //操作指令统计
-		name: 'decision4czzl',
-		component: () => import( /* webpackChunkName: "decision4czzl" */
-			'../views/Decision/Decision4Czzl.vue'),
-	},
-	{
-		path: '/health',
-		name: 'health',
-		component: () => import('../views/HealthControl/Health.vue'),
-	},
-	{
-		path: '/health/health1',
-		name: 'health1',
-		component: () => import('../views/HealthControl/Health1.vue'),
-	},
-	{
-		path: '/health/health2', // 健康管理首页
-		name: 'health2',
-		component: () => import('../views/HealthControl/Health2.vue'),
-	},
-	{
-		path: '/health/health3/:wpId', // 场站健康管理
-		name: 'health3',
-		component: () => import('../views/HealthControl/Health3.vue'),
-	},
-	{
-		path: '/health/health4',
-		name: 'health4',
-		children: [{
-			path: 'healthLineChart/:wtId', // 风机健康趋势
-			component: () => import( /* webpackChunkName: "healthLineChart" */
-				'../views/HealthControl/healthLineChart.vue'),
-		},
-		{
-			path: 'healthLineChart2/:wtId', // 健康趋势
-			component: () => import( /* webpackChunkName: "healthLineChart2" */
-				'../views/HealthControl/healthLineChart2.vue'),
-		}
-		],
-		component: () => import('../views/HealthControl/Health4.vue'),
-	},
-	{
-		path: '/health/health5/',
-		name: 'health5',
-		component: () => import('../views/HealthControl/Health5.vue'),
-	},
-	{
-		path: '/health/health6', // 健康总览
-		name: 'health6',
-		component: () => import('../views/HealthControl/Health6.vue'),
-	},
-	{
-		path: '/cutAnalyse', // 切入切出分析
-		name: 'cutAnalyse',
-		component: () => import('../views/cutAnalyse/index.vue'),
-	},
-	{
-		path: '/cutAnalyse', // 切入切出分析
-		name: 'cutAnalyse',
-		component: () => import('../views/cutAnalyse/index.vue'),
-	},
-	{
-		path: '/wtSaturability', // 单机饱和度
-		name: 'wtSaturability',
-		component: () => import('../views/wtSaturability/index.vue'),
-	},
-	{
-		path: '/windAnalysis', // 风资源分析
-		name: 'windAnalysis',
-		component: () => import('../views/windAnalysis/index.vue'),
-	},
-	{
 		path: '/windAnalysis/fx', // 风向
 		name: 'fxzstmain',
 		component: () => import('../views/windAnalysis/fxzstmain.vue'),
@@ -863,9 +553,14 @@ const routes = [{
 },
 // 等级评估(单机等级评估管理-量化评级)
 {
-	path: '/djpg',
-	name: 'djpg',
-	component: () => import('../views/HealthControl/gradeassessment.vue')
+	path: '/assess/index',
+	name: 'assessindex',
+	component: () => import('../views/HealthControl/assess/assessindex.vue')
+},
+{
+	path: '/assess/config',
+	name: 'assessconfig',
+	component: () => import('../views/HealthControl/assess/assessconfig.vue')
 },
 {
 	path: "/new/powerforecast2",
@@ -924,6 +619,11 @@ const routes = [{
 	component: () => import("../views/alarmCenter/customStatistics.vue")
 },
 {
+	path: "/malfunctionDiagnose", // 故障诊断
+	name: "customStatistics",
+	component: () => import("../views/malfunctionDiagnose/index.vue")
+},
+{
 	path: "/new/pb",
 	name: "pb",
 	component: () => import(/* webpackChunkName: "powerbenchmarking" */ "../views/NewPages/power-benchmarking.vue"),
@@ -932,11 +632,143 @@ const routes = [{
 	path: "/powerCurve", // 功率曲线拟合
 	name: "powerCurve",
 	component: () => import(/* webpackChunkName: "powerCurve" */ "../views/powerCurve/index.vue"),
+},{
+	path: "/tjfx",
+	name: "tjfx",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/tjfx.vue"),
+},
+{
+	path: "/bdzcx",
+	name: "bdzcx",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/bdzcx.vue"),
+},
+{
+	path: "/oafd",
+	name: "oafd",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/oafd.vue"),
+},
+{
+	path: "/oagf",
+	name: "oagf",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/oagf.vue"),
+},
+{
+	path: "/missfdrb",
+	name: "missfdrb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/missfdrb.vue"),
+},
+{
+	path: "/missgfrb",
+	name: "missgfrb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/missgfrb.vue"),
+},
+{
+	path: "/xnyfdscyb",
+	name: "xnyfdscyb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/xnyfdscyb.vue"),
+},
+{
+	path: "/mhsscyb",
+	name: "mhsscyb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/mhsscyb.vue"),
+},
+{
+	path: "/nssscyb",
+	name: "nssscyb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/nssscyb.vue"),
 },
 {
-	path: "/malfunctionRecall", // 故障回溯
-	name: "malfunctionRecall",
-	component: () => import(/* webpackChunkName: "powerCurve" */ "../views/malfunctionRecall/index.vue"),
+	path: "/qsscyb",
+	name: "qsscyb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/qsscyb.vue"),
+},
+{
+	path: "/sbqscyb",
+	name: "sbqscyb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/sbqscyb.vue"),
+},
+{
+	path: "/xsscyb",
+	name: "xsscyb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/xsscyb.vue"),
+},
+{
+	path: "/xnygfscyb",
+	name: "xnygfscyb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/xnygfscyb.vue"),
+},
+{
+	path: "/dwkscyb",
+	name: "dwkscyb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/dwkscyb.vue"),
+},
+{
+	path: "/plscyb",
+	name: "plscyb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/plscyb.vue"),
+},
+{
+	path: "/xhscyb",
+	name: "xhscyb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/xhscyb.vue"),
+},
+{
+	path: "/fdczzdy",
+	name: "fdczzdy",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/fdczzdy.vue"),
+},
+{
+	path: "/fdxmzdy",
+	name: "fdxmzdy",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/fdxmzdy.vue"),
+},
+{
+	path: "/gfczzdy",
+	name: "gfczzdy",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/gfczzdy.vue"),
+},
+{
+	path: "/gfxmzdy",
+	name: "gfxmzdy",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/gfxmzdy.vue"),
+},
+{
+	path: "/xnyrb",
+	name: "xnyrb",
+	component: () =>
+			import ( /* webpackChunkName: "historysearch" */ "../views/report/xnyrb.vue"),
+},
+{
+		path: "/warnStatistics", // 预警评判分析
+		name: "warnStatistics",
+		component: () =>
+				import ( /* webpackChunkName: "warnStatistics" */ "../views/warnStatistics/index.vue"),
+},
+{
+		path: "/malfunctionStatistics", // 故障评判分析
+		name: "malfunctionStatistics",
+		component: () =>
+				import ( /* webpackChunkName: "malfunctionStatistics" */ "../views/malfunctionStatistics/index.vue"),
 },
 ]
 const router = createRouter({

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1217 - 1132
src/views/Demo.vue


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

@@ -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,

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

@@ -246,7 +246,7 @@ export default {
     },
 
     jumpUrl(item){
-      this.$router.push(`/health/health0/${item[0]}`);
+      this.$router.push(`/health/health0/${this.wpId}/${item[0]}`);
     }
   }
 };

+ 2 - 0
src/views/HealthControl/HealthTab4.vue

@@ -248,10 +248,12 @@ export default {
       that.API.requestData({
         method: "POST",
         subUrl: "recommen/findMainTrack",
+        timeout: 30000,
         data: {
           rid: row.rid,
         },
         success(res) {
+          console.log(123123, res);
           if (res.code == 200) {
             that.trackDate = res.data;
             that.dialogVisible = true;

+ 125 - 0
src/views/HealthControl/assess/assessconfig.vue

@@ -0,0 +1,125 @@
+<template>
+  <div class="assess-config">
+    <div class="assess-header">
+      <div class="query mg-b-8">
+        <div class="query-items">
+          <div class="query-item">
+            <div class="lable">模型:</div>
+            <div class="search-input">
+              <el-input v-model="content"></el-input>
+            </div>
+          </div>
+        </div>
+        <div class="query-actions">
+          <button class="btn green mg-l-30" @click="onClickAdd">新增</button>
+        </div>
+      </div>
+    </div>
+
+    <div class="assess-bottom">
+      <ComTable :data="tableData" height="85vh"></ComTable>
+    </div>
+  </div>
+</template>
+
+<script>
+import ComTable from "@/components/coms/table/table-unpage.vue";
+
+export default {
+  components: { ComTable },
+  data() {
+    const that = this;
+    return {
+      content: "",
+      tableData: {
+        column: [
+          {
+            name: "名称",
+            field: "targetname",
+            is_light: false,
+          },
+          {
+            name: "时间",
+            field: "safecontent",
+            is_light: false,
+          },
+          {
+            name: "场站",
+            field: "describe",
+            is_num: false,
+            is_light: false,
+          },
+          {
+            name: "是否启用",
+            field: "principal",
+            is_num: false,
+            is_light: false,
+          },
+          {
+            name: "操作",
+            field: "addtime",
+            is_num: false,
+            is_light: false,
+            width: 10,
+            template: () => {
+              return (
+                "<el-button type='text' style='cursor: pointer;' value='xq'>编辑</el-button>&nbsp" +
+                "<el-button type='text' style='cursor: pointer;' value='ls'>删除</el-button>&nbsp" +
+                "<el-button type='text' style='cursor: pointer;' value='ls'>配置</el-button>&nbsp"
+              );
+            },
+            click(e, row) {
+              that.onClickOption(e, row);
+            },
+          },
+        ],
+        data: [],
+      },
+    };
+  },
+  created() {
+    this.requestList();
+  },
+  methods: {
+    // 新增按钮
+    onClickAdd() {},
+    // 获取按错内容
+    requestList() {
+      let that = this;
+      this.API.requestData({
+        method: "GET",
+        baseURL: "http://10.155.32.4:8034/",
+        subUrl: "/evaluation/modelMainList",
+        data: {
+          name: "sdf",
+        },
+        success(res) {},
+      });
+    },
+  },
+};
+</script>
+
+<style lang="less" scope>
+.assess-config {
+  display: flex;
+  flex-direction: column;
+
+  .el-select {
+    width: 200px;
+  }
+  .el-input {
+    width: 200px;
+  }
+
+  .mg-l-30 {
+    margin-left: 30px;
+  }
+
+  .assess-header {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-start;
+  }
+}
+</style>

+ 2 - 2
src/views/HealthControl/gradeassessment.vue

@@ -91,8 +91,8 @@
 </template>
 <script>
 import ComTable from "@/components/coms/table/table-unpage.vue";
-import Dayinfo from "./dayinfo.vue";
-import GradeHistory from "./gradeHistory.vue";
+import Dayinfo from "../dayinfo.vue";
+import GradeHistory from "../gradeHistory.vue";
 
 export default {
   name: "gradeassessment",

+ 267 - 2
src/views/HealthControl/fault-diagnosis.vue

@@ -31,7 +31,7 @@
             </div>
         </div>
         <div class="white font-md mg-t-16">测点选择</div>
-        <el-checkbox-group v-model="checkList" text-color="#05bb4c" fill="#05bb4c">
+        <el-checkbox-group v-model="checkList" text-color="#05bb4c" fill="#05bb4c" @change="check">
             <el-checkbox class="cb-item" label="C01">转子位置,值为:{{checkValue.C01}}</el-checkbox>
             <el-checkbox class="cb-item" label="C02">机舱震动×方向 ,值为:{{checkValue.C02}}</el-checkbox>
             <el-checkbox class="cb-item" label="C03">机舱震动×方向 ,值为:{{checkValue.C03}}</el-checkbox>
@@ -58,7 +58,7 @@
         </div>
         <div class="white font-md mg-t-16">风机故障回溯</div>
         <div class="fdp-sub-title font-sm">国电电力宁夏新能源集控系统</div>
-        <multiple-y-line-chart ref="chart" class="fdp-chart" height="32.407vh" :showLegend="true" />
+        <multiple-y-line-chart ref="chart" class="fdp-chart" height="32.407vh" :yAxises="yAxis" :list="lineData" :showLegend="true" />
     </div>
 </template>
 
@@ -68,6 +68,255 @@ export default {
     components: {MultipleYLineChart},
     data() {
         return {
+            yAxis: [
+                {
+                    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",
+                },
+            ],
+            lineData: [
+                {
+                    title: "机舱震动x方向",
+                    yAxisIndex: 0,
+                    value: [
+                        {
+                            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,
+                        },
+                        {
+                            text: "-0.003",
+                            value: -0.003,
+                        },
+                        {
+                            text: "-0.002",
+                            value: -0.002,
+                        },
+                        {
+                            text: "-0.003",
+                            value: -0.006,
+                        },
+                    ],
+                },
+                {
+                    title: "机舱震动y方向",
+                    yAxisIndex: 1,
+                    value: [
+                        {
+                            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,
+                        },
+                        {
+                            text: "-0.01",
+                            value: -0.01,
+                        },
+                        {
+                            text: "-0.005",
+                            value: -0.005,
+                        },
+                        {
+                            text: "-0.008",
+                            value: -0.008,
+                        },
+                    ],
+                },
+                {
+                    title: "机舱震动最大偏移值",
+                    yAxisIndex: 2,
+                    value: [
+                        {
+                            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,
+                        },
+                        {
+                            text: "1",
+                            value: 1,
+                        },
+                        {
+                            text: "0.05",
+                            value: 0.05,
+                        },
+                        {
+                            text: "0.5",
+                            value: 0.5,
+                        },
+                    ],
+                },
+                {
+                    title: "风速1",
+                    yAxisIndex: 3,
+                    value: [
+                        {
+                            text: "1",
+                            value: 1,
+                        },
+                        {
+                            text: "5",
+                            value: 5,
+                        },
+                        {
+                            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",
+                    yAxisIndex: 4,
+                    value: [
+                        {
+                            text: "1",
+                            value: 1,
+                        },
+                        {
+                            text: "2",
+                            value: 2,
+                        },
+                        {
+                            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,
+                        },
+                    ],
+                },
+            ],
             options: [
                 {
                     value: "选项1",
@@ -114,6 +363,8 @@ export default {
             animationFrameId: null,
             start: 0,
             end: 10,
+            temp: null,
+            temp1: null,
         };
     },
     // 函数
@@ -167,6 +418,20 @@ export default {
                 this.endAnimate();
             }
         },
+        check: function () {
+            if (this.temp) {
+                this.lineData.splice(4, 0, this.temp);
+                this.yAxis.splice(4, 0, this.temp1);
+                this.temp = null;
+                this.temp1 = null;
+            } else {
+                this.temp = this.lineData[4];
+                this.temp1 = this.yAxis[4];
+                this.lineData.splice(4, 1);
+                this.yAxis.splice(4, 1);
+            }
+            this.$refs.chart.reload();
+        },
     },
 };
 </script>

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

@@ -161,12 +161,12 @@
             <tr class="">
               <td class="text gray">MTBF(日)</td>
               <td class="value green">{{jczbmap.mtbf}}</td>
-              <td class="unit gray"></td>
+              <td class="unit gray">小时</td>
             </tr>
             <tr class="">
               <td class="text gray">MTTR(日)</td>
               <td class="value green">{{jczbmap.mttr}}</td>
-              <td class="unit gray"></td>
+              <td class="unit gray">小时</td>
             </tr>
           </table>
         </com-panel>

+ 180 - 47
src/views/Home/components/map.vue

@@ -4,27 +4,56 @@
     <div class="security-days">
       <div class="text">安全天数:</div>
       <div class="num">
-        <span class="font-num">{{safeDay}}</span>
+        <span class="font-num">{{ safeDay }}</span>
         <span class="unit">天</span>
       </div>
     </div>
-    <div class="tab-box">
-      <div class="tab-item" v-for="(tab, index) of tabs" :key="index" :class="{ active: activeTab == index }" @click.stop="selectTab(index, tab.show)">
-        <span class="svg-icon svg-icon-sm" :class="activeTab == index ? 'svg-icon-green' : 'svg-icon-write'">
+    <div class="tab-box" v-if="currentMode == 'NX'">
+      <div
+        class="tab-item"
+        v-for="(tab, index) of tabs"
+        :key="index"
+        :class="{ active: activeTab == index }"
+        @click.stop="selectTab(index, tab.show)"
+      >
+        <span
+          class="svg-icon svg-icon-sm"
+          :class="activeTab == index ? 'svg-icon-green' : 'svg-icon-write'"
+        >
           <SvgIcon :svgid="tab.icon"></SvgIcon>
         </span>
         <span>{{ tab.text }}</span>
       </div>
     </div>
-    <!-- <div class="return" @click="backMap" v-show="mapName !== 'nx'">
+    <div class="name-box" v-if="currentMode != 'NX'">
+      <div class="name-box-title">{{ currentTitle }}</div>
+      <div class="name-box-period" v-show="currentPeriod != 'ZERO'">
+        <span class="name-box-period-label">期次:</span>
+        <span class="name-box-period-value"
+          >{{ currentName }}{{ currentPeriod }}</span
+        >
+      </div>
+    </div>
+    <div class="return" @click="backMap('0', '全部')" v-show="mapIndex != -1">
       <span class="svg-icon svg-icon-sm">
         <svg-icon :svgid="'svg-arrow-dpwn-1'" />
       </span>
       返回
-    </div> -->
+    </div>
     <!-- 指南针 -->
     <div class="compass">
-      <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="200px" height="200px" viewBox="0 0 200 200" enable-background="new 0 0 200 200" xml:space="preserve">
+      <svg
+        version="1.1"
+        xmlns="http://www.w3.org/2000/svg"
+        xmlns:xlink="http://www.w3.org/1999/xlink"
+        x="0px"
+        y="0px"
+        width="200px"
+        height="200px"
+        viewBox="0 0 200 200"
+        enable-background="new 0 0 200 200"
+        xml:space="preserve"
+      >
         <g id="渐变">
           <path
             fill-rule="evenodd"
@@ -74,18 +103,63 @@
           </g>
         </g>
         <g id="图层_1">
-          <polyline fill="#606769" points="59.177,142.682 113.678,116.092 84.673,87.663" />
+          <polyline
+            fill="#606769"
+            points="59.177,142.682 113.678,116.092 84.673,87.663"
+          />
         </g>
         <g id="图层_7">
-          <polygon fill="#BD3338" points="139.496,60.156 114.004,115.172 85.004,86.745" />
+          <polygon
+            fill="#BD3338"
+            points="139.496,60.156 114.004,115.172 85.004,86.745"
+          />
         </g>
       </svg>
     </div>
     <div class="map-img">
       <!-- 宁夏地图总览 -->
-      <SvgMapNX v-if="mapName === 'nx'" :show="showType" :data="sourceMap" :xtData="xtMap" @clickLabel="clickLabel"></SvgMapNX>
+      <SvgMapNX
+        v-if="mapName === 'nx'"
+        :show="showType"
+        :data="sourceMap"
+        :xtData="xtMap"
+        @clickLabel="clickLabel"
+      ></SvgMapNX>
       <!-- 麻黄山风电场 -->
-      <MHSFDC v-if="mapName === 'MHS_FDC'" :data="sourceMap" @clickFj="clickFj"></MHSFDC>
+      <MHSFDC
+        v-if="mapName === 'MHS_FDC'"
+        :data="sourceMap"
+        @clickFj="clickFj"
+        @changePeriod="changePeriod"
+      ></MHSFDC>
+      <!-- 香山风电场 -->
+      <XSFDC
+        v-if="mapName === 'XS_FDC'"
+        :data="sourceMap"
+        @clickFj="clickFj"
+        @changePeriod="changePeriod"
+      ></XSFDC>
+      <!-- 牛首山风电场 -->
+      <NSSFDC
+        v-if="mapName === 'NSS_FDC'"
+        :data="sourceMap"
+        @clickFj="clickFj"
+        @changePeriod="changePeriod"
+      ></NSSFDC>
+      <!-- 青山风电场 -->
+      <QSFDC
+        v-if="mapName === 'QS_FDC'"
+        :data="sourceMap"
+        @clickFj="clickFj"
+        @changePeriod="changePeriod"
+      ></QSFDC>
+      <!-- 石板泉风电场 -->
+      <SBQFDC
+        v-if="mapName === 'SBQ_FDC'"
+        :data="sourceMap"
+        @clickFj="clickFj"
+        @changePeriod="changePeriod"
+      ></SBQFDC>
     </div>
   </div>
 </template>
@@ -96,6 +170,14 @@ import SvgMapNX from "./map/svg-map-nx.vue";
 
 // 麻黄山风电场
 import MHSFDC from "./map/MHS_FDC.vue";
+// 香山风电场
+import XSFDC from "./map/XS_FDC.vue";
+// 牛首山风电场
+import NSSFDC from "./map/NSS_FDC.vue";
+// 青山风电场
+import QSFDC from "./map/QS_FDC.vue";
+// 石板泉风电场
+import SBQFDC from "./map/SBQ_FDC.vue";
 
 import SvgIcon from "../../../components/coms/icon/svg-icon.vue";
 import compassIcon from "@/assets/icon/svg_fill/compass.svg";
@@ -106,28 +188,32 @@ export default {
   components: {
     SvgMapNX,
     MHSFDC,
+    XSFDC,
+    NSSFDC,
+    QSFDC,
+    SBQFDC,
     SvgIcon,
   },
-  props:{
-    wpId:{
-      type:String,
-      default:"0"
+  props: {
+    wpId: {
+      type: String,
+      default: "0",
     },
-    day:{
-      type:String,
-      default:"---"
+    day: {
+      type: String,
+      default: "---",
     },
-    data:{
-      type:Object,
-      default:() => {}
+    data: {
+      type: Object,
+      default: () => {},
+    },
+    xtData: {
+      type: Object,
+      default: () => {},
     },
-    xtData:{
-      type:Object,
-      default:() => {}
-    }
   },
 
-  mounted(){
+  mounted() {
     this.fcId = this.wpId;
     this.safeDay = this.day;
     this.sourceMap = this.data;
@@ -136,32 +222,38 @@ export default {
   // 数据
   data() {
     return {
-      fcId:"",
-      safeDay:"",
+      fcId: "",
+      safeDay: "",
       showType: "all",
-      sourceMap:{},
+      sourceMap: {},
+      mapIndex: -1,
       tabs: [
         {
           icon: "svg-all",
           text: "全部",
-          show: "all"
+          show: "all",
         },
         {
           icon: "svg-wind-site",
           text: "风场",
-          show: "fc"
+          show: "fc",
         },
         {
           icon: "svg-photovoltaic",
           text: "电站",
-          show: "gf"
+          show: "gf",
         },
       ],
       compassIcon: compassIcon,
       activeTab: 0,
       img: require("@assets/map/map-nx.png"),
       nxSvgFile: require("@assets/map/map-nx.svg"),
+      nxmap: true,
       mapName: "nx",
+      currentMode: "NX",
+      currentTitle: "青山风电场",
+      currentName: "麻黄山",
+      currentPeriod: "一期",
     };
   },
   emits: {
@@ -173,37 +265,46 @@ export default {
     selectTab(index, showType) {
       this.activeTab = index;
       this.showType = showType;
-      let wpId = (showType === "all" ? "0" : showType === "fc" ? "-1" : "-2");
+      let wpId = showType === "all" ? "0" : showType === "fc" ? "-1" : "-2";
       this.safeDay = "---";
       this.mapName = "nx";
       this.$emit("mapClick", wpId, this.tabs[index].text);
     },
-    backMap() {
-      // this.mapName = "nx";
-      // this.$emit("mapClick", wpId);
+    backMap(wpId, planBtnName) {
+      this.currentMode = "NX";
+      this.mapName = "nx";
+      this.mapIndex = -1;
+      this.$emit("mapClick", wpId, planBtnName);
     },
     clickLabel(wpId, planBtnName) {
       this.mapName = wpId;
+      this.currentTitle = planBtnName;
+      this.mapIndex = 1;
       this.$emit("mapClick", wpId, planBtnName);
     },
-    clickFj(wpId, planBtnName){
+    clickFj(wpId, planBtnName) {
       this.$emit("mapClick", wpId, planBtnName);
-    }
+    },
+    changePeriod: function (name, period) {
+      this.currentName = name;
+      this.currentPeriod = period;
+      this.currentMode = "SUB";
+    },
   },
-  watch:{
-    wpId(res){
+  watch: {
+    wpId(res) {
       this.fcId = res;
     },
-    day(res){
+    day(res) {
       this.safeDay = res;
     },
-    data(res){
+    data(res) {
       this.sourceMap = res;
     },
-    xtData(res){
+    xtData(res) {
       this.xtMap = res;
-    }
-  }
+    },
+  },
 };
 </script>
 
@@ -245,6 +346,38 @@ export default {
     }
   }
 
+  .name-box {
+    margin: 1.852vh;
+    display: inline-block;
+    z-index: 2;
+    position: relative;
+
+    .name-box-title {
+      font-size: 2.222vh;
+      font-weight: 400;
+      color: #ffffff;
+      line-height: 1;
+    }
+
+    .name-box-period {
+      margin-top: 2.222vh;
+      .name-box-period-label,
+      .name-box-period-value {
+        font-size: 1.481vh;
+        font-weight: 400;
+        line-height: 1;
+      }
+
+      .name-box-period-label {
+        color: #fefefe;
+      }
+
+      .name-box-period-value {
+        color: #05bb4c;
+      }
+    }
+  }
+
   .tab-box {
     margin: 1.852vh 2.778vh;
     display: inline-block;
@@ -303,12 +436,12 @@ export default {
       svg {
         transform: rotate(90deg);
         use {
-          transition: all .3s;
+          transition: all 0.3s;
         }
       }
     }
 
-    transition: all .3s;
+    transition: all 0.3s;
 
     &:hover {
       color: @green;

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 525 - 408
src/views/Home/components/map/MHS_FDC.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 761 - 0
src/views/Home/components/map/NSS_FDC.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 724 - 0
src/views/Home/components/map/QS_FDC.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 844 - 0
src/views/Home/components/map/SBQ_FDC.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 591 - 0
src/views/Home/components/map/XS_FDC.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 373
src/views/Home/components/map/svg-map-xs.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 474 - 403
src/views/Home/components/map/svg-map.vue


+ 0 - 7
src/views/LightMatrix/LightMatrix.vue

@@ -316,25 +316,18 @@ export default {
       switch (fjzt) {
         case 0:
           return "green";
-          break;
         case 1:
           return "blue";
-          break;
         case 2:
           return "red";
-          break;
         case 3:
           return "gray";
-          break;
         case 4:
           return "orange";
-          break;
         case 5:
           return "pink";
-          break;
         case 6:
           return "pink";
-          break;
       }
     },
 

+ 4 - 0
src/views/WindSite/WindSite.vue

@@ -89,6 +89,10 @@ export default {
           icon: "svg-matrix",
           path: "/monitor/windsite/boosterstation",
         },
+        {
+          icon: "svg-matrix",
+          path: "/monitor/windsite/map",
+        },
       ],
     };
   },

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1673 - 0
src/views/WindSite/components/boosterstation/mch/BoosterStation.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1349 - 0
src/views/WindSite/components/boosterstation/mch/mch.vue


+ 697 - 0
src/views/WindSite/components/boosterstation/mch/previewPicture.vue

@@ -0,0 +1,697 @@
+<template>
+	<div class="pop-up-main">
+		<div class="paln-box">
+			<div class="movableItem" :style="{width:width,height:height}" @mousewheel="rollImg($event)"
+				@mousedown="drag($event,1)" ref="bigImage">
+				<!-- 图片不可选中 或不可拖拽到新标签打开-->
+				<slot name="svg" oncontextmenu="return false;" onselectstart="return false;" draggable="false"></slot>
+				<template v-if="isEdit &&iconWidth">
+					<img ref="signImage" :src="iconImgUrl" @mousedown="dragSign($event,key)"
+						v-for="(item,key) in equipment" :key="key"
+						:style="{top:equipment[key].top+'%',left:equipment[key].left+'%',width:iconWidth,height:iconHeight}"
+						class="equipment" />
+				</template>
+				<el-popover width="200" placement="bottom-start" trigger="hover" :close-delay="100" content="暂无描述"
+					v-else-if="!isEdit&&iconWidth &&arrIcon.length==equipment.length " v-for="(item,key) in equipment"
+					:key="key" popper-class="preview-popover">
+					<!-- &&arrIcon.length==equipment.length -->
+					<template>
+						<div v-if="equipment[key].describe" class="describe">
+							<p class="describe-top">{{equipment[key].describe.deviceName}}</p>
+							<p class="describe-center">{{equipment[key].describe.remark}}</p>
+							<p class="describe-bottom">{{equipment[key].describe.location}}</p>
+						</div>
+					</template>
+					<!-- <img oncontextmenu="return false;" onselectstart="return false;" draggable="false" slot="reference"
+						ref="signImage" :src="$baseUrl + equipment[key].iconImgUrl"
+						:style="{top:equipment[key].top+'%',left:equipment[key].left+'%',width:arrIcon[key].iconWidth,height:arrIcon[key].iconHeight}"
+						class="equipment" /> -->
+				</el-popover>
+			</div>
+		</div>
+	</div>
+</template>
+<script>
+	export default {
+		props: {
+			equipment: {
+				type: Array,
+				default: () => {
+					return [{
+						iconImgUrl: "",
+						top: 0,
+						left: 0,
+					}, ];
+				},
+			},
+			isEdit: {
+				default: false,
+			},
+			imgUrl: {},
+		},
+
+		data() {
+			return {
+				// 定时器
+				timer: "",
+				// 图片加载失败
+				imgOnerror: false,
+				imgIndex: 0,
+				isChange: true,
+				// 图片显示默认大小
+				width: "1400px",
+				height: "850px",
+				// 可缩小倍数,为空则可无限缩小
+				minification: 3,
+				// 可放大倍数 为空则可无限放大
+				magnification: "",
+				bigMaxWidth: 1600,
+				bigMaxHeight: 800,
+
+				// 小图标信息
+				iconImgUrl: "",
+				iconWidth: "",
+				// 存储每个小图标处理好的宽高
+				iconHeight: "",
+				arrIcon: [],
+				iconMaxWidth: 32,
+				iconMaxHeight: 32,
+				tog: 1,
+			};
+		},
+		methods: {
+			// 获取图片大小
+			getImgInfo(
+				imgUrl,
+				MaxWidth,
+				MaxHeight,
+				StrWidth,
+				StrHeight,
+				Array = false,
+				arr,
+				num = 0
+			) {
+				var img = new Image();
+
+				// img.src = imgUrl;
+				img = document.getElementsByClassName("svg")
+				let _this = this;
+				img.onerror = () => {
+					// console.log("加载失败!!", _this.arrIcon.length);
+					console.log(imgUrl, MaxWidth, MaxHeight, StrWidth, StrHeight);
+					_this.imgOnerror = true;
+					_this.imgIndex =
+						_this.arrIcon.length - 1 < 0 ? 0 : _this.arrIcon.length - 1;
+					this.timer = setTimeout(() => {
+						if (num <= 5) {
+							_this.getImgInfo(
+								imgUrl,
+								MaxWidth,
+								MaxHeight,
+								StrWidth,
+								StrHeight,
+								Array,
+								arr,
+								num + 1
+							);
+						}
+						clearInterval(this.timer);
+					}, 2000);
+				};
+				img.onload = function(e) {
+					//  显示时 初始 最大宽度
+					let maxWidth = MaxWidth;
+					//  显示时 初始 最大高度
+					let maxHeight = MaxHeight;
+					if (
+						e.path[0].naturalWidth <= maxWidth &&
+						e.path[0].naturalHeight <= maxHeight
+					) {
+						_this[StrWidth] = e.path[0].naturalWidth + "px";
+						_this[StrHeight] = e.path[0].naturalHeight + "px";
+					} else {
+						_this[StrWidth] = e.path[0].naturalWidth + "px";
+						_this[StrHeight] = e.path[0].naturalHeight + "px";
+						if (
+							e.path[0].naturalWidth > maxWidth &&
+							e.path[0].naturalHeight <= maxHeight
+						) {
+							let ratio = e.path[0].naturalWidth / e.path[0].naturalHeight;
+							_this[StrWidth] = "1600px";
+							_this[StrHeight] = maxWidth / ratio + "px";
+						} else if (
+							e.path[0].naturalWidth <= maxWidth &&
+							e.path[0].naturalHeight > maxHeight
+						) {
+							let ratio = e.path[0].naturalWidth / e.path[0].naturalHeight;
+							_this[StrWidth] = maxHeight * ratio + "px";
+							_this[StrHeight] = "800px";
+						} else if (
+							e.path[0].naturalWidth > maxWidth &&
+							e.path[0].naturalHeight > maxHeight
+						) {
+							let ratio = e.path[0].naturalWidth / e.path[0].naturalHeight;
+							let w = maxWidth;
+							let h = w / ratio;
+							if (h > maxHeight) {
+								let ratio2 = w / h;
+								h = maxHeight;
+								w = h * ratio2;
+							}
+							_this[StrWidth] = w + "px";
+							_this[StrHeight] = h + "px";
+						}
+					}
+					if (Array) {
+						_this[arr].push({
+							iconWidth: _this[StrWidth],
+							iconHeight: _this[StrHeight],
+						});
+						console.log(
+							"tow#################################arrIcon",
+							_this[arr].length
+						);
+					}
+					// _this[StrWidth] = `${e.path[0].naturalWidth}px`;
+					// _this[StrHeight] = `${e.path[0].naturalHeight}px`;
+					// vm.$set(vm.imgInfo, "width", img.width);
+					// vm.$set(vm.imgInfo, "height", img.height);
+					// console.log("打印图片信息", imgUrl, _this[StrWidth], _this[StrHeight]); // 打印图片信息
+
+					// console.log("打印图片信息", e.path[0].naturalHeight); // 打印图片信息
+					// console.log("打印图片信息", e); // 打印图片信息
+					// console.log("打印图片信息this.width", _this[StrWidth]); // 打印图片信息
+					// console.log("打印图片信息this.height", _this[StrHeight]); // 打印图片信息
+				};
+			},
+			// 缩放
+			rollImg() {
+				var that = this;
+				// var oImg = document.getElementsByClassName("movableItem")[0];
+				var oImg = this.$refs.bigImage;
+				console.log(
+					"length",
+					document.getElementsByClassName("movableItem").length
+				);
+				console.log("oImg", oImg);
+				var _this = this;
+
+				function fnWheel(obj, fncc) {
+					obj.onmousewheel = fn;
+					if (obj.addEventListener) {
+						obj.addEventListener("DOMMouseScroll", fn, false);
+					}
+
+					function fn(ev) {
+						var oEvent = ev || window.event;
+						var down = true;
+						if (oEvent.detail) {
+							down = oEvent.detail > 0;
+						} else {
+							down = oEvent.wheelDelta < 0;
+						}
+						if (fncc) {
+							fncc.call(this, down, oEvent);
+						}
+						if (oEvent.preventDefault) {
+							oEvent.preventDefault();
+						}
+						return false;
+					}
+				}
+				fnWheel(oImg, function(down, oEvent) {
+					var oldWidth = this.offsetWidth;
+					var oldHeight = this.offsetHeight;
+					var oldLeft = this.offsetLeft;
+					var oldTop = this.offsetTop;
+					var parent = oEvent.path[2];
+					// 获取父元素距离页面可视区域的位置
+					var parentLeft = parent.getBoundingClientRect().left;
+					var parentTop = parent.getBoundingClientRect().top;
+					// 比例 = (点击位置距离可视窗口位置 - 父元素距离可视窗口位置 - 相对定位的left)/ 本身宽度
+					var scaleX = (oEvent.clientX - parentLeft - oldLeft) / oldWidth; //比例
+					var scaleY = (oEvent.clientY - parentTop - oldTop) / oldHeight;
+
+					let nowWidth = this.style.width.split("p")[0];
+					let initWidth = _this.width.split("p")[0];
+					let initHeight = _this.height.split("p")[0];
+
+					let miniFlag = true;
+					let magniFlag = true;
+					if (_this.minification) {
+						// 限制缩小范围
+						if (nowWidth <= parseInt(initWidth / _this.minification)) {
+							miniFlag = false;
+							console.log("限制缩小范围");
+							console.log(
+								"限制缩小范围",
+								nowWidth,
+								parseInt(initWidth / _this.minification)
+							);
+							this.style.width = parseInt(initWidth / _this.minification) + "px";
+							this.style.height =
+								parseInt(initHeight / _this.minification) + "px";
+						}
+						if (_this.magnification) {
+							// 限制放大范围
+							if (nowWidth >= parseInt(initWidth * _this.magnification)) {
+								magniFlag = false;
+								console.log("限制放大范围");
+								this.style.width =
+									parseInt(initWidth * _this.magnification) + "px";
+								this.style.height =
+									parseInt(initHeight * _this.magnification) + "px";
+							}
+						}
+					}
+
+					if (down && miniFlag) {
+						console.log("缩小");
+						this.style.width = parseInt(this.offsetWidth * 0.9) + "px";
+						this.style.height = parseInt(this.offsetHeight * 0.9) + "px";
+						
+						that.width = parseInt(this.offsetWidth * 0.9) + "px";
+						that.height = parseInt(this.offsetHeight * 0.9) + "px";
+					} else if (!down && magniFlag) {
+						console.log("放大");
+						this.style.width = parseInt(this.offsetWidth * 1.1) + "px";
+						this.style.height = parseInt(this.offsetHeight * 1.1) + "px";
+						that.width = parseInt(this.offsetWidth * 1.1) + "px";
+						that.height = parseInt(this.offsetHeight * 1.1) + "px";
+					}
+					var newWidth = this.offsetWidth;
+					var newHeight = this.offsetHeight;
+
+					// 新的相对位置left = 原先的相对位置left - 比例 *(本身新的宽度-旧的宽度)
+					this.style.left =
+						Math.round(this.offsetLeft - scaleX * (newWidth - oldWidth)) + "px";
+					this.style.top =
+						Math.round(this.offsetTop - scaleY * (newHeight - oldHeight)) + "px";
+				});
+				// console.log(that.width)
+			},
+			// },
+			//拖拽
+			drag(ev) {
+				// var ie = document.all;
+				// console.log(ev / 0);
+
+				var nn6 = document.getElementById && !document.all;
+				var isdrag = false;
+				var y, x;
+				var nTY, nTX;
+				var oDragObj;
+
+				function moveMouse(e) {
+					if (isdrag) {
+						oDragObj.style.top =
+							(nn6 ? nTY + e.clientY - y : nTY + event.clientY - y) + "px";
+						oDragObj.style.left =
+							(nn6 ? nTX + e.clientX - x : nTX + event.clientX - x) + "px";
+						return false;
+					}
+				}
+
+				function initDrag(e) {
+					// console.log("点击图片initDrag");
+					var oDragHandle = nn6 ? e.target : event.srcElement;
+					var topElement = "HTML";
+					while (
+						oDragHandle.tagName != topElement &&
+						oDragHandle.className != "movableItem"
+					) {
+						oDragHandle = nn6 ?
+							oDragHandle.parentNode :
+							oDragHandle.parentElement;
+					}
+					if (oDragHandle.className == "movableItem") {
+						isdrag = true;
+						oDragObj = oDragHandle;
+						// 父元素宽高
+						let width = e.path[2].offsetWidth;
+						let height = e.path[2].offsetHeight;
+						// 这里判断第一次获取不到style 样式 默认为 居中50%
+						if (oDragObj.style.top == "") {
+							// nTY = parseInt((50 * height) / 100 + 0);
+							nTY = 0;
+							nTX = parseInt((50 * width) / 100 + 0);
+						} else {
+							nTY = parseInt(oDragObj.style.top + 0);
+							nTX = parseInt(oDragObj.style.left + 0);
+						}
+						y = nn6 ? e.clientY : event.clientY;
+						x = nn6 ? e.clientX : event.clientX;
+						oDragObj.style.cursor = "move";
+						document.onmousemove = moveMouse;
+						return false;
+					}
+				}
+				document.onmousemove = initDrag;
+				// document.onmouseup = new Function("isdrag=false");
+				document.onmouseup = function(e) {
+					isdrag = false;
+					document.onmousemove = null;
+					document.onmouseup = null;
+					var oDragHandle = nn6 ? e.target : event.srcElement;
+					var topElement = "HTML";
+					while (
+						oDragHandle.tagName != topElement &&
+						oDragHandle.className != "movableItem"
+					) {
+						oDragHandle = nn6 ?
+							oDragHandle.parentNode :
+							oDragHandle.parentElement;
+					}
+					if (oDragHandle.className == "movableItem") {
+						oDragObj = oDragHandle;
+						oDragObj.style.cursor = "Default";
+					}
+				};
+				ev = event || window.event;
+
+				// 取消事件冒泡行为
+				// window.event ? (window.event.cancelBubble = true) : ev.stopPropagation();
+			},
+			// 拖拽标记
+			// eslint-disable-next-line no-unused-vars
+			dragSign(ev, key) {
+				var nn6 = document.getElementById && !document.all;
+				var isdrag = false;
+				var y, x;
+				var nTY, nTX;
+				var oDragObj;
+				let _this = this;
+
+				function moveMouse(e) {
+
+					if (isdrag) {
+						this.equipmentKey = key;
+						// console.log("thisequipmentKey", this.equipmentKey);
+
+						let widthItem = e.path[1].style.width.split("p");
+						let heightItem = e.path[1].style.height.split("p");
+						let width = widthItem[0];
+						// eslint-disable-next-line no-unused-vars
+						let height = heightItem[0];
+						let top =
+							((nn6 ?
+									(nTY / 100) * height + e.clientY - y :
+									(nTY / 100) * height + event.clientY - y) /
+								height) *
+							100;
+						let left =
+							((nn6 ?
+									(nTX / 100) * width + e.clientX - x :
+									(nTX / 100) * width + event.clientX - x) /
+								width) *
+							100;
+
+						if (top >= 0 && top <= 100) {
+							_this.equipment[key].top = top;
+						}
+						if (left >= 0 && left <= 100) {
+							_this.equipment[key].left = left;
+						}
+
+						return false;
+					}
+				}
+				// eslint-disable-next-line no-unused-vars
+				function initDrag(e) {
+					// console.log("_this", _this);
+					var oDragHandle = nn6 ? e.target : event.srcElement;
+					var topElement = "HTML";
+					while (
+						oDragHandle.tagName != topElement &&
+						oDragHandle.className.indexOf("equipment") == -1
+					) {
+						oDragHandle = nn6 ?
+							oDragHandle.parentNode :
+							oDragHandle.parentElement;
+					}
+					if (oDragHandle.className.indexOf("equipment") != -1) {
+						isdrag = true;
+						oDragObj = oDragHandle;
+						// 父元素宽高
+						let width = e.path[1].offsetWidth;
+						let height = e.path[1].offsetHeight;
+						// console.log(width, height);
+						console.log("oDragObj.style", oDragObj.style);
+						// 这里判断第一次获取不到style 样式 默认为 居中50%
+						if (oDragObj.style.top == "") {
+							nTY = parseInt((50 * height) / 100 + 0);
+							nTX = parseInt((50 * width) / 100 + 0);
+						} else if (oDragObj.style.top.indexOf("%") != -1) {
+							nTY = oDragObj.style.top.split("%")[0];
+							nTX = oDragObj.style.left.split("%")[0];
+						} else {
+							nTY = parseInt(oDragObj.style.top + 0);
+							nTX = parseInt(oDragObj.style.left + 0);
+						}
+						y = nn6 ? e.clientY : event.clientY;
+						x = nn6 ? e.clientX : event.clientX;
+
+						oDragObj.style.cursor = "move";
+						document.onmousemove = moveMouse;
+						return false;
+					}
+				}
+
+				// document.onmousedown = initDrag;
+				document.onmousemove = initDrag;
+
+				document.onmouseup = function(e) {
+					isdrag = false;
+					document.onmousemove = null;
+					document.onmouseup = null;
+					var oDragHandle = nn6 ? e.target : event.srcElement;
+					var topElement = "HTML";
+					while (
+						oDragHandle.tagName != topElement &&
+						oDragHandle.className != "equipment"
+					) {
+						oDragHandle = nn6 ?
+							oDragHandle.parentNode :
+							oDragHandle.parentElement;
+					}
+					if (oDragHandle.className == "equipment") {
+						oDragObj = oDragHandle;
+						oDragObj.style.cursor = "Default";
+					}
+				};
+
+				// _this.equipmentKey = key;
+				// _this.equipment[_this.equipmentKey].left = l;
+				// _this.equipment[_this.equipmentKey].top = t;
+				ev = event || window.event;
+
+				// 取消事件冒泡行为
+				window.event ? (window.event.cancelBubble = true) : ev.stopPropagation();
+			},
+		},
+		
+		watch: {
+			equipment() {
+				if (this.equipment.length != 0) {
+					this.arrIcon = [];
+					let finish = true;
+					this.equipment.filter((item) => {
+						if (!item.iconImgUrl) {
+							finish = false;
+						}
+						return true;
+					});
+					console.log("finish", finish);
+					if (finish) {
+						this.equipment.filter((item, index) => {
+							if (index >= this.imgIndex) {
+								console.log("iconImgUrl", this.equipment[index].iconImgUrl);
+								this.getImgInfo(
+									this.$baseUrl + item.iconImgUrl,
+									this.iconMaxWidth,
+									this.iconMaxHeight,
+									"iconWidth",
+									"iconHeight",
+									true,
+									"arrIcon"
+								);
+							}
+							// console.log("22filter", index);
+							return true;
+						});
+					}
+				}
+			},
+		},
+		created() {
+			this.getImgInfo(
+				this.imgUrl,
+				this.bigMaxWidth,
+				this.bigMaxHeight,
+				"width",
+				"height"
+			);
+			if (this.equipment.length != 0) {
+				this.arrIcon = [];
+				let finish = true;
+				this.equipment.filter((item) => {
+					if (!item.iconImgUrl) {
+						finish = false;
+					}
+					return true;
+				});
+				// console.log("finish", finish);
+				if (finish) {
+					this.equipment.filter((item, index) => {
+						if (index >= this.imgIndex) {
+							console.log("iconImgUrl", this.equipment[index].iconImgUrl);
+							this.getImgInfo(
+								this.$baseUrl + item.iconImgUrl,
+								this.iconMaxWidth,
+								this.iconMaxHeight,
+								"iconWidth",
+								"iconHeight",
+								true,
+								"arrIcon"
+							);
+						}
+						// console.log("22filter", index);
+						return true;
+					});
+				}
+			}
+
+			this.iconImgUrl = JSON.parse(
+				JSON.stringify(this.$baseUrl + this.equipment[0].iconImgUrl)
+			);
+			// console.log("imgUrl", this.imgUrl);
+			// console.log("equipment", this.equipment);
+			// //禁止鼠标右键
+			// document.oncontextmenu = function() {
+			//   return false;
+			// };
+		},
+	};
+</script>
+<style lang="less">
+	.preview-popover {
+		background-color: #d3edf7dd;
+		padding: 12px;
+
+		.popper__arrow::after {
+			border-bottom-color: #d3edf7dd !important;
+		}
+
+		.describe {
+			p {
+				padding-bottom: 5px;
+
+				&:last-child {
+					padding-bottom: 0px;
+				}
+			}
+
+			.describe-top {
+				// color: sandybrown;
+				// color: red;
+				color: rgb(21, 110, 110);
+			}
+
+			.describe-center {
+				color: rgb(79, 21, 206);
+			}
+
+			.describe-bottom {
+				color: rgb(30, 31, 29);
+			}
+		}
+	}
+</style>
+<style lang="less" scoped>
+	.pop-up-main {
+		width: 100%;
+		height: calc(100vh - 10vh);
+		overflow-y:hidden ;
+
+		.paln-box {
+			width: 100%;
+			height: 100%;
+			position: relative;
+
+			.movableItem {
+				position: absolute;
+				// top: 75%;
+				left: 50%;
+				transform: translate(-50%, -10%);
+
+				img,
+				.svg {
+					z-index: 1;
+					width: 100%;
+					height: 100%;
+				}
+
+				.equipment {
+					position: absolute;
+					top: 0;
+					left: 0;
+					transform: translate(-50%, -50%);
+					z-index: 2;
+					font-size: 40px;
+					// color: red;
+					// background: blue;
+					zoom: 1;
+				}
+			}
+
+			.shuaxin {
+				position: absolute;
+				z-index: 2;
+				font-size: 40px;
+				top: 20px;
+				left: 20px;
+				cursor: pointer;
+
+				&:hover {
+					color: yellowgreen;
+				}
+			}
+
+			.equipment {
+				color: white;
+			}
+
+			&/deep/.el-button {
+				z-index: 2;
+				position: absolute;
+				bottom: 60px;
+				right: 20px;
+				width: 60px;
+				height: 35px;
+
+				span {
+					display: inline-block;
+					position: absolute;
+					top: 50%;
+					left: 50%;
+					transform: translate(-50%, -50%);
+				}
+
+				i {
+					display: inline-block;
+					position: absolute;
+					top: 50%;
+					left: 25%;
+					transform: translate(-50%, -50%);
+				}
+			}
+		}
+	}
+
+	// body {
+	// 		height: 100%;
+	// 		overflow: hidden;
+	// 		margin: 0;
+	// 		padding: 0;
+	// 	}
+</style>

+ 732 - 0
src/views/WindSite/components/generalappearance/xh/previewPicture.vue

@@ -0,0 +1,732 @@
+<template>
+  <div class="pop-up-main">
+    <div class="paln-box">
+      <div
+        class="movableItem"
+        :style="{ width: width, height: height }"
+        @mousewheel="rollImg($event)"
+        @mousedown="drag($event, 1)"
+        ref="bigImage"
+      >
+        <!-- 图片不可选中 或不可拖拽到新标签打开-->
+        <slot
+          name="svg"
+          oncontextmenu="return false;"
+          onselectstart="return false;"
+          draggable="false"
+        ></slot>
+        <template v-if="isEdit && iconWidth">
+          <img
+            ref="signImage"
+            :src="iconImgUrl"
+            @mousedown="dragSign($event, key)"
+            v-for="(item, key) in equipment"
+            :key="key"
+            :style="{
+              top: equipment[key].top + '%',
+              left: equipment[key].left + '%',
+              width: iconWidth,
+              height: iconHeight,
+            }"
+            class="equipment"
+          />
+        </template>
+        <el-popover
+          width="200"
+          placement="bottom-start"
+          trigger="hover"
+          :close-delay="100"
+          content="暂无描述"
+          v-else-if="!isEdit && iconWidth && arrIcon.length == equipment.length"
+          v-for="(item, key) in equipment"
+          :key="key"
+          popper-class="preview-popover"
+        >
+          <!-- &&arrIcon.length==equipment.length -->
+          <template>
+            <div v-if="equipment[key].describe" class="describe">
+              <p class="describe-top">
+                {{ equipment[key].describe.deviceName }}
+              </p>
+              <p class="describe-center">
+                {{ equipment[key].describe.remark }}
+              </p>
+              <p class="describe-bottom">
+                {{ equipment[key].describe.location }}
+              </p>
+            </div>
+          </template>
+          <!-- <img oncontextmenu="return false;" onselectstart="return false;" draggable="false" slot="reference"
+						ref="signImage" :src="$baseUrl + equipment[key].iconImgUrl"
+						:style="{top:equipment[key].top+'%',left:equipment[key].left+'%',width:arrIcon[key].iconWidth,height:arrIcon[key].iconHeight}"
+						class="equipment" /> -->
+        </el-popover>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  props: {
+    equipment: {
+      type: Array,
+      default: () => {
+        return [
+          {
+            iconImgUrl: "",
+            top: 0,
+            left: 0,
+          },
+        ];
+      },
+    },
+    isEdit: {
+      default: false,
+    },
+    imgUrl: {},
+  },
+
+  data() {
+    return {
+      // 定时器
+      timer: "",
+      // 图片加载失败
+      imgOnerror: false,
+      imgIndex: 0,
+      isChange: true,
+      // 图片显示默认大小
+      width: "1400px",
+      height: "0px",
+      // 可缩小倍数,为空则可无限缩小
+      minification: 3,
+      // 可放大倍数 为空则可无限放大
+      magnification: "",
+      bigMaxWidth: 1600,
+      bigMaxHeight: 800,
+
+      // 小图标信息
+      iconImgUrl: "",
+      iconWidth: "",
+      // 存储每个小图标处理好的宽高
+      iconHeight: "",
+      arrIcon: [],
+      iconMaxWidth: 32,
+      iconMaxHeight: 32,
+      tog: 1,
+    };
+  },
+  methods: {
+    // 获取图片大小
+    getImgInfo(
+      imgUrl,
+      MaxWidth,
+      MaxHeight,
+      StrWidth,
+      StrHeight,
+      Array = false,
+      arr,
+      num = 0
+    ) {
+      var img = new Image();
+
+      // img.src = imgUrl;
+      img = document.getElementsByClassName("svg");
+      let _this = this;
+      img.onerror = () => {
+        // console.log("加载失败!!", _this.arrIcon.length);
+        // console.log(imgUrl, MaxWidth, MaxHeight, StrWidth, StrHeight);
+        _this.imgOnerror = true;
+        _this.imgIndex =
+          _this.arrIcon.length - 1 < 0 ? 0 : _this.arrIcon.length - 1;
+        this.timer = setTimeout(() => {
+          if (num <= 5) {
+            _this.getImgInfo(
+              imgUrl,
+              MaxWidth,
+              MaxHeight,
+              StrWidth,
+              StrHeight,
+              Array,
+              arr,
+              num + 1
+            );
+          }
+          clearInterval(this.timer);
+        }, 2000);
+      };
+      img.onload = function (e) {
+        //  显示时 初始 最大宽度
+        let maxWidth = MaxWidth;
+        //  显示时 初始 最大高度
+        let maxHeight = MaxHeight;
+        if (
+          e.path[0].naturalWidth <= maxWidth &&
+          e.path[0].naturalHeight <= maxHeight
+        ) {
+          _this[StrWidth] = e.path[0].naturalWidth + "px";
+          _this[StrHeight] = e.path[0].naturalHeight + "px";
+        } else {
+          _this[StrWidth] = e.path[0].naturalWidth + "px";
+          _this[StrHeight] = e.path[0].naturalHeight + "px";
+          if (
+            e.path[0].naturalWidth > maxWidth &&
+            e.path[0].naturalHeight <= maxHeight
+          ) {
+            let ratio = e.path[0].naturalWidth / e.path[0].naturalHeight;
+            _this[StrWidth] = "1600px";
+            _this[StrHeight] = maxWidth / ratio + "px";
+          } else if (
+            e.path[0].naturalWidth <= maxWidth &&
+            e.path[0].naturalHeight > maxHeight
+          ) {
+            let ratio = e.path[0].naturalWidth / e.path[0].naturalHeight;
+            _this[StrWidth] = maxHeight * ratio + "px";
+            _this[StrHeight] = "800px";
+          } else if (
+            e.path[0].naturalWidth > maxWidth &&
+            e.path[0].naturalHeight > maxHeight
+          ) {
+            let ratio = e.path[0].naturalWidth / e.path[0].naturalHeight;
+            let w = maxWidth;
+            let h = w / ratio;
+            if (h > maxHeight) {
+              let ratio2 = w / h;
+              h = maxHeight;
+              w = h * ratio2;
+            }
+            _this[StrWidth] = w + "px";
+            _this[StrHeight] = h + "px";
+          }
+        }
+        if (Array) {
+          _this[arr].push({
+            iconWidth: _this[StrWidth],
+            iconHeight: _this[StrHeight],
+          });
+          // console.log(
+          // 	"tow#################################arrIcon",
+          // 	_this[arr].length
+          // );
+        }
+        // _this[StrWidth] = `${e.path[0].naturalWidth}px`;
+        // _this[StrHeight] = `${e.path[0].naturalHeight}px`;
+        // vm.$set(vm.imgInfo, "width", img.width);
+        // vm.$set(vm.imgInfo, "height", img.height);
+        // console.log("打印图片信息", imgUrl, _this[StrWidth], _this[StrHeight]); // 打印图片信息
+
+        // console.log("打印图片信息", e.path[0].naturalHeight); // 打印图片信息
+        // console.log("打印图片信息", e); // 打印图片信息
+        // console.log("打印图片信息this.width", _this[StrWidth]); // 打印图片信息
+        // console.log("打印图片信息this.height", _this[StrHeight]); // 打印图片信息
+      };
+    },
+    // 缩放
+    rollImg() {
+      var that = this;
+      // var oImg = document.getElementsByClassName("movableItem")[0];
+      var oImg = this.$refs.bigImage;
+      // console.log(
+      // 	"length",
+      // 	document.getElementsByClassName("movableItem").length
+      // );
+      // console.log("oImg", oImg);
+      var _this = this;
+
+      function fnWheel(obj, fncc) {
+        obj.onmousewheel = fn;
+        if (obj.addEventListener) {
+          obj.addEventListener("DOMMouseScroll", fn, false);
+        }
+
+        function fn(ev) {
+          var oEvent = ev || window.event;
+          var down = true;
+          if (oEvent.detail) {
+            down = oEvent.detail > 0;
+          } else {
+            down = oEvent.wheelDelta < 0;
+          }
+          if (fncc) {
+            fncc.call(this, down, oEvent);
+          }
+          if (oEvent.preventDefault) {
+            oEvent.preventDefault();
+          }
+          return false;
+        }
+      }
+      fnWheel(oImg, function (down, oEvent) {
+        var oldWidth = this.offsetWidth;
+        var oldHeight = this.offsetHeight;
+        var oldLeft = this.offsetLeft;
+        var oldTop = this.offsetTop;
+        var parent = oEvent.path[2];
+        // 获取父元素距离页面可视区域的位置
+        var parentLeft = parent.getBoundingClientRect().left;
+        var parentTop = parent.getBoundingClientRect().top;
+        // 比例 = (点击位置距离可视窗口位置 - 父元素距离可视窗口位置 - 相对定位的left)/ 本身宽度
+        var scaleX = (oEvent.clientX - parentLeft - oldLeft) / oldWidth; //比例
+        var scaleY = (oEvent.clientY - parentTop - oldTop) / oldHeight;
+
+        let nowWidth = this.style.width.split("p")[0];
+        let initWidth = _this.width.split("p")[0];
+        let initHeight = _this.height.split("p")[0];
+
+        let miniFlag = true;
+        let magniFlag = true;
+        if (_this.minification) {
+          // 限制缩小范围
+          if (nowWidth <= parseInt(initWidth / _this.minification)) {
+            miniFlag = false;
+            // console.log("限制缩小范围");
+            // console.log(
+            // 	"限制缩小范围",
+            // 	nowWidth,
+            // 	parseInt(initWidth / _this.minification)
+            // );
+            this.style.width = parseInt(initWidth / _this.minification) + "px";
+            this.style.height =
+              parseInt(initHeight / _this.minification) + "px";
+          }
+          if (_this.magnification) {
+            // 限制放大范围
+            if (nowWidth >= parseInt(initWidth * _this.magnification)) {
+              magniFlag = false;
+              // console.log("限制放大范围");
+              this.style.width =
+                parseInt(initWidth * _this.magnification) + "px";
+              this.style.height =
+                parseInt(initHeight * _this.magnification) + "px";
+            }
+          }
+        }
+
+        if (down && miniFlag) {
+          // console.log("缩小");
+          this.style.width = parseInt(this.offsetWidth * 0.9) + "px";
+          this.style.height = parseInt(this.offsetHeight * 0.9) + "px";
+
+          that.width = parseInt(this.offsetWidth * 0.9) + "px";
+          that.height = parseInt(this.offsetHeight * 0.9) + "px";
+        } else if (!down && magniFlag) {
+          // console.log("放大");
+          this.style.width = parseInt(this.offsetWidth * 1.1) + "px";
+          this.style.height = parseInt(this.offsetHeight * 1.1) + "px";
+          that.width = parseInt(this.offsetWidth * 1.1) + "px";
+          that.height = parseInt(this.offsetHeight * 1.1) + "px";
+        }
+        var newWidth = this.offsetWidth;
+        var newHeight = this.offsetHeight;
+
+        // 新的相对位置left = 原先的相对位置left - 比例 *(本身新的宽度-旧的宽度)
+        this.style.left =
+          Math.round(this.offsetLeft - scaleX * (newWidth - oldWidth)) + "px";
+        this.style.top =
+          Math.round(this.offsetTop - scaleY * (newHeight - oldHeight)) + "px";
+      });
+      // console.log(that.width)
+    },
+    // },
+    //拖拽
+    drag(ev) {
+      // var ie = document.all;
+      // console.log(ev / 0);
+
+      var nn6 = document.getElementById && !document.all;
+      var isdrag = false;
+      var y, x;
+      var nTY, nTX;
+      var oDragObj;
+
+      function moveMouse(e) {
+        if (isdrag) {
+          oDragObj.style.top =
+            (nn6 ? nTY + e.clientY - y : nTY + event.clientY - y) + "px";
+          oDragObj.style.left =
+            (nn6 ? nTX + e.clientX - x : nTX + event.clientX - x) + "px";
+          return false;
+        }
+      }
+
+      function initDrag(e) {
+        // console.log("点击图片initDrag");
+        var oDragHandle = nn6 ? e.target : event.srcElement;
+        var topElement = "HTML";
+        while (
+          oDragHandle.tagName != topElement &&
+          oDragHandle.className != "movableItem"
+        ) {
+          oDragHandle = nn6
+            ? oDragHandle.parentNode
+            : oDragHandle.parentElement;
+        }
+        if (oDragHandle.className == "movableItem") {
+          isdrag = true;
+          oDragObj = oDragHandle;
+          // 父元素宽高
+          let width = e.path[2].offsetWidth;
+          let height = e.path[2].offsetHeight;
+          // 这里判断第一次获取不到style 样式 默认为 居中50%
+          if (oDragObj.style.top == "") {
+            // nTY = parseInt((50 * height) / 100 + 0);
+            nTY = 0;
+            nTX = parseInt((50 * width) / 100 + 0);
+          } else {
+            nTY = parseInt(oDragObj.style.top + 0);
+            nTX = parseInt(oDragObj.style.left + 0);
+          }
+          y = nn6 ? e.clientY : event.clientY;
+          x = nn6 ? e.clientX : event.clientX;
+          oDragObj.style.cursor = "move";
+          document.onmousemove = moveMouse;
+          return false;
+        }
+      }
+      document.onmousemove = initDrag;
+      // document.onmouseup = new Function("isdrag=false");
+      document.onmouseup = function (e) {
+        isdrag = false;
+        document.onmousemove = null;
+        document.onmouseup = null;
+        var oDragHandle = nn6 ? e.target : event.srcElement;
+        var topElement = "HTML";
+        while (
+          oDragHandle.tagName != topElement &&
+          oDragHandle.className != "movableItem"
+        ) {
+          oDragHandle = nn6
+            ? oDragHandle.parentNode
+            : oDragHandle.parentElement;
+        }
+        if (oDragHandle.className == "movableItem") {
+          oDragObj = oDragHandle;
+          oDragObj.style.cursor = "Default";
+        }
+      };
+      ev = event || window.event;
+
+      // 取消事件冒泡行为
+      // window.event ? (window.event.cancelBubble = true) : ev.stopPropagation();
+    },
+    // 拖拽标记
+    // eslint-disable-next-line no-unused-vars
+    dragSign(ev, key) {
+      var nn6 = document.getElementById && !document.all;
+      var isdrag = false;
+      var y, x;
+      var nTY, nTX;
+      var oDragObj;
+      let _this = this;
+
+      function moveMouse(e) {
+        if (isdrag) {
+          this.equipmentKey = key;
+          // console.log("thisequipmentKey", this.equipmentKey);
+
+          let widthItem = e.path[1].style.width.split("p");
+          let heightItem = e.path[1].style.height.split("p");
+          let width = widthItem[0];
+          // eslint-disable-next-line no-unused-vars
+          let height = heightItem[0];
+          let top =
+            ((nn6
+              ? (nTY / 100) * height + e.clientY - y
+              : (nTY / 100) * height + event.clientY - y) /
+              height) *
+            100;
+          let left =
+            ((nn6
+              ? (nTX / 100) * width + e.clientX - x
+              : (nTX / 100) * width + event.clientX - x) /
+              width) *
+            100;
+
+          if (top >= 0 && top <= 100) {
+            _this.equipment[key].top = top;
+          }
+          if (left >= 0 && left <= 100) {
+            _this.equipment[key].left = left;
+          }
+
+          return false;
+        }
+      }
+      // eslint-disable-next-line no-unused-vars
+      function initDrag(e) {
+        // console.log("_this", _this);
+        var oDragHandle = nn6 ? e.target : event.srcElement;
+        var topElement = "HTML";
+        while (
+          oDragHandle.tagName != topElement &&
+          oDragHandle.className.indexOf("equipment") == -1
+        ) {
+          oDragHandle = nn6
+            ? oDragHandle.parentNode
+            : oDragHandle.parentElement;
+        }
+        if (oDragHandle.className.indexOf("equipment") != -1) {
+          isdrag = true;
+          oDragObj = oDragHandle;
+          // 父元素宽高
+          let width = e.path[1].offsetWidth;
+          let height = e.path[1].offsetHeight;
+          // console.log(width, height);
+          console.log("oDragObj.style", oDragObj.style);
+          // 这里判断第一次获取不到style 样式 默认为 居中50%
+          if (oDragObj.style.top == "") {
+            nTY = parseInt((50 * height) / 100 + 0);
+            nTX = parseInt((50 * width) / 100 + 0);
+          } else if (oDragObj.style.top.indexOf("%") != -1) {
+            nTY = oDragObj.style.top.split("%")[0];
+            nTX = oDragObj.style.left.split("%")[0];
+          } else {
+            nTY = parseInt(oDragObj.style.top + 0);
+            nTX = parseInt(oDragObj.style.left + 0);
+          }
+          y = nn6 ? e.clientY : event.clientY;
+          x = nn6 ? e.clientX : event.clientX;
+
+          oDragObj.style.cursor = "move";
+          document.onmousemove = moveMouse;
+          return false;
+        }
+      }
+
+      // document.onmousedown = initDrag;
+      document.onmousemove = initDrag;
+
+      document.onmouseup = function (e) {
+        isdrag = false;
+        document.onmousemove = null;
+        document.onmouseup = null;
+        var oDragHandle = nn6 ? e.target : event.srcElement;
+        var topElement = "HTML";
+        while (
+          oDragHandle.tagName != topElement &&
+          oDragHandle.className != "equipment"
+        ) {
+          oDragHandle = nn6
+            ? oDragHandle.parentNode
+            : oDragHandle.parentElement;
+        }
+        if (oDragHandle.className == "equipment") {
+          oDragObj = oDragHandle;
+          oDragObj.style.cursor = "Default";
+        }
+      };
+
+      // _this.equipmentKey = key;
+      // _this.equipment[_this.equipmentKey].left = l;
+      // _this.equipment[_this.equipmentKey].top = t;
+      ev = event || window.event;
+
+      // 取消事件冒泡行为
+      window.event ? (window.event.cancelBubble = true) : ev.stopPropagation();
+    },
+  },
+
+  watch: {
+    equipment() {
+      if (this.equipment.length != 0) {
+        this.arrIcon = [];
+        let finish = true;
+        this.equipment.filter((item) => {
+          if (!item.iconImgUrl) {
+            finish = false;
+          }
+          return true;
+        });
+        console.log("finish", finish);
+        if (finish) {
+          this.equipment.filter((item, index) => {
+            if (index >= this.imgIndex) {
+              console.log("iconImgUrl", this.equipment[index].iconImgUrl);
+              this.getImgInfo(
+                this.$baseUrl + item.iconImgUrl,
+                this.iconMaxWidth,
+                this.iconMaxHeight,
+                "iconWidth",
+                "iconHeight",
+                true,
+                "arrIcon"
+              );
+            }
+            // console.log("22filter", index);
+            return true;
+          });
+        }
+      }
+    },
+  },
+  created() {
+    this.getImgInfo(
+      this.imgUrl,
+      this.bigMaxWidth,
+      this.bigMaxHeight,
+      "width",
+      "height"
+    );
+    if (this.equipment.length != 0) {
+      this.arrIcon = [];
+      let finish = true;
+      this.equipment.filter((item) => {
+        if (!item.iconImgUrl) {
+          finish = false;
+        }
+        return true;
+      });
+      // console.log("finish", finish);
+      if (finish) {
+        this.equipment.filter((item, index) => {
+          if (index >= this.imgIndex) {
+            console.log("iconImgUrl", this.equipment[index].iconImgUrl);
+            this.getImgInfo(
+              this.$baseUrl + item.iconImgUrl,
+              this.iconMaxWidth,
+              this.iconMaxHeight,
+              "iconWidth",
+              "iconHeight",
+              true,
+              "arrIcon"
+            );
+          }
+          // console.log("22filter", index);
+          return true;
+        });
+      }
+    }
+
+    this.iconImgUrl = JSON.parse(
+      JSON.stringify(this.$baseUrl + this.equipment[0].iconImgUrl)
+    );
+    // console.log("imgUrl", this.imgUrl);
+    // console.log("equipment", this.equipment);
+    // //禁止鼠标右键
+    // document.oncontextmenu = function() {
+    //   return false;
+    // };
+  },
+};
+</script>
+<style lang="less">
+.preview-popover {
+  background-color: #d3edf7dd;
+  padding: 12px;
+
+  .popper__arrow::after {
+    border-bottom-color: #d3edf7dd !important;
+  }
+
+  .describe {
+    p {
+      padding-bottom: 5px;
+
+      &:last-child {
+        padding-bottom: 0px;
+      }
+    }
+
+    .describe-top {
+      // color: sandybrown;
+      // color: red;
+      color: rgb(21, 110, 110);
+    }
+
+    .describe-center {
+      color: rgb(79, 21, 206);
+    }
+
+    .describe-bottom {
+      color: rgb(30, 31, 29);
+    }
+  }
+}
+</style>
+<style lang="less" scoped>
+.pop-up-main {
+  width: 100%;
+  height: calc(100vh - 18vh);
+  overflow-y: hidden;
+
+  .paln-box {
+    width: 100%;
+    height: 100%;
+    position: relative;
+
+    .movableItem {
+      position: absolute;
+      // top: 75%;
+      left: 50%;
+      transform: translate(-50%, -10%);
+
+      img,
+      .svg {
+        z-index: 1;
+        width: 100%;
+        height: 100%;
+      }
+
+      .equipment {
+        position: absolute;
+        top: 0;
+        left: 0;
+        transform: translate(-50%, -50%);
+        z-index: 2;
+        font-size: 40px;
+        // color: red;
+        // background: blue;
+        zoom: 1;
+      }
+    }
+
+    .shuaxin {
+      position: absolute;
+      z-index: 2;
+      font-size: 40px;
+      top: 20px;
+      left: 20px;
+      cursor: pointer;
+
+      &:hover {
+        color: yellowgreen;
+      }
+    }
+
+    .equipment {
+      color: white;
+    }
+
+    &/deep/.el-button {
+      z-index: 2;
+      position: absolute;
+      bottom: 60px;
+      right: 20px;
+      width: 60px;
+      height: 35px;
+
+      span {
+        display: inline-block;
+        position: absolute;
+        top: 50%;
+        left: 50%;
+        transform: translate(-50%, -50%);
+      }
+
+      i {
+        display: inline-block;
+        position: absolute;
+        top: 50%;
+        left: 25%;
+        transform: translate(-50%, -50%);
+      }
+    }
+  }
+}
+
+// body {
+// 		height: 100%;
+// 		overflow: hidden;
+// 		margin: 0;
+// 		padding: 0;
+// 	}
+</style>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 20896 - 0
src/views/WindSite/components/generalappearance/xh/xh.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 721 - 686
src/views/WindSite/components/generalappearance/xs/previewPicture.vue


+ 78 - 78
src/views/WindSite/components/generalappearance/xs/xs.vue

@@ -427,84 +427,6 @@
                 </g>
               </g>
               <g id="fan">
-                <g id="_x23_7">
-                  <g>
-                    <path
-                      fill="#E1E1E0"
-                      d="M328.219,380.086l-1.383,28.884c0,0,1.097,0.432,2.071,0.437c0.998,0.006,2.153-0.421,2.153-0.421
-				l-1.142-28.891L328.219,380.086L328.219,380.086z"
-                    ></path>
-                  </g>
-                  <g>
-                    <g transform="rotate(104.279 329 380.082)">
-                      <g>
-                        <path
-                          fill="#F00"
-                          d="M327.918,379.03l2.21,0.856c0,0,5.864-12.208,6.29-18.828
-						C332.088,366.301,327.918,379.03,327.918,379.03"
-                        ></path>
-                        <path
-                          fill="#05AA3D"
-                          d="M330.016,379.887l-1.824,1.512c0,0,7.8,11.071,13.372,14.673
-						C339.098,389.736,330.016,379.887,330.016,379.887"
-                        ></path>
-                        <path
-                          fill="#05AA3D"
-                          d="M328.09,381.471l0.024-2.37c0,0-13.494-1.198-19.84,0.729
-						C314.706,382.039,328.09,381.471,328.09,381.471"
-                        ></path>
-                      </g>
-                      <g>
-                        <path
-                          fill="#E1E1E0"
-                          d="M330.022,379.602l6.401-18.79c0,0-0.066,1.152-0.114,1.535c-0.039,0.322-0.169,0.959-0.236,1.276
-						c-0.059,0.26-0.246,1.039-0.246,1.039s-0.34,1.348-0.473,1.79c-0.451,1.471-1.445,4.38-1.998,5.813
-						c-0.468,1.215-1.465,3.622-1.994,4.813c-0.287,0.65-1.173,2.58-1.173,2.58"
-                        ></path>
-                        <path
-                          fill="#E1E1E0"
-                          d="M328.491,381.442l13.288,14.748c0,0-0.976-0.613-1.285-0.845c-0.26-0.193-0.756-0.614-1-0.829
-						c-0.199-0.178-0.785-0.721-0.785-0.721s-1.014-0.953-1.335-1.286c-1.064-1.107-3.115-3.396-4.104-4.576
-						c-0.829-1.001-2.446-3.046-3.23-4.087c-0.428-0.563-1.683-2.282-1.683-2.282"
-                        ></path>
-                        <path
-                          fill="#E1E1E0"
-                          d="M327.881,379.3l-19.836,0.615c0,0,1.099-0.349,1.475-0.437c0.317-0.072,0.956-0.182,1.276-0.227
-						c0.264-0.038,1.063-0.135,1.063-0.135s1.378-0.156,1.844-0.186c1.53-0.099,4.6-0.188,6.142-0.177
-						c1.302,0.012,3.904,0.1,5.204,0.173c0.709,0.041,2.829,0.194,2.829,0.194"
-                        ></path>
-                      </g>
-                      <animateTransform
-                        type="rotate"
-                        fill="remove"
-                        attributeType="XML"
-                        repeatCount="indefinite"
-                        to="359 329 380.082"
-                        from="0 329 380.082"
-                        attributeName="transform"
-                        calcMode="linear"
-                        additive="replace"
-                        accumulate="none"
-                        restart="always"
-                        dur="8"
-                      ></animateTransform>
-                    </g>
-                    <g>
-                      <path
-                        fill="#69BFDA"
-                        d="M326.337,380.078c-0.004,1.439,1.206,2.616,2.709,2.622s2.723-1.163,2.727-2.6
-					c0.005-1.442-1.208-2.616-2.708-2.624C327.561,377.475,326.339,378.638,326.337,380.078"
-                      ></path>
-                    </g>
-                    <g>
-                      <path
-                        fill="#C0E4EF"
-                        d="M327.322,380.082c-0.004,0.897,0.771,1.63,1.726,1.633c0.958,0.005,1.737-0.722,1.742-1.62
-					c0.002-0.895-0.773-1.627-1.73-1.63C328.108,378.459,327.325,379.186,327.322,380.082"
-                      ></path>
-                    </g>
-                  </g>
-                </g>
                 <g id="_x23_1">
                   <g>
                     <path
@@ -979,6 +901,84 @@
                     </g>
                   </g>
                 </g>
+                <g id="_x23_7">
+                  <g>
+                    <path
+                      fill="#E1E1E0"
+                      d="M328.219,380.086l-1.383,28.884c0,0,1.097,0.432,2.071,0.437c0.998,0.006,2.153-0.421,2.153-0.421
+				l-1.142-28.891L328.219,380.086L328.219,380.086z"
+                    ></path>
+                  </g>
+                  <g>
+                    <g transform="rotate(104.279 329 380.082)">
+                      <g>
+                        <path
+                          fill="#F00"
+                          d="M327.918,379.03l2.21,0.856c0,0,5.864-12.208,6.29-18.828
+						C332.088,366.301,327.918,379.03,327.918,379.03"
+                        ></path>
+                        <path
+                          fill="#05AA3D"
+                          d="M330.016,379.887l-1.824,1.512c0,0,7.8,11.071,13.372,14.673
+						C339.098,389.736,330.016,379.887,330.016,379.887"
+                        ></path>
+                        <path
+                          fill="#05AA3D"
+                          d="M328.09,381.471l0.024-2.37c0,0-13.494-1.198-19.84,0.729
+						C314.706,382.039,328.09,381.471,328.09,381.471"
+                        ></path>
+                      </g>
+                      <g>
+                        <path
+                          fill="#E1E1E0"
+                          d="M330.022,379.602l6.401-18.79c0,0-0.066,1.152-0.114,1.535c-0.039,0.322-0.169,0.959-0.236,1.276
+						c-0.059,0.26-0.246,1.039-0.246,1.039s-0.34,1.348-0.473,1.79c-0.451,1.471-1.445,4.38-1.998,5.813
+						c-0.468,1.215-1.465,3.622-1.994,4.813c-0.287,0.65-1.173,2.58-1.173,2.58"
+                        ></path>
+                        <path
+                          fill="#E1E1E0"
+                          d="M328.491,381.442l13.288,14.748c0,0-0.976-0.613-1.285-0.845c-0.26-0.193-0.756-0.614-1-0.829
+						c-0.199-0.178-0.785-0.721-0.785-0.721s-1.014-0.953-1.335-1.286c-1.064-1.107-3.115-3.396-4.104-4.576
+						c-0.829-1.001-2.446-3.046-3.23-4.087c-0.428-0.563-1.683-2.282-1.683-2.282"
+                        ></path>
+                        <path
+                          fill="#E1E1E0"
+                          d="M327.881,379.3l-19.836,0.615c0,0,1.099-0.349,1.475-0.437c0.317-0.072,0.956-0.182,1.276-0.227
+						c0.264-0.038,1.063-0.135,1.063-0.135s1.378-0.156,1.844-0.186c1.53-0.099,4.6-0.188,6.142-0.177
+						c1.302,0.012,3.904,0.1,5.204,0.173c0.709,0.041,2.829,0.194,2.829,0.194"
+                        ></path>
+                      </g>
+                      <animateTransform
+                        type="rotate"
+                        fill="remove"
+                        attributeType="XML"
+                        repeatCount="indefinite"
+                        to="359 329 380.082"
+                        from="0 329 380.082"
+                        attributeName="transform"
+                        calcMode="linear"
+                        additive="replace"
+                        accumulate="none"
+                        restart="always"
+                        dur="8"
+                      ></animateTransform>
+                    </g>
+                    <g>
+                      <path
+                        fill="#69BFDA"
+                        d="M326.337,380.078c-0.004,1.439,1.206,2.616,2.709,2.622s2.723-1.163,2.727-2.6
+					c0.005-1.442-1.208-2.616-2.708-2.624C327.561,377.475,326.339,378.638,326.337,380.078"
+                      ></path>
+                    </g>
+                    <g>
+                      <path
+                        fill="#C0E4EF"
+                        d="M327.322,380.082c-0.004,0.897,0.771,1.63,1.726,1.633c0.958,0.005,1.737-0.722,1.742-1.62
+					c0.002-0.895-0.773-1.627-1.73-1.63C328.108,378.459,327.325,379.186,327.322,380.082"
+                      ></path>
+                    </g>
+                  </g>
+                </g>
                 <g id="_x23_8">
                   <g>
                     <path

+ 0 - 1
src/views/WindSite/pages/DraughtFanList.vue

@@ -342,7 +342,6 @@ export default {
     async requestDataGDC(showLoading){
       let res = await  this.API.requestData({
         showLoading,
-        baseURL: "http://127.0.0.1:8082/",
         method: "POST",
         subUrl: "monitorinverter/findInverterInfoList",
         data: {

+ 13 - 11
src/views/WindSite/pages/GeneralAppearance.vue

@@ -17,44 +17,44 @@
         <div class="sub-title-item">
           <img src="../../../assets/map/fan/black.png" />
           <span class="sub-title gray">接入台数</span>
-          <span class="sub-count font-num white">{{wpnumMap.jrts}}</span>
-          
+          <span class="sub-count font-num white">{{ wpnumMap.jrts }}</span>
         </div>
         <div class="sub-title-item">
           <img src="../../../assets/map/fan/green.png" />
           <span class="sub-title green">待机台数</span>
-          <span class="sub-count font-num green">{{wpnumMap.djts}}</span>
+          <span class="sub-count font-num green">{{ wpnumMap.djts }}</span>
         </div>
         <div class="sub-title-item">
           <img src="../../../assets/map/fan/blue.png" />
           <span class="sub-title blue">并网台数</span>
-          <span class="sub-count font-num blue">{{wpnumMap.yxts}}</span>
+          <span class="sub-count font-num blue">{{ wpnumMap.yxts }}</span>
         </div>
         <div class="sub-title-item">
           <img src="../../../assets/map/fan/purple.png" />
           <span class="sub-title pink">限电台数</span>
-          <span class="sub-count font-num pink">{{wpnumMap.xdts}}</span>
+          <span class="sub-count font-num pink">{{ wpnumMap.xdts }}</span>
         </div>
         <div class="sub-title-item">
           <img src="../../../assets/map/fan/red.png" />
           <span class="sub-title red">故障台数</span>
-          <span class="sub-count font-num red">{{wpnumMap.gzts}}</span>
+          <span class="sub-count font-num red">{{ wpnumMap.gzts }}</span>
         </div>
         <div class="sub-title-item">
           <img src="../../../assets/map/fan/orange.png" />
           <span class="sub-title orange">检修台数</span>
-          <span class="sub-count font-num orange">{{wpnumMap.whts}}</span>
+          <span class="sub-count font-num orange">{{ wpnumMap.whts }}</span>
         </div>
         <div class="sub-title-item">
           <img src="../../../assets/map/fan/black.png" />
           <span class="sub-title gray">离线台数</span>
-          <span class="sub-count font-num gray">{{wpnumMap.lxts}}</span>
+          <span class="sub-count font-num gray">{{ wpnumMap.lxts }}</span>
         </div>
       </div>
     </div>
     <!-- <gax6 class="general-appearance-body"></gax6> -->
     <div>
-      <AppearanceXs class="general-appearance-body" :data="fjmap" :zmmap="zmmap"/>
+      <XS class="general-appearance-body" :data="fjmap" :zmmap="zmmap" v-if="wpId === 'XS_FDC'" />
+      <XH class="general-appearance-body" :data="fjmap" :zmmap="zmmap" v-if="wpId === 'XH_GDC'" />
     </div>
   </div>
 </template>
@@ -62,7 +62,8 @@
 <script>
 import BtnGroup2 from "@com/coms/btn/btn-group-double.vue";
 // import gax6 from "../components/gax6.vue";
-import AppearanceXs from "../components/generalappearance/xs/xs.vue";
+import XS from "../components/generalappearance/xs/xs.vue";
+import XH from "../components/generalappearance/xh/xh.vue";
 export default {
   // 名称
   name: "GeneralAppearance",
@@ -70,7 +71,8 @@ export default {
   components: {
     // gax6,
     BtnGroup2,
-    AppearanceXs
+    XS,
+    XH
   },
   // 数据
   data() {

+ 37 - 45
src/views/WindSite/pages/Map.vue

@@ -294,6 +294,7 @@ export default {
       wpId: undefined,
       wpnumMap: {}, //风机监视数量
       wpInfoMap: {}, //风机详情
+      fjmap: [],   // 风机名
       selectIndex: 0,
       rowIndex: 0,
       btnGroups: [
@@ -321,15 +322,13 @@ export default {
       mapToolIndex: 0,
       fans: [],
       colors: {
-        dj: ["#05bb4c", "#4ad476", "#9fedb2"],
-        yx: ["#4b55ae", "#959dc7", "#d3d6e0"],
-        xd: ["#c531c7", "#e080dc", "#fadef7"],
-        xdStop: ["#c531c7", "#e080dc", "#fadef7"],
-        gz: ["#BA3237", "#d4807d", "#eddad8"],
-
-        jx: ["#e17e23", "#fabf78", "#ffebcc"],
-        lx: ["#606769", "#757575", "#AFAFAF"],
-        sl: ["#ffffff", "#D8D8D8", "#D8D8D8"],
+        "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"),
     };
@@ -340,7 +339,6 @@ export default {
     that.$nextTick(() => {
       that.getWp();
       that.requestData();
-      that.requestInfo();
     });
   },
   // 函数
@@ -399,24 +397,11 @@ export default {
           if (res.code == 200) {
             that.wpnumMap = res.data.fczbmap.jczbmap;
             that.wpInfoMap = res.data.wxssmap;
+            that.fjmap = res.data.fjmap[0];
           }
         },
       });
     },
-    // 风机详情
-    requestInfo() {
-      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;
-        },
-      });
-    },
     renderBtnActiveIndex() {
       this.btnGroups.forEach((pEle, pIndex) => {
         pEle.btns.forEach((cEle, cIndex) => {
@@ -429,39 +414,46 @@ export default {
     },
     when: function () {
       let jsonObj = dataService.get("arcgis-nx-fc1");
-      let data = [
-        { id: "MG13", state: "yx" },
-        { id: "MG12", state: "xd" },
-        { id: "MG20", state: "xdStop" },
-        { id: "MG34", state: "gz" },
-        { id: "MG39", state: "jx" },
-        { id: "MG02", state: "lx" },
-        { id: "MG19", state: "sl" },
-      ];
       this.fans = jsonObj;
       jsonObj.forEach((item) => {
-        let obj = data.find((t) => t.id == item.attributes.code);
+        let obj = this.fjmap.find((t) => {
+          let wtid = t.wtId.replace("01_","");
+          if (wtid == item.attributes.code) return t
+        });
         if (obj) {
-          item.attributes.state = obj.state;
+          item.attributes.state = String(obj.fjzt);
         } else {
-          item.attributes.state = "dj";
+          item.attributes.state = "4";
         }
         switch (item.attributes.state) {
-          case "yx":
+          case "0":  //待机
+            item.attributes.rotate = false; // 转
+            item.attributes.dur = 8; // 转一圈时间
+            break;
+          case "1":  //运行
             item.attributes.rotate = true; // 转
-            item.attributes.dur = 4; // 转一圈时间
+            item.attributes.dur = 2; // 转一圈时间
             break;
-
-          case "xd":
-            item.attributes.rotate = true;
+          case "2":  //故障
+            item.attributes.rotate = false; // 不转
             item.attributes.dur = 8;
             break;
-
-          case "xdStop":
+          case "3":  //中断
             item.attributes.rotate = false; // 不转
             item.attributes.dur = 8;
-            break;
-
+            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;

+ 1 - 1
src/views/layout/Menu.vue

@@ -165,7 +165,7 @@ export default {
                 {
                   text: "功率曲线拟合",
                   icon: "svg-wind-site",
-                  path: "/nxfx1",
+                  path: "/powerCurve",
                 },
                 {
                   text: "偏航对风分析",

+ 305 - 0
src/views/malfunctionDiagnose/index.vue

@@ -0,0 +1,305 @@
+<template>
+  <div class="draught-fan-list">
+    <div class="query mg-b-8">
+      <div class="query-items">
+        <div class="query-item">
+          <div class="lable">场站:</div>
+          <div class="search-input">
+            <el-select
+              v-model="wpId"
+              clearable
+              placeholder="请选择"
+              popper-class="select"
+              @change="
+                (wpId) => {
+                  getProject();
+                }
+              "
+            >
+              <el-option
+                v-for="item in wpArray"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              />
+            </el-select>
+          </div>
+        </div>
+        <!-- <div class="query-item">
+          <div class="lable">项目:</div>
+          <div class="search-input">
+            <el-select
+              v-model="projectId"
+              clearable
+              placeholder="请选择"
+              popper-class="select"
+            >
+              <el-option
+                v-for="item in projectArray"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              />
+            </el-select>
+          </div>
+        </div> -->
+        <div class="query-item">
+          <div class="lable">模型:</div>
+          <div class="search-input">
+            <el-select
+              v-model="modelId"
+              clearable
+              placeholder="请选择"
+              popper-class="select"
+            >
+              <el-option
+                v-for="item in modelArray"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              />
+            </el-select>
+          </div>
+        </div>
+        <div class="query-item">
+          <div class="lable">时间类型:</div>
+          <div class="search-input">
+            <el-select
+              v-model="typeId"
+              clearable
+              placeholder="请选择"
+              popper-class="select"
+            >
+              <el-option
+                v-for="item in typeArray"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              />
+            </el-select>
+          </div>
+        </div>
+      </div>
+      <div class="query-actions">
+        <button class="btn green" @click="search()">查询</button>
+      </div>
+    </div>
+    <div class="df-table">
+      <ComTable height="78vh" :data="tableData"></ComTable>
+    </div>
+    <el-dialog
+      title="切入切出风速整合历史"
+      v-model="dialogShow"
+      width="85%"
+      top="10vh"
+      custom-class="modal"
+      :close-on-click-modal="true"
+      @closed="dialogType = ''"
+    >
+      <ComTable height="100vh" :data="tableHistoryData"></ComTable>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import ComTable from "@com/coms/table/table.vue";
+export default {
+  // 名称
+  name: "cutAnalyse",
+
+  // 使用组件
+  components: {
+    ComTable,
+  },
+
+  // 数据
+  data() {
+    const that = this;
+    return {
+      isAsc: "asc",
+      wpArray: [],
+      wpId: "",
+      projectId: "",
+      projectArray: [],
+      modelId: "2",
+      modelArray: [
+        {
+          id: "2",
+          value: "2",
+          name: "极限学习机",
+        },
+        {
+          id: "1",
+          value: "1",
+          name: "决策树分类法",
+        },
+      ],
+      typeId: "1",
+      typeArray: [
+        {
+          id: "1",
+          value: "1",
+          name: "顺时",
+        },
+        {
+          id: "2",
+          value: "2",
+          name: "趋势",
+        },
+      ],
+      dialogShow: false,
+      tableData: {
+        column: [
+          {
+            name: "风机",
+            field: "wtid",
+            is_num: false,
+            is_light: false,
+            sortable: true,
+          },
+          {
+            name: "型号",
+            field: "modelid",
+            is_num: false,
+            is_light: false,
+            sortable: true,
+          },
+          {
+            name: "评分",
+            field: "judegvulue",
+            is_num: false,
+            is_light: false,
+            sortable: true,
+          },
+          {
+            name: "操作",
+            field: "",
+            is_num: false,
+            is_light: false,
+            template() {
+              return "<el-button type='text' style='cursor: pointer;'>详情</el-button>";
+            },
+            click(e, row) {
+              console.log(123123, row);
+            },
+          },
+        ],
+        data: [],
+      },
+    };
+  },
+
+  // 函数
+  methods: {
+    // 请求服务
+    requestData() {
+      let that = this;
+      that.API.requestData({
+        method: "GET",
+        subUrl: "powercompare/windfarmAjax",
+        success(res) {
+          that.wpArray = res.data;
+          that.wpId = res.data[0].id;
+          that.getProject();
+        },
+      });
+    },
+
+    // 获取期数
+    getProject() {
+      let that = this;
+      that.API.requestData({
+        method: "GET",
+        subUrl: "powercompare/projectAjax",
+        data: {
+          wpIds: that.wpId,
+        },
+        success(res) {
+          that.projectArray = res.data;
+          that.projectId = res.data[0].id;
+          that.getTableData();
+        },
+      });
+    },
+
+    getTableData() {
+      let that = this;
+      if (!that.wpId || !that.projectId) {
+        that.BASE.showMsg({
+          msg: "场站与期数不可为空",
+        });
+      } else if (!that.modelId || !that.typeId) {
+        that.BASE.showMsg({
+          msg: "模型与时间类型不可为空",
+        });
+      } else {
+        that.API.requestData({
+          method: "POST",
+          subUrl: "stopanalysis/stopAnalysisList",
+          data: {
+            wpId: that.wpId,
+            isAsc: that.isAsc,
+            modelId: that.modelId,
+            typeId: that.typeId,
+          },
+          success(res) {
+            that.tableData.data = res.data;
+          },
+        });
+      }
+    },
+
+    search() {
+      this.getTableData();
+    },
+  },
+
+  created() {
+    this.requestData();
+  },
+
+  mounted() {},
+
+  unmounted() {},
+};
+</script>
+
+<style lang="less" scoped>
+.draught-fan-list {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+
+  .btn-group-tabs {
+    display: flex;
+    flex-direction: row;
+
+    .photovoltaic {
+      margin-left: 1.481vh;
+    }
+  }
+
+  .df-table {
+    border: 0.093vh solid fade(@darkgray, 50%);
+    position: relative;
+    overflow: auto;
+    flex-grow: 1;
+    margin-top: 1.481vh;
+
+    &:before {
+      content: "";
+      width: 0.37vh;
+      height: 0.37vh;
+      background: @write;
+      position: absolute;
+      left: 0.278vh;
+      top: 0.278vh;
+    }
+
+    tbody {
+      height: calc(100vh - 166px);
+    }
+  }
+}
+</style>

+ 30 - 30
src/views/malfunctionStatistics/index.vue

@@ -28,72 +28,72 @@
         <el-table-column :show-overflow-tooltip="true" :label="tableTitle">
           <el-table-column :show-overflow-tooltip="true" label="近一天">
             <el-table-column :show-overflow-tooltip="true" label="1">
-              <el-table-column :show-overflow-tooltip="true" prop="day1top1name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day1top1" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day1top1name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day1top1" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="2">
-              <el-table-column :show-overflow-tooltip="true" prop="day1top2name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day1top2" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day1top2name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day1top2" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="3">
-              <el-table-column :show-overflow-tooltip="true" prop="day1top3name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day1top3" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day1top3name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day1top3" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
           </el-table-column>
           <el-table-column :show-overflow-tooltip="true" label="近三天">
             <el-table-column :show-overflow-tooltip="true" label="1">
-              <el-table-column :show-overflow-tooltip="true" prop="day3top1name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day3top1" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day3top1name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day3top1" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="2">
-              <el-table-column :show-overflow-tooltip="true" prop="day3top2name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day3top2" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day3top2name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day3top2" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="3">
-              <el-table-column :show-overflow-tooltip="true" prop="day3top3name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day3top3" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day3top3name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day3top3" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
           </el-table-column>
           <el-table-column :show-overflow-tooltip="true" label="近七天">
             <el-table-column :show-overflow-tooltip="true" label="1">
-              <el-table-column :show-overflow-tooltip="true" prop="day7top1name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day7top1" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day7top1name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day7top1" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="2">
-              <el-table-column :show-overflow-tooltip="true" prop="day7top2name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day7top2" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day7top2name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day7top2" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="3">
-              <el-table-column :show-overflow-tooltip="true" prop="day7top3name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day7top3" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day7top3name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day7top3" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
           </el-table-column>
           <el-table-column :show-overflow-tooltip="true" label="近十五天">
             <el-table-column :show-overflow-tooltip="true" label="1">
-              <el-table-column :show-overflow-tooltip="true" prop="day15top1name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day15top1" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day15top1name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day15top1" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="2">
-              <el-table-column :show-overflow-tooltip="true" prop="day15top2name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day15top2" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day15top2name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day15top2" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="3">
-              <el-table-column :show-overflow-tooltip="true" prop="day15top3name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day15top3" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day15top3name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day15top3" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
           </el-table-column>
           <el-table-column :show-overflow-tooltip="true" label="近一个月">
             <el-table-column :show-overflow-tooltip="true" label="1">
-              <el-table-column :show-overflow-tooltip="true" prop="month1top1name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="month1top1" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="month1top1name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="month1top1" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="2">
-              <el-table-column :show-overflow-tooltip="true" prop="month1top2name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="month1top2" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="month1top2name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="month1top2" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="3">
-              <el-table-column :show-overflow-tooltip="true" prop="month1top3name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="month1top3" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="month1top3name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="month1top3" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
           </el-table-column>
         </el-table-column>

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

@@ -326,7 +326,7 @@ export default {
         method:"GET",
         data:{
           tableid:that.tableid,
-          pointId:that.pointId,
+          pointId:that.form.pointId,
           pointName:that.form.pointName || "",
           pageNum:that.currentPage,
           pageSize:that.pagesizereal,

+ 7 - 0
src/views/warn/xdgl.vue

@@ -58,42 +58,49 @@ export default {
           {
             name: "编号",
             field: "id",
+             width: "50px",
             is_num: true,
             is_light: false,
           },
           {
             name: "限电时刻",
             field: "stopTime",
+              width: "150px",
             is_num: false,
             is_light: false,
           },
           {
             name: "恢复时刻",
             field: "startTime",
+             width: "150px",
             is_num: false,
             is_light: false,
           },
           {
             name: "停机类型",
             field: "stopTypeId",
+             width: "150px",
             is_num: false,
             is_light: false,
           },
           {
             name: "限电时间",
             field: "stopHours",
+             width: "150px",
             is_num: false,
             is_light: false,
           },
           {
             name: "损失电量(kWh)",
             field: "lossPower",
+             width: "150px",
             is_num: false,
             is_light: false,
           },
           {
             name: "限电原因",
             field: "description",
+             width: "200px",
             is_num: false,
             is_light: false,
           },

+ 27 - 27
src/views/warnStatistics/index.vue

@@ -24,20 +24,20 @@
     </div>
     <div class="df-table curTable">
       <el-table :data="tableData.data" height="78vh" max-height="78vh" stripe style="width: 100%" :border="true">
-        <el-table-column :show-overflow-tooltip="true" prop="wtname" label="风机"></el-table-column>
+        <el-table-column :show-overflow-tooltip="true" prop="wtname" label="风机" width="150px"></el-table-column>
         <el-table-column :show-overflow-tooltip="true" :label="tableTitle">
           <el-table-column :show-overflow-tooltip="true" label="近一天">
             <el-table-column :show-overflow-tooltip="true" label="1">
-              <el-table-column :show-overflow-tooltip="true" prop="day1top1name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day1top1" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day1top1name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day1top1" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="2">
-              <el-table-column :show-overflow-tooltip="true" prop="day1top2name" label="故障"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day1top2name" label="故障" width="200px"></el-table-column>
               <el-table-column :show-overflow-tooltip="true" prop="day1top2" label="频次" :sortable="true"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="3">
               <el-table-column :show-overflow-tooltip="true" prop="day1top3name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day1top3" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day1top3" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
           </el-table-column>
           <el-table-column :show-overflow-tooltip="true" label="近三天">
@@ -46,54 +46,54 @@
               <el-table-column :show-overflow-tooltip="true" prop="day3top1" label="频次" :sortable="true"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="2">
-              <el-table-column :show-overflow-tooltip="true" prop="day3top2name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day3top2" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day3top2name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day3top2" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="3">
-              <el-table-column :show-overflow-tooltip="true" prop="day3top3name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day3top3" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day3top3name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day3top3" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
           </el-table-column>
           <el-table-column :show-overflow-tooltip="true" label="近七天">
             <el-table-column :show-overflow-tooltip="true" label="1">
-              <el-table-column :show-overflow-tooltip="true" prop="day7top1name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day7top1" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day7top1name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day7top1" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="2">
-              <el-table-column :show-overflow-tooltip="true" prop="day7top2name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day7top2" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day7top2name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day7top2" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="3">
-              <el-table-column :show-overflow-tooltip="true" prop="day7top3name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day7top3" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day7top3name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day7top3" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
           </el-table-column>
           <el-table-column :show-overflow-tooltip="true" label="近十五天">
             <el-table-column :show-overflow-tooltip="true" label="1">
-              <el-table-column :show-overflow-tooltip="true" prop="day15top1name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day15top1" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day15top1name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day15top1" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="2">
-              <el-table-column :show-overflow-tooltip="true" prop="day15top2name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day15top2" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day15top2name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day15top2" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="3">
-              <el-table-column :show-overflow-tooltip="true" prop="day15top3name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="day15top3" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day15top3name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="day15top3" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
           </el-table-column>
           <el-table-column :show-overflow-tooltip="true" label="近一个月">
             <el-table-column :show-overflow-tooltip="true" label="1">
-              <el-table-column :show-overflow-tooltip="true" prop="month1top1name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="month1top1" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="month1top1name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="month1top1" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="2">
-              <el-table-column :show-overflow-tooltip="true" prop="month1top2name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="month1top2" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="month1top2name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="month1top2" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
             <el-table-column :show-overflow-tooltip="true" label="3">
-              <el-table-column :show-overflow-tooltip="true" prop="month1top3name" label="故障"></el-table-column>
-              <el-table-column :show-overflow-tooltip="true" prop="month1top3" label="频次" :sortable="true"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="month1top3name" label="故障" width="200px"></el-table-column>
+              <el-table-column :show-overflow-tooltip="true" prop="month1top3" label="频次" :sortable="true" width="150px"></el-table-column>
             </el-table-column>
           </el-table-column>
         </el-table-column>