Browse Source

Merge branch 'master' of http://124.70.43.205:3000/yangxiao/sis_zhfx

chenminghua 3 years ago
parent
commit
bc0952bde4
47 changed files with 3670 additions and 3622 deletions
  1. 4 0
      src/assets/styles/common/common.less
  2. 1 1
      src/assets/styles/el-override/el-input.less
  3. 3 2
      src/assets/styles/theme/light/jjyx.less
  4. 132 120
      src/assets/styles/theme/light/jsc.less
  5. 72 0
      src/assets/styles/theme/light/jsc/info.less
  6. 27 0
      src/assets/styles/theme/light/jsc/lightmatrix1.less
  7. 53 0
      src/assets/styles/theme/light/jsc/status.less
  8. 64 51
      src/assets/styles/theme/light/light-jsc.less
  9. 7 19
      src/assets/styles/theme/light/light-qt.less
  10. 5 1
      src/assets/styles/theme/light/setting.less
  11. 0 12
      src/assets/styles/theme/light/zhjx.less
  12. 5 1
      src/components/chart/bar/multiple-bar-chart.vue
  13. 2 2
      src/components/chart/pie/dash-pie-chart.vue
  14. 1 1
      src/components/chart/pie/dual-pie-chart.vue
  15. 17 17
      src/components/chart/radar/radar-chart.vue
  16. 4 1
      src/tools/basicTool.js
  17. 3 1
      src/views/About.vue
  18. 510 569
      src/views/Decision/Decision1.vue
  19. 1 1
      src/views/Decision/Decision1Mx.vue
  20. 1048 1166
      src/views/Decision/Decision2.vue
  21. 57 16
      src/views/HealthControl/Health10.vue
  22. 6 1
      src/views/HealthControl/Health4.vue
  23. 619 529
      src/views/HealthControl/HealthDay.vue
  24. 46 31
      src/views/HealthControl/healthLineChart.vue
  25. 108 34
      src/views/HealthControl/healthLineChart2.vue
  26. 95 42
      src/views/Home/components/map.vue
  27. 112 52
      src/views/Home/components/map/svg-map-nx.vue
  28. 1 1
      src/views/WindSite/pages/Info/Base-Info.vue
  29. 4 2
      src/views/WindSite/pages/Info/Info.vue
  30. 389 821
      src/views/WindSite/pages/Info/StandAloneImg.vue
  31. BIN
      src/views/WindSite/pages/Info/standAloneImg-green.png
  32. BIN
      src/views/WindSite/pages/Info/standAloneImg-white.png
  33. 1 1
      src/views/WindSite/pages/Inverter-Info.vue
  34. BIN
      src/views/WindSite/pages/Tower/WindTower-blue-cicle.png
  35. BIN
      src/views/WindSite/pages/Tower/WindTower-blue-fz.png
  36. BIN
      src/views/WindSite/pages/Tower/WindTower-blue-line.png
  37. BIN
      src/views/WindSite/pages/Tower/WindTower-blue-sy.png
  38. BIN
      src/views/WindSite/pages/Tower/WindTower-blue-tzz.png
  39. BIN
      src/views/WindSite/pages/Tower/WindTower-green-cicle.png
  40. BIN
      src/views/WindSite/pages/Tower/WindTower-green-line.png
  41. BIN
      src/views/WindSite/pages/Tower/WindTower-green-tzz.png
  42. 29 80
      src/views/WindSite/pages/Tower/WindTower.vue
  43. 1 1
      src/views/layout/Menu.vue
  44. 80 14
      src/views/report/dlyc.vue
  45. 83 17
      src/views/report/nhdl.vue
  46. 0 1
      src/views/report/weather.vue
  47. 80 14
      src/views/report/xzdl.vue

+ 4 - 0
src/assets/styles/common/common.less

@@ -26,5 +26,9 @@
 @import "../theme/light/zhjx.less"; // 智慧检修	
 @import "../theme/light/aqgk.less"; // 安全管控
 
+// 驾驶舱模块
+@import "../theme/light/jsc/status.less"; // 状态监视
+@import "../theme/light/jsc/lightmatrix1.less"; // 基础矩阵
+@import "../theme/light/jsc/info.less"; // 单机状态监视
 // 暗色主题
 @import "../theme/dark/dark-jsc.less"; // 驾驶舱

+ 1 - 1
src/assets/styles/el-override/el-input.less

@@ -58,7 +58,7 @@ body {
     }
 
     // el datetimerange Start
-    &.el-date-editor--datetimerange {
+    &.el-date-editor--datetimerange ,&.el-date-editor--daterange{
       border: 1px solid fade(@gray, 20);
       height: 33px;
       padding: 0 8px;

+ 3 - 2
src/assets/styles/theme/light/jjyx.less

@@ -134,11 +134,12 @@
 	  border: 0.093vh solid @deepblue;
 	}
 	.active {
-	  background: linear-gradient(to top,rgba(54,52,142, 0.5),rgba(54,52,142, 0));
+	  // background: linear-gradient(to top,rgba(54,52,142, 0.5),rgba(54,52,142, 0));
+	  background:@fadePurple;
 	  color: @deepblue;
 	}
 	.active::after {
-	  border: 0.093vh solid @deepblue;
+	  // border: 0.093vh solid @deepblue;
 	}
 	
 	.el-month-table td .cell:hover,

+ 132 - 120
src/assets/styles/theme/light/jsc.less

@@ -2,84 +2,9 @@
 
 #appBody.light {
 
-    // 基础矩阵白色主题样式
-    .panel-body {
-        background: @white;
-        transition: @transition;
-    }
-
-    .card-panel .card-left .tag {
-        color: @black;
-    }
-
-    .light-matrix .panel {
-        background-color: gainsboro;
-    }
-
-    .green[data-v-065abbc5] {
-        color: @green;
-    }
-
-    .green[data-v-6a0a9536] {
-        color: @green;
-    }
-
-    .light-matrix .panel-box .panel-title .panel-title-name[data-v-065abbc5] {
-        font-size: 1.296vh;
-        color: @deepblue;
-        font-weight: bold;
-    }
-
-    .svg-icon.svg-icon-green svg use {
-        fill: @deepblue;
-    }
-
-    //明细矩阵
-    .light-matrix .panel-box .panel-title .panel-title-name[data-v-e0caa1f6] {
-        color: @deepblue;
-        font-weight: bold;
-    }
-
-    //欠发矩阵
-    .light-matrix .panel-box .panel-title .panel-title-name[data-v-6a0a9536] {
-        color: @deepblue;
-        font-weight: bold;
-    }
-
-    //光伏矩阵
-    .light-matrix .panel-box .panel-title .panel-title-name[data-v-55c30df5] {
-        color: @deepblue;
-        font-weight: bold;
-    }
-
     //驾驶舱模块-矩阵白色主题样式二级页面
-    //基本信息-日发电量1
-    .wind-site-base-info .generation {
-        background: @white;
-    }
 
-    //基本信息-日发电量2
-    .el-col-10 {
-        background: @white;
-    }
-
-    //基本信息-日发电量右侧
-    .wind-site-warning[data-v-40a70b04] {
-        background: @white;
-        transition: @transition;
-    }
-
-    //右侧导航栏第一个-天气
-    .wind-site-weather[data-v-ccb406f8] {
-        background: @white;
-        transition: @transition;
-    }
-
-    .wind-site-base-info .wind-site-name {
-        border: 1px solid @deepblue;
-    }
-
-    .title[data-v-2c3073c8] {
+    .title {
         font-weight: bold;
     }
 
@@ -90,14 +15,7 @@
     }
 
     //最右侧导航
-    .wind-site .page-common-body .page-common-body-menu .page-common-body-menu-box[data-v-3b6e4be5] {
-        background-color: @white;
-        transition: @transition;
-    }
-
-    .wind-site .page-common-body .page-common-body-menu .page-common-body-menu-box .page-common-body-menu-item[data-v-3b6e4be5] {
-        border: 0.093vh solid @deepblue;
-    }
+   
 
     //右侧导航栏第二个底色
     .df-table .custom-table.el-table {
@@ -147,15 +65,10 @@
         font-weight: bold;
     }
 
-    .matrix .panel-title .panel-title-name[data-v-2e858362] {
+    .matrix .panel-title .panel-title-name {
         color: @deepblue;
     }
 
-    .com-panel.line {
-        margin-left: 1px;
-        z-index: 1;
-    }
-
     .wave {
         z-index: 1;
     }
@@ -168,36 +81,6 @@
         fill: @black;
     }
 
-    // 状态监视白色主题样式
-    .status-panel .status-com-panel .p-body .category-box[data-v-74094c42] {
-        width: 100%;
-        background-color: @white;
-        transition: @transition;
-        display: flex;
-        margin-bottom: 0.37vh;
-    }
-
-    .el-scrollbar__wrap {
-        background: @white;
-        transition: @transition;
-    }
-
-    .map-1 .btn-group-tabs[data-v-0ec6dd0b] {
-        display: flex;
-        flex-direction: row;
-        background: @white;
-        height: 50px;
-    }
-
-    .status-panel .status-com-panel .p-body .item-box .data-item.light[data-v-74094c42] {
-        background-color: @deepblue;
-        position: relative;
-    }
-
-    .status-panel .status-com-panel .p-body .category-box .score span[data-v-74094c42] {
-        color: @deepblue;
-    }
-
     //驾驶舱模块-Agc白色主题样式
     .com-panel2 .panel-header2 .panel-tools2 {
         color: @black;
@@ -237,4 +120,133 @@
         color: @deepblue  !important;
         font-weight: bold;
     }
+	
+	.wind-site-info {
+		.wind-site-menu {
+			border-radius: 0 15px 0 0;
+			color: @black;
+		  background: @gray-3;
+		}
+	}
+	
+	.com-collapse {
+		.collapse-box {
+			.box-text {
+				&:hover {
+					color: @purple;
+					font-weight: 700;
+				  background: @fadePurple;
+				}
+			}
+			&.active {
+				background: @white;
+			  .box-text {
+				  color: @purple;
+				  font-weight: 700;
+				background: @fadePurple;
+			  }
+			}
+			.collapse-items .item.active{
+				background: @fadePurple;
+			}
+		}
+	}
+	
+	.wind-site-warning .search .options .option-item{
+		background: @white;
+		.count,.text{
+			border-radius: 0.3125rem;
+			border: none;
+			background: @gray-3;
+		}
+		&.active{
+			.count,.text{
+				background: @fadePurple;
+				color: @deepblue;
+			}
+		}
+	}
+	
+	.wind-site-info{
+		.wind-site-info-body {
+			.info-menu {
+				.info-menu-item {
+					& + .info-menu-item {
+						border: none;
+						background-color: @white;
+					}
+				}
+			}
+		}
+	}
+	
+	
+		
+	.table-form tr:nth-child(2n){
+		background: @gray-3;
+	}
+	.generator .info-panel .panel-title{
+		background: @gray-3;
+	}
+	.com-table {
+		thead tr th{
+			font-weight: 700;
+			background: @gray-3;
+		}
+		tbody tr:nth-child(2n){
+			background: @gray-3;
+		}
+	}
+	.Inverter-Info .box-main .Inverter-Info-body .inverter-datas .inverter-item .inverter-item-info .states{
+		.state-list .list-item{
+			background: rgba(96, 103, 105, 0.1);
+			&:nth-child(2n){
+				background: transparent
+			}
+			.state{
+				background: rgba(96, 103, 105, 0.2);
+			}
+		}
+		.counts {
+			.all{
+				background: rgba(96, 103, 105, 0.1);
+			}
+			.error{
+				color:@white;
+			}
+		}
+	}
+	.Inverter-Info .box-main {
+		.wind-site-menu{
+			background-color: @gray-3;
+		}
+		.Inverter-Info-body {
+			.inverter-datas .inverter-item .inverter-item-info{
+				border:1px solid @gray-3;
+				background-color: @white;
+			}
+		}
+	}
+	
+	.btn-group-with-icon .btn-group-with-icon-list a{
+		background-color: @white;
+		border: none;
+		color: @black;
+		&.active{
+			color: @white;
+			background-color: @deepblue;
+		}
+	}
+	// 暂无认领部分
+	// .el-scrollbar__wrap {
+	//     background: @white;
+	//     transition: @transition;
+	// }
+	
+	// .map-1 .btn-group-tabs {
+	//     display: flex;
+	//     flex-direction: row;
+	//     background: @white;
+	//     height: 50px;
+	// }
 }

