ソースを参照

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

wsy 3 年 前
コミット
2eb83ed66b
92 ファイル変更154067 行追加57852 行削除
  1. 1 0
      .gitignore
  2. 0 4
      public/index.html
  3. 5 1
      public/static/config/modeConfig.js
  4. 0 4917
      public/static/js/videoPlayer/adapter.js
  5. 0 2377
      public/static/js/videoPlayer/bootstrap.js
  6. 0 7
      public/static/js/videoPlayer/bootstrap.min.js
  7. 0 22
      public/static/js/videoPlayer/flowplayer-3.2.13.min.js
  8. 0 7
      public/static/js/videoPlayer/flv.min.js
  9. 0 33
      public/static/js/videoPlayer/h5scluster.js
  10. 0 184
      public/static/js/videoPlayer/h5sevent.js
  11. 0 278
      public/static/js/videoPlayer/h5spbcontrol.js
  12. 0 1
      public/static/js/videoPlayer/h5splayer.js
  13. 0 110
      public/static/js/videoPlayer/h5splayerhelper.js
  14. 0 214
      public/static/js/videoPlayer/jQuery.md5.js
  15. 0 10220
      public/static/js/videoPlayer/jquery-3.1.1.js
  16. 0 1
      public/static/js/videoPlayer/linkplayer.js
  17. 0 1217
      public/static/js/videoPlayer/platform.js
  18. 0 26804
      public/static/js/videoPlayer/video.js
  19. 9 8
      src/App.vue
  20. 3 2
      src/assets/styles/el-override/el-table.less
  21. 501 0
      src/components/arcgis/MHS_FDC.vue
  22. 751 0
      src/components/arcgis/PL_GDC.vue
  23. 14 14
      src/components/arcgis/arcgis.vue
  24. 1 1
      src/components/chart/bar/horizontal-bar-chart.vue
  25. 9 9
      src/components/chart/bar/single-bar-chart.vue
  26. 5 2
      src/components/chart/combination/area-bar-chart.vue
  27. 8 14
      src/components/chart/combination/bar-line-chart.vue
  28. 0 2
      src/components/chart/combination/multiple-bar-line-chart.vue
  29. 78 51
      src/components/chart/line/multiple-y-line-chart.vue
  30. 0 1
      src/components/coms/panel/panel-no-title.vue
  31. 3 4
      src/components/coms/table/group-table.vue
  32. 25 3
      src/components/coms/table/table2.vue
  33. 182 329
      src/router/index.js
  34. 518 454
      src/views/Decision/Decision1.vue
  35. 23 5
      src/views/Decision/Decision1Mx.vue
  36. 6 15
      src/views/Decision/Decision2Xmdb.vue
  37. 1217 1132
      src/views/Demo.vue
  38. 3 3
      src/views/HealthControl/Health0.vue
  39. 1 1
      src/views/HealthControl/Health3.vue
  40. 2 0
      src/views/HealthControl/HealthTab4.vue
  41. 214 0
      src/views/HealthControl/assess/assessconfig.vue
  42. 2 2
      src/views/HealthControl/gradeassessment.vue
  43. 195 0
      src/views/HealthControl/assess/compoenets/popupcreate.vue
  44. 267 2
      src/views/HealthControl/fault-diagnosis.vue
  45. 902 589
      src/views/Home/Home.vue
  46. 180 47
      src/views/Home/components/map.vue
  47. 525 408
      src/views/Home/components/map/MHS_FDC.vue
  48. 761 0
      src/views/Home/components/map/NSS_FDC.vue
  49. 724 0
      src/views/Home/components/map/QS_FDC.vue
  50. 844 0
      src/views/Home/components/map/SBQ_FDC.vue
  51. 591 0
      src/views/Home/components/map/XS_FDC.vue
  52. 0 373
      src/views/Home/components/map/svg-map-xs.vue
  53. 474 403
      src/views/Home/components/map/svg-map.vue
  54. 0 7
      src/views/LightMatrix/LightMatrix.vue
  55. 15 29
      src/views/LightMatrix3/LightMatrix3.vue
  56. 3 5
      src/views/NewPages/dj1.vue
  57. 5 31
      src/views/NewPages/power-benchmarking.vue
  58. 4 0
      src/views/WindSite/WindSite.vue
  59. 1798 1615
      src/views/WindSite/components/boosterstation/BoosterStation.js
  60. 5443 0
      src/views/WindSite/components/boosterstation/dwk.vue
  61. 7695 1342
      src/views/WindSite/components/boosterstation/mch.vue
  62. 1673 0
      src/views/WindSite/components/boosterstation/mch/BoosterStation.js
  63. 1349 0
      src/views/WindSite/components/boosterstation/mch/mch.vue
  64. 21 21
      src/views/WindSite/components/boosterstation/previewPicture.vue
  65. 9183 0
      src/views/WindSite/components/boosterstation/mhs.vue
  66. 15487 0
      src/views/WindSite/components/boosterstation/nss.vue
  67. 5559 0
      src/views/WindSite/components/boosterstation/pl1.vue
  68. 11202 0
      src/views/WindSite/components/boosterstation/pl2.vue
  69. 8441 0
      src/views/WindSite/components/boosterstation/qs.vue
  70. 5159 0
      src/views/WindSite/components/boosterstation/sbdl.vue
  71. 16141 0
      src/views/WindSite/components/boosterstation/sbq.vue
  72. 12259 0
      src/views/WindSite/components/boosterstation/xh.vue
  73. 10237 0
      src/views/WindSite/components/boosterstation/xs.vue
  74. 1600 0
      src/views/WindSite/components/generalappearance/svg/南风线.svg
  75. 732 0
      src/views/WindSite/components/generalappearance/xh/previewPicture.vue
  76. 20896 0
      src/views/WindSite/components/generalappearance/xh/xh.vue
  77. 721 686
      src/views/WindSite/components/generalappearance/xs/previewPicture.vue
  78. 6847 2878
      src/views/WindSite/components/generalappearance/xs/xs.vue
  79. 729 0
      src/views/WindSite/components/previewPicture.vue
  80. 55 6
      src/views/WindSite/pages/BoosterStation.vue
  81. 0 1
      src/views/WindSite/pages/DraughtFanList.vue
  82. 13 11
      src/views/WindSite/pages/GeneralAppearance.vue
  83. 43 162
      src/views/WindSite/pages/Map.vue
  84. 962 710
      src/views/WindSite/pages/Map1.vue
  85. 22 15
      src/views/layout/Header.vue
  86. 14 3
      src/views/layout/Menu.vue
  87. 329 0
      src/views/malfunctionDiagnose/index.vue
  88. 320 0
      src/views/malfunctionRecall/index.vue
  89. 31 31
      src/views/malfunctionStatistics/index.vue
  90. 1 1
      src/views/realSearch/index.vue
  91. 7 0
      src/views/warn/xdgl.vue
  92. 27 27
      src/views/warnStatistics/index.vue

+ 1 - 0
.gitignore

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

+ 0 - 4
public/index.html

@@ -5,10 +5,6 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
-    <script src="./static/js/videoPlayer/adapter.js"></script>
-    <script src="./static/js/videoPlayer/platform.js"></script>
-    <script src="./static/js/videoPlayer/h5splayer.js"></script>
-    <script src="./static/js/videoPlayer/h5splayerhelper.js"></script>
     <title><%= htmlWebpackPlugin.options.title %></title>
   </head>
   <body>

+ 5 - 1
public/static/config/modeConfig.js

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

ファイルの差分が大きいため隠しています
+ 0 - 4917
public/static/js/videoPlayer/adapter.js


ファイルの差分が大きいため隠しています
+ 0 - 2377
public/static/js/videoPlayer/bootstrap.js


ファイルの差分が大きいため隠しています
+ 0 - 7
public/static/js/videoPlayer/bootstrap.min.js


ファイルの差分が大きいため隠しています
+ 0 - 22
public/static/js/videoPlayer/flowplayer-3.2.13.min.js


