327 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			327 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="KqShowScreen.aspx.cs" Inherits="FineUIPro.Web.HSSE.KqShowScreen.KqShowScreen" %> | |||
|  | 
 | |||
|  | <!DOCTYPE html> | |||
|  | <html lang="en"> | |||
|  | 
 | |||
|  | <head runat="server"> | |||
|  |     <meta charset="UTF-8"> | |||
|  |     <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||
|  |     <title>Document</title> | |||
|  |     <script src="../../res/lib/flex.js"></script> | |||
|  |     <link rel="stylesheet" href="../../res/css/kqshowscreen.css"> | |||
|  | </head> | |||
|  | 
 | |||
|  | <body> | |||
|  |     <div class="context"> | |||
|  |         <div class="left site"> | |||
|  |             <div class="block"> | |||
|  |                 <div class="title">当前现场总人数</div> | |||
|  |                 <div class="main xc"> | |||
|  |                     <div class="number" id="divTotal"> | |||
|  |                         0 | |||
|  |                     </div> | |||
|  |                 </div> | |||
|  |             </div> | |||
|  |             <div class="block1 "> | |||
|  |                 <div class="title">当前公司现场人数</div> | |||
|  |                 <div class="main gsxc"> | |||
|  |                     <ul id="ulcom"  > | |||
|  |                         | |||
|  |                          | |||
|  |                     </ul> | |||
|  |                 </div> | |||
|  |             </div> | |||
|  |         </div> | |||
|  |         <div class="right site"> | |||
|  |             <div class="block1"> | |||
|  |                 <div class="top"> | |||
|  |                     <div class="info"> | |||
|  |                         <ul id="infoul"> | |||
|  |                              | |||
|  |                         </ul> | |||
|  |                     </div> | |||
|  |                     <div class="photo"> | |||
|  |                         <img id="header" src=""> | |||
|  |                     </div> | |||
|  |                 </div> | |||
|  |             </div> | |||
|  |             <div class="block"> | |||
|  |                 <div class="title">当前现场岗位人数量</div> | |||
|  |                 <div class="main" id="gwnum"> | |||
|  | 
 | |||
|  |                 </div> | |||
|  |             </div> | |||
|  |         </div> | |||
|  |     </div> | |||
|  | </body> | |||
|  | 
 | |||
