453 lines
15 KiB
JavaScript
453 lines
15 KiB
JavaScript
|
// import {layuiElement} from '../../tool/tool.js';
|
|||
|
// import {deviceHash} from '../../api/moveDeviceWebsocket.js';
|
|||
|
// import {mainMap,mapPlugin} from "../../pages/index/js/httpInit.js";
|
|||
|
// import {openMapInfo} from "../index/js/moveDeviceMarker.js"
|
|||
|
// import {aloneVideo,aloneTalk} from "../index/js/tree.js";
|
|||
|
// import {popTalkPage} from "./popTalk.js";
|
|||
|
// import {popTask} from "./popTask.js";
|
|||
|
// import {getOptionsToolPerson,drawMoserToolMarker} from "../index/js/mapOperEvent.js";
|
|||
|
import { deviceHash } from "../api/moveDeviceWebsocket.js";
|
|||
|
import { layuiObj,mainMap,mapPlugin } from "./index.js";
|
|||
|
import { moveDeviceMarkerHash } from "./marker/moveDeviceMarker.js";
|
|||
|
import { drawMoserToolMarker } from "./pageEventTool.js";
|
|||
|
import { aloneOpenVideo } from "./openMoveDeviceVideo.js";
|
|||
|
let eventHandleIndex=null;
|
|||
|
let alarmCirclePerson=[];//保存框选里面的人员
|
|||
|
let routerTempArr=[];//计算行驶里程用的。
|
|||
|
let alarmManageInfo={
|
|||
|
"alarmR":100,
|
|||
|
"circle":null,
|
|||
|
"longitude":0,
|
|||
|
"latitude":0
|
|||
|
}
|
|||
|
//处置事件
|
|||
|
function openEventHandle(){
|
|||
|
var deviceid=alarmManageInfo["deviceid"];
|
|||
|
if(eventHandleIndex==null){
|
|||
|
eventHandleIndex=layuiObj["layer"].open({
|
|||
|
type: 1,
|
|||
|
title: false, //不显示标题栏
|
|||
|
closeBtn: false,
|
|||
|
area: ['588px', '322px'],
|
|||
|
shade: 0,
|
|||
|
id: new Date().getTime(), //设定一个id,防止重复弹出
|
|||
|
offset: ['100px',"-10px"],
|
|||
|
move:'.layui-move',
|
|||
|
offset:'rt',
|
|||
|
moveType: 1, //拖拽模式,0或者1
|
|||
|
content:`<div class="popTaskSendListEvent popWindows">
|
|||
|
<div class="taskSendListEventInfo">
|
|||
|
<div class="taskSendListEventTitle">
|
|||
|
<span class="layui-move">选择对象</span>
|
|||
|
<img src="./pages/cmddispatch/image/closeInfoWindow.png">
|
|||
|
</div>
|
|||
|
<div class="taskSendEventOperTime">
|
|||
|
<div class="taskRange">
|
|||
|
<span>范围</span>
|
|||
|
<button class="layui-btn layui-border-blue delRange">-</button>
|
|||
|
<input type="text" value='${alarmManageInfo["alarmR"]}' class="freeAlarmRange">
|
|||
|
<button class="layui-btn layui-border-blue addRange">+</button>
|
|||
|
<span>米</span>
|
|||
|
</div>
|
|||
|
<div class="taskSendOptions">
|
|||
|
<ul>
|
|||
|
<li>
|
|||
|
<span></span>
|
|||
|
<span>对象列表</span>
|
|||
|
<span class="alarmTaskCount">(0)</span>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<button type="button" class="layui-btn " id="alarmManageDeletePerson">删除人员</button>
|
|||
|
<button type="button" class="layui-btn " id="alarmManageAddPerson">添加人员</button>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
<div class="taskSendL"></div>
|
|||
|
<div class="taskSendHandle">
|
|||
|
<p>
|
|||
|
<button type="button" class="layui-btn alarmGroupTask">群任务</button>
|
|||
|
</p>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>`,
|
|||
|
success:function(layero){
|
|||
|
//loadOffsetLeft=parseFloat($(".taskSendL").offset().left)+240
|
|||
|
//loadOffsetTop=parseFloat($(".taskSendL").offset().top)+40
|
|||
|
initAlarmInfo();
|
|||
|
}
|
|||
|
});
|
|||
|
}else{
|
|||
|
closeEventIndex();
|
|||
|
openEventHandle(deviceid);
|
|||
|
}
|
|||
|
//关闭
|
|||
|
$(".taskSendListEventTitle>img").click(function(){
|
|||
|
//关闭画圈
|
|||
|
if(alarmManageInfo["circle"]!=null){
|
|||
|
mainMap.remove(alarmManageInfo["circle"]);
|
|||
|
alarmManageInfo["circle"]=null;
|
|||
|
}
|
|||
|
closeEventIndex()
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
function initAlarmInfo(){
|
|||
|
//画1.5公里的圈圈
|
|||
|
alarmEmpty();
|
|||
|
var circle=drawAlarmCircle();
|
|||
|
alarmManageInfo["circle"]=circle;
|
|||
|
var circlePerson=getOptionsToolPerson(alarmManageInfo["circle"]);
|
|||
|
alarmCirclePerson=JSON.parse(JSON.stringify(circlePerson));
|
|||
|
routerTempArr=JSON.parse(JSON.stringify(circlePerson));
|
|||
|
selectAlarmWalking();
|
|||
|
taskSendEvent();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//通过工具获取圈里里面的人员
|
|||
|
function getOptionsToolPerson(overlayPath){
|
|||
|
var alarmCirclePerson=[];
|
|||
|
for(var deviceid in moveDeviceMarkerHash){
|
|||
|
var lnglat=moveDeviceMarkerHash[deviceid].getPosition();
|
|||
|
var point=[lnglat["lng"],lnglat["lat"]];
|
|||
|
var range=overlayPath.contains(point);
|
|||
|
if(range){//在圈里面,在去显示
|
|||
|
var flag=0;
|
|||
|
for(var i=0;i<alarmCirclePerson.length;i++){
|
|||
|
if(alarmCirclePerson[i]["deviceid"]==deviceid){
|
|||
|
flag++;
|
|||
|
}
|
|||
|
}
|
|||
|
if(flag==0){
|
|||
|
if(deviceid in deviceHash){
|
|||
|
var devicetype=deviceHash[deviceid]["devicetype"];
|
|||
|
if(devicetype!="room"){
|
|||
|
alarmCirclePerson.push(deviceHash[deviceid]);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return alarmCirclePerson;
|
|||
|
}
|
|||
|
|
|||
|
function closeEventIndex(){
|
|||
|
if(eventHandleIndex!=null){
|
|||
|
layuiObj["layer"].close(eventHandleIndex);
|
|||
|
eventHandleIndex=null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//根据内环,中环,外环,画等级圈
|
|||
|
function drawAlarmCircle(){
|
|||
|
var longitude=alarmManageInfo["longitude"];
|
|||
|
var latitude=alarmManageInfo["latitude"];
|
|||
|
var r=alarmManageInfo["alarmR"];
|
|||
|
var circle=new AMap.Circle({//圆形编辑器的样式
|
|||
|
center:new AMap.LngLat(longitude, latitude),
|
|||
|
radius:r,
|
|||
|
fillColor:"#842517",//填充颜色
|
|||
|
fillOpacity:0.6,//填充透明度
|
|||
|
strokeColor: "#842517", //线颜色
|
|||
|
strokeOpacity:1, //线透明度
|
|||
|
strokeWeight:2, //线粗细度
|
|||
|
zIndex:4
|
|||
|
});
|
|||
|
mainMap.setZoomAndCenter(18,[longitude, latitude]);
|
|||
|
circle.setMap(mainMap);
|
|||
|
return circle;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
var routerFlag=0;
|
|||
|
var routerTempDeviceid="";
|
|||
|
function selectAlarmWalking(){
|
|||
|
//load([loadOffsetTop+"px",loadOffsetLeft+"px"]);
|
|||
|
var routerTimer=setInterval(function(){
|
|||
|
if(routerTempArr.length==0){
|
|||
|
clearInterval(routerTimer);
|
|||
|
routerFlag=0;
|
|||
|
alarmCirclePerson.sort(ridingTimeSort);
|
|||
|
//加载列表
|
|||
|
getTotalTaskList();
|
|||
|
//closeLoad();
|
|||
|
}
|
|||
|
if(routerFlag==0){
|
|||
|
if(routerTempArr.length!=0){
|
|||
|
var startLng=routerTempArr[0]["longitude"];
|
|||
|
var startLat=routerTempArr[0]["latitude"];
|
|||
|
routerTempDeviceid=routerTempArr[0]["deviceid"];
|
|||
|
totalMileageTime(startLng,startLat);
|
|||
|
routerFlag=1;
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
//计算里程跟时间
|
|||
|
function totalMileageTime(startLng,startLat){
|
|||
|
//构造路线导航类
|
|||
|
AMap.plugin('AMap.Driving', function() {
|
|||
|
var riding = new AMap.Driving();
|
|||
|
// 根据起终点经纬度规划骑车路线(这是异步调用)
|
|||
|
riding.search(new AMap.LngLat(startLng,startLat), new AMap.LngLat(alarmManageInfo["longitude"],alarmManageInfo["latitude"]), function(status, result) {
|
|||
|
routerTempArr.splice(0,1);
|
|||
|
routerFlag=0;
|
|||
|
if (status === 'complete') {
|
|||
|
var routes=result["routes"][0];
|
|||
|
var time=parseFloat(routes["time"]/60).toFixed(2);
|
|||
|
var distance=parseFloat(routes["distance"]/1000).toFixed(2);
|
|||
|
for(var i=0;i<alarmCirclePerson.length;i++){
|
|||
|
if(routerTempDeviceid==alarmCirclePerson[i]["deviceid"]){
|
|||
|
alarmCirclePerson[i]["ridingTime"]=time;
|
|||
|
alarmCirclePerson[i]["ridingDistance"]=distance;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
/*升序排列*/
|
|||
|
function ridingTimeSort(a,b){
|
|||
|
return a.ridingTime-b.ridingTime;
|
|||
|
}
|
|||
|
|
|||
|
function getTotalTaskList(){
|
|||
|
|
|||
|
var div="";
|
|||
|
for(var i=0;i<alarmCirclePerson.length;i++){
|
|||
|
var showname=alarmCirclePerson[i]["showname"];
|
|||
|
var ridingTime=alarmCirclePerson[i]["ridingTime"];
|
|||
|
var ridingDistance=alarmCirclePerson[i]["ridingDistance"];
|
|||
|
var deviceid=alarmCirclePerson[i]["deviceid"];
|
|||
|
div+=` <div deviceid='${deviceid}'>
|
|||
|
<p>
|
|||
|
<span></span>
|
|||
|
<span class="alarmShowName">${showname}</span>
|
|||
|
<span>(预计<i>${ridingTime}</i>分钟,共<i>${ridingDistance}</i>千米)</span>
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="./pages/cmddispatch/image/indexVideoOnline.png" class="alarmVideo">
|
|||
|
</p>
|
|||
|
</div>`;
|
|||
|
}
|
|||
|
|
|||
|
$(".taskSendL").html(div);
|
|||
|
$(".alarmTaskCount").html(`(${alarmCirclePerson.length})`);
|
|||
|
taskSendEvent();
|
|||
|
}
|
|||
|
|
|||
|
function addCirclePerson(overlayPath){
|
|||
|
for(var deviceid in deviceHash){
|
|||
|
var status=deviceHash[deviceid]["status"];
|
|||
|
if(status!="offline"){
|
|||
|
var point=[deviceHash[deviceid]["longitude"],deviceHash[deviceid]["latitude"]];
|
|||
|
var range=overlayPath.contains(point);
|
|||
|
if(range){//在圈里面,在去显示
|
|||
|
var flag=0;
|
|||
|
for(var i=0;i<alarmCirclePerson.length;i++){
|
|||
|
if(alarmCirclePerson[i]["deviceid"]==deviceid){
|
|||
|
flag++;
|
|||
|
}
|
|||
|
}
|
|||
|
if(flag==0){
|
|||
|
alarmCirclePerson.push(deviceHash[deviceid]);
|
|||
|
routerTempArr.push(deviceHash[deviceid]);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function alarmManageGroupData(){
|
|||
|
var receivers = $(".taskSendL>div>p>span:first-child");
|
|||
|
var totalArr = []
|
|||
|
for(var i = 0; i < receivers.length; i++) {
|
|||
|
var receiver= receivers[i];
|
|||
|
var length=$(receiver).children().length
|
|||
|
var deviceid=$(receiver).parent().parent().attr("deviceid");
|
|||
|
if(length>0){
|
|||
|
if(deviceid in deviceHash){
|
|||
|
totalArr.push(deviceHash[deviceid]);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
return totalArr;
|
|||
|
}
|
|||
|
|
|||
|
function taskSendEvent(){
|
|||
|
//全选
|
|||
|
$(".taskSendOptions>ul>li>span:first-child").off('click');
|
|||
|
$(".taskSendOptions>ul>li>span:first-child").on('click',function(){
|
|||
|
var spanOption=$(this).children().length;
|
|||
|
var otherOption=$(".taskSendL>div>p>span:nth-child(1)");
|
|||
|
if(spanOption>0){
|
|||
|
$(this).empty();
|
|||
|
$(otherOption).empty();
|
|||
|
}else{
|
|||
|
var img="<img src='./pages/cmddispatch/image/indexOk.png'>"
|
|||
|
$(this).append(img);
|
|||
|
for(var i=0;i<otherOption.length;i++){
|
|||
|
var thisOption=otherOption[i];
|
|||
|
var thisL=$(thisOption).children().length;
|
|||
|
if(thisL==0){
|
|||
|
$(thisOption).append(img);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
//单选
|
|||
|
$(".taskSendL>div>p>span:first-child").off('click');
|
|||
|
$(".taskSendL>div>p>span:first-child").on('click',function(){
|
|||
|
var spanOption=$(this).children().length;
|
|||
|
var otherOption=$(".taskSendOptions>ul>li>span:first-child");
|
|||
|
if(spanOption>0){
|
|||
|
$(this).empty();
|
|||
|
$(otherOption).empty();
|
|||
|
}else{
|
|||
|
var img="<img src='./pages/cmddispatch/image/indexOk.png'>"
|
|||
|
$(this).append(img);
|
|||
|
var thisSpan=$(".taskSendL>div>p>span:first-child");
|
|||
|
var flag=0;
|
|||
|
for(var i=0;i<thisSpan.length;i++){
|
|||
|
var thisOption=thisSpan[i];
|
|||
|
var thisL=$(thisOption).children().length;
|
|||
|
if(thisL==0){
|
|||
|
flag++;
|
|||
|
}
|
|||
|
}
|
|||
|
if(flag==0){
|
|||
|
var otherC=$(otherOption).children();
|
|||
|
if(otherC.length==0){
|
|||
|
$(otherOption).append(img);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
//添加设备
|
|||
|
$("#alarmManageAddPerson").unbind();
|
|||
|
$("#alarmManageAddPerson").click(function(){
|
|||
|
drawMoserToolMarker('rectangle');
|
|||
|
mapPlugin["mouseToolIndexMap"].on('draw',function(e){
|
|||
|
var overlayPath=e.obj;
|
|||
|
addCirclePerson(overlayPath);
|
|||
|
selectAlarmWalking();//查询步行的路径
|
|||
|
mapPlugin["mouseToolIndexMap"].close(true);//关闭,并清除覆盖物
|
|||
|
});
|
|||
|
})
|
|||
|
|
|||
|
|
|||
|
//删除设备
|
|||
|
$("#alarmManageDeletePerson").unbind();
|
|||
|
$("#alarmManageDeletePerson").click(function(){
|
|||
|
$(".taskSendOptions>ul>li>span:first-child").empty();
|
|||
|
var alarmManageData=alarmManageGroupData();
|
|||
|
for(var i=0;i<alarmManageData.length;i++){
|
|||
|
var deviceid=alarmManageData[i]["deviceid"];
|
|||
|
for(var j=0;j<alarmCirclePerson.length;j++){
|
|||
|
if(deviceid==alarmCirclePerson[j]["deviceid"]){
|
|||
|
routerTempArr.splice(j,1);
|
|||
|
alarmCirclePerson.splice(j,1);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if(alarmCirclePerson.length==0){
|
|||
|
//加载列表
|
|||
|
getTotalTaskList();
|
|||
|
}else{
|
|||
|
selectAlarmWalking();//查询步行的路径
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
//点击设备显示设备信息
|
|||
|
$(".alarmShowName").on('click',function(){
|
|||
|
var deviceid=$(this).parent().parent().attr("deviceid");
|
|||
|
openMapInfo(deviceid);
|
|||
|
})
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//当前设备的事件视频
|
|||
|
$(".alarmVideo").off('click');
|
|||
|
$(".alarmVideo").on('click',function(){
|
|||
|
var deviceid=$(this).parent().parent().attr("deviceid");
|
|||
|
if(deviceid in deviceHash){
|
|||
|
aloneOpenVideo(deviceHash[deviceid])
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//事件的群任务
|
|||
|
$(".alarmGroupTask").off('click');
|
|||
|
$(".alarmGroupTask").on('click',function(){
|
|||
|
var taskArr=alarmManageGroupData();
|
|||
|
if(taskArr.length!=0){
|
|||
|
popTask(taskArr,"alarm");
|
|||
|
}else{
|
|||
|
layer.msg("请选择设备");
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
//添加范围
|
|||
|
$(".addRange").off('click');
|
|||
|
$(".addRange").on('click',function(){
|
|||
|
var range=parseInt($(".freeAlarmRange").val());
|
|||
|
range+=100;
|
|||
|
updateRange(range);
|
|||
|
})
|
|||
|
|
|||
|
//删除范围
|
|||
|
$(".delRange").off('click');
|
|||
|
$(".delRange").on('click',function(){
|
|||
|
var range=parseInt($(".freeAlarmRange").val());
|
|||
|
range-=100;
|
|||
|
updateRange(range);
|
|||
|
})
|
|||
|
|
|||
|
//调框选的大小,失去焦点的时候,触发
|
|||
|
$(".freeAlarmRange").off('blur');
|
|||
|
$(".freeAlarmRange").blur('input propertychange', function() {
|
|||
|
var range=parseInt($(this).val());
|
|||
|
updateRange(range);
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
function updateRange(range){
|
|||
|
$(".taskSendOptions>ul>li>span:first-child").empty();
|
|||
|
if(range<100){
|
|||
|
layer.msg("最小范围为100");
|
|||
|
return;
|
|||
|
}else{
|
|||
|
alarmManageInfo["alarmR"]=range;
|
|||
|
initAlarmInfo();
|
|||
|
}
|
|||
|
$(".freeAlarmRange").val(range);
|
|||
|
}
|
|||
|
|
|||
|
function alarmEmpty(){
|
|||
|
routerTempArr=[];
|
|||
|
alarmCirclePerson=[];
|
|||
|
if(alarmManageInfo["circle"]!=null){
|
|||
|
mainMap.remove(alarmManageInfo["circle"]);
|
|||
|
alarmManageInfo["circle"]=null;
|
|||
|
}
|
|||
|
if('alarminfo' in alarmManageInfo){
|
|||
|
delete alarmManageInfo["alarminfo"];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
export {
|
|||
|
openEventHandle,
|
|||
|
alarmEmpty,
|
|||
|
closeEventIndex,
|
|||
|
alarmManageInfo,
|
|||
|
initAlarmInfo
|
|||
|
}
|