ファイルの差分が大きいため隠しています
+ 0 - 7
public/static/js/videoPlayer/flv.min.js


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

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

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

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

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

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

ファイルの差分が大きいため隠しています
+ 0 - 1
public/static/js/videoPlayer/h5splayer.js


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

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

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

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

ファイルの差分が大きいため隠しています
+ 0 - 10220
public/static/js/videoPlayer/jquery-3.1.1.js


ファイルの差分が大きいため隠しています
+ 0 - 1
public/static/js/videoPlayer/linkplayer.js


ファイルの差分が大きいため隠しています
+ 0 - 1217
public/static/js/videoPlayer/platform.js


ファイルの差分が大きいため隠しています
+ 0 - 26804
public/static/js/videoPlayer/video.js


+ 9 - 8
src/App.vue

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

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

@@ -1,6 +1,6 @@
 // el-table
-.main-body {
-  .el-table {
+.main-body,.df-table {
+  .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 {

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

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

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

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

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

+ 8 - 14
src/components/chart/combination/bar-line-chart.vue

@@ -77,7 +77,7 @@ export default {
     // 颜色
     color: {
       type: Array,
-      default: () => ["#323E6F", "#1DA0D7", "#02BB4C", "#DB5520", "#EDB32F", "#EDEB2F"],
+      default: () => ["#323E6F", "#e17e23", "#ba3237#", "c531c7", "#ffffff", "#EDEB2F"],
     },
     // 每页显示个数
     pageSize: {
@@ -97,16 +97,14 @@ export default {
       return this.bardata.legend;
     },
     end() {
-      var result = 100;
-      if (this.areaData && this.areaData.length > 0) {
+      var result = 20;
+      if (this.areaData) {
         result = parseInt((this.pageSize / this.areaData.length) * 100);
       }
-
       return result;
     },
   },
   methods: {
-    resize() {},
     initChart() {
       let chart = echarts.init(this.$el);
       let option = {
@@ -278,14 +276,7 @@ export default {
           },
         });
       }
-console.log(JSON.stringify(option))
       chart.setOption(option);
-
-      this.resize = function() {
-        chart.resize();
-      };
-
-      window.addEventListener("resize", this.resize);
     },
   },
   created() {
@@ -309,8 +300,11 @@ console.log(JSON.stringify(option))
       this.initChart();
     });
   },
-  unmounted() {
-    window.removeEventListener("resize", this.resize);
+  beforeUpdate(){
+	  this.areaData = this.bardata.area;
+  },
+  beforeUpdate(){
+  	  this.areaData = this.bardata.area;
   },
   watch: {
     bardata(val) {

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

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

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

+ 3 - 4
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
@@ -90,10 +90,9 @@ export default {
       },
     },
   },
-  // 自定义事件
   emits: {
-    // 分页事件
     onPagging: null,
+    headerClick: null,
   },
   // 数据
   data() {
@@ -143,7 +142,7 @@ export default {
       if (column.rawColumnKey.click) column.rawColumnKey.click(event, row);
     },
     onHeaderClick(column, event) {
-      if (column.rawColumnKey.headerClick) column.rawColumnKey.headerClick(event, column, this.data.data);
+      this.$emit("headerClick", { event: event, col: column.rawColumnKey, data: this.data.data });
     },
     handleCurrentChange(val) {
       this.currentPage = val;

+ 25 - 3
src/components/coms/table/table2.vue

@@ -1,5 +1,12 @@
 <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"
@@ -14,11 +21,26 @@
       :header-align="'center'"
     >
       <template v-if="col.slot == true" #default="item">
-        <slot :name="col.field" :column="col" :row="item.row" :all="item" :data="item.row[col.field]"></slot>
+        <slot
+          :name="col.field"
+          :column="col"
+          :row="item.row"
+          :all="item"
+          :data="item.row[col.field]"
+        ></slot>
       </template>
     </el-table-column>
   </el-table>
-  <el-pagination class="mg-t-8" v-if="pageable" @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize" :total="data.total" v-bind="elPaggingProps"> </el-pagination>
+  <el-pagination
+    class="mg-t-8"
+    v-if="pageable"
+    @current-change="handleCurrentChange"
+    :current-page="currentPage"
+    :page-size="pageSize"
+    :total="data.total"
+    v-bind="elPaggingProps"
+  >
+  </el-pagination>
 </template>
 
 <script>

+ 182 - 329
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,136 +85,13 @@ 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', //单机横向对比
-		name: 'decision3db',
+		path: '/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'),
@@ -422,6 +111,17 @@ const routes = [{
 	]
 },
 {
+	path: '/decision3db', //单机横向对比
+	name: 'decision3db',
+	component: () => import( /* webpackChunkName: "decision3db" */
+		'../views/Decision/Decision3Db.vue'),
+},
+{
+	path: '/windAnalysis/fx', // 风向
+	name: 'fxzstmain',
+	component: () => import('../views/windAnalysis/fxzstmain.vue'),
+},
+{
 	path: '/monitor/lightmatrix', // 光伏明细矩阵
 	name: 'LightMatrix',
 	component: () =>
@@ -444,61 +144,61 @@ const routes = [{
 	component: () =>
 		import( /* webpackChunkName: "lightmatrix3" */ '../views/LightMatrix3/LightMatrix3.vue'),
 }, {
-	path: '/decision/decision1', //风机绩效榜
+	path: '/decision1', //风机绩效榜
 	name: 'decision1',
 	component: () =>
 		import( /* webpackChunkName: "decision1" */ '../views/Decision/Decision1.vue'),
 },
 {
-	path: '/decision/decision1Mx', //风机绩效榜明细
+	path: '/decision1Mx', //风机绩效榜明细
 	name: 'decision1Mx',
 	component: () =>
 		import( /* webpackChunkName: "decision1Mx" */ '../views/Decision/Decision1Mx.vue'),
 },
 {
-	path: '/decision/decision2', //五项损失率
+	path: '/decision2', //五项损失率
 	name: 'decision2',
 	component: () =>
 		import( /* webpackChunkName: "decision2" */ '../views/Decision/Decision2.vue'),
 },
 {
-	path: '/decision/decision2Cndb', //场内对标
+	path: '/decision2Cndb', //场内对标
 	name: 'decision2Cndb',
 	component: () =>
 		import( /* webpackChunkName: "decision2Cndb" */ '../views/Decision/Decision2Cndb.vue'),
 },
 {
-	path: '/decision/decision2Cjdb', //场际对标
+	path: '/decision2Cjdb', //场际对标
 	name: 'decision2Cjdb',
 	component: () =>
 		import( /* webpackChunkName: "decision2Cjdb" */ '../views/Decision/Decision2Cjdb.vue'),
 },
 {
-	path: '/decision/decision2Xmdb', //项目对标
+	path: '/decision2Xmdb', //项目对标
 	name: 'decision2Xmdb',
 	component: () =>
 		import( /* webpackChunkName: "decision2Xmdb" */ '../views/Decision/Decision2Xmdb.vue'),
 },
 {
-	path: '/decision/decision2Xldb', //线路对标
+	path: '/decision2Xldb', //线路对标
 	name: 'decision2Xldb',
 	component: () =>
 		import( /* webpackChunkName: "decision2Xldb" */ '../views/Decision/Decision2Xldb.vue'),
 },
 {
-	path: '/decision/decision3', //性能对标
+	path: '/decision3', //性能对标
 	name: 'decision3',
 	component: () =>
 		import( /* webpackChunkName: "decision3" */ '../views/Decision/Decision3.vue'),
 },
 {
-	path: '/decision/decision4', //值际对标
+	path: '/decision4', //值际对标
 	name: 'decision4',
 	component: () =>
 		import( /* webpackChunkName: "decision4" */ '../views/Decision/Decision4.vue'),
 },
 {
-	path: '/decision/decision4czzl', //操作指令统计
+	path: '/decision4czzl', //操作指令统计
 	name: 'decision4czzl',
 	component: () =>
 		import( /* webpackChunkName: "decision4czzl" */ '../views/Decision/Decision4Czzl.vue'),
@@ -863,9 +563,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 +629,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,6 +642,149 @@ 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: "/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"),
+},
+{
+	path: "/malfunctionRecall", // 故障回溯
+	name: "malfunctionRecall",
+	component: () =>
+		import( /* webpackChunkName: "malfunctionStatistics" */ "../views/malfunctionRecall/index.vue"),
 },
 ]
 const router = createRouter({

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

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

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

@@ -56,7 +56,7 @@
 			<div class="query-actions">
 				<button class="btn" @click="mxClick()">搜索</button>
 				<button class="btn green">明细信息</button>
-				<button class="btn">导出</button>
+				<button class="btn" @click="exportExcel()">导出</button>
 			</div>
 		</div>
 		<div class="actions mg-b-8">
@@ -483,7 +483,6 @@
 								legend: legend,
 								data: arr1
 							};
-
 						}
 						that.tableDataEnd = data2[data2.length - 1];
 						data2.pop();
@@ -494,9 +493,28 @@
 			mxClick() {
 				this.$router.push("/decision/decision1")
 			},
-			thClick: function(i) {
-				console.log(i) // 当子组件触发按钮时,msg获取值为 哈哈啊哈哈
-			}
+			formatJson (filterVal, jsonData) {
+			  return jsonData.map(v => filterVal.map(j => v[j]));
+			},
+			exportExcel () {
+			  let that = this;
+			  const { export_json_to_excel } = require('@tools/excel/Export2Excel.js'); // 注意这个Export2Excel路径      
+			  let tHeader = []; // 上面设置Excel的表格第一行的标题       
+			  let filterVal = []; // 上面的index、nickName、name是tableData里对象的属性key值
+			
+			  that.tableData.column.forEach(ele => {
+			      tHeader.push(ele.name);
+			      filterVal.push(ele.field);
+			  });
+			
+			  var list = [];
+			  that.tableData.data.forEach((i,index) =>{
+				  list.push(i);
+			  })
+			  list.push(that.tableDataEnd)
+			  const data = that.formatJson(filterVal, list);
+			  export_json_to_excel(tHeader, data, '导出的Excel'); // 最后一个是表名字
+			},
 		}
 	};
 </script>

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

@@ -53,7 +53,7 @@
 			<toolbar-panel title="项目对标" :showLine="false"></toolbar-panel>
 			<div class="mg-b-16">
 				<div class="project-table">
-					<Table :data="tableData" :canScroll="false" ref="curRef" @onSort="onSort"></Table>
+					<Table :data="tableData" :canScroll="false" ref="curRef"></Table>
 				</div>
 			</div>
 			<el-row class="mg-b-16">
@@ -79,7 +79,7 @@
 			<el-col :span="24" class="pd-l-8">
 				<panel :title="'风机对标列表明细'" :showLine="false">
 					<div class="project-table">
-						<Table :data="tableDataDetail" ref="curRef" @onSort="onSort"></Table>
+						<Table :data="tableDataDetail" ref="curRef"></Table>
 					</div>
 				</panel>
 			</el-col>
@@ -98,7 +98,7 @@
 	import DualPieChart from "../../components/chart/pie/dual-pie-chart.vue";
 	import SvgIcon from "../../components/coms/icon/svg-icon.vue";
 	import Panel from "../../components/coms/panel/panel.vue";
-	import Table from "./table.vue";
+	import Table from "../../components/coms/table/table.vue";
 	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
 	import Dayinfo from "./dayinfo.vue";
 	export default {
@@ -355,7 +355,6 @@
 
 											dataTab.push({ //表格
 												index: index + 1,
-												fdl:item.fdl,
 												name: item.name,
 												zhpm: item.zhpm,
 												gzssdl: item.gzssdl,
@@ -399,13 +398,6 @@
 						},
 						{
 							name: "",
-							field: "fdl",
-							is_num: false,
-							is_light: false,
-							display:"none",
-						},
-						{
-							name: "",
 							field: "check",
 							is_num: false,
 							is_light: false,
@@ -597,7 +589,7 @@
 			this.ChangZhanVal();
 			this.value4 = this.getTime(1);
 			this.value5 = this.getTime(2);
-			this.AjaxCommon();
+			// this.AjaxCommon();
 		},
 		methods: {
 			ChangZhanVal() {
@@ -607,7 +599,9 @@
 					baseURL: "http://10.155.32.4:9001/",
 					subUrl: "benchmarking/wplist",
 					success(res) {
+						that.value1.push(res.data[0].id)
 						that.ChangZhan = res.data;
+						that.AjaxCommon();
 					}
 				});
 			},
@@ -938,9 +932,6 @@
 			back() {
 				this.detailShow = 1;
 				this.clearDb();
-			},
-			onSort(){
-				this.clearDb();
 			}
 		}
 	};

ファイルの差分が大きいため隠しています
+ 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;

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

@@ -0,0 +1,214 @@
+<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="onClickSearch">搜索</button>
+          <button class="btn green mg-l-30" @click="onClickCreate">新增</button>
+        </div>
+      </div>
+    </div>
+    <div class="assess-bottom">
+      <ComTable :data="tableData" height="85vh"></ComTable>
+    </div>
+    <div>
+      <el-dialog
+        title="新增模型"
+        v-model="isvisiable"
+        width="45%"
+        top="15vh"
+        custom-class="modal"
+        :close-on-click-modal="false"
+        :before-close="onClickDialogClose"
+      >
+        <popup-create
+          :data="editform"
+          :station="stations"
+          @onClick="onClickComplete"
+        />
+      </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script>
+import ComTable from "@/components/coms/table/table-unpage.vue";
+import PopupCreate from "./compoenets/popupcreate.vue";
+
+export default {
+  components: { ComTable, PopupCreate },
+  data() {
+    const that = this;
+    return {
+      content: "",
+      stations: [],
+      editform: {},
+      isvisiable: false,
+      tableData: {
+        column: [
+          {
+            name: "名称",
+            field: "name",
+            is_light: false,
+          },
+          {
+            name: "时间",
+            field: "createdate",
+            is_light: false,
+          },
+          {
+            name: "场站",
+            field: "wpids",
+            is_num: false,
+            is_light: false,
+          },
+          {
+            name: "是否启用",
+            field: "isenable",
+            is_num: false,
+            is_light: false,
+          },
+          {
+            name: "操作",
+            is_num: false,
+            is_light: false,
+            width: 100,
+            template: () => {
+              return (
+                "<el-button type='text' style='cursor: pointer;' value='edit'>编辑</el-button>&nbsp" +
+                "<el-button type='text' style='cursor: pointer;' value='delete'>删除</el-button>&nbsp" +
+                "<el-button type='text' style='cursor: pointer;' value='config'>配置</el-button>&nbsp"
+              );
+            },
+            click(e, row) {
+              that.onClickOption(e, row);
+            },
+          },
+        ],
+        data: [],
+      },
+    };
+  },
+  created() {
+    this.requestList();
+    this.requestStations();
+  },
+  methods: {
+    // 新增按钮
+    onClickCreate() {
+      this.isvisiable = true;
+    },
+    // 搜索按钮
+    onClickSearch() {
+      this.requestList();
+    },
+    // 弹窗右上角关闭按钮
+    onClickDialogClose() {
+      this.isvisiable = false;
+      this.editform = {};
+    },
+    // 操作按钮
+    onClickOption(e, row) {
+      let that = this;
+      if ("delete" == e.target.getAttribute("value")) {
+        that
+          .$confirm("确认删除?")
+          .then((_) => {
+            that.requestDelete(row);
+          })
+          .catch((_) => {});
+      }
+      if ("edit" == e.target.getAttribute("value")) {
+        that.isvisiable = true;
+        that.editform = row;
+      }
+    },
+    onClickComplete(value) {
+      this.isvisiable = false;
+      this.requestList();
+    },
+    // 获取模型数据列表
+    requestList() {
+      let that = this;
+      that.API.requestData({
+        method: "GET",
+        baseURL: "http://10.155.32.4:8034/",
+        subUrl: "/evaluation/modelMainList",
+        data: {
+          name: that.content,
+        },
+        success(res) {
+          if (res.code == 200) that.tableData.data = res.data;
+          for (var i in that.tableData.data) {
+            that.tableData.data[i].createdate = new Date(
+              res.data[i].createdate
+            ).formatDate("yyyy-MM-dd");
+            that.tableData.data[i].isenable =
+              res.data[i].isenable == 1 ? "是" : "否";
+          }
+        },
+      });
+    },
+    requestStations() {
+      let that = this;
+      that.API.requestData({
+        method: "GET",
+        subUrl: "powercompare/windfarmAllAjax",
+        success(res) {
+          let array = [];
+          res.data.forEach((item) => {
+            if (item.id.indexOf("FDC") !== -1) {
+              array.push(item);
+            }
+          });
+          that.stations = array;
+        },
+      });
+    },
+    // 删除
+    requestDelete(row) {
+      let that = this;
+      that.API.requestData({
+        method: "DELETE",
+        baseURL: "http://10.155.32.4:8034/",
+        subUrl: "/evaluation/delModelMain/" + row.id,
+        success(res) {
+          if (res.code == 200) that.requestList();
+        },
+      });
+    },
+  },
+};
+</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",

+ 195 - 0
src/views/HealthControl/assess/compoenets/popupcreate.vue

@@ -0,0 +1,195 @@
+<template>
+  <div class="assess-create">
+    <div class="top">
+      <div class="query mg-b-8">
+        <div class="query-items flex-column">
+          <div class="query-item flex-row">
+            <div class="lable item-name">模块:</div>
+            <div class="search-input item-content">
+              <el-input v-model="form.name" placeholder="请填写"></el-input>
+            </div>
+          </div>
+          <div class="query-item flex-row">
+            <div class="lable item-name">场站:</div>
+            <div class="search-input item-content">
+              <el-select
+                v-model="form.wpids"
+                multiple
+                collapse-tags
+                popper-class="select"
+              >
+                <el-option
+                  v-for="item in stations"
+                  :key="item.label"
+                  :value="item.id"
+                  :label="item.name"
+                >
+                </el-option>
+              </el-select>
+            </div>
+          </div>
+          <div class="query-item flex-row">
+            <div class="lable item-name">日期:</div>
+            <div class="search-input item-content">
+              <el-select
+                v-model="form.timetypes"
+                multiple
+                popper-class="select"
+              >
+                <el-option
+                  v-for="item in dates"
+                  :key="item.label"
+                  :value="item.label"
+                  :label="item.label"
+                >
+                </el-option>
+              </el-select>
+            </div>
+          </div>
+          <div class="query-item flex-row">
+            <div class="lable item-name">是否启用:</div>
+            <div class="search-input item-content">
+              <el-select v-model="form.isenable" popper-class="select">
+                <el-option
+                  v-for="item in enables"
+                  :key="item.value"
+                  :value="item.value"
+                  :label="item.label"
+                >
+                </el-option>
+              </el-select>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="bottom">
+      <button class="btn green mg-l-30" @click="onClickClear">清空</button>
+      <button class="btn green mg-l-30" @click="onClickSave">保存</button>
+    </div>
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+
+export default {
+  name: "popup-create",
+  props: {
+    data: Object,
+    station: Array,
+  },
+  data() {
+    return {
+      form: {},
+      dates: [{ label: "日" }, { label: "月" }, { label: "年" }],
+      stations: [],
+      enables: [
+        { value: "0", label: "否" },
+        { value: "1", label: "是" },
+      ],
+    };
+  },
+  // 自定义事件
+  emits: {
+    onClick: null,
+  },
+  created() {
+    this.stations = this.station;
+    this.form = this.convertArray(this.data);
+  },
+  methods: {
+    onClickClear() {
+      this.form = {};
+    },
+    onClickSave() {
+      this.requestSave();
+    },
+    requestSave() {
+      if (this.form.name == undefined) return;
+      let params = {
+        name: this.form.name,
+        wpids: this.form.wpids.toString(),
+        timetypes: this.form.timetypes.toString(),
+        isenable: this.form.isenable,
+      };
+      if (this.form.id) {
+        params.id = this.form.id;
+      }
+
+      axios({
+        method: "post",
+        url: "http://10.155.32.4:8034/evaluation/saveModelMain/",
+        data: params,
+        header: {
+          "Content-Type": "application/json",
+        },
+      }).then((res) => {
+        if (res.data.success) {
+          this.form = {};
+          this.$emit("onClick", true);
+        }
+      });
+    },
+    convertArray(form) {
+      if (form.wpids != undefined && form.timetypes != undefined) {
+        form.wpids = form.wpids.split(",");
+        form.timetypes = form.timetypes.split(",");
+        form.isenable = form.isenable == "是" ? 1 : 0;
+      }
+      return form;
+    },
+  },
+  watch: {
+    data(value) {
+      this.form = this.convertArray(value);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.assess-create {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+
+  .top {
+    width: 60%;
+    margin-top: 50px;
+    display: flex;
+    flex-direction: column;
+    align-self: center;
+
+    .flex-row {
+      margin-bottom: 20px;
+      display: flex;
+      flex-direction: row;
+    }
+
+    .flex-column {
+      display: flex;
+      flex-direction: column;
+    }
+
+    .item-name {
+      width: 100px;
+      text-align: end;
+    }
+    .item-content {
+      width: 300px;
+    }
+  }
+
+  .bottom {
+    margin: 50px 0;
+    display: flex;
+    flex-direction: row;
+    justify-content: center;
+
+    .mg-l-30 {
+      margin-left: 30px;
+    }
+  }
+}
+</style>

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

ファイルの差分が大きいため隠しています
+ 902 - 589
src/views/Home/Home.vue


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

ファイルの差分が大きいため隠しています
+ 525 - 408
src/views/Home/components/map/MHS_FDC.vue


ファイルの差分が大きいため隠しています
+ 761 - 0
src/views/Home/components/map/NSS_FDC.vue


ファイルの差分が大きいため隠しています
+ 724 - 0
src/views/Home/components/map/QS_FDC.vue


ファイルの差分が大きいため隠しています
+ 844 - 0
src/views/Home/components/map/SBQ_FDC.vue


ファイルの差分が大きいため隠しています
+ 591 - 0
src/views/Home/components/map/XS_FDC.vue


ファイルの差分が大きいため隠しています
+ 0 - 373
src/views/Home/components/map/svg-map-xs.vue


ファイルの差分が大きいため隠しています
+ 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;
       }
     },
 

+ 15 - 29
src/views/LightMatrix3/LightMatrix3.vue

@@ -79,12 +79,6 @@
                   </div>
                 </div>
                 <div class="card-right">
-                   <div class="num">
-                    <i class="svg-icon svg-icon-sm" :class="cItem.color != 'red' ? 'svg-icon-' + cItem.color : 'svg-icon-white'">
-                      <SvgIcon svgid="svg-P"></SvgIcon>
-                    </i>
-                    <span>{{ cItem.fs }}</span>
-                  </div>
                   <div class="num">
                     <i class="svg-icon svg-icon-sm" :class="cItem.color != 'red' ? 'svg-icon-' + cItem.color : 'svg-icon-white'">
                       <SvgIcon svgid="svg-W"></SvgIcon>
@@ -97,7 +91,12 @@
                     </i>
                     <span>{{ cItem.fdjzs.toFixed(2) }}</span>
                   </div>
-          
+                  <div class="num">
+                    <i class="svg-icon svg-icon-sm" :class="cItem.color != 'red' ? 'svg-icon-' + cItem.color : 'svg-icon-white'">
+                      <SvgIcon svgid="svg-P"></SvgIcon>
+                    </i>
+                    <span>{{ cItem.fs }}</span>
+                  </div>
                 </div>
               </div>
             </div>
@@ -191,7 +190,7 @@ export default {
           },
           {
             color: "orange",
-            name: "检",
+            name: "检",
             nameIcon: "svg-jx-downtime",
             calcStr: ["fcjxtjnum", "fccnsljxnum"],
             numIcon: "svg-field-involved",
@@ -385,18 +384,6 @@ export default {
         },
       });
     },