|  | </html> | |||
|  | <script src="../../res/lib/echarts.min.js"></script> | |||
|  | <script src="../../res/lib/jquery.js"></script> | |||
|  | <script> | |||
|  |     var projectid = '<%=ProjectId%>' | |||
|  |     | |||
|  |     function createGWNUM(name, value1) { | |||
|  |         let type = name//['焊工', '电工', '架子工', '木工', '管工', '仪表安装工', '电气安装工', '钢筋工', '起重司机', '钳工', '起重指挥', '混凝土工', '维护电工'] | |||
|  |         let value = value1// [100, 96, 89, 88, 87, 81, 80, 76, 75, 72, 70, 65, 62, 61] | |||
|  |         let opt = { | |||
|  |             grid: { | |||
|  |                 top: 20, | |||
|  |                 left: 60, | |||
|  |                 right:60 | |||
|  |                 // bottom: 30 | |||
|  |             }, | |||
|  |             xAxis: { | |||
|  |                 type: 'category', | |||
|  |                 data: type, | |||
|  |                 axisLine: { | |||
|  |                     lineStyle: { | |||
|  |                         color: '#84D7FE' | |||
|  |                     } | |||
|  |                 }, | |||
|  |                 axisTick: { | |||
|  |                     show: false | |||
|  |                 }, | |||
|  |                 axisLabel: { | |||
|  |                     interval: 0,      // 坐标轴刻度标签的显示间隔 | |||
|  |                     rotate: -30        // 标签倾斜的角度 | |||
|  |                 } | |||
|  | 
 | |||
|  |             }, | |||
|  |             yAxis: { | |||
|  |                 type: 'value', | |||
|  |                 axisLine: { | |||
|  |                     lineStyle: { | |||
|  |                         color: '#84D7FE' | |||
|  |                     } | |||
|  |                 }, | |||
|  |                 splitLine: { | |||
|  |                     lineStyle: { | |||
|  |                         color: '#2E87AC', | |||
|  |                         type: 'dashed' | |||
|  |                     } | |||
|  |                 } | |||
|  |             }, | |||
|  |             dataZoom: [ | |||
|  |                 { | |||
|  |                     show: true, | |||
|  |                     type: 'slider', // 单独滚动条 | |||
|  |                     filterMode: 'none', // 不过滤数据 - 保证 y 轴数据范围不变 | |||
|  |                     brushSelect: true, | |||
|  |                     bottom: 0, | |||
|  |                     height: 10, | |||
|  |                     backgroundColor: 'transparent', | |||
|  |                     // 选中范围的填充颜色 | |||
|  |                     fillerColor: 'transparent', | |||
|  |                     borderWidth: 0, | |||
|  |                     borderColor: 'transparent', | |||
|  |                     dataBackground: { | |||
|  |                         lineStyle: { | |||
|  |                             color: 'transparent' | |||
|  |                         }, | |||
|  |                         areaStyle: { | |||
|  |                             color: 'transparent' | |||
|  |                         } | |||
|  |                     }, | |||
|  |                     selectedDataBackground: { | |||
|  |                         lineStyle: { | |||
|  |                             color: 'transparent' | |||
|  |                         }, | |||
|  |                         areaStyle: { | |||
|  |                             color: 'transparent' | |||
|  |                         } | |||
|  |                     }, | |||
|  | 
 | |||
|  |                     startValue: 0, | |||
|  |                     endValue: 10, | |||
|  |                     xAxisIndex: [0], | |||
|  |                     showDetail: false, | |||
|  | 
 | |||
|  |                     handleSize: '0%', | |||
|  |                     // 移动手柄尺寸高度 | |||
|  |                     // 测试发现手柄颜色和边框颜色会出现 偏差,所有设置手柄高度为0, 添加边框高度。由边框撑起高度 | |||
|  |                     moveHandleSize: 0, // 设置拖动手柄高度为0,只由边框负责高度展示 | |||
|  |                     // 不展示拖动手柄图标 | |||
|  |                     moveHandleIcon: 'none', | |||
|  |                     moveHandleStyle: { | |||
|  |                         // borderColor: systemTheme === 'light' ? '#E4E6E7' : '#5d6177', | |||
|  |                         borderColor:'#5d6177', | |||
|  |                         borderWidth: 10, // 设置边框高度 | |||
|  |                         borderType: 'solid', | |||
|  |                         borderCap: 'round', | |||
|  |                         // 保证拖动手柄右边框结尾有圆角 | |||
|  |                         borderJoin: 'round' | |||
|  |                     }, | |||
|  |                     // 拖动高亮时设置 | |||
|  |                     emphasis: { | |||
|  |                         moveHandleStyle: { | |||
|  |                             // borderColor: systemTheme === 'light' ? '#E4E6E7' : '#5d6177', | |||
|  |                             borderColor: '#5d6177', | |||
|  |                             borderWidth: 10, | |||
|  |                             borderType: 'solid', | |||
|  |                             borderCap: 'round' | |||
|  |                         } | |||
|  |                     } | |||
|  |                 } | |||
|  |             ], | |||
|  |             series: [ | |||
|  |                 { | |||
|  |                     name: '', | |||
|  |                     data: value, | |||
|  |                     type: 'bar', | |||
|  |                     label: { | |||
|  |                         show: true, | |||
|  |                         color: '#ffffff', | |||
|  |                         position: 'top', | |||
|  |                     }, | |||
|  |                     barWidth: 16, | |||
|  |                     itemStyle: { | |||
|  |                         normal: { | |||
|  |                             color:function(d){return "#"+Math.floor(Math.random()*(256*256*256-1) ).toString(16);} | |||
|  |                         } | |||
|  |                     } | |||
|  | 
 | |||
|  |                 } | |||
|  |             ] | |||
|  |         }; | |||
|  | 
 | |||
|  |         var myEchart = echarts.init(document.getElementById('gwnum')); | |||
|  |         myEchart.setOption(opt); | |||
|  |     } | |||
|  | 
 | |||
