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