-	// 查看风机详情
-	goDetails(item) {
-	  if (item.wpId.indexOf("FDC") !== -1) {
-	    this.$router.push({
-	      path: `/monitor/windsite/info/${item.wpId}/${item.wtId}`
-	    });
-	  } else {
-	    // this.$router.push({
-	    //   path: `/info/inverter-info/${item.wpId}/${item.wtId}`
-	    // });
-	  }
-	},
   },
 
   created() {
@@ -420,10 +407,10 @@ export default {
 
 <style lang="less" scoped>
 @panelHeight: 60px;
-@titleHeight: 26px;
+@titleHeight: 3.704vh;
 
 .light-matrix {
-  // width: calc(100% - 1.111vh);
+  width: calc(100% - 1.111vh);
   height: calc(100vh - 7.222vh);
   display: flex;
   flex-direction: column;
@@ -707,16 +694,16 @@ export default {
 
     .panel-title {
       width: 100%;
+      height: @titleHeight;
       line-height: @titleHeight;
       background-color: fade(@darkgray, 40%);
 
       .panel-title-name {
-        font-size: 12px;
+        font-size: @fontsize-s;
         color: @green;
         display: flex;
-        flex-wrap: wrap;
         align-items: center;
-        padding-left: 16px;
+        padding: 0 16px;
 
         i {
           margin-right: 0.7407vh;
@@ -724,7 +711,7 @@ export default {
 
         .sub-title-item {
           display: flex;
-          flex: 0 0 110px;
+          flex: 1;
 
           .sub-title {
             flex: 0 0 auto;
@@ -785,13 +772,13 @@ export default {
 
       .blank {
         margin-right: 4px;
-        flex: 1 0 120px;
+        flex: 1 0 105px;
       }
 
       .card {
         margin-right: 4px;
         margin-top: 4px;
-        flex: 1 0 120px;
+        flex: 1 0 105px;
       }
 
       .card {
@@ -800,7 +787,6 @@ export default {
         .card-panel {
           display: flex;
           flex-grow: row;
-		  cursor: pointer;
 
           .card-left {
             width: 40px;

+ 3 - 5
src/views/NewPages/dj1.vue

@@ -767,7 +767,7 @@ export default {
           recorddate: that.recorddate
         },
         success (res) {
-          const keyArray = ["value1", "value2", "value3", "value4"];
+          const keyArray = ["value1", "value2", "value3"];
 
           let lostChartData = [{
             text: "实发功率",
@@ -781,9 +781,6 @@ export default {
           }, {
             text: "风速",
             value: []
-          }, {
-            text: "状态",
-            value: []
           }];
           const lostChartUnit = ["实发功率", "保证功率", "风速", "状态"];
 
@@ -887,7 +884,7 @@ export default {
             name: "风速",
             unit: "(m/s)",
             data: []
-          }
+          };
 
           keyArray.forEach((keyEle, keyIndex) => {
             res.data.forEach(ele => {
@@ -900,6 +897,7 @@ export default {
           });
           that.powerChartData = powerChartData;
           that.powerChartLineData = powerChartLineData;
+          console.log(1111,powerChartLineData)
         }
       });
     },

+ 5 - 31
src/views/NewPages/power-benchmarking.vue

@@ -35,7 +35,7 @@
             <div class="right-btn" :class="{ active: btnIndex == 1 }" @click="rightBtnClick(1)">光伏</div>
           </div>
         </div>
-        <group-table :customClass="'table'" :data="eltableData" :height="'420px'" :pageSize="10"></group-table>
+        <group-table :customClass="'table'" :data="eltableData" :height="'420px'" :pageSize="10" @headerClick="headerClick"></group-table>
       </div>
       <div class="top-right">
         <div class="rank-title">
@@ -69,6 +69,7 @@ import groupTable from "../../components/coms/table/group-table.vue";
 export default {
   components: { groupTable, Panel, MultipleBarChart },
   data() {
+    let that = this;
     return {
       selecttionIndex: 0,
       btnIndex: 0,
@@ -91,41 +92,21 @@ export default {
           },
           {
             name: "基础指标",
-            headerClick: function(event, col, data) {
-              console.log(event);
-              console.log(col);
-              console.log(data);
-            },
             child: [
               {
                 name: "装机容量(MW)",
                 field: "v1",
                 width: 55,
-                headerClick: function(event, col, data) {
-                  console.log(event);
-                  console.log(col);
-                  console.log(data);
-                },
               },
               {
                 name: "在运台数 (台)",
                 field: "v1",
                 width: 55,
-                headerClick: function(event, col, data) {
-                  console.log(event);
-                  console.log(col);
-                  console.log(data);
-                },
               },
               {
                 name: "理论电量 (万kwh)",
                 field: "v1",
                 width: 55,
-                headerClick: function(event, col, data) {
-                  console.log(event);
-                  console.log(col);
-                  console.log(data);
-                },
               },
               {
                 name: "发电量 (万kwh)",
@@ -161,11 +142,6 @@ export default {
           },
           {
             name: "安全指标",
-            headerClick: function(event, col, data) {
-              console.log(event);
-              console.log(col);
-              console.log(data);
-            },
             child: [
               {
                 name: "人身设备事故 (次)",
@@ -181,11 +157,6 @@ export default {
           },
           {
             name: "经济指标",
-            headerClick: function(event, col, data) {
-              console.log(event);
-              console.log(col);
-              console.log(data);
-            },
             child: [
               {
                 name: "人身设备事故 (次)",
@@ -563,6 +534,9 @@ export default {
     selectionClick(index) {
       this.selecttionIndex = index;
     },
+    headerClick(param) {
+      console.log(param);
+    },
     rightBtnClick(index) {
       this.btnIndex = index;
     },

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

ファイルの差分が大きいため隠しています
+ 1798 - 1615
src/views/WindSite/components/boosterstation/BoosterStation.js


ファイルの差分が大きいため隠しています
+ 5443 - 0
src/views/WindSite/components/boosterstation/dwk.vue


ファイルの差分が大きいため隠しています
+ 7695 - 1342
src/views/WindSite/components/boosterstation/mch.vue


ファイルの差分が大きいため隠しています
+ 1673 - 0
src/views/WindSite/components/boosterstation/mch/BoosterStation.js


ファイルの差分が大きいため隠しています
+ 1349 - 0
src/views/WindSite/components/boosterstation/mch/mch.vue


+ 21 - 21
src/views/WindSite/components/boosterstation/previewPicture.vue

@@ -60,7 +60,7 @@
 				isChange: true,
 				// 图片显示默认大小
 				width: "1400px",
-				height: "950px",
+				height: "850px",
 				// 可缩小倍数,为空则可无限缩小
 				minification: 3,
 				// 可放大倍数 为空则可无限放大
@@ -98,7 +98,7 @@
 				let _this = this;
 				img.onerror = () => {
 					// console.log("加载失败!!", _this.arrIcon.length);
-					// console.log(imgUrl, MaxWidth, MaxHeight, StrWidth, StrHeight);
+					console.log(imgUrl, MaxWidth, MaxHeight, StrWidth, StrHeight);
 					_this.imgOnerror = true;
 					_this.imgIndex =
 						_this.arrIcon.length - 1 < 0 ? 0 : _this.arrIcon.length - 1;
@@ -167,10 +167,10 @@
 							iconWidth: _this[StrWidth],
 							iconHeight: _this[StrHeight],
 						});
-						// console.log(
-						// 	"tow#################################arrIcon",
-						// 	_this[arr].length
-						// );
+						console.log(
+							"tow#################################arrIcon",
+							_this[arr].length
+						);
 					}
 					// _this[StrWidth] = `${e.path[0].naturalWidth}px`;
 					// _this[StrHeight] = `${e.path[0].naturalHeight}px`;
@@ -189,11 +189,11 @@
 				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);
+				console.log(
+					"length",
+					document.getElementsByClassName("movableItem").length
+				);
+				console.log("oImg", oImg);
 				var _this = this;
 
 				function fnWheel(obj, fncc) {
@@ -242,12 +242,12 @@
 						// 限制缩小范围
 						if (nowWidth <= parseInt(initWidth / _this.minification)) {
 							miniFlag = false;
-							// console.log("限制缩小范围");
-							// console.log(
-							// 	"限制缩小范围",
-							// 	nowWidth,
-							// 	parseInt(initWidth / _this.minification)
-							// );
+							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";
@@ -256,7 +256,7 @@
 							// 限制放大范围
 							if (nowWidth >= parseInt(initWidth * _this.magnification)) {
 								magniFlag = false;
-								// console.log("限制放大范围");
+								console.log("限制放大范围");
 								this.style.width =
 									parseInt(initWidth * _this.magnification) + "px";
 								this.style.height =
@@ -266,14 +266,14 @@
 					}
 
 					if (down && miniFlag) {
-						// console.log("缩小");
+						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("放大");
+						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";
@@ -610,7 +610,7 @@
 <style lang="less" scoped>
 	.pop-up-main {
 		width: 100%;
-		height: calc(100vh - 12vh);
+		height: calc(100vh - 10vh);
 		overflow-y:hidden ;
 
 		.paln-box {

ファイルの差分が大きいため隠しています
+ 9183 - 0
src/views/WindSite/components/boosterstation/mhs.vue


ファイルの差分が大きいため隠しています
+ 15487 - 0
src/views/WindSite/components/boosterstation/nss.vue


ファイルの差分が大きいため隠しています
+ 5559 - 0
src/views/WindSite/components/boosterstation/pl1.vue


ファイルの差分が大きいため隠しています
+ 11202 - 0
src/views/WindSite/components/boosterstation/pl2.vue


ファイルの差分が大きいため隠しています
+ 8441 - 0
src/views/WindSite/components/boosterstation/qs.vue


ファイルの差分が大きいため隠しています
+ 5159 - 0
src/views/WindSite/components/boosterstation/sbdl.vue


ファイルの差分が大きいため隠しています
+ 16141 - 0
src/views/WindSite/components/boosterstation/sbq.vue


ファイルの差分が大きいため隠しています
+ 12259 - 0
src/views/WindSite/components/boosterstation/xh.vue


ファイルの差分が大きいため隠しています
+ 10237 - 0
src/views/WindSite/components/boosterstation/xs.vue


ファイルの差分が大きいため隠しています
+ 1600 - 0
src/views/WindSite/components/generalappearance/svg/南风线.svg


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

ファイルの差分が大きいため隠しています
+ 20896 - 0
src/views/WindSite/components/generalappearance/xh/xh.vue


ファイルの差分が大きいため隠しています
+ 721 - 686
src/views/WindSite/components/generalappearance/xs/previewPicture.vue


ファイルの差分が大きいため隠しています
+ 6847 - 2878
src/views/WindSite/components/generalappearance/xs/xs.vue


+ 729 - 0
src/views/WindSite/components/previewPicture.vue

@@ -0,0 +1,729 @@
+<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: "1600px",
+      height: "1000px",
+      // 可缩小倍数,为空则可无限缩小
+      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) {
+          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;
+      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 = 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);
+            nTY = 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 - 12vh);
+  overflow-y: hidden;
+
+  .paln-box {
+    width: 100%;
+    height: 100%;
+    position: relative;
+
+    .movableItem {
+      position: absolute;
+      // top: 75%;
+      left: 50%;
+      transform: translate(-50%, 0%);
+
+      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>

+ 55 - 6
src/views/WindSite/pages/BoosterStation.vue

@@ -8,15 +8,52 @@
         @select="select"
       ></BtnGroup2>
     </div>
-    <!-- <bsx6 class="booster-station-body"></bsx6> -->
-    <BoosterMCH class="booster-station-body"></BoosterMCH>
+    <!-- 麻黄山 -->
+    <MHS class="booster-station-body" v-if="wpId === 'MHS_FDC'" />
+
+    <!-- 牛首山 -->
+    <NSS class="booster-station-body" v-if="wpId === 'NSS_FDC'" />
+
+    <!-- 青山 -->
+    <QS class="booster-station-body" v-if="wpId === 'QS_FDC'" />
+
+    <!-- 石板泉 -->
+    <SBQ class="booster-station-body" v-if="wpId === 'SBQ_FDC'" />
+
+    <!-- 香山 -->
+    <XS class="booster-station-body" v-if="wpId === 'XS_FDC'" />
+
+    <!-- 大武口 -->
+    <DWK class="booster-station-body" v-if="wpId === 'DWK_GDC'" />
+
+    <!-- 平罗一期 -->
+    <PL1 class="booster-station-body" v-if="wpId === 'PL_GDC'" />
+
+    <!-- 平罗二期 -->
+    <PL2 class="booster-station-body" v-if="wpId === 'PL_GDC'" />
+
+    <!-- 宣和 -->
+    <XH class="booster-station-body" v-if="wpId === 'XH_GDC'" />
+
+    <!-- 马场湖 -->
+    <MCH class="booster-station-body" v-if="wpId === 'MCH_GDC'" />
   </div>
 </template>
 
 <script>
 import BtnGroup2 from "@com/coms/btn/btn-group-double.vue";
 // import bsx6 from "../components/bsx6.vue";
-import BoosterMCH from "../components/boosterstation/mch.vue";
+import MHS from "../components/boosterstation/mhs.vue";
+import NSS from "../components/boosterstation/nss.vue";
+import QS from "../components/boosterstation/qs.vue";
+import SBQ from "../components/boosterstation/sbq.vue";
+// import SBDL from "../components/boosterstation/sbdl.vue";
+import XS from "../components/boosterstation/xs.vue";
+import DWK from "../components/boosterstation/dwk.vue";
+import PL1 from "../components/boosterstation/pl1.vue";
+import PL2 from "../components/boosterstation/pl2.vue";
+import XH from "../components/boosterstation/pl2.vue";
+import MCH from "../components/boosterstation/mch.vue";
 
 export default {
   // 名称
@@ -25,7 +62,17 @@ export default {
   components: {
     // bsx6,
     BtnGroup2,
-    BoosterMCH,
+    MHS,
+    NSS,
+    QS,
+    SBQ,
+    // SBDL,
+    XS,
+    DWK,
+    PL1,
+    PL2,
+    XH,
+    MCH,
   },
   // 数据
   data() {
@@ -55,9 +102,10 @@ export default {
   // 函数
   methods: {
     select(res) {
+      console.log(2333, res.code);
       this.$router.replace({
-      path: `/monitor/windsite/boosterstation/${res.code}`,
-    });
+        path: `/monitor/windsite/boosterstation/${res.code}`,
+      });
     },
     getWp() {
       let that = this;
@@ -147,6 +195,7 @@ export default {
 
   .booster-station-body {
     flex-grow: 1;
+    margin-top: 20px;
   }
 }
 </style>

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

+ 43 - 162
src/views/WindSite/pages/Map.vue

@@ -52,120 +52,8 @@
       </div>
     </div>
     <div class="panel-body">
-      <arcgis
-        class="arcgis-layer"
-        @when="when"
-        ref="arcgis"
-        :data="arcgisData"
-        @clickMap="clickMap"
-      >
-        <template
-          v-for="(fan, index) of fans"
-          :key="index"
-          v-slot:[fan.attributes.code]
-        >
-          <svg
-            v-if="fan.attributes.code != '升压站'"
-            @click="clickFan(fan.attributes.code)"
-            class="can-click esri-component"
-            version="1.1"
-            xmlns="http://www.w3.org/2000/svg"
-            xmlns:xlink="http://www.w3.org/1999/xlink"
-            viewBox="0 0 200 240"
-            enable-background="new 0 0 200 240"
-            xml:space="preserve"
-            width="66"
-            height="66"
-          >
-            <!-- 底座 -->
-            <g>
-              <path
-                fill-rule="evenodd"
-                clip-rule="evenodd"
-                :fill="colors[fan.attributes.state][2]"
-                d="M100.681,156.137c24.579,0,44.505,8.548,44.505,19.094
-                            c0,10.545-19.926,19.093-44.505,19.093c-24.577,0-42.878-8.548-42.878-19.093C57.803,164.685,76.104,156.137,100.681,156.137z"
-              />
-            </g>
-            <!-- 后面的脑袋 -->
-            <g>
-              <path
-                fill-rule="evenodd"
-                clip-rule="evenodd"
-                :fill="colors[fan.attributes.state][0]"
-                d="M92.875,76.372l27.897-18.417c0,0,4.108-0.096,7.891,2.681
-                                c4.305,3.156,1.86,9.235,1.86,9.235l-24.374,23.292L92.875,76.372z"
-              />
-            </g>
-            <!-- 柱 -->
-            <g>
-              <path
-                fill-rule="evenodd"
-                clip-rule="evenodd"
-                :fill="colors[fan.attributes.state][0]"
-                d="M92.152,175.229h18.689l-4.876-94.254H97.84L92.152,175.229z"
-              />
-            </g>
-            <!-- 风扇 -->
-            <g>
-              <path
-                fill-rule="evenodd"
-                clip-rule="evenodd"
-                :fill="colors[fan.attributes.state][1]"
-                d="M109.007,85.525l-16.061,0.268l7.396-83.773L109.007,85.525z"
-              />
-              <path
-                fill-rule="evenodd"
-                clip-rule="evenodd"
-                :fill="colors[fan.attributes.state][1]"
-                d="M95.219,75.597l8.265,13.771l-76.25,35.483L95.219,75.597z
-                            M99.108,89.634l7.795-14.04l68.854,48.291L99.108,89.634z"
-              />
-              <animateTransform
-                v-if="fan.attributes.rotate"
-                attributeName="transform"
-                attributeType="XML"
-                type="rotate"
-                from="0 100 82"
-                to="359 100 82"
-                :dur="fan.attributes.dur + 's'"
-                repeatCount="indefinite"
-              />
-            </g>
-            <!-- 前面的尖 -->
-            <g>
-              <path
-                fill-rule="evenodd"
-                clip-rule="evenodd"
-                :fill="colors[fan.attributes.state][2]"
-                d="M92.863,72.903c0,0,13.912-0.343,17.098,4.352
-                            c2.984,4.397-2.58,15.473-2.58,15.473l-24.376,0.436L92.863,72.903z"
-              />
-            </g>
-            <!-- 文字 -->
-            <g>
-              <text
-                x="100"
-                y="240"
-                fill="#ffffff"
-                font-size="40"
-                text-anchor="middle"
-                alignment-baseline="baseline"
-              >
-                {{ fan.attributes.code }}
-              </text>
-            </g>
-          </svg>
-          <div v-if="fan.attributes.code == '升压站'">
-            <div class="syz-img">
-              <img :src="syzImg" />
-            </div>
-            <div class="white font-sm mr-t-8" style="text-align: center">
-              {{ fan.attributes.code }}
-            </div>
-          </div>
-        </template>
-      </arcgis>
+      <MHSFDC wpId="MHS_FDC" v-if="wpId.indexOf('FDC') !== -1" />
+      <PLGDC wpId="PL_GDC" v-if="wpId.indexOf('GDC') !== -1" />
       <div class="map-popup-panel" v-show="showPopup">
         <!-- <div class="map-popup-panel-header">
           <div class="map-popup-panel-title green">
@@ -275,7 +163,8 @@
 <script>
 import BtnGroup2 from "@com/coms/btn/btn-group-double.vue";
 // import SvgIcon from "@com/coms/icon/svg-icon.vue";
-import arcgis from "@com/arcgis/arcgis.vue";
+import MHSFDC from "@com/arcgis/MHS_FDC.vue";
+import PLGDC from "@com/arcgis/PL_GDC.vue";
 import dataService from "@/helper/data.js";
 
 export default {
@@ -284,8 +173,8 @@ export default {
   // 使用组件
   components: {
     BtnGroup2,
-    // SvgIcon,
-    arcgis,
+    MHSFDC,
+    PLGDC
   },
   // 数据
   data() {
@@ -294,6 +183,7 @@ export default {
       wpId: undefined,
       wpnumMap: {}, //风机监视数量
       wpInfoMap: {}, //风机详情
+      fjmap: [],   // 风机名
       selectIndex: 0,
       rowIndex: 0,
       btnGroups: [
@@ -321,15 +211,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 +228,6 @@ export default {
     that.$nextTick(() => {
       that.getWp();
       that.requestData();
-      that.requestInfo();
     });
   },
   // 函数
@@ -399,24 +286,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 +303,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;

ファイルの差分が大きいため隠しています
+ 962 - 710
src/views/WindSite/pages/Map1.vue


+ 22 - 15
src/views/layout/Header.vue

@@ -29,16 +29,23 @@ export default {
           path: "/monitor/home",
           isActive: true,
         },
+
         {
-          id: "realSearch",
-          text: "数据管理",
-          path: "/realSearch",
+          id: "performanceAnalysis",
+          text: "增发分析",
+          path: "/performanceAnalysis",
           isActive: false,
         },
         {
-          id: "performanceAnalysis",
-          text: "统计分析",
-          path: "/performanceAnalysis",
+          id: "ztfx",
+          text: "降损分析",
+          path: "/new/ztfx",
+          isActive: false,
+        },
+         {
+          id: "realSearch",
+          text: "数据支撑",
+          path: "/realSearch",
           isActive: false,
         },
         {
@@ -47,16 +54,16 @@ export default {
           path: "/health",
           isActive: false,
         },
+        // {
+        //   id: "decision",
+        //   text: "决策支持",
+        //   path: "/decision/decision1",
+        //   isActive: false,
+        // },
         {
-          id: "decision",
-          text: "决策支持",
-          path: "/decision/decision1",
-          isActive: false,
-        },
-        {
-          id: "knowledge",
-          text: "知识管理",
-          path: "/knowledge",
+          id: "personnel",
+          text: "安措管控",
+          path: "/new/personnel",
           isActive: false,
         },
         {

+ 14 - 3
src/views/layout/Menu.vue

@@ -165,7 +165,7 @@ export default {
                 {
                   text: "功率曲线拟合",
                   icon: "svg-wind-site",
-                  path: "/nxfx1",
+                  path: "/powerCurve",
                 },
                 {
                   text: "偏航对风分析",
@@ -350,8 +350,19 @@ export default {
             {
               text: "等级评估",
               icon: "svg-wind-site",
-              path: "/djpg",
-              
+              path: "/assess",
+              children: [
+                {
+                  text: "等级评估",
+                  icon: "svg-wind-site",
+                  path: "/assess/index",
+                },
+                {
+                   text: "评估配置",
+                  icon: "svg-wind-site",
+                  path: "/assess/config",
+                },
+              ]
             },{
               text: "健康管理",
               icon: "svg-wind-site",

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

@@ -0,0 +1,329 @@
+<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"
+    >
+      <el-tree
+        style="height: 600px; overflow-y: scroll"
+        node-key="activeId"
+        :data="treeData"
+        :default-expanded-keys="['0']"
+        :props="{ children: 'children', label: 'name' }"
+      ></el-tree>
+    </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) {
+              that.getTree(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;
+          },
+        });
+      }
+    },
+
+    // 获取故障诊断树
+    getTree(item) {
+      let that = this;
+      that.API.requestData({
+        method: "POST",
+        subUrl: "stopanalysis/stopAnalysisTree",
+        data: {
+          mainId: item.id,
+          wtId: item.wtid,
+          values: item.judegvulue,
+        },
+        success(res) {
+          res.data[0].activeId = "0";
+          that.treeData = res.data;
+          that.dialogShow = true;
+        },
+      });
+    },
+
+    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>

+ 320 - 0
src/views/malfunctionRecall/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="knowledge-2">
+    <div class="query mg-b-8">
+      <div class="query-items">
+        <div class="query-item">
+          <div class="lable">场站:</div>
+          <div class="search-input">
+            <el-select
+              v-model="wpId"
+              clearable
+              placeholder="请选择"
+              popper-class="select"
+              @change="
+                (wpId) => {
+                  getWt(wpId, true);
+                }
+              "
+            >
+              <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="wtId"
+              clearable
+              placeholder="请选择"
+              popper-class="select"
+            >
+              <el-option
+                v-for="item in wtArray"
+                :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="type"
+              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 class="query-item">
+          <div class="query-item">
+            <div class="lable">开始日期:</div>
+            <div class="search-input">
+              <el-date-picker
+                v-model="value1"
+                @change="BeginChange(value1)"
+                type="date"
+                value-format="YYYY-MM-DD"
+                placeholder="选择日期"
+                popper-class="date-select"
+              >
+              </el-date-picker>
+            </div>
+          </div>
+          <div class="query-item">
+            <div class="lable">结束日期:</div>
+            <div class="search-input">
+              <el-date-picker
+                v-model="value2"
+                @change="EndChange(value2)"
+                type="date"
+                value-format="YYYY-MM-DD"
+                placeholder="选择日期"
+                popper-class="date-select"
+              >
+              </el-date-picker>
+              <div class="unit svg-icon svg-icon-gray">
+                <svg-icon :svgid="''" />
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="query-actions" style="margin-right: 1500px">
+        <button class="btn green" @click="onClickSearch">查询</button>
+      </div>
+    </div>
+    <div>
+      <ComTable :data="tableData" height="85vh"></ComTable>
+    </div>
+  </div>
+</template>
+
+<script>
+import ComTable from "@com/coms/table/table.vue";
+
+export default {
+  components: { ComTable },
+  data() {
+    return {
+      value1: "",
+      value2: "",
+      wpId: "",
+      wpArray: [],
+      wpName: "",
+      wtId: "",
+      type: "2",
+      tableData: {
+        column: [
+          {
+            name: "场站",
+            field: "wpName",
+            is_num: true,
+            is_light: false,
+          },
+          {
+            name: "机组",
+            field: "wtName",
+            is_num: false,
+            is_light: false,
+          },
+          {
+            name: "开始时刻",
+            field: "stopTime",
+            is_num: false,
+            is_light: false,
+          },
+          {
+            name: "结束时刻",
+            field: "startTime",
+            is_num: false,
+            is_light: false,
+          },
+          {
+            name: "停机小时数(h)",
+            field: "stopHours",
+            is_num: false,
+            is_light: false,
+          },
+          {
+            name: "停机类型",
+            field: "warnDesc",
+            is_num: false,
+            is_light: false,
+          },
+          {
+            name: "损失电量(kWh)",
+            field: "lossPower",
+            is_num: false,
+            is_light: false,
+          },
+          {
+            name: "操作",
+            field: "",
+            is_num: false,
+            is_light: false,
+            template() {
+              return "<el-button type='text' style='cursor: pointer;'>回溯</el-button>";
+            },
+            click(e, row) {},
+          },
+        ],
+        data: [],
+      },
+    };
+  },
+  created() {
+    // this.requestSafeList();
+    this.value1 = new Date(new Date().getTime() - 3600 * 1000 * 24).formatDate(
+      "yyyy-MM-dd"
+    );
+    this.value2 = this.getTime(2);
+    this.getWp();
+    this.requestSafeList();
+  },
+  methods: {
+    getTime(val) {
+      //时间戳处理,val=1是默认开始时间(当前月第一天),val=2是默认结束时间(今天)
+      var date = new Date();
+      var year = date.getFullYear(),
+        month = date.getMonth() + 1,
+        day = date.getDate();
+      month >= 1 && month <= 9 ? (month = "0" + month) : "";
+      day >= 0 && day <= 9 ? (day = "0" + day) : "";
+      var begin = year + "-" + month + "-01";
+      var end = year + "-" + month + "-" + day;
+      if (val == 1) {
+        return begin;
+      } else if (val == 2) {
+        return end;
+      }
+    },
+    // 获取风场
+    getWp(reGetWp) {
+      let that = this;
+      that.API.requestData({
+        baseURL: "http://10.155.32.4:9001",
+        subUrl: "benchmarking/wplist",
+        success(res) {
+          that.wpArray = res.data;
+          that.wpId = res.data[0].id;
+          that.wpName = res.data[0].wpName;
+          that.getWt(that.wpId, reGetWp);
+        },
+      });
+    },
+
+    // 获取风机
+    getWt(wpid, reGetWp) {
+      let that = this;
+      if (that.wpId) {
+        that.API.requestData({
+          method: "GET",
+          baseURL: "http://10.155.32.4:9001",
+          subUrl: "benchmarking/wtList",
+          data: {
+            wpid,
+          },
+          success(res) {
+            that.wtArray = res.data;
+            // that.wtId = res.data[0].id;
+          },
+        });
+      }
+    },
+    BeginChange(vl) {
+      this.value1 = vl;
+    },
+    EndChange(vl) {
+      this.value2 = vl;
+    },
+    typeChange(vl) {
+      this.type = vl;
+    },
+    // 搜索按钮
+    onClickSearch() {
+      this.requestSafeList();
+    },
+    // 获取停机事件
+    requestSafeList() {
+      let that = this;
+
+      let data = {
+        tablepar: {
+          pageNum: 1,
+          pageSize: 1000,
+        },
+        beginDate: that.value1,
+        endDate: that.value2,
+        wpId: that.wpId,
+      };
+
+      if (that.wtId != "") data.wtId = that.wtId;
+      if (that.type != "") data.type = that.type;
+
+      this.API.requestData({
+        method: "POST",
+        subUrl: "/event/getShutdownevent",
+        data,
+        success(res) {
+          if (res.code == 200) {
+            that.tableData.data = [];
+            if (res.data.list.length) {
+              let data = res.data.list;
+              for (var i = 0; i < data.length; i++) {
+                let obj = {
+                  wpName: data[i].wpName,
+                  wtName: data[i].wtName,
+                  stopTime: new Date(data[i].stopTime).formatDate(
+                    "yyyy-MM-dd hh:mm:ss"
+                  ),
+
+                  stopHours: data[i].stopHours,
+                  statusName: data[i].statusName,
+                  warnDesc: data[i].warnDesc,
+                  lossPower: data[i].lossPower,
+                  handleWay: data[i].handleWay,
+                };
+                if (data[i].startTime)
+                  obj.startTime = new Date(data[i].startTime).formatDate(
+                    "yyyy-MM-dd hh:mm:ss"
+                  );
+                that.tableData.data.push(obj);
+              }
+            }
+          }
+        },
+      });
+    },
+  },
+};
+</script>
+
+<style lang="less" scope>
+@titleGray: #9ca5a8;
+@rowGray: #606769;
+@darkBack: #536268;
+.knowledge-2 {
+  .el-select {
+    width: 200px;
+  }
+  .el-input {
+    width: 200px;
+  }
+}
+</style>

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

@@ -24,76 +24,76 @@
     </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" width="150px" label="风机"></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="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>