+ 72 - 0
src/assets/styles/theme/light/jsc/info.less

@@ -0,0 +1,72 @@
+@import "../setting.less";
+
+#appBody.light {// 单机状态监视
+    
+   .wind-site-warning {//单机状态监视
+       background: @white;
+       transition: @transition;
+   }
+   
+   //右侧导航栏第一个-天气
+   .wind-site-weather {
+   	border-radius: 10px;
+   	border: none;
+       background: @white;
+       transition: @transition;
+   }
+   
+   .wind-site-base-info {
+	   .power-load{
+		   background-color: @white;
+	   }
+	   .wind-site-tag {
+	     background: @gray-3;
+	   	.tag-value {
+	   	  color: @deepblue;
+	   	}
+	   }
+	   .info-panel {
+	   	.panel-title {
+	   		background: @gray-3;
+	   	}
+	   }
+   	.generation {
+   	    background: @white;
+   	}
+   	.wind-site-name {
+   	    border: none;
+   		background-color: @fadePurple;
+   	}
+   	.wind-site-other{
+   		.wind-site-tag{
+   			background-color: @white;
+   		}
+   	}
+   }
+   .wind-site .page-common-body .page-common-body-menu .page-common-body-menu-box {
+       background-color: @white;
+       transition: @transition;
+		border: none;
+		border-radius: 5px;
+   	.page-common-body-menu-item{
+   		  border: none;
+   		  .svg-icon svg use{
+   			fill:@gray-font;
+   		  }
+   		  &.active{
+   			  background:@fadePurple;
+   			  border: none;
+   			  &::after{
+   				box-shadow:none;
+   				border: none;
+   			  }
+   			  .svg-icon.svg-icon-yellow svg use{
+   				  fill:@deepblue;
+   			  }
+   		  }
+   	}
+   	.page-common-body-menu-border{
+   		background-color: transparent;
+   	}
+   }
+}

+ 27 - 0
src/assets/styles/theme/light/jsc/lightmatrix1.less

@@ -0,0 +1,27 @@
+@import "../setting.less";
+
+#appBody.light { // 基础矩阵
+   .panel-body {
+       background: @white;
+       transition: @transition;
+   }
+   
+   .card-panel .card-left .tag {
+       color: @black;
+   }
+   
+   .light-matrix .panel {
+       background-color: gainsboro;
+   }
+   
+   .light-matrix .panel-box .panel-title .panel-title-name {
+       font-size: 1.296vh;
+       color: @deepblue;
+       font-weight: bold;
+   }
+   
+   .svg-icon.svg-icon-green svg use {
+       fill: @deepblue;
+   }
+   
+}

+ 53 - 0
src/assets/styles/theme/light/jsc/status.less

@@ -0,0 +1,53 @@
+@import "../setting.less";
+
+#appBody.light {
+    // 状态监视
+    .status-panel .status-com-panel{
+		.panel-body{
+			padding: 0;
+			.p-body {
+				.item-box .data-item{
+					background-color: @white;
+					border-top: 1px solid @gray-3;
+					.f3,.f5{
+						color: @deepblue;
+					}
+					&.light {
+						&:first-child{
+							background-color: @gray-3;
+							
+							div{
+								color: @black;
+							}
+							&::after{
+								background-color: @deepblue;
+							}
+						}
+						&::after{
+							background-color: transparent;
+						}
+						div{
+							&.f3,&.f5{
+								color: @deepblue;
+							}
+							color: @gray;
+						}
+						background-color: @white;
+					}
+				}
+				.category-box {
+				    width: 100%;
+				    background-color: @white;
+				    transition: @transition;
+				    display: flex;
+				    margin-bottom: 0.37vh;
+					.score span {
+					    color: @deepblue;
+						background-color: fade(@deepblue, 10%);
+						border: 0.093vh solid @deepblue;
+					}
+				}
+			}
+		}
+	}
+}

+ 64 - 51
src/assets/styles/theme/light/light-jsc.less

@@ -115,21 +115,24 @@
         border    : 0.093vh solid @deepblue;
         transition: @transition;
     }
+	.header-menu .header-menu-list{
+		align-items: center;
+		.header-menu-item{
+			width: 11.259vh;
+			height: 70%;
+			&.active::after {
+				content: inherit;
+				transition: @transition;
+			}
+			
+			&.active {
+			    color   : @deepblue;
+			    background: @fadePurple;
+				    border-radius: 0.3125rem;
+			}
+		}
+	}
 
-    .header-menu .header-menu-list .header-menu-item.active::after {
-        border    : 0.093vh solid @deepblue;
-        transition: @transition;
-    }
-
-    .header-menu .header-menu-list .header-menu-item.active {
-        color   : @deepblue;
-        position: relative;
-        background: linear-gradient(to top,
-                rgba(57, 54, 143, 0.5),
-                rgba(5, 187, 76, 0));
-        border    : 0.093vh solid @deepblue;
-        transition: color @transition ease-in-out;
-    }
 
     .home .table-card {
         outline   : none;
@@ -226,11 +229,17 @@
         transition: @transition;
     }
 
-    .com-panel-3 .dot,
     .com-panel.line:before {
         background: @black;
         transition: @transition;
     }