|  |      | |||
|  |     getData(); | |||
|  |     function getData() {  | |||
|  |         $.ajax({ | |||
|  |             url: "KqShowScreen.aspx/getData", | |||
|  |             type: "POST", | |||
|  |             contentType: "application/json; charset=utf-8", | |||
|  |             dataType: "json", | |||
|  |             data: JSON.stringify({ | |||
|  |                 projectId: projectid  | |||
|  |             }), | |||
|  |             success: function (data) {  | |||
|  |                 if (data.d != null) { | |||
|  |                     var workPost = data.d.workPost;                      | |||
|  |                     if (workPost != null) {  | |||
|  |                         createGWNUM(workPost.name, workPost.value) | |||
|  |                     } | |||
|  | 
 | |||
|  |                     var company = data.d.company; | |||
|  |                     if (company != null) { | |||
|  |                         var chtml = ''; | |||
|  |                         company.forEach(function (item, index, arr) { | |||
|  |                             chtml += ' <li><span>' + item.name + '</span><span>' + item.value +'</span></li>';  | |||
|  |                         }) | |||
|  |                         $("#ulcom").html(chtml)   | |||
|  | 
 | |||
|  |                     } | |||
|  |                     var person = data.d.person; | |||
|  |                     if (person != null) { | |||
|  |                         var phtml = '<li><span>所属单位</span><span>' + person.UnitName +'</span></li>'+ | |||
|  |                             '<li ><span>姓名</span><span>' +   person.PersonName +'</span></li>' + | |||
|  |                             '<li><span>岗位</span><span>' + person.WorkPostName+'</span></li>' + | |||
|  |                             '<li><span>班组</span><span>' + person.teamGroupName +'</span></li>' + | |||
|  |                             '<li><span>' + person.inOut+'时间</span><span>' + person.ChangeTime+'</span></li>'; | |||
|  | 
 | |||
|  | 
 | |||
|  |                         $("#infoul").html(phtml)   | |||
|  |                         $("#header").attr('src',person.PhotoUrl);   | |||
|  |                          | |||
|  |                     } | |||
|  |                    | |||
|  |                     $("#divTotal").html(data.d.total) | |||
|  | 
 | |||
|  | 
 | |||
|  |                     | |||
|  |                 } | |||
|  | 
 | |||
|  |                  | |||
|  |               | |||
|  |             } | |||
|  |         }) | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |     // 设定默认值 | |||
|  |     var websock = null; | |||
|  |     var cishu = 0; | |||
|  |     // 每10分钟 通过 websocket 向服务器发送一次心跳 证明客户端没有离线 依然在线可以正常接受消息 | |||
|  |     setInterval(websocketsend, 20000); | |||
|  | 
 | |||
|  |     //initWebsocket(); | |||
|  |     function initWebsocket() { | |||
|  |         /* | |||
|  |         * 初始化 websock | |||
|  |         * 连接 服务器地址 | |||
|  |         * 并绑定 websock 四个事件方法 | |||
|  |         */ | |||
|  |         websock = new WebSocket('wss://wzgl.hfnbd.com:1000'); | |||
|  |         // 接收服务器返回的数据 | |||
|  |         websock.onmessage = this.websocketonmessage; | |||
|  |         // 连接建立时触发 | |||
|  |         websock.onopen = this.websocketonopen; | |||
|  |         // 连接中发生异常 | |||
|  |         websock.onerror = this.websocketonerror; | |||
|  |         // 连接关闭时触发 | |||
|  |         websock.onclose = this.websocketclose; | |||
|  |         cishu = 0; | |||
|  |     }  | |||
|  |     function websocketonopen(){  | |||
|  |           | |||
|  |         websocketsend(); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     function websocketonerror() { | |||
|  |         /* | |||
|  |         * websocket 连接建立失败 执行的方法 | |||
|  |         * 注:我这里加了个判断,如果联系建立失败就在连接几次 | |||
|  |         */ | |||
|  |         if (cishu < 5) { | |||
|  |             cishu = cishu + 1; | |||
|  |             initWebsocket(); | |||
|  |         } | |||
|  |     }  | |||
|  | 
 | |||
|  | 
 | |||
|  |     function websocketsend() { | |||
|  | 
 | |||
|  |         /* | |||
|  |         * websocket 数据发送 通过 websock.send() 方法向服务器发送数据 | |||
|  |         * 注:这里随便发哈,主要作用就是通过这个动作,让客户端与服务端建立联系 | |||
|  |         */ | |||
|  |         let actions = { | |||
|  |             "projectid": projectid | |||
|  |         }; | |||
|  |         websock.send(JSON.stringify(actions)); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     function websocketclose(e) { | |||
|  |         /* | |||
|  |         * websocket 连接关闭 执行的方法 | |||
|  |         */ | |||
|  |         console.log('断开连接', e); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     function websocketonmessage(e) { | |||
|  |         /* | |||
|  |         * websocket 数据接收 执行的方法 | |||
|  |         * 注:服务器通过 websocke 向客户端发送数据时,这里的方法就会自动触发啦 | |||
|  |         */ | |||
|  | 
 | |||
|  |         if ("newinout" == e.data); | |||
|  |         { | |||
|  |             getData(); | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     setInterval(function () { //执行任务  | |||
|  |         getData(); | |||
|  |     }, 2000);  | |||
|  | 
 | |||
|  | </script> |