Lin_Ye_Fang_Huo/src/views/home/widget/socketdiabox.vue

964 lines
38 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="box">
<!-- <div class="close-button" @click="close">
<i class='el-icon el-icon-close'></i>
</div> -->
<div class="box-container">
<div class="flex fc-w fz-16 column" style="margin:10px">
<div>当前在线总人数{{ listDataInfo.onlineCount }}</div>
</div>
<div class="table-body">
<div class="item flex jc-sb" v-for="(item,index) in listDataInfo.onOffLineInfo" :key="index">
<div>{{item.time}}</div>
<div>{{ item.name }}{{ item.typeName }}</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { mapState,mapGetters } from "vuex";
import axios from "axios";
import { getMethodCommon } from '@/api/common.js';
let BASE_URL = process.env.VUE_APP_BASE_API;
import AppConfig from '../../../../public/config/app.json'
import { parse } from '../lib/handleGeojson.js';
import * as turf from '@turf/turf'
import { isJson } from "../../../utils/index";
import { handlerData } from "../lib/userSport";
import { getRouterFunc, drawRouterFunc, clearRouterFunc } from '../lib/routePath'
export default {
name: 'monitorbox',
computed: {
...mapGetters([
]),
//trtc
...mapState({
websocket:state=>state.Emergency.listenWebSocket,
}),
},
props:['globalmap',"showOnlineUser"],
data(){
return{
listDataInfo:[],
pointData:[],
markGraphicLayer: null,
markGraphicLayerArr:[],
startPoint:null,
endPoint:null,
pathPointGraphicLayer:null,
currentUsers:[],
}
},
watch:{
showOnlineUser:{
handler(newVal,oldVal){
if(this.markGraphicLayer){
this.markGraphicLayer.show = newVal;
}
},
immediate:true
}
},
created(){
this.getOnLineInfo()
// this.initWebSocket()
window.addEventListener("onmessageWS", this.getSocketData);
// setInterval(()=>{
// this.pointData = []
// let arr = ['人员信息','对讲机信息']
// arr.forEach(item =>{
// this.getPointer(item)
// })
// },120000)
},
mounted(){
window.videoCall = this.videoCall
window.designRoute = this.designRoute;
window.deleteRoute = this.deleteRoute;
let _this = this;
// this.TestSport();
// _this.getPointer();
setInterval(function(){
_this.pointData = []
let arr = ['人员信息','对讲机信息']
_this.getPointer("人员信息")
},5000)
},
methods:{
getSocketData(res){
let _this = this;
if (!isJson(res.detail.data)) return;
let obj = JSON.parse(res.detail.data)
if(obj.Module){
_this.pointData = []
if(obj.Module == '人员信息' || obj.Module == '对讲机信息'){
// _this.getPointer(obj.Module)
}
if(obj.Module == '上线' || obj.Module == '下线'){
// _this.getOnLineInfo()
}
}
},
close(){
this.markGraphicLayerArr.forEach(item =>{
this.markGraphicLayer.removeGraphic(item)
})
this.$emit('close')
},
videoCall(phone){
let userId = localStorage.getItem("userName") || ''
if(userId && phone){
// let wind = window.open("https://ssl.hopetrytech.com:9233/#/userID="+userId+"&callUserID="+phone, "视频通话", "location=no,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,width=640,height=460");
let wind = window.open("https://ssl.hopetrytech.com:9233?userID="+userId+"&callUserID="+phone, "视频通话", "location=no,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,width=640,height=460");
wind.onload = function(){
wind.document.title = "视频通话";
}
}
else{
this.$message({
type:"warning",
message:"系统错误,调用视频通话接口失败"
})
}
// window.navigator.mediaDevices.enumerateDevices().then(devices => {
// let isSuppertVideo = 0;
// for(let i=0;i<devices.length;i++){
// if(devices[i].kind =="videoinput"){
// isSuppertVideo++;
// }
// }
// if(isSuppertVideo>0){
// let wind = window.open("https://ssl.hopetrytech.com:9233/#/?userID="+localStorage.getItem("userName")+"&callUserID="+phone, "视频通话", "location=no,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,width=640,height=460");
// wind.onload = function(){
// wind.document.title = "视频通话";
// }
// }else{
// this.$message({
// type:"warning",
// message:"当前设备暂不支持视频通话!"
// })
// }
// })
},
getOnLineInfo(){
getMethodCommon("/FireManagement/GetOnOffLineInfo").then(res =>{
this.listDataInfo = res.data
})
},
TestSport(){
let testData = [
[
{
"createTime": "2023-09-27 14:15:06",
"lng": "117.641188",
"lat": "35.5059383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db2",
"name": "汪键波",
"phone": "18263982658"
}
],[
{
"createTime": "2023-09-27 14:15:06",
"lng": "117.651188",
"lat": "35.5159383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db2",
"name": "汪键波",
"phone": "18263982658"
}
],[
{
"createTime": "2023-09-27 14:15:06",
"lng": "117.661188",
"lat": "35.5259383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db2",
"name": "汪键波",
"phone": "18263982658"
}
],[
{
"createTime": "2023-09-27 14:15:06",
"lng": "117.671188",
"lat": "35.5359383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db2",
"name": "汪键波",
"phone": "18263982658"
}
],[
{
"createTime": "2023-09-27 14:15:06",
"lng": "117.681188",
"lat": "35.5459383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db2",
"name": "汪键波",
"phone": "18263982658"
},
{
"createTime": "2023-09-27 14:15:06",
"lng": "117.641188",
"lat": "35.5059383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db3",
"name": "徐景亮",
"phone": "18263982658"
}
],[
{
"createTime": "2023-09-27 14:15:06",
"lng": "117.691188",
"lat": "35.5359383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db2",
"name": "汪键波",
"phone": "18263982658"
},
{
"createTime": "2023-09-27 14:15:06",
"lng": "117.631188",
"lat": "35.4959383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db3",
"name": "徐景亮",
"phone": "18263982658"
},{
"createTime": "2023-09-27 14:15:06",
"lng": "117.621188",
"lat": "35.5059383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db4",
"name": "徐景良",
"phone": "18263982658"
}
],[
{
"createTime": "2023-09-27 14:15:06",
"lng": "117.621188",
"lat": "35.4859383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db3",
"name": "徐景亮",
"phone": "18263982658"
},{
"createTime": "2023-09-27 14:15:06",
"lng": "117.611188",
"lat": "35.5059383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db4",
"name": "徐景良",
"phone": "18263982658"
}
],[
{
"createTime": "2023-09-27 14:15:06",
"lng": "117.611188",
"lat": "35.4759383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db3",
"name": "徐景亮",
"phone": "18263982658"
},{
"createTime": "2023-09-27 14:15:06",
"lng": "117.601188",
"lat": "35.5059383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db4",
"name": "徐景良",
"phone": "18263982658"
}
],[
{
"createTime": "2023-09-27 14:15:06",
"lng": "117.621188",
"lat": "35.4859383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db3",
"name": "徐景亮",
"phone": "18263982658"
},{
"createTime": "2023-09-27 14:15:06",
"lng": "117.601188",
"lat": "35.5259383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db4",
"name": "徐景良",
"phone": "18263982658"
},{
"createTime": "2023-09-27 14:15:06",
"lng": "117.631188",
"lat": "35.4959383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db2",
"name": "汪键波",
"phone": "18263982658"
}
],[
{
"createTime": "2023-09-27 14:15:06",
"lng": "117.621188",
"lat": "35.4759383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db3",
"name": "徐景亮",
"phone": "18263982658"
},{
"createTime": "2023-09-27 14:15:06",
"lng": "117.611188",
"lat": "35.5359383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db4",
"name": "徐景良",
"phone": "18263982658"
},{
"createTime": "2023-09-27 14:15:06",
"lng": "117.621188",
"lat": "35.4859383",
"createId": "a33cdcc8-24aa-4d72-92bb-2399ec831db2",
"name": "汪键波",
"phone": "18263982658"
}
],[],[],[],[]
]
let i=0;
let _this = this;
setInterval(function(){
i++;
_this.currentUsers = testData[i];
_this.updateLayerPoint();
},5000)
},
getPointer(type){
getMethodCommon("/FireManagement/GetPointByType",{type:type}).then(res =>{
res.data.forEach(item =>{
this.pointData.push(item)
})
this.currentUsers = this.pointData;
this.updateLayerPoint();
// this.addLayerPoint()
})
},
updateLayerPoint(){
if(this.markGraphicLayer == null){
this.markGraphicLayer = new mars3d.layer.GraphicLayer();
this.globalmap.addLayer(this.markGraphicLayer);
}
// 删除数据
console.log("currentUsers",this.currentUsers);
this.markGraphicLayer.eachGraphic((graphicEvent)=>{
let obj = null;
obj = this.currentUsers.find((item,index)=>{
return item.createId == graphicEvent.options.userId
})
if(obj){
}else{
for(let i=0;i<this.markGraphicLayerArr.length;i++){
if(this.markGraphicLayerArr[i].createId == graphicEvent.options.userId){
this.markGraphicLayerArr.splice(i,1);
}
}
this.markGraphicLayer.removeGraphic(graphicEvent);
}
})
console.log("markGraphicLayerArr",this.markGraphicLayerArr);
//
this.currentUsers.forEach((item,index)=>{
let obj = this.markGraphicLayerArr.find((it,idx)=>{
return it.createId == item.createId;
})
// 如果obj为空则添加
if(!obj){
console.log("------------添加数据");
let graphic = new mars3d.graphic.BillboardEntity({
// position: [item.lng,item.lat],
position:Cesium.Cartesian3.fromDegrees(parseFloat(item.lng),parseFloat(item.lat)),
userId:item.createId,
style: {
image: "/img/jiuyuanrenyuan.png",
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
clampToGround:true,
scale:0.4,
label: {
text: "",
font_size: 14,
color: "#ffffff",
pixelOffsetY: 10,
distanceDisplayCondition: true,
distanceDisplayCondition_far: 500000,
distanceDisplayCondition_near: 0
}
},
popup: `<div class="marsTiltPanel marsTiltPanel-theme-blue" style="font-size:12px;">
<div class="marsTiltPanel-wrap">
<div class="area">
<div class="arrow-lt"></div>
<div class="b-t"></div>
<div class="b-r"></div>
<div class="b-b"></div>
<div class="b-l"></div>
<div class="arrow-rb"></div>
<div class="label-wrap">
<div class="title">人员信息</div>
<div class="label-content">
<div class="data-li">
<div class="data-label">人员名称:${item.name}</div>
</div>
<div class="data-li">
<div class="data-label">电话号码:${item.phone}</div>
<div class="data-value"><span id="lablYeWei" class="label-num"></span><span class="label-unit"></span>
</div>
</div>
<div class="data-li">
<div class="data-value">
<span class="label-tag data-value-status-2" title="视频通话" onclick="videoCall('${item.phone}')">视频通话</span></div>
<span id="lablSBZT1" onclick="designRoute('${item.createId}');" class="label-tag data-value-status-1" title="人员动态">路线高亮</span>
<span id="lablSBZT1" onclick="deleteRoute('${item.createId}');" class="label-tag data-value-status-2" title="清除路线">路线隐藏</span>
</div>
</div>
</div>
</div>
</div>
<div class="b-t-l"></div>
<div class="b-b-r"></div>
</div>
<div class="arrow" ></div>
</div>`,
popupOptions: {
offsetY: -30,
template: "{content}",
horizontalOrigin: "Cesium.HorizontalOrigin.LEFT",
verticalOrigin: "Cesium.VerticalOrigin.CENTER",
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 200000), // 按视距距离显示
scaleByDistance: new Cesium.NearFarScalar(1000, 0.8, 8000, 0.3),
},
pointerEvents: true
})
let graphicItem = {
createId:item.createId,
graphic:graphic
}
this.markGraphicLayerArr.push(graphicItem);
this.markGraphicLayer.addGraphic(graphic);
graphic.addDynamicPosition(Cesium.Cartesian3.fromDegrees(parseFloat(item.lng),parseFloat(item.lat)),0);
}else{
// 如果已经存在则更新位置
// console.log("------------更新数据");
this.markGraphicLayer.eachGraphic((graphicEvent) => {
if (graphicEvent.isPrivate) {
return
}
// console.log("graphicEvent",graphicEvent);
if(graphicEvent.options.userId == obj.createId){
graphicEvent.addDynamicPosition(Cesium.Cartesian3.fromDegrees(parseFloat(item.lng),parseFloat(item.lat)),5);
}
})
}
})
},
addLayerPoint(){
if(this.markGraphicLayer == null){
this.markGraphicLayer = new mars3d.layer.GraphicLayer();
this.globalmap.addLayer(this.markGraphicLayer);
}
this.markGraphicLayerArr.forEach(item =>{
this.markGraphicLayer.removeGraphic(item)
})
this.markGraphicLayer.clear();
this.markGraphicLayerArr = []
this.pointData.forEach((item,index)=>{
let graphic = new mars3d.graphic.BillboardEntity({
position: [item.lng,item.lat],
userId:item.createId,
style: {
image: "/img/jiuyuanrenyuan.png",
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
clampToGround:true,
scale:0.5,
label: {
text: "",
font_size: 14,
color: "#ffffff",
pixelOffsetY: 10,
distanceDisplayCondition: true,
distanceDisplayCondition_far: 500000,
distanceDisplayCondition_near: 0
}
},
pointerEvents: true
})
this.markGraphicLayerArr.push(graphic)
this.markGraphicLayer.addGraphic(graphic);
let graphicWinodw = new mars3d.graphic.DivGraphic({
position: [item.lng,item.lat],
style: {
html: `<div class="marsTiltPanel marsTiltPanel-theme-blue" style="font-size:12px;">
<div class="marsTiltPanel-wrap">
<div class="area">
<div class="arrow-lt"></div>
<div class="b-t"></div>
<div class="b-r"></div>
<div class="b-b"></div>
<div class="b-l"></div>
<div class="arrow-rb"></div>
<div class="label-wrap">
<div class="title">人员信息</div>
<div class="label-content">
<div class="data-li">
<div class="data-label">人员名称:${item.name}</div>
</div>
<div class="data-li">
<div class="data-label">电话号码:${item.phone}</div>
<div class="data-value"><span id="lablYeWei" class="label-num"></span><span class="label-unit"></span>
</div>
</div>
<div class="data-li">
<div class="data-value">
<span class="label-tag data-value-status-2" title="视频通话" onclick="videoCall('${item.phone}')">视频通话</span></div>
<span id="lablSBZT1" onclick="designRoute('${item.createId}');" class="label-tag data-value-status-1" title="人员动态">路线高亮</span>
<span id="lablSBZT1" onclick="deleteRoute('${item.createId}');" class="label-tag data-value-status-2" title="清除路线">路线隐藏</span>
</div>
</div>
</div>
</div>
</div>
<div class="b-t-l"></div>
<div class="b-b-r"></div>
</div>
<div class="arrow" ></div>
</div>`,horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 200000), // 按视距距离显示
scaleByDistance: new Cesium.NearFarScalar(1000, 0.7, 8000, 0.2),
clampToGround: true,
offsetY: -60,
},
pointerEvents: true // false时不允许拾取和触发任意鼠标事件但可以穿透div缩放地球
})
this.markGraphicLayerArr.push(graphicWinodw)
this.markGraphicLayer.addGraphic(graphicWinodw);
})
},
deleteRoute(){
if(this.pathPointGraphicLayer){
this.pathPointGraphicLayer.clear();
}
},
designRoute(userId){
axios({
method:"get",
url:BASE_URL+"/Patrol/LoadUserNavigationByUserId",
params:{
id:userId
},
headers:{
"X-Token":localStorage.getItem("X-Token")
}
}).then(res=>{
if(res.data.code == 200){
if(res.data.data){
this.startPoint = res.data.data.startLng+","+res.data.data.startLat;
this.endPoint = res.data.data.endLng+","+res.data.data.endLat;
this.getRoutePath();
}else{
this.$message({
type:"warning",
message:"当前人员暂无规划地",
})
}
}
})
},
getRoutePath() {
// 获取路线数据
let startCoor = this.startPoint.split(",")
let endCoor = this.endPoint.split(",");
let params = {
startlng: parseFloat(startCoor[0]),
startlat: parseFloat(startCoor[1]),
endlng: parseFloat(endCoor[0]),
endlat: parseFloat(endCoor[1]),
areaname: localStorage.getItem("areaName"),
};
getRouterFunc(params,).then(res => {
drawRouterFunc(res)
}).catch(err => {
clearRouterFunc()
})
},
drawPoint(type, lng, lat, z) { // 绘制起点、终点
let image = null;
if (type == "start") {
image = "/img/route-start.png"
} else {
image = "/img/route-end.png"
}
var graphic = new mars3d.graphic.BillboardEntity({
position: [lng, lat, z],
style: {
image: image,
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
clampToGround: true
},
attr: { remark: type == 'start'?'起点':'终点' }
})
this.pathPointGraphicLayer.addGraphic(graphic) // 还可以另
},
// getRoutePath(){ // 获取路线数据
// if(this.startPoint&&this.endPoint){
// let startCoor = this.startPoint.split(",");
// let endCoor = this.endPoint.split(",");
// axios({
// method: 'get',
// url: AppConfig[localStorage.getItem('areaName')].baseUrl+'/api/FirePrevention/LoadRoad',
// params: {
// startlng: parseFloat(startCoor[0]),
// startlat: parseFloat(startCoor[1]),
// endlng: parseFloat(endCoor[0]),
// endlat: parseFloat(endCoor[1]),
// }
// }).then(data => {
// if (data.data.data.length > 0) {
// let LineString = data.data.data[0].route;
// if(LineString == null || LineString == "null"){
// }else{
// let _this = this;
// setTimeout(function () {
// _this.drawRoutePath(parse(LineString));
// // designPath(parse(LineString));
// }, 1000)
// }
// }else{
// }
// })
// }else{
// }
// },
drawRoutePath(geojson) { // 绘制路线
if(this.pathPointGraphicLayer == null){
this.pathPointGraphicLayer = new mars3d.layer.GraphicLayer();
this.globalmap.addLayer(this.pathPointGraphicLayer);
}else{
this.pathPointGraphicLayer.clear();
}
if(geojson.type=="LineString"){
geojson.coordinates = [geojson.coordinates]
}
// 虚线部分
var startCoor = this.startPoint.split(",");
var endCoor =this.endPoint.split(",");
if(this.startPoint&&this.endPoint){
this.drawPoint("start",parseFloat(startCoor[0]),parseFloat(startCoor[1]),0)
this.drawPoint("end",parseFloat(endCoor[0]),parseFloat(endCoor[1]),0)
}else{
this.$message({
type:"warning",
message:"当前人员暂无规划地",
})
}
// 起始点坐标
var startCoorArr = [parseFloat(startCoor[0]), parseFloat(startCoor[1])]
// 终点坐标
var endCoorArr = [parseFloat(endCoor[0]), parseFloat(endCoor[1])]
var startTurfPoint = turf.point(startCoorArr);
var endTurfPoint = turf.point(endCoorArr);
// 起始路线部分
var startPath = [];
geojson.coordinates[0].forEach((item, index) => {
startPath.push(turf.point([item[0], item[1]]));
})
var startTurfPath = turf.featureCollection(startPath);
var startNearestPoint = turf.nearestPoint(startTurfPoint, startTurfPath);
var startNearestPointLngLat = null;
if (startNearestPoint) {
startNearestPointLngLat = startNearestPoint.geometry.coordinates;
var graphic = new mars3d.graphic.PolylineEntity({
positions: [
startCoorArr,
startNearestPointLngLat,
],
style: {
width: 5,
clampToGround: true,
materialType: mars3d.MaterialType.PolylineDash,
materialOptions: {
color: Cesium.Color.YELLOW,
dashLength: 8.0
}
},
attr: { remark: "虚线" }
})
this.pathPointGraphicLayer.addGraphic(graphic)
}
// 终点路线部分
var endPath = [];
geojson.coordinates[geojson.coordinates.length - 1].forEach((item, index) => {
endPath.push(turf.point([item[0], item[1]]));
})
var endTurfPath = turf.featureCollection(endPath);
var endNearestPoint = turf.nearestPoint(endTurfPoint, endTurfPath);
var endNearestPointLngLat = null;
if (endNearestPoint) {
endNearestPointLngLat = endNearestPoint.geometry.coordinates;
var graphic = new mars3d.graphic.PolylineEntity({
positions: [
endCoorArr,
endNearestPointLngLat,
],
style: {
width: 5,
clampToGround: true,
materialType: mars3d.MaterialType.PolylineDash,
materialOptions: {
color: Cesium.Color.YELLOW,
dashLength: 8.0
}
},
attr: { remark: "虚线" }
})
this.pathPointGraphicLayer.addGraphic(graphic)
}
// 漫游数据
var tripArr = [];
// 实线路线部分
geojson.coordinates.forEach((item, index) => {
tripArr = tripArr.concat(item);
// var graphic = new mars3d.graphic.PolylineEntity({
// positions: item,
// style: {
// width: 5,
// clampToGround: true,
// // materialType: mars3d.MaterialType.PolylineDash,
// materialOptions: {
// color: Cesium.Color.CYAN,
// dashLength: 8.0
// }
// },
// attr: { remark: "最优路线" }
// })
})
var graphic = new mars3d.graphic.PolylineEntity({
positions: tripArr,
style: {
width: 5,
clampToGround: true,
materialType: mars3d.MaterialType.LineFlow,
materialOptions: {
color: Cesium.Color.CYAN,
image: "/img/line-colour.png",
speed: 10
}
},
attr: { remark: "示例13" }
})
this.pathPointGraphicLayer.addGraphic(graphic)
this.pathPointGraphicLayer.flyTo();
this.tripFlyArray = [];
tripArr.forEach((item, index) => {
if (index % 20 == 0) {
this.tripFlyArray.push(item);
}
})
},
initWebSocket() {
let _this = this;
if ("WebSocket" in window) {
// 打开一个 web socket
var ws = new WebSocket("ws://221.2.83.254:7002/ws");
var heartCheck;
ws.onopen = function () {
//Web Socket 已连接上,使用 send() 方法发送数据
console.log('WEBSOCKET-ONLINE')
heartCheck = setInterval(function() {
ws.send('HeartBeat');
}, 5000);
};
ws.onmessage = function (evt) {
clearInterval(heartCheck);
heartCheck = setInterval(function() {
ws.send('HeartBeat');
}, 5000);
let obj = JSON.parse(evt.data)
if(obj.Module){
_this.pointData = []
if(obj.Module == '人员信息' || obj.Module == '对讲机信息'){
_this.getPointer(obj.Module)
}
if(obj.Module == '上线' || obj.Module == '下线'){
_this.getOnLineInfo()
}
}
};
ws.onclose = function () {
clearInterval(heartCheck);
console.log('WEBSOCKET-CLOSED')
_this.initWebSocket()
};
ws.onerror= function () {
clearInterval(heartCheck);
console.log('WEBSOCKET-ERROR')
_this.initWebSocket()
};
} else {
// 浏览器不支持 WebSocket
alert("您的浏览器不支持 WebSocket!");
}
},
}
}
</script>
<style scoped>
/* .box{
width: 100%;
height: calc( 100% - 5px);;
overflow: hidden;
text-align:left;
z-index: 99;
} */
/* 隐藏该图表 */
.box{
width: 1px;
height: 1px;
overflow: hidden;
}
.box-name{
height: 47px;
line-height: 47px;
color: #fff;
font-size: 20px;
font-weight: bold;
padding: 0 40px;
}
.box-title{
width:100%;
height:45px;
overflow: hidden;
line-height:40px;
color:#eee;
text-align: center;
font-size:14px;
}
.box-container{
width: calc( 100% - 0px);
padding:10px 12px;
height: calc( 100% - 50px);
}
.table-header{
width: calc( 100% - 10px);
height:25px;
color:#fff;
text-align: center;
}
.table-header div{
float:left;
width:25%;
border-bottom:1px dashed #00FFF0;
padding-bottom:8px;
}
.table-body{
width:100%;
height: calc( 100% - 0px);
overflow-y: auto;
}
.table-body .item{
width:100%;
height:40px;
background: #00ffee2f;
font-size:14px;
text-align: center;
line-height:40px;
}
.table-body .item:nth-child(2n){
background:#0099ff50;
}
.close-button{
position:absolute;
right:20px;
top:14px;
cursor:pointer;
color:#fff;
font-weight: bold;
width:20px;
height:20px;
background:#0a58bfcc;
line-height:20px;
text-align:center;
}
.table-body .item div{
float:left;
width:50%;
color:#eee;
}
::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb {
border: 0
}
::-webkit-scrollbar {
height: 10px;
width: 10px;
background: transparent;
border-radius: 5px
}
::-webkit-scrollbar-thumb {
padding-top: 100px;
-webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1), inset -1px -1px 0 rgba(0, 0, 0, .07);
background-color: #797979;
min-height: 28px;
border-radius: 4px;
background-clip: padding-box
}
::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb {
border: 0
}
::-webkit-scrollbar-thumb:hover {
-webkit-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, .25);
background-color: rgba(0, 0, 0, .4)
}
::-webkit-scrollbar-thumb:active {
-webkit-box-shadow: inset 1px 1px 3px rgba(0, 0, 0, .35);
background-color: rgba(0, 0, 0, .5)
}
</style>