+	.com-panel-3{
+		border-radius: 10px;
+		.dot{
+			background: transparent;
+			transition: @transition;
+		}
+	}
 
     .panel-header {
         background: #fff;
@@ -238,6 +247,7 @@
     }
 
     .fengji-icon {
+		box-shadow: inset 1.5px -1px 1px 0px @deepblue;
         svg use {
             fill      : @deepblue;
             transition: @transition;
@@ -287,17 +297,18 @@
         transition    : @transition;
     }
 
-    .com-panel.line::before {
-        width     : 4px;
-        height    : 4px;
-        background: @black;
-        margin    : 0.85vh 0.556vh 0vh 0.85vh;
-        transition: @transition;
-    }
-
     .com-panel.line {
         border-left: 0;
         transition : @transition;
+		margin-left: 1px;
+		z-index: 1;
+		font-weight: 900;
+		&::before {
+			width     : 0;
+			height    : 0;
+			margin    : 0;
+			transition: @transition;
+		}
     }
 
     .lightMenu {
@@ -321,34 +332,36 @@
     .main-body {
         transition : @transition;
     }
-
-    .dot.top-left {
-        top       : 0.85vh;
-        left      : 0.85vh;
-        background: @black;
-        transition: @transition;
-    }
-
-    .dot.bottom-left {
-        bottom    : 0.85vh;
-        left      : 0.85vh;
-        background: @black;
-        transition: @transition;
-    }
-
-    .dot.top-rignt {
-        top       : 0.85vh;
-        right     : 0.85vh;
-        background: @black;
-        transition: @transition;
-    }
-
-    .dot.bottom-right {
-        bottom    : 0.85vh;
-        right     : 0.85vh;
-        background: @black;
-        transition: @transition;
-    }
+	// .dot{
+		
+	// }
+    // .dot.top-left {
+    //     top       : 0.85vh;
+    //     left      : 0.85vh;
+    //     background: @black;
+    //     transition: @transition;
+    // }
+
+    // .dot.bottom-left {
+    //     bottom    : 0.85vh;
+    //     left      : 0.85vh;
+    //     background: @black;
+    //     transition: @transition;
+    // }
+
+    // .dot.top-rignt {
+    //     top       : 0.85vh;
+    //     right     : 0.85vh;
+    //     background: @black;
+    //     transition: @transition;
+    // }
+
+    // .dot.bottom-right {
+    //     bottom    : 0.85vh;
+    //     right     : 0.85vh;
+    //     background: @black;
+    //     transition: @transition;
+    // }
 
     .lightMenu .el-menu--collapse {
         width     : 54px;

+ 7 - 19
src/assets/styles/theme/light/light-qt.less

@@ -221,30 +221,18 @@
         color: @black;
     }
 
-    .title {
-        background: @white;
-    }
+    // .title {
+    //     background: @white;
+    // }
 
     //专家知识-故障知识列表
-    .know-info .table-card tr[data-v-68c7e6e4] {
+    .know-info .table-card tr {
         font-size: 12px;
         color: @black;
     }
 
     //样本库-故障训练样本库
-    .mg-b-8 {
-        background: @gray-2;
-    }
-
-    .mg-b-8[data-v-85e4c29a] {
-        width: 150vh;
-    }
-
-    .main-body .query .query-items[data-v-2fab00f5] {
-        padding-bottom: 1vh;
-    }
-
-    .main-body .query .query-items[data-v-2d26d8fa] {
+    .main-body .query .query-items {
         padding-bottom: 1vh;
     }
 
@@ -258,8 +246,8 @@
         background: @deepblue;
     }
 
-    .swiperBox .imageBox1 .imgItem1 .img1[data-v-247ee960]:hover,
-    .itemBox .imageBox1 .imgItem1 .img1[data-v-247ee960]:hover {
+    .swiperBox .imageBox1 .imgItem1 .img1:hover,
+    .itemBox .imageBox1 .imgItem1 .img1:hover {
         border: 3px solid @deepblue;
     }
 

+ 5 - 1
src/assets/styles/theme/light/setting.less

@@ -10,4 +10,8 @@
 @darkgray-1 : #7b7d7e;
 @green      : #05bb4c;
 @deepblueBg : 54, 52, 142;
-@gray-2:#dcdddf;
+@gray-2:#dcdddf;
+@gray-3     : #EDEDED;
+
+@fadePurple     :#DFDEEC;
+@gray-font      :#7a8385;

+ 0 - 12
src/assets/styles/theme/light/zhjx.less

@@ -426,18 +426,6 @@
 	  }
   }
   
-  .wind-site .page-common-body .page-common-body-menu .page-common-body-menu-box {
-	  .page-common-body-menu-item{
-	  	  border: 0.093vh solid rgba(@deepblue, 0.4);
-		  &.active{
-			  background:transparent;
-			  border: 0.093vh solid #edbf03;
-			  &::after{
-				border: 0.093vh solid #edbf03;
-			  }
-		  }
-	  }
-  }
   .main-body input{
 	  color:@black;
 	  background:@white;

+ 5 - 1
src/components/chart/bar/multiple-bar-chart.vue

@@ -387,7 +387,11 @@ export default {
 
   watch: {
     "$store.state.themeName"() {
-      this.initChart();
+      let myChart = echarts.init(document.getElementById(this.id));
+      myChart.dispose();
+      setTimeout(() => {
+        this.initChart();
+      }, 300);
     },
   },
 };

+ 2 - 2
src/components/chart/pie/dash-pie-chart.vue

@@ -97,13 +97,13 @@ export default {
                         offset: 0,
                         color: $("#appBody").is(".dark")
                           ? partten.getColor(this.color) + "01"
-                          : "rgb(57, 54, 143)",
+                          : partten.getColor('deepblue') + "01",
                       },
                       {
                         offset: 1,
                         color: $("#appBody").is(".dark")
                           ? partten.getColor(this.color) + "ff"
-                          : "rgb(57, 54, 143)",
+                          : partten.getColor('deepblue') + "ff",
                       },
                     ]),
                   ],

+ 1 - 1
src/components/chart/pie/dual-pie-chart.vue

@@ -193,7 +193,7 @@ export default {
             itemStyle: {
               normal: {
                 borderWidth:this.$store.state.themeName === "dark" ? util.vh(14): util.vh(8),
-                borderColor: "#071812",
+                borderColor: this.$store.state.themeName === "dark" ? "#071812" : '#fff',
               },
             },
             label: {

+ 17 - 17
src/components/chart/radar/radar-chart.vue

@@ -79,14 +79,14 @@ export default {
 	      },
 	  blue:{
 	        areaStyle: {
-	          color: 'rgba(75,85,174, 0.9)',
+	          color: 'none',
 	        },
 	        lineStyle: {
-	          color: "rgba(255,255,255, 0.85)",
+	          color: "rgba(75,85,174, 0.9)",
 	        },
 	        itemStyle: {
 	          color:'rgba(75,85,174, 0.9)',
-	          borderColor: "rgba(255,255,255, 0.5)",
+	          borderColor: "rgba(75,85,174, 0.9)",
 	          borderWidth: 0.5,
 	        },
 	      }
@@ -171,13 +171,13 @@ export default {
             },
             axisLine: {
               lineStyle: {
-                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : "#000"  + 40,
+                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : partten.getColor("grayl")  + 40,
               },
             },
             splitLine: {
               lineStyle: {
                 width: 1,
-                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : "#000"  + 40,
+                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : partten.getColor("grayl")  + 40,
               },
             },
             splitArea: {
@@ -198,7 +198,7 @@ export default {
             },
             axisLine: {
               lineStyle: {
-                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : "#000"  + 40,
+                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : partten.getColor("grayl")  + 40,
                 shadowBlur: 1,
                 shadowColor: "#fff",
                 shadowOffsetX: 0.5,
@@ -208,7 +208,7 @@ export default {
             splitLine: {
               lineStyle: {
                 width: 1,
-                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : "#000"  + 40,
+                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : partten.getColor("grayl")  + 40,
                 shadowColor: "#fff",
                 shadowBlur: 0,
                 shadowOffsetX: 0.5,
@@ -232,13 +232,13 @@ export default {
             },
             axisLine: {
               lineStyle: {
-                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : "#000"  + 40,
+                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : partten.getColor("grayl")  + 40,
               },
             },
             splitLine: {
               lineStyle: {
                 width: 1,
-                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") : "#000",
+                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") : partten.getColor("deepblue")	,
               },
             },
             splitArea: {
@@ -256,7 +256,7 @@ export default {
                     },
                     {
                       offset: 1,
-                      color: this.$store.state.themeName === "dark" ? partten.getColor("green") + 60 : partten.getColor("deepblue") + 60, // 100% 处的颜色
+                      color: this.$store.state.themeName === "dark" ? partten.getColor("green") + 60 : partten.getColor("deepblue") + 20, // 100% 处的颜色
                     },
                   ],
                   global: false, // 缺省为 false
@@ -275,13 +275,13 @@ export default {
             },
             axisLine: {
               lineStyle: {
-                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : "#000"  + 40,
+                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : partten.getColor("grayl")  + 40,
               },
             },
             splitLine: {
               lineStyle: {
                 width: 1,
-                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") : "#000",
+                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") : partten.getColor("grayl"),
               },
             },
             splitArea: {
@@ -299,7 +299,7 @@ export default {
                     },
                     {
                       offset: 1,
-                      color: this.$store.state.themeName === "dark" ? partten.getColor("green") + 60 : partten.getColor("deepblue") + 60, // 100% 处的颜色
+                      color: this.$store.state.themeName === "dark" ? partten.getColor("green") + 60 : partten.getColor("deepblue") + 20, // 100% 处的颜色
                     },
                   ],
                   global: false, // 缺省为 false
@@ -318,13 +318,13 @@ export default {
             },
             axisLine: {
               lineStyle: {
-                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : "#000"  + 40,
+                color: partten.getColor("gray") + 40,
               },
             },
             splitLine: {
               lineStyle: {
                 width: 1,
-                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") : "#000",
+                color: partten.getColor("gray"),
               },
             },
             splitArea: {
@@ -345,13 +345,13 @@ export default {
             },
             axisLine: {
               lineStyle: {
-                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") + 40 : "#000"  + 40,
+                color: partten.getColor("grayl"),
               },
             },
             splitLine: {
               lineStyle: {
                 width: 1,
-                color: this.$store.state.themeName === "dark" ? partten.getColor("gray") : "#000",
+                color: partten.getColor("grayl"),
               },
             },
             splitArea: {

+ 4 - 1
src/tools/basicTool.js

@@ -208,7 +208,9 @@ export default {
 
 
 
-  // JS 触发全屏功能
+  /**
+   * JS 触发全屏功能
+   */
   requestFullscreen() {
     //全屏
     const docElm = document.documentElement;
@@ -289,6 +291,7 @@ export default {
     isNumber: /^(-?\d+)(\.\d+)?$/
   },
 
+  // elementUI 自定义表单效验规则
   elCkeck: {
     isNumber(rule, value, callback) {
       if (value === '') {

+ 3 - 1
src/views/About.vue

@@ -355,7 +355,7 @@ export default {
           fontSize: util.vh(16),
           color: this.$store.state.themeName === "dark" ? "#fff" : "#000",
         },
-        //图例-每一条数据的名字叫销量
+        //图例-每一条数据的名字
         legend: {
           show: true,
           data: ["风速功率", "实际功率", "最优功率"],
@@ -450,7 +450,9 @@ export default {
         series,
       };
 
+      myChart.off("brushSelected");
       myChart.on("brushSelected", (params) => {
+        console.log(123123, params);
         const selected = params.batch[0]?.selected;
         let selectRes = [];
         selected?.forEach((pEle) => {

File diff suppressed because it is too large
+ 510 - 569
src/views/Decision/Decision1.vue


+ 1 - 1
src/views/Decision/Decision1Mx.vue

@@ -52,7 +52,7 @@
 					</div>
 				</div>
 			</div>
-			<div class="query-actions">
+			<div class="query-actions" style="margin-left:0px">
 				<button class="btn" @click="mxClick()">搜索</button>
 				<button class="btn green" >明细信息</button>
 				<button class="btn" @click="exportExcel()">导出</button>

File diff suppressed because it is too large
+ 1048 - 1166
src/views/Decision/Decision2.vue


+ 57 - 16
src/views/HealthControl/Health10.vue

@@ -30,9 +30,13 @@
                 <tr>
                   <th rowspan="1" class="type1" style="width: 50px"></th>
                   <th rowspan="1" class="type1" style="width: 105px">健康度</th>
-                  <th rowspan="2" class="type1" style="width: 400px">MTBF(H/H)</th>
+                  <th rowspan="2" class="type1" style="width: 400px">
+                    MTBF(H/H)
+                  </th>
                   <th rowspan="1" class="type1" style="width: 180px"></th>
-                  <th rowspan="1" class="type1" style="width: 100px">MTTR(H)</th>
+                  <th rowspan="1" class="type1" style="width: 100px">
+                    MTTR(H)
+                  </th>
                 </tr>
               </thead>
             </table>
@@ -45,13 +49,22 @@
                         {{ item[1] }}
                       </td>
                       <td style="width: 105px">
-                        <div :style="'background-color: ' + item[0] + ';width:10px;height:10px;margin:0 auto;'"></div>
+                        <div
+                          :style="
+                            'background-color: ' +
+                            item[0] +
+                            ';width:10px;height:10px;margin:0 auto;'
+                          "
+                        ></div>
                       </td>
                       <td style="width: 400px">
                         <div class="percent-item">
                           {{ item[3] }}%
                           <div class="percent-bar" style="margin-right: 4px">
-                            <div class="percent-value" :style="'width:' + item[3] + '%'"></div>
+                            <div
+                              class="percent-value"
+                              :style="'width:' + item[3] + '%'"
+                            ></div>
                           </div>
                           <!-- 剩余9999/建个故障9999 -->
                           {{ item[4] }}
@@ -74,9 +87,17 @@
       <el-col :span="12">
         <div class="chart-title">
           <div class="title-panel" style="">
-            <span style="text-align: left; padding-left: 20px; font-size: 12px">故障信息 </span>
-            <span class="des-title">预计损失电量<span class="num">73824.0</span><span class="unit">Kwh</span></span>
-            <span class="des-title">预计检修时长<span class="num">29.33</span><span class="unit">H</span></span>
+            <span style="text-align: left; padding-left: 20px; font-size: 12px"
+              >故障信息
+            </span>
+            <span class="des-title"
+              >预计损失电量<span class="num">73824.0</span
+              ><span class="unit">Kwh</span></span
+            >
+            <span class="des-title"
+              >预计检修时长<span class="num">29.33</span
+              ><span class="unit">H</span></span
+            >
           </div>
           <!-- <img-line-chart
             height="270px"
@@ -87,13 +108,17 @@
     </el-row>
     <div class="fc-info mg-b-16">
       <panel :title="'曲线'" :showLine="false">
-        <zoom-line-chart height="28vh" :list="powerChartData.value" :units="powerChartData.units" />
+        <zoom-line-chart
+          height="28vh"
+          :list="powerChartData.value"
+          :units="powerChartData.units"
+        />
       </panel>
     </div>
     <HealthReport
       :show="healthReportShow"
       :params="reportparams"
-	  ref="eport"
+      ref="eport"
       @closed="
         (res) => {
           this.healthReportShow = false;
@@ -170,7 +195,7 @@ export default {
             click(e, row) {
               // that.recorddate = row.date;
               that.healthReportShow = true;
-			  that.$refs.eport.getReport(that.wtId,row.date);
+              that.$refs.eport.getReport(that.wtId, row.date);
             },
           },
         ],
@@ -242,7 +267,11 @@ export default {
             name: "故障名称",
             field: "v1",
             template: function (data) {
-              return "<div style='overflow: hidden;text-overflow:ellipsis;white-space: nowrap;'>" + data + "</div>";
+              return (
+                "<div style='overflow: hidden;text-overflow:ellipsis;white-space: nowrap;'>" +
+                data +
+                "</div>"
+              );
             },
           },
           {
@@ -329,8 +358,9 @@ export default {
       this.getWeather();
     },
     switchWt(data) {
-      this.$router.push(`/health/health10/${data.wpId}/${data.wtId}`);
-      this.init();
+      if (data.wpId && data.wtId) {
+        this.$router.replace(`/health/health10/${data.wpId}/${data.wtId}`);
+      }
     },
     // 获取等级评价
     getTop5() {
@@ -366,7 +396,9 @@ export default {
       for (let i = 0; i < day; i++) {
         tableData.push({
           index: i + 1,
-          date: new Date(new Date().getTime() - 3600 * 1000 * 24 * (i + 1)).formatDate("yyyy-MM-dd hh:mm:ss"),
+          date: new Date(
+            new Date().getTime() - 3600 * 1000 * 24 * (i + 1)
+          ).formatDate("yyyy-MM-dd hh:mm:ss"),
           wtId: this.wtId,
         });
       }
@@ -390,8 +422,12 @@ export default {
             const item = {
               index: index + 1,
               warnDesc: ele.warnDesc,
-              startTime: new Date(ele.startTime).formatDate("yyyy-MM-dd hh:mm:ss"),
-              stopTime: new Date(ele.stopTime).formatDate("yyyy-MM-dd hh:mm:ss"),
+              startTime: new Date(ele.startTime).formatDate(
+                "yyyy-MM-dd hh:mm:ss"
+              ),
+              stopTime: new Date(ele.stopTime).formatDate(
+                "yyyy-MM-dd hh:mm:ss"
+              ),
               stopHours: ele.stopHours,
             };
             if (index < 5) {
@@ -502,6 +538,11 @@ export default {
       }
     },
   },
+  watch: {
+    $route() {
+      this.init();
+    },
+  },
 };
 </script>
 

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

@@ -48,18 +48,22 @@ export default {
         {
           icon: "svg-q实时监视",
           path: "/health/health0",
+          text: "风机实时监视",
         },
         {
           icon: "svg-q健康",
           path: "/health/health10",
+          text: "风机健康总览",
         },
         {
           icon: "svg-q趋势",
           path: "/health/health4/healthLineChart2",
+          text: "风机健康趋势",
         },
         {
           icon: "svg-q曲线",
           path: "/health/health4/healthLineChart",
+          text: "风机健康曲线",
         },
       ],
     };
@@ -74,8 +78,9 @@ export default {
   },
 
   methods: {
-    clickMenu: function (index) {
+    clickMenu(index) {
       this.activeIndex = index;
+      this.$store.dispatch("changeModuleName", this.menuDatas[index].text);
     },
   },
 };

File diff suppressed because it is too large
+ 619 - 529
src/views/HealthControl/HealthDay.vue


+ 46 - 31
src/views/HealthControl/healthLineChart.vue

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

+ 108 - 34
src/views/HealthControl/healthLineChart2.vue

@@ -19,7 +19,11 @@
       </div>
       <div class="info-chart">
         <panel class="info-chart-panel" :title="'健康趋势'">
-          <vertival-bar-line-chart :height="'310px'" :bardata="bardata" :lineData="lineData"/>
+          <vertival-bar-line-chart
+            :height="'310px'"
+            :bardata="bardata"
+            :lineData="lineData"
+          />
         </panel>
       </div>
     </div>
@@ -40,25 +44,39 @@ import NormalLineChart from "../../components/chart/line/normal-line-chart.vue";
 import SvgIcon from "../../components/coms/icon/svg-icon.vue";
 import Panel from "../../components/coms/panel/panel.vue";
 import Table from "../../components/coms/table/table.vue";
-import WtChooser from "@com/coms/wt-chooser/wt-chooser.vue"
+import WtChooser from "@com/coms/wt-chooser/wt-chooser.vue";
 export default {
   setup() {},
-  components: { SvgIcon, Panel, VertivalBarLineChart, NormalLineChart, Table, WtChooser },
+  components: {
+    SvgIcon,
+    Panel,
+    VertivalBarLineChart,
+    NormalLineChart,
+    Table,
+    WtChooser,
+  },
   data() {
     return {
       infoList: [
         // {title: '24小时健康趋势', svgid: 'svg-24-houre', active: false, type: 'houre'},
         { title: "7日健康趋势", svgid: "svg-h-day", active: true, type: "day" },
-        { title: "30日健康趋势", svgid: "svg-h-month", active: false, type: "month"},
+        {
+          title: "30日健康趋势",
+          svgid: "svg-h-month",
+          active: false,
+          type: "month",
+        },
       ],
       tableData: {
         column: [
-          { name: "部件名称",field: "name" },
-          { name: "MTBF(h)",field: "v1", is_num: true },
-          { name: "MTTR(h)",field: "v2", is_num: true },
-          { name: "损失电量(kw/h)",field: "v3",is_num: true },
-          { name: "当前状态",field: "v4",
-            template: function(data) {
+          { name: "部件名称", field: "name" },
+          { name: "MTBF(h)", field: "v1", is_num: true },
+          { name: "MTTR(h)", field: "v2", is_num: true },
+          { name: "损失电量(kw/h)", field: "v3", is_num: true },
+          {
+            name: "当前状态",
+            field: "v4",
+            template: function (data) {
               if (data == 1) return "<div class='dot green'></div>";
               else if (data == 2) return "<div class='dot purple'></div>";
               else if (data == 3) return "<div class='dot yellow'></div>";
@@ -72,25 +90,28 @@ export default {
       lineData: [],
       wtId: undefined,
       wpId: undefined,
-      hisValue: {},  //健康走势图
+      hisValue: {}, //健康走势图
     };
   },
   created() {
     this.init();
   },
-  methods:{
-    init(){
+  methods: {
+    init() {
       this.wtId = this.$route.params.wtId;
       this.wpId = this.$route.params.wpId;
       this.requestCoulometry(2);
       this.requestHisValue();
       this.requestMttrrand();
     },
-    switchWt(data){
-      this.$router.push(`/health/health4/healthLineChart2/${data.wpId}/${data.wtId}`);
-      this.init();
+    switchWt(data) {
+      if (data.wpId && data.wtId) {
+        this.$router.replace(
+          `/health/health4/healthLineChart2/${data.wpId}/${data.wtId}`
+        );
+      }
     },
-     // 未确认缺陷按钮下的健康趋势选项
+    // 未确认缺陷按钮下的健康趋势选项
     onClickInfo(item) {
       this.infoList.forEach((element) => {
         if (item.type == element.type) {
@@ -128,46 +149,99 @@ export default {
       });
     },
     //风机健康走势图
-    requestHisValue(){
+    requestHisValue() {
       let that = this;
       that.API.requestData({
         method: "POST",
         subUrl: "healthsub/findWtHisValueForBj",
         data: { wtId: that.wtId },
         success(res) {
-          if(res.code == 200){
+          if (res.code == 200) {
             let data = res.data;
-            data.time = data.time.slice(0, 65)
-            that.hisValue = data
+            data.time = data.time.slice(0, 65);
+            that.hisValue = data;
           }
         },
       });
     },
     //部件健康情况
-    requestMttrrand(){
+    requestMttrrand() {
       let that = this;
       that.API.requestData({
         method: "POST",
         subUrl: "healthsub/getWtMttrandMtbfByBj",
         data: { wtId: that.wtId },
         success(res) {
-          if(res.code == 200){
+          if (res.code == 200) {
             let data = res.data;
             that.tableData.data = [
-              {name:data.clx[1], v1:data.clx[4], v2:data.clx[5], v3:data.clx[6], v4:data.clx[0]},
-              {name:data.fdj[1], v1:data.fdj[4], v2:data.fdj[5], v3:data.fdj[6], v4:data.fdj[0]},
-              {name:data.bj[1], v1:data.bj[4], v2:data.bj[5], v3:data.bj[6], v4:data.bj[0]},
-              {name:data.zk[1], v1:data.zk[4], v2:data.zk[5], v3:data.zk[6], v4:data.zk[0]},
-              {name:data.zz[1], v1:data.zz[4], v2:data.zz[5], v3:data.zz[6], v4:data.zz[0]},
-              {name:data.ph[1], v1:data.ph[4], v2:data.ph[5], v3:data.ph[6], v4:data.ph[0]},
-              {name:data.jc[1], v1:data.jc[4], v2:data.jc[5], v3:data.jc[6], v4:data.jc[0]},
-              {name:data.bpq[1], v1:data.bpq[4], v2:data.bpq[5], v3:data.bpq[6], v4:data.bpq[0]},
-            ]
+              {
+                name: data.clx[1],
+                v1: data.clx[4],
+                v2: data.clx[5],
+                v3: data.clx[6],
+                v4: data.clx[0],
+              },
+              {
+                name: data.fdj[1],
+                v1: data.fdj[4],
+                v2: data.fdj[5],
+                v3: data.fdj[6],
+                v4: data.fdj[0],
+              },
+              {
+                name: data.bj[1],
+                v1: data.bj[4],
+                v2: data.bj[5],
+                v3: data.bj[6],
+                v4: data.bj[0],
+              },
+              {
+                name: data.zk[1],
+                v1: data.zk[4],
+                v2: data.zk[5],
+                v3: data.zk[6],
+                v4: data.zk[0],
+              },
+              {
+                name: data.zz[1],
+                v1: data.zz[4],
+                v2: data.zz[5],
+                v3: data.zz[6],
+                v4: data.zz[0],
+              },
+              {
+                name: data.ph[1],
+                v1: data.ph[4],
+                v2: data.ph[5],
+                v3: data.ph[6],
+                v4: data.ph[0],
+              },
+              {
+                name: data.jc[1],
+                v1: data.jc[4],
+                v2: data.jc[5],
+                v3: data.jc[6],
+                v4: data.jc[0],
+              },
+              {
+                name: data.bpq[1],
+                v1: data.bpq[4],
+                v2: data.bpq[5],
+                v3: data.bpq[6],
+                v4: data.bpq[0],
+              },
+            ];
           }
         },
       });
-    }
-  }
+    },
+  },
+  watch: {
+    $route() {
+      this.init();
+    },
+  },
 };
 </script>
 

+ 95 - 42
src/views/Home/components/map.vue

@@ -26,9 +26,11 @@
       </div>
     </div>
     <div class="name-box" v-if="currentMode != 'NX'">
-      <div class="name-box-title" @click="onBackStation">{{ currentTitle }}</div>
+      <div class="name-box-title" @click="onBackStation">
+        {{ currentTitle }}
+      </div>
       <div class="name-box-period" v-show="currentPeriod != 'ZERO'">
-        <span class="name-box-period-label">{{textType}}:</span>
+        <span class="name-box-period-label">{{ textType }}:</span>
         <span class="name-box-period-value"
           >{{ currentName }}{{ currentPeriod }}</span
         >
@@ -118,34 +120,85 @@
     </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" @changePeriod="changePeriod" ></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>
-	  
+      <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>
-	  
+      <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>
-	  
+      <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>
-	  
-	  <!-- 马场湖 -->
-	  <MCHGDC v-if="mapName === 'MCH_GDC'" :data="sourceMap" @clickFj="clickFj" @changePeriod="changePeriod" ></MCHGDC>
-	  
-	  <!-- 大武口 -->
-	  <DWKGDC v-if="mapName === 'DWK_GDC'" :data="sourceMap" @clickFj="clickFj" @changePeriod="changePeriod" ></DWKGDC>
-	  
-	  <!-- 平罗 -->
-	  <PLGDC v-if="mapName === 'PL_GDC'" :data="sourceMap" @clickFj="clickFj" @changePeriod="changePeriod" ></PLGDC>
-	  
-	  <!-- 宣和 -->
-	  <XHGDC v-if="mapName === 'XH_GDC'" :data="sourceMap" @clickFj="clickFj" @changePeriod="changePeriod" ></XHGDC>
+      <SBQFDC
+        v-if="mapName === 'SBQ_FDC'"
+        :data="sourceMap"
+        @clickFj="clickFj"
+        @changePeriod="changePeriod"
+      ></SBQFDC>
+
+      <!-- 马场湖 -->
+      <MCHGDC
+        v-if="mapName === 'MCH_GDC'"
+        :data="sourceMap"
+        @clickFj="clickFj"
+        @changePeriod="changePeriod"
+      ></MCHGDC>
+
+      <!-- 大武口 -->
+      <DWKGDC
+        v-if="mapName === 'DWK_GDC'"
+        :data="sourceMap"
+        @clickFj="clickFj"
+        @changePeriod="changePeriod"
+      ></DWKGDC>
+
+      <!-- 平罗 -->
+      <PLGDC
+        v-if="mapName === 'PL_GDC'"
+        :data="sourceMap"
+        @clickFj="clickFj"
+        @changePeriod="changePeriod"
+      ></PLGDC>
+
+      <!-- 宣和 -->
+      <XHGDC
+        v-if="mapName === 'XH_GDC'"
+        :data="sourceMap"
+        @clickFj="clickFj"
+        @changePeriod="changePeriod"
+      ></XHGDC>
     </div>
   </div>
 </template>
@@ -171,7 +224,7 @@ import MCHGDC from "./map/MCH_GDC.vue";
 import DWKGDC from "./map/DWK_GDC.vue";
 // 平罗
 import PLGDC from "./map/PL_GDC.vue";
-// 马场湖
+// 宣和
 import XHGDC from "./map/XH_GDC.vue";
 
 import SvgIcon from "../../../components/coms/icon/svg-icon.vue";
@@ -187,10 +240,10 @@ export default {
     NSSFDC,
     QSFDC,
     SBQFDC,
-	MCHGDC,
-	DWKGDC,
-	PLGDC,
-	XHGDC,
+    MCHGDC,
+    DWKGDC,
+    PLGDC,
+    XHGDC,
     SvgIcon,
   },
   props: {
@@ -221,7 +274,7 @@ export default {
   // 数据
   data() {
     return {
-		textType:'期次',
+      textType: "期次",
       fcId: "",
       safeDay: "",
       showType: "all",
@@ -271,7 +324,7 @@ export default {
       this.$emit("mapClicks", wpId, this.tabs[index].text);
     },
     backMap(wpId, planBtnName) {
-		this.activeTab = 0;
+      this.activeTab = 0;
       this.currentMode = "NX";
       this.mapName = "nx";
       this.mapIndex = -1;
@@ -283,24 +336,24 @@ export default {
       this.mapIndex = 1;
       this.$emit("mapClick", wpId, planBtnName);
     },
-    clickFj(wpId, planBtnName,textType) {
+    clickFj(wpId, planBtnName, textType) {
       this.$emit("mapClick", wpId, planBtnName);
     },
-    changePeriod: function (name, period,textType) {
-		if(textType){
-			this.textType = '期次'
-		}else{
-			this.textType = '线路'
-		}
+    changePeriod: function (name, period, textType) {
+      if (textType) {
+        this.textType = "期次";
+      } else {
+        this.textType = "线路";
+      }
       this.currentName = name;
       this.currentPeriod = period;
       this.currentMode = "SUB";
     },
     // 返回当前场站
-    onBackStation(){
-      this.currentPeriod = "ZERO"
+    onBackStation() {
+      this.currentPeriod = "ZERO";
       this.$emit("backStation");
-    }
+    },
   },
   watch: {
     wpId(res) {

File diff suppressed because it is too large
+ 112 - 52
src/views/Home/components/map/svg-map-nx.vue


+ 1 - 1
src/views/WindSite/pages/Info/Base-Info.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="wind-site-base-info">
     <!-- 电机基本信息 -->
-    <el-row class="mg-b-8">
+    <el-row class="mg-b-8 wind-site-other">
       <div class="wind-site-name green mg-r-8">
         <span class="svg-icon svg-icon-green mg-r-8">
           <svg-icon class="" :svgid="'svg-normal-power'" />

+ 4 - 2
src/views/WindSite/pages/Info/Info.vue

@@ -20,9 +20,11 @@
           <!-- 使用 v-show 首次全部加载 之后隐藏 点击后显示 -->
           <base-info v-show="InfoBtns.activeIndex == 0" :data="sourceMap" />
           <!-- <base-info v-if="InfoBtns.activeIndex == 2" /> -->
-          <div :style="$store.state.themeName === 'dark' ? 'text-align:center;' : 'text-align:center;background:#fff;'">
+		  <div style="justify-content: center;display: flex;">
             <StandAloneImg class="sai" v-show="InfoBtns.activeIndex != 0" :activeIndex="InfoBtns.activeIndex" @selectSvg="selectSvg"></StandAloneImg>
-          </div>
+		  </div>
+          <!-- <div :style="$store.state.themeName === 'dark' ? 'text-align:center;' : 'text-align:center;background:#fff;'">
+          </div> -->
           <generator class="saig" v-show="InfoBtns.activeIndex != 0" :index="InfoBtns.activeIndex" :data="sourceMap"></generator>
         </el-col>
         <el-col :span="8">

File diff suppressed because it is too large
+ 389 - 821
src/views/WindSite/pages/Info/StandAloneImg.vue


BIN
src/views/WindSite/pages/Info/standAloneImg-green.png


BIN
src/views/WindSite/pages/Info/standAloneImg-white.png


+ 1 - 1
src/views/WindSite/pages/Inverter-Info.vue

@@ -571,7 +571,7 @@ export default {
               .state-list {
                 outline: 1px solid fade(@gray, 40);
                 margin-top: 8px;
-                height: calc(100% - 42px);
+                height: calc(100% - 45px);
 
                 .list-item {
                   display: flex;

BIN
src/views/WindSite/pages/Tower/WindTower-blue-cicle.png


BIN
src/views/WindSite/pages/Tower/WindTower-blue-fz.png


BIN
src/views/WindSite/pages/Tower/WindTower-blue-line.png


BIN
src/views/WindSite/pages/Tower/WindTower-blue-sy.png


BIN
src/views/WindSite/pages/Tower/WindTower-blue-tzz.png


BIN
src/views/WindSite/pages/Tower/WindTower-green-cicle.png


BIN
src/views/WindSite/pages/Tower/WindTower-green-line.png


BIN
src/views/WindSite/pages/Tower/WindTower-green-tzz.png


File diff suppressed because it is too large
+ 29 - 80
src/views/WindSite/pages/Tower/WindTower.vue


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

@@ -17,7 +17,7 @@
             placement="bottom"
             :show-after="500"
             :enterable="false"
-            hide-after="10"
+            :hide-after="10"
           >
             <div
               class="menu-icon svg-icon"

+ 80 - 14
src/views/report/dlyc.vue

@@ -5,16 +5,16 @@
 				<div class="query-item">
 					<div class="lable">选择日期:</div>
 					<div class="search-input">
-						<el-date-picker v-model="month" type="month" value-format="YYYY-MM" placeholder="选择日期"
-							popper-class="date-select">
-						</el-date-picker>
+						<el-date-picker v-model="month" type="month" value-format="YYYY-MM" placeholder="选择日期" popper-class="date-select"> </el-date-picker>
 					</div>
 				</div>
+				<div class="query-actions">
+				  <button class="btn" @click="exportExcel()">导出</button>
+				</div>
 			</div>
 		</div>
 		<panel :title="monthTitle + '发电量预测'" :showLine="false">
-			<el-table :data="tableData" height="85vh" style="width: 100%" show-summary :summary-method="getSummaries"
-				:span-method="yhmxdbMethod">
+			<el-table :data="tableData" height="85vh" style="width: 100%;" class="" show-summary :summary-method="getSummaries" :span-method="yhmxdbMethod">
 				<el-table-column fixed prop="region" label="名称" width="120" />
 				<el-table-column fixed prop="speed" label="" width="50" />
 				<el-table-column label="日期">
@@ -24,6 +24,15 @@
 				<el-table-column fixed="right" prop="hj" label="平均风速/合计" width="100" align="center" />
 				<el-table-column fixed="right" prop="dqhj" label="地区合并" width="100" align="center" />
 			</el-table>
+			<el-table :data="tableDataExport" height="85vh" style="width: 100%;display: none;" id="out-table" :span-method="yhmxdbMethod">
+				<el-table-column prop="region" label="名称" width="120" />
+				<el-table-column prop="speed" label="" width="50" />
+				<el-table-column label="日期">
+					<el-table-column v-for="(item, index) in dateS" :key="index" :prop="item.prop" :label="item.label" width="70" align="center" />
+				</el-table-column>
+				<el-table-column prop="hj" label="平均风速/合计" width="100" align="center" />
+				<el-table-column prop="dqhj" label="地区合并" width="100" align="center" />
+			</el-table>
 		</panel>
 	</div>
 </template>
@@ -31,9 +40,13 @@
 <script>
 	import $ from "jquery";
 	import Panel from "@/components/coms/panel/panel.vue";
+	import FileSaver from "file-saver";
+	    import XLSX from "xlsx";
 	export default {
 		components: {
 			Panel,
+			FileSaver,
+			XLSX
 		},
 		data() {
 			return {
@@ -42,6 +55,7 @@
 				spanArr: [],
 				pos: 0,
 				spanArrHj: [],
+				SUM:[],
 				dateS: [{
 						prop: "01",
 						label: 1,
@@ -58,10 +72,12 @@
 					dqhj: 6,
 					"01": 55,
 					wpid: "NSS_FDC",
-				}, ],
+				}],
+				tableDataExport:[]
 			};
 		},
 		created() {
+			this.monthTit(this.month);
 			this.list(new Date(this.month).valueOf());
 		},
 		mounted() {
@@ -221,7 +237,7 @@
 					return [_row, _col];
 				}
 			},
-			getSpanArr(data) {
+			getSpanArr(data,port) {
 				this.spanArr = [];
 				for (var i = 0; i < data.length; i++) {
 					if (i === 0) {
@@ -231,6 +247,9 @@
 						if (data[i].region === data[i - 1].region) {
 							this.spanArr[this.pos] += 1;
 							this.spanArr.push(0);
+						}else if (data[i].region === '合计') {
+							this.spanArr.push(1);
+							this.pos = i;
 						} else {
 							this.spanArr.push(1);
 							this.pos = i;
@@ -243,13 +262,18 @@
 					if (ele === 2) {
 						idx.push(index + 2);
 						spanArrIndex.push(1);
-					} else if (this.spanArr[index - 1] === 2) {
+					} else if (this.spanArr[index - 1] === 2 || ele === 1) {
 						spanArrIndex.push(1);
-					} else {
+					}else {
 						spanArrIndex.push(0);
 					}
 				});
-				idx.push(this.spanArr.length + 2);
+				
+				if(port){
+					idx.push(this.spanArr.length + 1);
+				}else{
+					idx.push(this.spanArr.length + 2);
+				}
 				idx.forEach((ele, index) => {
 					if (idx[index + 1]) {
 						spanArrIndex[ele] = idx[index + 1] - (ele + 2);
@@ -284,17 +308,59 @@
 					}
 				});
 				sums[sums.length - 1] = "";
+				this.SUM = sums;
 				return sums;
 			},
-		},
-		watch: {
-			month(e) {
-				this.list(new Date(e).valueOf());
+			tableDataE(tableData,SUM){
+				let tableDataExport = [...tableData],
+					sums = {},
+					dateS = [];
+				this.dateS.forEach(ele=>{
+					dateS.push(ele.prop)
+				})
+				SUM.forEach((ele,index)=>{
+					if(index === 0){
+						sums['region'] = ele;
+					}else if(index < SUM.length - 2 && index > 1){
+						sums[dateS[index - 2]] = ele;
+					}else if(index === SUM.length - 2){
+						sums['dqhj'] = ele
+					}else if(index === SUM.length - 1){
+						sums['hj'] = ele
+					}
+				})
+				tableDataExport.push(sums);
+				this.getSpanArr(tableDataExport,true);
+				this.tableDataExport = tableDataExport;
+				/* 从表生成工作簿对象 */
+				setTimeout(()=>{
+					let wb = XLSX.utils.table_to_book(document.querySelector('#out-table'))
+					/* 获取二进制字符串作为输出 */
+					var wbout = XLSX.write(wb, {bookType: 'xlsx',bookSST: true,type: 'array'})
+					try {
+					    FileSaver.saveAs(
+					    new Blob([wbout], { type: 'application/octet-stream' }),this.monthTitle + '发电量预测.xlsx')
+					} catch (e) {
+					    if (typeof console !== 'undefined') console.log(e, wbout)
+					}
+					return wbout
+				},1500)
+			},
+			exportExcel() {
+				this.tableDataE(this.tableData,this.SUM)
+			},
+			monthTit(e){
 				let tit = e.split("-");
 				if (tit[1].indexOf(0) != -1) {
 					tit[1] = tit[1].split("0")[1];
 				}
 				this.monthTitle = tit[0] + "年" + tit[1] + "月";
+			}
+		},
+		watch: {
+			month(e) {
+				this.list(new Date(e).valueOf());
+				this.monthTit(e);
 			},
 		},
 	};

+ 83 - 17
src/views/report/nhdl.vue

@@ -5,16 +5,16 @@
 				<div class="query-item">
 					<div class="lable">选择日期:</div>
 					<div class="search-input">
-						<el-date-picker v-model="month" type="month" value-format="YYYY-MM" placeholder="选择日期"
-							popper-class="date-select">
-						</el-date-picker>
+						<el-date-picker v-model="month" type="month" value-format="YYYY-MM" placeholder="选择日期" popper-class="date-select"> </el-date-picker>
 					</div>
 				</div>
+				<div class="query-actions">
+				  <button class="btn" @click="exportExcel()">导出</button>
+				</div>
 			</div>
 		</div>
 		<panel :title="monthTitle + '发电量预测'" :showLine="false">
-			<el-table :data="tableData" height="85vh" style="width: 100%" show-summary :summary-method="getSummaries"
-				:span-method="yhmxdbMethod">
+			<el-table :data="tableData" height="85vh" style="width: 100%;" class="" show-summary :summary-method="getSummaries" :span-method="yhmxdbMethod">
 				<el-table-column fixed prop="region" label="名称" width="120" />
 				<el-table-column fixed prop="speed" label="" width="50" />
 				<el-table-column label="日期">
@@ -24,6 +24,15 @@
 				<el-table-column fixed="right" prop="hj" label="平均风速/合计" width="100" align="center" />
 				<el-table-column fixed="right" prop="dqhj" label="地区合并" width="100" align="center" />
 			</el-table>
+			<el-table :data="tableDataExport" height="85vh" style="width: 100%;display: none;" id="out-table" :span-method="yhmxdbMethod">
+				<el-table-column prop="region" label="名称" width="120" />
+				<el-table-column prop="speed" label="" width="50" />
+				<el-table-column label="日期">
+					<el-table-column v-for="(item, index) in dateS" :key="index" :prop="item.prop" :label="item.label" width="70" align="center" />
+				</el-table-column>
+				<el-table-column prop="hj" label="平均风速/合计" width="100" align="center" />
+				<el-table-column prop="dqhj" label="地区合并" width="100" align="center" />
+			</el-table>
 		</panel>
 	</div>
 </template>
@@ -31,9 +40,13 @@
 <script>
 	import $ from "jquery";
 	import Panel from "@/components/coms/panel/panel.vue";
+	import FileSaver from "file-saver";
+	    import XLSX from "xlsx";
 	export default {
 		components: {
 			Panel,
+			FileSaver,
+			XLSX
 		},
 		data() {
 			return {
@@ -42,6 +55,7 @@
 				spanArr: [],
 				pos: 0,
 				spanArrHj: [],
+				SUM:[],
 				dateS: [{
 						prop: "01",
 						label: 1,
@@ -58,10 +72,12 @@
 					dqhj: 6,
 					"01": 55,
 					wpid: "NSS_FDC",
-				}, ],
+				}],
+				tableDataExport:[]
 			};
 		},
 		created() {
+			this.monthTit(this.month);
 			this.list(new Date(this.month).valueOf());
 		},
 		mounted() {
@@ -167,8 +183,9 @@
 							wpid: ele.wpid,
 							pjid: ele.pjid,
 						});
-						
-						dqhj[wpidName] != undefined ?(dqhj[wpidName] += power) :(dqhj[wpidName] = power);
+						dqhj[wpidName] != undefined ?
+							(dqhj[wpidName] += power) :
+							(dqhj[wpidName] = power);
 					} else {//匹配tableData的id,并分别传到夜间和白天data中
 						tableData.forEach((ele2, index2) => {
 							if (ele2.pjid === ele.pjid) {
@@ -199,7 +216,6 @@
 						}
 					});
 				});
-				console.log(arr)
 				that.getSpanArr(arr);
 				that.tableData = arr;
 			},
@@ -221,7 +237,7 @@
 					return [_row, _col];
 				}
 			},
-			getSpanArr(data) {
+			getSpanArr(data,port) {
 				this.spanArr = [];
 				for (var i = 0; i < data.length; i++) {
 					if (i === 0) {
@@ -231,6 +247,9 @@
 						if (data[i].region === data[i - 1].region) {
 							this.spanArr[this.pos] += 1;
 							this.spanArr.push(0);
+						}else if (data[i].region === '合计') {
+							this.spanArr.push(1);
+							this.pos = i;
 						} else {
 							this.spanArr.push(1);
 							this.pos = i;
@@ -243,13 +262,18 @@
 					if (ele === 2) {
 						idx.push(index + 2);
 						spanArrIndex.push(1);
-					} else if (this.spanArr[index - 1] === 2) {
+					} else if (this.spanArr[index - 1] === 2 || ele === 1) {
 						spanArrIndex.push(1);
-					} else {
+					}else {
 						spanArrIndex.push(0);
 					}
 				});
-				idx.push(this.spanArr.length + 2);
+				
+				if(port){
+					idx.push(this.spanArr.length + 1);
+				}else{
+					idx.push(this.spanArr.length + 2);
+				}
 				idx.forEach((ele, index) => {
 					if (idx[index + 1]) {
 						spanArrIndex[ele] = idx[index + 1] - (ele + 2);
@@ -284,17 +308,59 @@
 					}
 				});
 				sums[sums.length - 1] = "";
+				this.SUM = sums;
 				return sums;
 			},
-		},
-		watch: {
-			month(e) {
-				this.list(new Date(e).valueOf());
+			tableDataE(tableData,SUM){
+				let tableDataExport = [...tableData],
+					sums = {},
+					dateS = [];
+				this.dateS.forEach(ele=>{
+					dateS.push(ele.prop)
+				})
+				SUM.forEach((ele,index)=>{
+					if(index === 0){
+						sums['region'] = ele;
+					}else if(index < SUM.length - 2 && index > 1){
+						sums[dateS[index - 2]] = ele;
+					}else if(index === SUM.length - 2){
+						sums['dqhj'] = ele
+					}else if(index === SUM.length - 1){
+						sums['hj'] = ele
+					}
+				})
+				tableDataExport.push(sums);
+				this.getSpanArr(tableDataExport,true);
+				this.tableDataExport = tableDataExport;
+				/* 从表生成工作簿对象 */
+				setTimeout(()=>{
+					let wb = XLSX.utils.table_to_book(document.querySelector('#out-table'))
+					/* 获取二进制字符串作为输出 */
+					var wbout = XLSX.write(wb, {bookType: 'xlsx',bookSST: true,type: 'array'})
+					try {
+					    FileSaver.saveAs(
+					    new Blob([wbout], { type: 'application/octet-stream' }),this.monthTitle + '预测拟合风速电量.xlsx')
+					} catch (e) {
+					    if (typeof console !== 'undefined') console.log(e, wbout)
+					}
+					return wbout
+				},1500)
+			},
+			exportExcel() {
+				this.tableDataE(this.tableData,this.SUM)
+			},
+			monthTit(e){
 				let tit = e.split("-");
 				if (tit[1].indexOf(0) != -1) {
 					tit[1] = tit[1].split("0")[1];
 				}
 				this.monthTitle = tit[0] + "年" + tit[1] + "月";
+			}
+		},
+		watch: {
+			month(e) {
+				this.list(new Date(e).valueOf());
+				this.monthTit(e);
 			},
 		},
 	};

+ 0 - 1
src/views/report/weather.vue

@@ -235,7 +235,6 @@
 						pageSize: that.pageSize,
 					},
 					success(res) {
-						console.log(res)
 						var dataTab = [];
 						if (res.data) {
 						  res.data.list.forEach(item => {

+ 80 - 14
src/views/report/xzdl.vue

@@ -5,16 +5,16 @@
 				<div class="query-item">
 					<div class="lable">选择日期:</div>
 					<div class="search-input">
-						<el-date-picker v-model="month" type="month" value-format="YYYY-MM" placeholder="选择日期"
-							popper-class="date-select">
-						</el-date-picker>
+						<el-date-picker v-model="month" type="month" value-format="YYYY-MM" placeholder="选择日期" popper-class="date-select"> </el-date-picker>
 					</div>
 				</div>
+				<div class="query-actions">
+				  <button class="btn" @click="exportExcel()">导出</button>
+				</div>
 			</div>
 		</div>
 		<panel :title="monthTitle + '发电量预测'" :showLine="false">
-			<el-table :data="tableData" height="85vh" style="width: 100%" show-summary :summary-method="getSummaries"
-				:span-method="yhmxdbMethod">
+			<el-table :data="tableData" height="85vh" style="width: 100%;" class="" show-summary :summary-method="getSummaries" :span-method="yhmxdbMethod">
 				<el-table-column fixed prop="region" label="名称" width="120" />
 				<el-table-column fixed prop="speed" label="" width="50" />
 				<el-table-column label="日期">
@@ -24,6 +24,15 @@
 				<el-table-column fixed="right" prop="hj" label="平均风速/合计" width="100" align="center" />
 				<el-table-column fixed="right" prop="dqhj" label="地区合并" width="100" align="center" />
 			</el-table>
+			<el-table :data="tableDataExport" height="85vh" style="width: 100%;display: none;" id="out-table" :span-method="yhmxdbMethod">
+				<el-table-column prop="region" label="名称" width="120" />
+				<el-table-column prop="speed" label="" width="50" />
+				<el-table-column label="日期">
+					<el-table-column v-for="(item, index) in dateS" :key="index" :prop="item.prop" :label="item.label" width="70" align="center" />
+				</el-table-column>
+				<el-table-column prop="hj" label="平均风速/合计" width="100" align="center" />
+				<el-table-column prop="dqhj" label="地区合并" width="100" align="center" />
+			</el-table>
 		</panel>
 	</div>
 </template>
@@ -31,9 +40,13 @@
 <script>
 	import $ from "jquery";
 	import Panel from "@/components/coms/panel/panel.vue";
+	import FileSaver from "file-saver";
+	    import XLSX from "xlsx";
 	export default {
 		components: {
 			Panel,
+			FileSaver,
+			XLSX
 		},
 		data() {
 			return {
@@ -42,6 +55,7 @@
 				spanArr: [],
 				pos: 0,
 				spanArrHj: [],
+				SUM:[],
 				dateS: [{
 						prop: "01",
 						label: 1,
@@ -58,10 +72,12 @@
 					dqhj: 6,
 					"01": 55,
 					wpid: "NSS_FDC",
-				}, ],
+				}],
+				tableDataExport:[]
 			};
 		},
 		created() {
+			this.monthTit(this.month);
 			this.list(new Date(this.month).valueOf());
 		},
 		mounted() {
@@ -221,7 +237,7 @@
 					return [_row, _col];
 				}
 			},
-			getSpanArr(data) {
+			getSpanArr(data,port) {
 				this.spanArr = [];
 				for (var i = 0; i < data.length; i++) {
 					if (i === 0) {
@@ -231,6 +247,9 @@
 						if (data[i].region === data[i - 1].region) {
 							this.spanArr[this.pos] += 1;
 							this.spanArr.push(0);
+						}else if (data[i].region === '合计') {
+							this.spanArr.push(1);
+							this.pos = i;
 						} else {
 							this.spanArr.push(1);
 							this.pos = i;
@@ -243,13 +262,18 @@
 					if (ele === 2) {
 						idx.push(index + 2);
 						spanArrIndex.push(1);
-					} else if (this.spanArr[index - 1] === 2) {
+					} else if (this.spanArr[index - 1] === 2 || ele === 1) {
 						spanArrIndex.push(1);
-					} else {
+					}else {
 						spanArrIndex.push(0);
 					}
 				});
-				idx.push(this.spanArr.length + 2);
+				
+				if(port){
+					idx.push(this.spanArr.length + 1);
+				}else{
+					idx.push(this.spanArr.length + 2);
+				}
 				idx.forEach((ele, index) => {
 					if (idx[index + 1]) {
 						spanArrIndex[ele] = idx[index + 1] - (ele + 2);
@@ -284,17 +308,59 @@
 					}
 				});
 				sums[sums.length - 1] = "";
+				this.SUM = sums;
 				return sums;
 			},
-		},
-		watch: {
-			month(e) {
-				this.list(new Date(e).valueOf());
+			tableDataE(tableData,SUM){
+				let tableDataExport = [...tableData],
+					sums = {},
+					dateS = [];
+				this.dateS.forEach(ele=>{
+					dateS.push(ele.prop)
+				})
+				SUM.forEach((ele,index)=>{
+					if(index === 0){
+						sums['region'] = ele;
+					}else if(index < SUM.length - 2 && index > 1){
+						sums[dateS[index - 2]] = ele;
+					}else if(index === SUM.length - 2){
+						sums['dqhj'] = ele
+					}else if(index === SUM.length - 1){
+						sums['hj'] = ele
+					}
+				})
+				tableDataExport.push(sums);
+				this.getSpanArr(tableDataExport,true);
+				this.tableDataExport = tableDataExport;
+				/* 从表生成工作簿对象 */
+				setTimeout(()=>{
+					let wb = XLSX.utils.table_to_book(document.querySelector('#out-table'))
+					/* 获取二进制字符串作为输出 */
+					var wbout = XLSX.write(wb, {bookType: 'xlsx',bookSST: true,type: 'array'})
+					try {
+					    FileSaver.saveAs(
+					    new Blob([wbout], { type: 'application/octet-stream' }),''+this.monthTitle + '修正预测风速电量.xlsx')
+					} catch (e) {
+					    if (typeof console !== 'undefined') console.log(e, wbout)
+					}
+					return wbout
+				},1500)
+			},
+			exportExcel() {
+				this.tableDataE(this.tableData,this.SUM)
+			},
+			monthTit(e){
 				let tit = e.split("-");
 				if (tit[1].indexOf(0) != -1) {
 					tit[1] = tit[1].split("0")[1];
 				}
 				this.monthTitle = tit[0] + "年" + tit[1] + "月";
+			}
+		},
+		watch: {
+			month(e) {
+				this.list(new Date(e).valueOf());
+				this.monthTit(e);
 			},
 		},
 	};