物联网3D,物业基础设施3D运维,使用webgl(three.js)与物联网设备结合案例。搭建智慧楼宇,智慧园区,3D园区、3D物业设施,3D楼宇管理系统——第八课

写在前面的废话:

很久没有更新文章了,这段时间一直忙于项目落地,虽然很忙,但是感觉没有总结,没有提炼的日子,总是让人感觉飘飘忽忽的。

所幸放下一些事,抽出一些时间,把近期的项目做一些整理与记录。也算是阶段性的收拾过去,整装再发吧。

作为程序员嘛,总要整理整理自己的,不管是知识储备,还是项目应用,亦或者生活种种,都要隔一段时间,整理一下,这样心不会乱,回首亦有节点。

 

今天要讲解的课程是《物联网3D,使用webgl(three.js)与物联网设备监控运维展示》课程之物业基础设施3D运维篇

首先我们描述一下概念:

物联网3D:物联网相比这些年来,大家都了解很多了,直白的讲,就是万物互联,万物上网。那么这里的物联网3D就是指通过三维可视化的方式展现物联网监控设备。对设备的位置信息,状态信息能一目了然。面向IT设施和资源的一体化综合监控与远程操控方式。通过三维可视化方式展现,解决监控资源繁多、开源工具使用复杂、问题定位困难等问题。

物业基础设施运维:物业基础设施包括了供配电、给排水、梯控、监控视频、暖通空调、门禁道闸、停车场道闸、照明、消防、周界环境等待各大门类,伴随着物业基础设施设备先进性、智能性、复杂性的增加,传统依靠人工巡检 和 主观判断的运维管理方式,以养为先 的维护模式已经不能适应行业快速发展的需要。现有的信息化系统及设备各自为政、相互割裂,对于运维人员的专业技能提出了更高的要求。依靠传统管理方式不仅效率低下,而且容易出错,也造成人工成本的增加,亟需利用智能化技术及手段实现对基础设施设备的智慧化运维管理。

今天我们主要讲述的事three.js(webgl)、3D技术再物业基础设施运维中的展示与应用。

项目目标:基于物联网3D技术,结合开放的IOT中台开放能力,助力物业管理数字化转型,实现基础设施设备的智慧化、可视化运维管理。

技术交流 1203193731@qq.com

交流微信:

    

如果你有什么要交流的心得 可邮件我

一、项目效果与功能说明:

闲话少叙,我们先看一下最终的实现效果:

1.1 、园区的整体

采用科技蓝底色,数据大屏风格,中间绘以3D大楼效果。道路上用流光效果代替灯光与车流,写实风格与科技感结合。

 

 1.2、设备房列表

 点击设备房案例,无缝切换到楼层模式,通过科技蓝楼层方式,简洁明了的展示每个楼层的效果。并且把设备房位置通过精灵模型放置到对应的位置上。

鼠标滑动到设备房时能够展示设备房的名称信息。

 

 1.3、双击设备房,显示设备房内详情

双击设备房,显示设备房内详细信息以及重要设备的实时重要量监控信息。

1.3.1、消防泵房效果

 

 

1.3.2、生活泵房效果

 

1.3.3、配电房效果

 

 1.3.4、双层设备房效果

 

 1.4、楼宇设备 楼宇电表

点击电表按钮,显示楼宇电表排布信息,与设备概览

 

 

 1.5、电梯监控展示

 1.6、设备状态监测

当有告警产生时,对应的设备,设备房将会有红色闪动

 

 

 

 

 

 

 二、具体实现方式

2.1、首先我们准备场景中需要的模型,本人还是推崇简单模型使用代码建模方式,复杂模型考虑到工作效率,采用第三方载入方式。

2.1.1、准备周边环境模型,这里我们主要还是用代码的方式实现周边环境。

a、最难的流光效果

我们通过改变管道贴图的uv贴图值来实现流光效果,适当改变透明度以及贴图的样式。

[{"show":true,"uuid":"","name":"flowtube_6","objType":"flowTube","points":[{"x":0,"y":300,"z":0},{"x":100,"y":250,"z":100},{"x":100,"y":400,"z":400}],"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"rotation":[{"direction":"x","degree":0}],"style":{"skinColor":16772846,"imgurl":"../../img/3dImg/right1.png","canvasSkin":{"cwidth":1024,"cheight":128,"cwNub":16,"chNub":2,"cMarginW":0.2,"cMarginH":0.2,"run":true,"speed":8,"fps":40,"direction":"w","forward":"f","bgcolor":"rgba(255, 0, 162, 0.68)","side":2}},"segments":64,"radialSegments":8,"closed":false,"radius":10,"showSortNub":6}]

b、平时项目过程中积累的虚拟楼宇

 

 

 [{"show":true,"uuid":"","name":"hb_2_11","objType":"Lathe","position":{"x":7418.924,"y":0,"z":1036.092},"points":[{"x":1000,"y":0,"z":0},{"x":1000,"y":2000,"z":0}],"style":{"skinColor":1433087,"imgurl":"../img/3dimg/kehuandimian.png","repeatx":true,"width":1,"repeaty":true,"height":20,"side":2,"opacity":0.3},"segments":1,"radialSegments":4,"closed":true,"phiStart":0.7853981633974483,"phiLength":6.283185307179586,"showSortNub":10000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"radius":null,"scale":{"x":1.5,"y":2,"z":1.5},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null}]

c、路灯效果

 

 

 

[{"show":true,"uuid":"","name":"dengganWithLight_7","objType":"GroupObj","scale":{"x":1,"y":1,"z":1},"position":{"x":0,"y":0,"z":0},"rotation":[{"direction":"x","degree":0}],"childrens":[{"show":true,"uuid":"","name":"dengganWithLight_7OBJCREN0","objType":"Lathe","position":{"x":0,"y":0,"z":0},"points":[{"x":25,"y":-350,"z":0},{"x":5,"y":-300,"z":0},{"x":5,"y":300,"z":0},{"x":0,"y":300,"z":0}],"style":{"skinColor":16777215,"imgurl":"../../img/3dImg/sideLight.jpg","side":2,"opacity":1},"segments":3,"radialSegments":6,"closed":true,"phiStart":0,"phiLength":6.283010774254387,"showSortNub":6,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"radius":null,"scale":{"x":1,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"uuid":"","name":"dengganWithLight_7OBJCREN1","objType":"Lathe","position":{"x":59.523,"y":354.593,"z":0},"points":[{"x":5,"y":0,"z":0},{"x":6,"y":0,"z":0},{"x":8.5,"y":30,"z":0},{"x":0,"y":30,"z":0}],"style":{"skinColor":2055093,"imgurl":"../../img/3dImg/timg.jpg","side":2,"opacity":1},"segments":3,"radialSegments":6,"closed":true,"phiStart":0,"phiLength":6.283185307179586,"showSortNub":9,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":-1.186823891356144}],"radius":null,"scale":{"x":0.8,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"uuid":"","name":"dengganWithLight_7OBJCREN2","objType":"Lathe","position":{"x":58.956,"y":355.784,"z":0},"points":[{"x":5,"y":0,"z":0},{"x":8,"y":30,"z":0},{"x":20,"y":60,"z":0},{"x":8,"y":110,"z":0},{"x":0,"y":112,"z":null}],"style":{"skinColor":2055093,"imgurl":"../../img/3dImg/timg.jpg","side":2,"opacity":1},"segments":12,"radialSegments":6,"closed":true,"phiStart":2.96705972839036,"phiLength":3.490658503988659,"showSortNub":9,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":-1.2217304763960306}],"radius":null,"scale":{"x":0.8,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"uuid":"","name":"dengganWithLight_7OBJCREN3","objType":"tube","points":[{"x":0,"y":0,"z":0},{"x":0,"y":5,"z":0},{"x":1,"y":8,"z":0},{"x":5,"y":22,"z":0},{"x":20,"y":40,"z":0},{"x":60,"y":55,"z":0}],"position":{"x":0,"y":300,"z":0},"scale":{"x":1,"y":1,"z":1},"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"style":{"skinColor":15790320,"opacity":1},"segments":5,"radialSegments":6,"closed":false,"radius":5,"showSortNub":7,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"name":"dengganWithLight_7OBJCREN4","objType":"cylinder","radiusTop":20,"radiusBottom":150,"height":500,"segmentsX":24,"segmentsY":0,"openEnded":false,"position":{"x":213.491,"y":140.711,"z":0},"scale":{"x":1.4,"y":1,"z":1},"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0.3490658619074471}],"style":{"skinColor":16776960,"skin":{"skin_up":{"skinColor":16777215,"side":1,"opacity":0},"skin_down":{"skinColor":16777215,"side":1,"opacity":0},"skin_side":{"skinColor":16777131,"opacity":0.3,"imgurl":"../../img/3dImg/camarerange2.png"}}},"showSortNub":11000,"show":true,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"uuid":"","name":"dengganWithLight_7OBJCREN5","objType":"Lathe","position":{"x":58.956,"y":355.784,"z":0},"points":[{"x":5,"y":0,"z":0},{"x":8,"y":30,"z":0},{"x":20,"y":60,"z":0},{"x":8,"y":110,"z":0},{"x":0,"y":112,"z":null}],"style":{"skinColor":16764685,"imgurl":"../../img/3dImg/battery-front2.png","repeatx":true,"width":2,"repeaty":true,"height":4,"side":2,"opacity":1},"segments":12,"radialSegments":3,"closed":true,"phiStart":0.17453292519943295,"phiLength":2.792526803190927,"showSortNub":9,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":-1.2217304763960306}],"radius":null,"scale":{"x":0.5,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null}],"showSortNub":7}]
View Code

 

 

 

 

 c、接下来就是通过各种代码模型的组合,与贴图,产生环境模拟

 

 

 

 2.1.2、单体大楼效果

2.1.3、我们同样用代码,写出大楼的样子

 

 

 

模型代码:

{"show":true,"uuid":"","showHelper":false,"name":"SpotLight_1","objType":"SpotLight","shadowCameraNear":"1","shadowCameraFar":"1","shadowCameraFov":"1","targetName":"build_face_1","shadowMapWidth":"1","shadowMapHeight":"1","distance":"20000","intensity":2,"angle":"0.8","color":12189685,"position":{"x":3113.364,"y":68.274,"z":3518.174},"showSortNub":35,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"decay":null,"penumbra":null,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"uuid":"","name":"floorCase_2","objType":"ExtrudeGeometry","position":{"x":1721.935,"y":0,"z":-3333.343},"style":{"skinColor":16711680,"skin":{"skin_up":{"skinColor":4007695,"side":1,"opacity":1},"skin_down":{"skinColor":16711680,"side":1,"opacity":1},"skin_side":{"skinColor":4007695,"materialType":"Phong","opacity":1,"imgurl":"../img/3dImg/battery-front2.png","repeatx":true,"width":0.01,"repeaty":true,"height":0.01,"envMap":{"name":"skybox","reflectivity":0.5,"refractionRatio":"","combine":""}}}},"scale":{"x":1,"y":1,"z":1},"shapeParm":{"points":[{"x":0,"y":0,"type":"nomal"},{"x":1100,"y":0,"type":"nomal"},{"x":1100,"y":-500,"type":"nomal"},{"x":1080,"y":-500,"type":"nomal"},{"x":1080,"y":-20,"type":"nomal"},{"x":0,"y":-20,"type":"nomal"}],"holes":[]},"extrudeSettings":{"amount":400,"curveSegments":1,"steps":1,"bevelEnabled":false,"bevelThickness":1,"bevelSize":1,"bevelSegments":1,"extrudePathPoints":[]},"showSortNub":42,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":-1.5707963267948963},{"direction":"y","degree":0},{"direction":"z","degree":-1.5707963267948963}],"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"uuid":"","name":"bigdoor","objType":"ExtrudeGeometry","position":{"x":-1455.257,"y":0,"z":-4122.686},"style":{"skinColor":16711680,"skin":{"skin_up":{"skinColor":10916201,"materialType":"Phong","side":1,"opacity":1},"skin_down":{"skinColor":16711680,"side":1,"opacity":1},"skin_side":{"skinColor":10916201,"materialType":"Phong","opacity":1,"envMap":{"name":"skybox","reflectivity":0.5,"refractionRatio":"","combine":""}}}},"scale":{"x":1,"y":1,"z":1},"shapeParm":{"points":[{"x":0,"y":0,"type":"nomal"},{"x":0,"y":850,"type":"nomal"},{"x":1200,"y":850,"type":"nomal"},{"x":1200,"y":0,"type":"nomal"},{"x":1000,"y":0,"type":"nomal"},{"x":1000,"y":650,"type":"nomal"},{"x":200,"y":650,"type":"nomal"},{"x":200,"y":0,"type":"nomal"}],"holes":[]},"extrudeSettings":{"amount":200,"curveSegments":1,"steps":1,"bevelEnabled":false,"bevelThickness":1,"bevelSize":1,"bevelSegments":1,"extrudePathPoints":[]},"showSortNub":42,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"uuid":"","name":"floorCase_4","objType":"ExtrudeGeometry","position":{"x":-2919.105,"y":5.491,"z":-2207.835},"style":{"skinColor":16711680,"skin":{"skin_up":{"skinColor":4007695,"side":1,"opacity":1},"skin_down":{"skinColor":16711680,"side":1,"opacity":1},"skin_side":{"skinColor":4007695,"materialType":"Phong","opacity":1,"imgurl":"../img/3dImg/battery-front2.png","repeatx":true,"width":0.01,"repeaty":true,"height":0.01,"envMap":{"name":"skybox","reflectivity":0.5,"refractionRatio":"","combine":""}}}},"scale":{"x":1,"y":1,"z":1},"shapeParm":{"points":[{"x":0,"y":0,"type":"nomal"},{"x":-600,"y":0,"type":"nomal"},{"x":-600,"y":4150,"type":"nomal"},{"x":-580,"y":4150,"type":"nomal"},{"x":-580,"y":20,"type":"nomal"},{"x":0,"y":20,"type":"nomal"}],"holes":[]},"extrudeSettings":{"amount":400,"curveSegments":1,"steps":1,"bevelEnabled":false,"bevelThickness":1,"bevelSize":1,"bevelSegments":1,"extrudePathPoints":[]},"showSortNub":42,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":-1.5707963267948966},{"direction":"y","degree":0},{"direction":"z","degree":0.01951278160965857}],"
View Code

 

 2.1.3、我们再看看楼层的代码模型

 

 

楼层模型比较简单:

使用代码写出一个个楼层平面,然后clone出来,修改位置即可。

 

 2.2、设备房实现

2.2.1、与其它方式一样,还是先写出设备房模型,这一点由于前期项目积累,以及积累了很多设备模型的代码,我们后面项目直接组装复用即可

例如下列设备

水浸:

 

 

温湿度:

 

 

 

 

2.2.2、设备房结构我们采用半透明,加上虚拟墙体效果,这样便于操作展示设备信息,看起来也充满科技感,如下:

 

 

 设备房代码:

[{"show":true,"uuid":"","name":"floor","objType":"cube2","length":20000,"width":20000,"height":1,"x":-27.705,"y":-1500,"z":0,"style":{"skinColor":16777215,"skin":{"skin_up":{"skinColor":65524,"side":1,"opacity":0.3,"imgurl":"../img/3dImg/bg2.png","repeatx":true,"width":20,"repeaty":true,"height":20},"skin_down":{"skinColor":16777215,"side":1,"opacity":1,"imgurl":"../img/3dImg/bg2.png"},"skin_fore":{"skinColor":16777215,"side":1,"opacity":1},"skin_behind":{"skinColor":16777215,"side":1,"opacity":1},"skin_left":{"skinColor":16777215,"side":1,"opacity":1},"skin_right":{"skinColor":16777215,"side":1,"opacity":1}}},"showSortNub":1,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"thick":null,"scale":{"x":1,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":"10001","BindMeteName":""},{"show":true,"uuid":"","name":"wall_1_5","objType":"cube2","length":200,"width":200,"height":1000,"x":-2891.08,"y":-990,"z":822.292,"style":{"skinColor":16777215,"skin":{"skin_up":{"skinColor":1818615,"side":1,"opacity":1,"imgurl":"../img/3dImg/sideLight.jpg"},"skin_down":{"skinColor":1818615,"side":1,"opacity":1,"imgurl":"../img/3dImg/fw2.jpg"},"skin_fore":{"skinColor":1144729,"side":1,"opacity":1,"imgurl":"../img/3dImg/wall/wall6.jpg"},"skin_behind":{"skinColor":1683168,"side":1,"opacity":1,"imgurl":"../img/3dImg/wall/wall6.jpg"},"skin_left":{"skinColor":1481929,"side":1,"opacity":1,"imgurl":"../img/3dImg/wall/wall6.jpg"},"skin_right":{"skinColor":1212582,"side":1,"opacity":1,"imgurl":"../img/3dImg/wall/wall6.jpg"}}},"showSortNub":6,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"thick":null,"scale":{"x":1,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":"10001","BindMeteName":""},{"show":true,"uuid":"","name":"floor_1","objType":"cube2","length":3000,"width":5000,"height":20,"x":-1743.487,"y":-1495.74,"z":-32.764,"style":{"skinColor":16777215,"skin":{"skin_up":{"skinColor":1581878,"materialType":"Phong","side":1,"opacity":0.8},"skin_down":{"skinColor":16777215,"side":1,"opacity":1,"imgurl":"../img/3dImg/bg2.png"},"skin_fore":{"skinColor":1818615,"side":1,"opacity":1},"skin_behind":{"skinColor":1818615,"side":1,"opacity":1},"skin_left":{"skinColor":1818615,"side":1,"opacity":1},"skin_right":{"skinColor":1818615,"side":1,"opacity":1}}},"showSortNub":7,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"thick":null,"scale":{"x":1,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":"10001","BindMeteName":""},{"show":true,"uuid":"","name":"wall_7","objType":"cube2","length":2500,"width":100,"height":1000,"x":-1704.247,"y":-990,"z":2260.007,"style":{"skinColor":16777215,"skin":{"skin_up":{"skinColor":1818615,"side":1,"opacity":1},"skin_down":{"skinColor":1818615,"side":1,"opacity":1},"skin_fore":{"skinColor":1481929,"side":1,"opacity":1},"skin_behind":{"skinColor":1346741,"side":1,"opacity":1},"skin_left":{"skinColor":1481929,"side":1,"opacity":1,"imgurl":"../img/3dImg/wall/wall16.jpg","repeatx":true,"width":5,"repeaty":true,"height":1},"skin_right":{"skinColor":1481929,"side":1,"opacity":1,"imgurl":"../img/3dImg/wall/wall16.jpg","repeatx":true,"width":5,"repeaty":true,"height":1}}},"showSortNub":1000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"thick":null,"scale":{"x":1,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":"10001","BindMeteName":""},{"show":true,"uuid":"","name":"wall_3","objType":"cube2","length":50,"width":4300,"height":1000,"x":-2973.835,"y":-990,"z":73.349,"style":{"skinColor":16777215,"skin":{"skin_up":{"skinColor":1818615,"side":1,"opacity":1},"skin_down":{"skinColor":1818615,"side":1,"opacity":1},"skin_fore":{"skinColor":1481929,"side":1,"opacity":1,"imgurl":"../img/3dImg/wall/wall16.jpg","repeatx":true,"width":6,"repeaty":true,"height":1},"skin_behind":{"skinColor":1346741,"side":1,"opacity":1,"imgurl":"../img/3dImg/wall/wall16.jpg","repeatx":true,"width":6,"repeaty":true,"height":1},"skin_left":{"skinColor":1481929,"side":1,"opacity":1},"skin_right":{"skinColor":1481929,"side":1,"opacity":1}}},"showSortNub":1000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"thick":null,"scale":{"x":1,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":"10001","BindMeteName":""},{"show":true,"uuid":"","name":"wall_4_1","objType":"cube2","length":30,"width":2000,"height":400,"x":-450.415,"y":-1282.653,"z":1204.956,"style":{"skinColor":16777215,"skin":{"skin_up":{"skinColor":1818615,"side":0,"opacity":1},"skin_down":{"skinColor":1818615,"side":1,"opacity":1},"skin_fore":{"skinColor":1346741,"side":1,"opacity":1,"imgurl":"../img/3dImg/camarerange.png"},"skin_behind":{"skinColor":1346741,"side":1,"opacity":1,"imgurl":"../img/3dImg/camarerange.png"},"skin_left":{"skinColor":1818615,"side":1,"opacity":1,"imgurl":"../img/3dImg/camarerange.png"},"skin_right":{"skinColor":1818615,"side":1,"opacity":1,"imgurl":"../img/3dImg/camarerange.png"}}},"showSortNub":6000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"thick":null,"scale":{"x":1,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":"10001","BindMeteName":""},{"show":true,"uuid":"","name":"door_2","objType":"cube2","length":10,"width":300,"height":700,"x":-438.037,"y":-1128.27,"z":41.403,"style":{"skinColor":16777215,"skin":{"skin_up":{"skinColor":3885386,"side":1,"opacity":1},"skin_down":{"skinColor":3885386,"side":1,"opacity":1},"skin_fore":{"skinColor":4881546,"side":1,"opacity":1,"imgurl":"../img/3dImg/door_left.png"},"skin_behind":{"skinColor":4881546,"side":1,"opacity":1,"imgurl":"../img/3dImg/door_right.png"},"skin_left":{"skinColor":3885386,"side":1,"opacity":1},"skin_right":{"skinColor":3885386,"side":1,"opacity":1}}},"showSortNub":6000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"thick":null,"scale":{"x":1,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":"10001","BindMeteName":""},{"show":true,"uuid":"","name":"door_1","objType":"cube2","length":10,"width":300,"height":700,"x":-438.541,"y":-1128.27,"z":-258.049,"style":{"skinColor":16777215,"skin":{"skin_up":{"skinColor":3885386,"side":1,"opacity":1},"skin_down":{"skinColor":3885386,"side":1,"opacity":1},"skin_fore":{"skinColor":4881546,"side":1,"opacity":1,"imgurl":"../img/3dImg/door_right.png"},"skin_behind":{"skinColor":4881546,"side":1,"opacity":1,"imgurl":"../img/3dImg/door_left.png"},"skin_left":{"skinColor":3885386,"side":1,"opacity":1},"skin_right":{"skinColor":3885386,"side":1,"opacity":1}}},"showSortNub":6000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"thick":null,"scale":{"x":1,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":"10001","BindMeteName":""},{"show":true,"uuid":"","name":"wall_4_3","objType":"cube2","length":2500,"width":30,"height":400,"x":-1694.546,"y":-1282.653,"z":-2061.979,"style":{"skinColor":16777215,"skin":{"skin_up":{"skinColor":1818615,"side":0,"opacity":1},"skin_down":{"skinColor":1818615,"side":1,"opacity":1},"skin_fore":{"skinColor":1346741,"side":1,"opacity":1,"imgurl":"../img/3dImg/camarerange.png"},"skin_behind":{"skinColor":1346741,"side":1,"opacity":1,"imgurl":"../img/3dImg/camarerange.png"},"skin_left":{"skinColor":1818615,"side":1,"opacity":1,"imgurl":"../img/3dImg/camarerange.png"},"skin_right":{"skinColor":1818615,"side":1,"opacity":1,"imgurl":"../img/3dImg/camarerange.png"}}},"showSortNub":6000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"thick":null,"scale":{"x":1,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":"10001","BindMeteName":""},{"show":true,"name":"dev_r_t_l_4_2_1","uuid":"","objType":"plane","width":40,"height":40,"color":16777215,"pic":"../img/3dImg/ltr.png","transparent":true,"opacity":1,"side":2,"materialType":"basic","position":{"x":38.605,"y":-1489.748,"z":-3803.409},"rotation":{"x":0,"y":-1.5707963267948966,"z":0},"scale":{"x":1,"y":1,"z":1},"showSortNub":10000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"name":"dev_r_t_l_4_2_3","uuid":"","objType":"plane","width":40,"height":40,"color":16777215,"pic":"../img/3dImg/ltr.png","transparent":true,"opacity":1,"side":2,"materialType":"basic","position":{"x":38.605,"y":-1489.748,"z":2367.598},"rotation":{"x":0,"y":1.5707963267948966,"z":0},"scale":{"x":1,"y":1,"z":1},"showSortNub":10000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"name":"dev_r_t_l_4_2_2_1","uuid":"","objType":"plane","width":40,"height":40,"color":16777215,"pic":"../img/3dImg/ltr.png","transparent":true,"opacity":1,"side":2,"materialType":"basic","position":{"x":962.883,"y":-1397.022,"z":-2307.624},"rotation":{"x":0,"y":-1.5707963267948966,"z":0},"scale":{"x":1,"y":1,"z":1},"showSortNub":10000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"name":"dev_r_t_l_4_2_4","uuid":"","objType":"plane","width":40,"height":40,"color":16777215,"pic":"../img/3dImg/ltr.png","transparent":true,"opacity":1,"side":2,"materialType":"basic","position":{"x":-38.887,"y":-1489.748,"z":2368.396},"rotation":{"x":0,"y":1.5707963267948966,"z":0},"scale":{"x":1,"y":1,"z":1},"showSortNub":10000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"name":"dev_r_t_l_4_2_2_2","uuid":"","objType":"plane","width":40,"height":40,"color":16777215,"pic":"../img/3dImg/ltr.png","transparent":true,"opacity":1,"side":2,"materialType":"basic","position":{"x":1040.712,"y":-1397.022,"z":-2307.624},"rotation":{"x":0,"y":-1.5707963267948966,"z":0},"scale":{"x":1,"y":1,"z":1},"showSortNub":10000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"name":"dev_r_t_l_4_2_2","uuid":"","objType":"plane","width":40,"height":40,"color":16777215,"pic":"../img/3dImg/ltr.png","transparent":true,"opacity":1,"side":2,"materialType":"basic","position":{"x":-40.289,"y":-1489.748,"z":-3803.409},"rotation":{"x":0,"y":-1.5707963267948966,"z":0},"scale":{"x":1,"y":1,"z":1},"showSortNub":10000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"name":"dev_r_t_l_2","uuid":"","objType":"plane","width":20,"height":20,"color":16777215,"pic":"../img/3dImg/rtl.png","transparent":true,"opacity":1,"side":1,"materialType":"basic","position":{"x":-1175.854,"y":-1248.25,"z":1054.125},"rotation":{"x":0,"y":3.141592653589793,"z":0},"scale":{"x":1,"y":1,"z":1},"showSortNub":10000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"name":"dev_fsw_3","objType":"cylinder","radiusTop":9,"radiusBottom":8,"height":5,"segmentsX":6,"segmentsY":0,"openEnded":false,"position":{"x":1993.077,"y":2371.117,"z":920.549},"scale":{"x":1,"y":1,"z":1},"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":1.5803607310958254}],"style":{"skinColor":16776960,"skin":{"skin_up":{"skinColor":1447446,"side":1,"opacity":1,"imgurl":"../img/3dImg/fsOutSide.png","repeatx":true,"width":2,"repeaty":true,"height":2},"skin_down":{"skinColor":16777215,"side":0,"opacity":0},"skin_side":{"skinColor":2039583,"side":2,"opacity":1,"imgurl":"../img/3dImg/fsOutSide.png","repeatx":true,"width":3,"repeaty":true,"height":1}}},"showSortNub":20000,"show":true,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":null,"BindMeteName":null},{"show":true,"uuid":"","name":"wall_4_2","objType":"cube2","length":30,"width":2000,"height":400,"x":-450.415,"y":-1282.653,"z":1204.956,"style":{"skinColor":16777215,"skin":{"skin_up":{"skinColor":1818615,"side":0,"opacity":1},"skin_down":{"skinColor":1818615,"side":1,"opacity":1},"skin_fore":{"skinColor":1346741,"side":1,"opacity":1,"imgurl":"../img/3dImg/camarerange.png"},"skin_behind":{"skinColor":1346741,"side":1,"opacity":1,"imgurl":"../img/3dImg/camarerange.png"},"skin_left":{"skinColor":1818615,"side":1,"opacity":1,"imgurl":"../img/3dImg/camarerange.png"},"skin_right":{"skinColor":1818615,"side":1,"opacity":1,"imgurl":"../img/3dImg/camarerange.png"}}},"showSortNub":6000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"rotation":[{"direction":"x","degree":0},{"direction":"y","degree":0},{"direction":"z","degree":0}],"thick":null,"scale":{"x":1,"y":1,"z":1},"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":"10001","BindMeteName":""},{"show":true,"uuid":"","name":"DirectionalLight_1","objType":"DirectionalLight","shadowCameraNear":1,"shadowCameraFar":5000,"shadowCameraLeft":-500,"shadowCameraRight":500,"shadowCameraTop":500,"shadowCameraBottom":-500,"shadowMapWidth":1024,"shadowMapHeight":1024,"distance":5000,"targetName":"b_dmfloor_tr_1","intensity":1,"color":16777215,"castShadow":true,"position":{"x":-467.823,"y":2195.573,"z":-1438.749},"showSortNub":10000,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"shadowCameraFov":null,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":"10001","BindMeteName":"","decay":null,"showHelper":false},{"show":true,"showHelper":false,"uuid":"","name":"light","objType":"DirectionalLight","shadowCameraNear":1,"shadowCameraFar":5000,"shadowCameraLeft":-5000,"shadowCameraRight":5000,"shadowCameraTop":5000,"shadowCameraBottom":-5000,"shadowMapWidth":1024,"shadowMapHeight":1024,"distance":5000,"targetName":"floor_1","intensity":1,"color":8249855,"castShadow":true,"position":{"x":-1302.064,"y":116.353,"z":1565.179},"showSortNub":579,"customType1":"","customType2":"","animation":null,"dbclickEvents":null,"shadowCameraFov":null,"decay":2,"BindDevId":null,"BindDevName":null,"devInfo":null,"BindMeteId":"10001","BindMeteName":""}]
View Code

 三、具体实现

3.1、起始页部分重要代码如下

<!DOCTYPE html>
<html style="padding:0px;margin:0px;">
<head>
  <title></title>
  <meta charset="utf-8" />
  <link href="../css/iconfont.css" rel="stylesheet" />
  <link href="../css/font-awesome.min.css" rel="stylesheet" />
  <link href="../plugs/layer/layui/css/layui.css" rel="stylesheet" />
  <link href="../css/animate.css" rel="stylesheet" />
  <script src="../plugs/echarts.min.js"></script>
  <link href="../css/index.css" rel="stylesheet" />
  <link href="../plugs/jquery.mCustomScrollbar.css" rel="stylesheet" />
  <script src="../plugs/jquery-2.2.2.js"></script>
  <script src="../plugs/jquery.mCustomScrollbar.js"></script>
  <script src="../plugs/layer/layer.js"></script>
  <script src="../plugs/layer/laydate/laydate.js"></script>
  <script src="../plugs/layer/layui/layui.js"></script>
  <link href="../css/bootstrap.css" rel="stylesheet" />
  <link href="../css/bootstrap-table.css" rel="stylesheet" />
  <script src="../plugs/bootstrap-table.js"></script>
  <script src="../plugs/bootstrap.js"></script>
  <script src="../js/commonFunction.js"></script>
  
  <script src="../plugs/three/three.min.js"></script>
 
   
  <script src="../plugs/layui-v2.6.8/layui/layui.js"></script>
  <link href="../plugs/layui-v2.6.8/layui/css/layui.css" rel="stylesheet" />
  <script src="../js/index.js"></script>
  <script src="../js/initPage.js"></script>
  <script src="../js/modelBusiness.js"></script>
  <script src="../js/config.js"></script>
  <script src="../js/webAPI.js"></script>
  <script src="../plugs/libs/adapter.min.js"></script>
  <script src="../js/webrtcstreamer.js"></script>
</head>

<body id="mainBody" onload="threeStart(0);" style="padding:0px;margin:0px;">
    <!--onload="threeStart(0);"-->
    <script>
    if (!Detector.webgl) {
      layer.alert("您的浏览器不支持3D功能,请使用支持WebGL的浏览器(例如:chrome浏览器、ie11以上浏览器等)");
    }
    </script>
    <audio id="musicfx" style="display:none;">
        <source src="../img/alarm.WAV" type="audio/mpeg">
    </audio>
    <div id="dataCanvasList" style="position:absolute;z-index:-1;display:none;width:5px;height:5px;overflow:auto;"><div style="width:10px;height:10px;float:left;position:relative;"></div></div>
    <div id="canvas-frame" class="canvas_frame"></div>
    <div class="mainFloor_left" id="floorsBtn">

    </div>
    <div class="main-right">
        <div class="contentRight" id="chart_index" style="height:100%;display:none;">
            <div class="chatData" id="dataCenterRightContent" style="height:calc(100% - 20px)">
                <div class="block-header">
                    <div class="container">
                        <div>
                            <div class="left">
                                <div class="left__bg"></div>
                            </div>
                            <div class="right">
                                <div class="right__bg1"></div>
                                <div class="right__bg2"></div>
                                <div class="right__bg3"></div>
                            </div>
                        </div>
                    </div>
                    <img class="icon" src="../img/block-header-arrow.png" />
                    <div class="title" v-text="title">设备总览</div>
                </div>
                <div class="chatContent" id="index_chart" style="height:130px"></div>
                <div class="chatContent" id="index_1" style="height:calc(100% - 170px); margin-top:10px;   overflow-y: auto;">
                </div>
            </div>
        </div>
        <div class="contentRight" id="chart_door" style="display:none;">
            <div class="chatData">
                <div class="block-header">
                    <div class="container">
                        <div>
                            <div class="left">
                                <div class="left__bg"></div>
                            </div>

                            <div class="right">
                                <div class="right__bg1"></div>
                                <div class="right__bg2"></div>
                                <div class="right__bg3"></div>
                            </div>
                        </div>
                    </div>
                    <img class="icon" src="../img/block-header-arrow.png" />
                    <div class="title" v-text="title">智能门禁系统</div>
                </div>



                <div class="chatContent" id="door_1"></div>
            </div>
            <div class="chatData">
                <div class="block-header">
                    <div class="container"><div><div class="left"><div class="left__bg"></div></div><div class="right"><div class="right__bg1"></div><div class="right__bg2"></div><div class="right__bg3"></div></div></div></div><img class="icon" src="../img/block-header-arrow.png" /><div class="title" v-text="title">
                        楼层设备总览
                    </div>
                </div>
                <div class="chatContent" id="door_2">
                    <div class="doorLi_Div">
                        <div class="doorLi_DivTop">

                            <font class="doorLi_DivTopName">3号梯</font>
                            <font class="doorLi_DivTopState">在线</font>
                        </div>
                        <div class="doorLi_DivBottom">
                            <img class="doorLi_DivBottomImg" src="../img/pics/icons/doorPic.png" />
                            <div class="doorLi_divBtn1">
                                <font style="float:left;">门禁开关:</font>
                                <div class="doorLi_openClose"></div>
                            </div>
                            <div class="doorLi_divBtn2">
                                查看进出记录
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </div>

        <div class="contentRight" id="chart_video" style="display:none;">
            <div class="chatData">
                <div class="block-header">
                    <div class="container">
                        <div>
                            <div class="left">
                                <div class="left__bg"></div>
                            </div>

                            <div class="right">
                                <div class="right__bg1"></div>
                                <div class="right__bg2"></div>
                                <div class="right__bg3"></div>
                            </div>
                        </div>
                    </div>
                    <img class="icon" src="../img/block-header-arrow.png" />
                    <div class="title" v-text="title">视频系统</div>
                </div>



                <div class="chatContent" id="video_1"></div>
            </div>
            <div class="chatData">
                <div class="block-header">
                    <div class="container"><div><div class="left"><div class="left__bg"></div></div><div class="right"><div class="right__bg1"></div><div class="right__bg2"></div><div class="right__bg3"></div></div></div></div><img class="icon" src="../img/block-header-arrow.png" /><div class="title" v-text="title">
                        楼层设备总览
                    </div>
                </div>
                <div class="chatContent" id="video_2">

                </div>
            </div>

        </div>

        <div class="contentRight" id="chart_TV" style="display:none;">
            <div class="chatData">
                <div class="block-header">
                    <div class="container"><div><div class="left"><div class="left__bg"></div></div><div class="right"><div class="right__bg1"></div><div class="right__bg2"></div><div class="right__bg3"></div></div></div></div><img class="icon" src="../img/block-header-arrow.png" /><div class="title" v-text="title">
                        信息发布系统
                    </div>
                </div>
                <div class="chatContent" id="TV_1"></div>
            </div>
            <div class="chatData">
                <div class="block-header">
                    <div class="container"><div><div class="left"><div class="left__bg"></div></div><div class="right"><div class="right__bg1"></div><div class="right__bg2"></div><div class="right__bg3"></div></div></div></div><img class="icon" src="../img/block-header-arrow.png" /><div class="title" v-text="title">
                        楼层设备总览
                    </div>
                </div>
                <div class="chatContent" id="TV_2">
                    <div class="TVLi_Div">
                        <div class="TVLi_DivTop">
                            <font class="TVLi_DivTopName">3号梯</font>
                            <font class="TVLi_DivTopState">在线</font>
                        </div>
                        <div class="TVLi_DivBottom">
                            <img class="TVLi_DivBottomImg" src="../img/pics/icons/tvPic.png" />
                            <div class="TVLi_divBtn1">
                                <font style="float:left;">设备开关:</font>
                                <div class="TVLi_openClose"></div>
                            </div>

                            <div class="TVLi_divBtn3">
                                <table style="width:100%;">
                                    <tr>
                                        <td>
                                            <img src="../img/pics/icons/voiceBtn2.png" style="width:25px;height:25px;" />
                                        </td>
                                        <td>
                                            <img src="../img/pics/icons/restartBtn2.png" style="width:25px;height:25px;" />
                                        </td>
                                    </tr>
                                    <tr><td>设置音量</td><td>设备重启</td></tr>
                                </table>
                            </div>

                            <div class="TVLi_divBtn2">
                                查看发布内容
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </div>
        <div class="contentRight" id="chart_lift" style="display:none;">
            <div class="chatData">
                <div class="block-header">
                    <div class="container"><div><div class="left"><div class="left__bg"></div></div><div class="right"><div class="right__bg1"></div><div class="right__bg2"></div><div class="right__bg3"></div></div></div></div><img class="icon" src="../img/block-header-arrow.png" /><div class="title" v-text="title">
                        智能电梯系统
                    </div>
                </div>
                <div class="chatContent" id="lift_1"></div>
            </div>
            <div class="chatData">
                <div class="block-header">
                    <div class="container"><div><div class="left"><div class="left__bg"></div></div><div class="right"><div class="right__bg1"></div><div class="right__bg2"></div><div class="right__bg3"></div></div></div></div><img class="icon" src="../img/block-header-arrow.png" /><div class="title" v-text="title">
                        电梯内实时监控
                    </div>
                </div>
                <div class="chatContent" id="lift_2">
                    <!--<table style="width:360px;margin-left:40px;">
                      <tr>
                        <td>
                          <video id="lift_video1" muted playsinline controls style="width:360px; height:240px;"></video>
                          <div class="indexVideoContent" style="width:360px;">
                            <font id="lift_video1_title" class="indexVideoTitle">电梯实时监控1</font>
                          </div>
                        </td>
                      </tr>
                      <tr>
                        <td>
                          <video id="lift_video2" muted playsinline controls style="width:360px; height:240px;"></video>
                          <div class="indexVideoContent" style="width:360px;">
                            <font id="lift_video2_title" class="indexVideoTitle">电梯实时监控2</font>
                          </div>
                        </td>
                      </tr>
                    </table>-->

                    <div class="liftLi_Div">
                        <div class="liftLi_DivTop">

                            <font class="liftLi_DivTopName" id="lift_title_1">1号梯</font>
                            <font class="liftLi_DivTopState">在线</font>
                        </div>
                        <div class="liftLi_DivBottom">
                            <img class="liftLi_DivBottomImg" src="../img/pics/icons/liftPic.png" />
                            <img class="liftLi_DivBottomImgState" src="../img/pics/icons/liftUp.png" />

                            <font class="liftLi_DivBottomFloor">8<font class="liftLi_DivBottomFloorUnit">&nbsp;F</font></font>
                            <div class="liftLi_divBtn1" id="lift_showVideoBtn_1" onclick="indexPage.showVideoWin(0)">
                                查看电梯监控
                            </div>
                            <div class="liftLi_divBtn2">
                                查看使用记录
                            </div>
                        </div>
                    </div>
                    <div class="liftLi_Div">
                        <div class="liftLi_DivTop">
                            <font class="liftLi_DivTopName" id="lift_title_2">2号梯</font>
                            <font class="liftLi_DivTopState">在线</font>
                        </div>
                        <div class="liftLi_DivBottom">
                            <img class="liftLi_DivBottomImg" src="../img/pics/icons/liftPic.png" />
                            <img class="liftLi_DivBottomImgState" src="../img/pics/icons/liftUp.png" />

                            <font class="liftLi_DivBottomFloor">8<font class="liftLi_DivBottomFloorUnit">&nbsp;F</font></font>
                            <div class="liftLi_divBtn1" onclick="indexPage.showVideoWin(1)">
                                查看电梯监控
                            </div>
                            <div class="liftLi_divBtn2">
                                查看使用记录
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </div>
        <div class="contentRight" id="chart_fire" style="display:none;">
            <div class="chatData">
                <div class="block-header">
                    <div class="container"><div><div class="left"><div class="left__bg"></div></div><div class="right"><div class="right__bg1"></div><div class="right__bg2"></div><div class="right__bg3"></div></div></div></div><img class="icon" src="../img/block-header-arrow.png" /><div class="title" v-text="title">
                        智慧消防系统
                    </div>
                </div>
                <div class="chatContent" id="fire_1"></div>
            </div>
            <div class="chatData">
                <div class="block-header">
                    <div class="container"><div><div class="left"><div class="left__bg"></div></div><div class="right"><div class="right__bg1"></div><div class="right__bg2"></div><div class="right__bg3"></div></div></div></div><img class="icon" src="../img/block-header-arrow.png" /><div class="title" v-text="title">
                        楼层设备总览
                    </div>
                </div>
                <div class="chatContent" id="fire_2">
                    <div class="fireLi_Div">
                        <div class="fireLi_DivTop">

                            <font class="fireLi_DivTopName">3号梯</font>
                            <font class="fireLi_DivTopState">在线</font>
                        </div>
                        <div class="fireLi_DivBottom">
                            <img class="fireLi_DivBottomImg" src="../img/pics/icons/fireControlPic.png" />

                            <div class="fireLi_divBtn2">
                                查看报警记录
                            </div>
                            <div class="fireLi_divBtn1">
                                <font style="float:left;">位置:检验科门口</font>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </div>

        <div class="contentRight" id="chart_environment" style="display:none;">
            <div class="chatData">
                <div class="block-header">
                    <div class="container"><div><div class="left"><div class="left__bg"></div></div><div class="right"><div class="right__bg1"></div><div class="right__bg2"></div><div class="right__bg3"></div></div></div></div><img class="icon" src="../img/block-header-arrow.png" /><div class="title" v-text="title">
                        环境监测系统
                    </div>
                </div>
                <div class="chatContent" id="environment_1"></div>
            </div>
            <div class="chatData">
                <div class="block-header">
                    <div class="container"><div><div class="left"><div class="left__bg"></div></div><div class="right"><div class="right__bg1"></div><div class="right__bg2"></div><div class="right__bg3"></div></div></div></div><img class="icon" src="../img/block-header-arrow.png" /><div class="title" v-text="title">
                        楼层设备总览
                    </div>
                </div>
                <div class="chatContent" id="environment_2">

                    <div class="fireLi_Div">
                        <div class="fireLi_DivTop">
                            <font class="fireLi_DivTopName" title=""></font>\
                            <font class="fireLi_DivTopState"></font>
                        </div>
                        <div class="fireLi_DivContent">
                            <div class="fireLi_DivMete">
                                <div class="fireLi_DivMeteName">
                                    温度:
                                </div>
                                <div class="fireLi_DivMeteValue">
                                    26.5℃
                                </div>
                            </div>

                        </div>
                        <div class="fireLi_DivBottom">
                            <div class="fireLi_divBtn1">
                                <font style="float:left;">位置:</font>
                                <font style="float:left;">啊是犯法的事</font>
                            </div>
                            <div class="fireLi_divBtn2" onclick="indexPage.showEDevAlarmListByDev()">
                                查看报警记录
                            </div>
                        </div>
                    </div>


                </div>
            </div>

        </div>
        <div class="contentRight" id="chart_radio" style="display:none;">
            <div class="chatData">
                <div class="block-header">
                    <div class="container"><div><div class="left"><div class="left__bg"></div></div><div class="right"><div class="right__bg1"></div><div class="right__bg2"></div><div class="right__bg3"></div></div></div></div><img class="icon" src="../img/block-header-arrow.png" /><div class="title" v-text="title">
                        智能广播系统
                    </div>
                </div>
                <div class="chatContent" id="radio_1"></div>
            </div>
            <div class="chatData">
                <div class="block-header">
                    <div class="container"><div><div class="left"><div class="left__bg"></div></div><div class="right"><div class="right__bg1"></div><div class="right__bg2"></div><div class="right__bg3"></div></div></div></div><img class="icon" src="../img/block-header-arrow.png" /><div class="title" v-text="title">
                        楼层设备总览
                    </div>
                </div>
                <div class="chatContent" id="radio_2">

                </div>
            </div>

        </div>
    </div>
    <div id="fourBtns" class="btns_four">
        <div id="indexBtn" class="btn_li action">主楼</div>
        <div id="sbfBtn" class="btn_li">设备房</div>
        <div id="xzldbBtn" class="btn_li">写字楼电表</div>
        <div id="xfmdylBtn" class="btn_li">消防末端压力</div>
        <!--<div id="ltxtBtn" class="btn_li">冷通系统</div>-->
    </div>

    <div id="dataCeneterDiv" style="display:none;">
        <div class="chatData" style="width:100%;margin-top:20px;background-color:rgba(3, 24, 56, 0);">
            <div class="block-header">
                <div class="container" style="width:94% !important">
                    <div>
                        <div class="left">
                            <div class="left__bg"></div>
                        </div>
                        <div class="right">
                            <div class="right__bg1"></div>
                            <div class="right__bg2"></div>
                            <div class="right__bg3"></div>
                        </div>
                    </div>
                </div>
                <img class="icon" src="../img/block-header-arrow.png" />
                <div class="title" id="roomname" v-text="title">数据中心</div>
            </div>
            <div class="exitBtn" id="room_exitBtn">
                关闭
            </div>
            <div id="iframe_dataCenterContent" class="chatContent" style="width:100%;">
                <iframe style="width:100%;border:0px solid black;height:100%;" id="iframe_bpd"></iframe>
            </div>
        </div>
    </div>

    <div id="peidianshi" style="display:none;">
        <div class="chatData" style="width:1030px;margin-top:20px;background-color:rgba(3, 24, 56, 0.64);">
            <div class="block-header">
                <div class="container" style="width:100% !important;">
                    <div>
                        <div class="left">
                            <div class="left__bg"></div>
                        </div>
                        <div class="right">
                            <div class="right__bg1"></div>
                            <div class="right__bg2"></div>
                            <div class="right__bg3"></div>
                        </div>
                    </div>
                </div>
                <img class="icon" src="../img/block-header-arrow.png" />
                <div class="title" v-text="title">变配电系统</div>
            </div>
            <div id="iframe_bpdContent" class="chatContent" style="width:1030px;">
                <iframe style="width:100%;border:0px solid black;height:600px;" id="iframe_bpd"></iframe>
            </div>
        </div>
    </div>

    <div id="jpaishui" style="display:none;">
        <div class="chatData" style="width:980px;margin-top:20px;background-color:rgba(3, 24, 56, 0.64);">
            <div class="block-header">
                <div class="container" style="width:980px !important;">
                    <div>
                        <div class="left">
                            <div class="left__bg"></div>
                        </div>
                        <div class="right">
                            <div class="right__bg1"></div>
                            <div class="right__bg2"></div>
                            <div class="right__bg3"></div>
                        </div>
                    </div>
                </div>
                <img class="icon" src="../img/block-header-arrow.png" />
                <div class="title" v-text="title">给排水系统</div>
            </div>
            <div id="waterCotent" class="chatContent" style="width:980px;height:700px;overflow-x:hidden;overflow-y:auto;">

            </div>
        </div>
    </div>
    <div id="songfeng" style="display:none;">
        <div class="chatData" style="width:970px;margin-top:20px;background-color:rgba(3, 24, 56, 0.64);">
            <div class="block-header">
                <div class="container" style="width:970px !important;">
                    <div>
                        <div class="left">
                            <div class="left__bg"></div>
                        </div>
                        <div class="right">
                            <div class="right__bg1"></div>
                            <div class="right__bg2"></div>
                            <div class="right__bg3"></div>
                        </div>
                    </div>
                </div>
                <img class="icon" src="../img/block-header-arrow.png" />
                <div class="title" v-text="title">送排风系统</div>
            </div>
            <div class="chatContent" id="songfengContent" style="width:970px;padding:20px;max-height:640px;overflow-y:scroll;overflow-x:hidden;">




            </div>
        </div>
    </div>
    <div id="alarmsList" style="display:none;">
        <div class="chatData" style="width:700px;margin-top:20px;background-color:rgba(3, 24, 56, 0.64);">
            <div class="block-header">
                <div class="container" style="width:700px !important;">
                    <div>
                        <div class="left">
                            <div class="left__bg"></div>
                        </div>
                        <div class="right">
                            <div class="right__bg1"></div>
                            <div class="right__bg2"></div>
                            <div class="right__bg3"></div>
                        </div>
                    </div>
                </div>
                <img class="icon" src="../img/block-header-arrow.png" />
                <div class="title" v-text="title">设备报警列表</div>
            </div>
            <div class="chatContent" style="width:700px;">
                <!--<table id="alarmTable"></table>-->
                <div style="width:680px; margin-left:10px; height:600px;overflow-y:scroll" id="AlarmListResult">

                </div>
            </div>
        </div>
    </div>

    <div id="doorEventList" style="display:none;">
        <div class="chatData" style="width:700px;margin-top:20px;background-color:rgba(3, 24, 56, 0.64);">
            <div class="block-header">
                <div class="container" style="width:700px !important;">
                    <div>
                        <div class="left">
                            <div class="left__bg"></div>
                        </div>
                        <div class="right">
                            <div class="right__bg1"></div>
                            <div class="right__bg2"></div>
                            <div class="right__bg3"></div>
                        </div>
                    </div>
                </div>
                <img class="icon" src="../img/block-header-arrow.png" />
                <div class="title" v-text="title">门禁记录查询</div>
            </div>
            <div class="chatContent" style="width:700px;">
                <div id="doorSearchDiv">
                    <table style="color:white !important;margin-left:10px;">
                        <tr>
                            <td>查询条件:</td>
                            <td style="width:145px;"><input id="doorEventStartTime" placeholder="yyyy-MM-dd HH:mm:ss" style="float:left;width:140px;height:28px; font-size:14px; text-align:center;line-height:28px;color:white;background-color:rgba(0,0,0,0) !important;color:#32C5FF !important;border:1px solid #32C5FF;" /></td>
                            <td style="width:20px;"></td>
                            <td style="width:145px;"><input id="doorEventEndTime" placeholder="yyyy-MM-dd HH:mm:ss" style="float:left;width:140px;height:28px; font-size:14px; text-align:center;line-height:28px;color:white;background-color:rgba(0,0,0,0) !important;color:#32C5FF !important;border:1px solid #32C5FF;" /></td>
                            <td style="width:100px;">
                                <input type="hidden" id="doorDevicecSn" value="" />
                                <!--<select style="float:left;width:80px;height:28px; font-size:14px; text-align:center;line-height:28px;color:white;background-color:rgba(0,0,0,0) !important;color:#32C5FF !important;border:1px solid #32C5FF;">
                                  <option>授权</option>
                                </select>-->
                            </td>
                            <td style="width:100px;">
                                <div id="searchDoorEventBtn" style=" float:left;width:80px;height:28px; background-image: linear-gradient(to right, #024D9E , #09FDFF);border-radius:2px;font-size:14px; text-align:center;line-height:28px;color:white;cursor:pointer;">&nbsp;</div>
                            </td>
                            <td style="width:100px;">
                                <div id="exitDoorEventBtn" class="divBtn" style="width:80px;height:28px;line-height:28px; ">
                                    退出
                                </div>
                            </td>
                        </tr>
                    </table>

                </div>
                <div style="width:680px; margin-left:10px; height:500px;overflow-y:scroll" id="doorEventListResult">

                </div>
            </div>
        </div>
    </div>


    <div id="devAllMeteList" style="display:none;">
        <div class="chatData" style="width:700px;margin-top:20px;background-color:rgba(3, 24, 56, 0.64);">
            <div class="block-header">
                <div class="container" style="width:700px !important;">
                    <div>
                        <div class="left">
                            <div class="left__bg"></div>
                        </div>
                        <div class="right">
                            <div class="right__bg1"></div>
                            <div class="right__bg2"></div>
                            <div class="right__bg3"></div>
                        </div>
                    </div>
                </div>
                <img class="icon" src="../img/block-header-arrow.png" />
                <div class="title" v-text="title" id="devTitle">设备量</div>
            </div>
            <div class="chatContent" style="width:700px;">
                <div style="width:680px; margin-left:10px;margin-top:15px; height:500px;overflow-y:scroll" id="devMeteListResult">



                </div>
            </div>
        </div>
    </div>
    <div id="devAlarmList" style="display:none;">
        <div class="chatData" style="width:700px;margin-top:20px;background-color:rgba(3, 24, 56, 0.64);">
            <div class="block-header">
                <div class="container" style="width:700px !important;">
                    <div>
                        <div class="left">
                            <div class="left__bg"></div>
                        </div>
                        <div class="right">
                            <div class="right__bg1"></div>
                            <div class="right__bg2"></div>
                            <div class="right__bg3"></div>
                        </div>
                    </div>
                </div>
                <img class="icon" src="../img/block-header-arrow.png" />
                <div class="title" v-text="title">报警记录查询</div>
            </div>
            <div class="chatContent" style="width:700px;">
                <div id="doorSearchDiv">
                    <table style="color:white !important;margin-left:10px;">
                        <tr>
                            <td>查询条件:</td>
                            <td style="width:155px;"><input id="alarmStartTime" placeholder="yyyy-MM-dd HH:mm:ss" style="float:left;width:150px;height:28px; font-size:14px; text-align:center;line-height:28px;color:white;background-color:rgba(0,0,0,0) !important;color:#32C5FF !important;border:1px solid #32C5FF;" /></td>
                            <td style="width:20px;"></td>
                            <td style="width:155px;"><input id="alarmEndTime" placeholder="yyyy-MM-dd HH:mm:ss" style="float:left;width:150px;height:28px; font-size:14px; text-align:center;line-height:28px;color:white;background-color:rgba(0,0,0,0) !important;color:#32C5FF !important;border:1px solid #32C5FF;" /></td>
                            <td style="width:80px;">
                                <select id="alarmDevSort" style="float:left;width:60px;height:28px; font-size:14px; text-align:center;line-height:28px;color:white;background-color:rgba(0,0,0,0) !important;color:#32C5FF !important;border:1px solid #32C5FF;">
                                    <option value="1">升序</option>
                                    <option value="2">降序</option>
                                </select>
                                <input type="hidden" id="selectEAlarmDevid" />
                            </td>
                            <td style="width:100px;">
                                <div id="searchDevAlarmBtn" style=" float:left;width:80px;height:28px; background-image: linear-gradient(to right, #024D9E , #09FDFF);border-radius:2px;font-size:14px; text-align:center;line-height:28px;color:white;cursor:pointer;">&nbsp;</div>
                            </td>
                            <td style="width:100px;">
                                <div id="exitDevAlarmBtn" class="divBtn" style="width:80px;height:28px;line-height:28px; ">
                                    退出
                                </div>
                            </td>
                        </tr>
                    </table>

                </div>
                <div style="width:680px; margin-left:10px;margin-top:15px; height:500px;overflow-y:scroll" id="devAlarmListResult">
                </div>
            </div>
        </div>
    </div>
</body>

<script>
    $(document).ready(function () {
        if (window.parent.loadingClose3DFun) {
            window.parent.loadingClose3DFun();
        }
            showLoading(100, config.BuildCameraPosition, config.BuildCameraTarget, null, function () {
            modelBussiness.init();
            },3000);
        });
         
</script>
</html>

 

3.2、业务逻辑部分重要代码与讲解如下

 

function ModelBussiness() {
  this.currentAnimationState = 0;
  this.functionState = "";//功能状态
  this.currentSelectFloor =-1;
  
}
ModelBussiness.prototype.init = function (roomName) {
    //悬停回调
    WT3DObj.mouseOverCallBack = this.mouseOverCallBack;
    //进入回调
    WT3DObj.mouseOverInCallBack = this.mouseOverInCallBack;
    //离开回调
    WT3DObj.mouseOverLeaveCallBack = this.mouseOverLeaveCallBack;
    //悬停触发时间长度
    WT3DObj.mouseOverTimeLong = 1000;
    this.hideHelpModels();
    this.autoRunRotation = true;
   // modelBussiness.UnrealBoom(1,1.2,0.83, 0.42)
}
//双击选中

ModelBussiness.prototype.dbClickSelect = function (_sobj, _face,objs,_floor) {
  console.log(_sobj);
  var _this = this;
  if (_sobj.name.indexOf("_room_") >= 0) {
      var roomName = _sobj.name.split("_")[4];
      $("#roomname").html(roomName);
      var roomid = _sobj.name.split("_")[3];
      layer.open({
          type: 1,
          shade: 0.8,
          skin: 'myLayer',
          title: false,
          area: [($(window).width() - 20) + "px", ($(window).height() - 20) + "px"],
          content: $('#dataCeneterDiv'),
          cancel: function () {
              $("#iframe_dataCenterContent").html('');
              if (window.parent.iframeOpenHeaderFun) {
                  window.parent.iframeOpenHeaderFun();
              }
              $("#chart_index").show();
          },
          success: function () {
              if (window.parent.iframeCloseHeaderFun) {
                  window.parent.iframeCloseHeaderFun();
              }
              $("#chart_index").hide();
              $("#iframe_dataCenterContent").html('<iframe src="room.html?roomId=' + roomid + '" style="width:100%;border:0px solid black;height:' + ($(window).height() - 80) + 'px" id="iframe_bpd"></iframe>')
          }
      });
  }

}
ModelBussiness.prototype.addVitureDev = function (menuType) {
    if (modelBussiness.tempNameList && modelBussiness.tempNameList.length > 0) {
       $.each(modelBussiness.tempNameList, function (_i, _o) {
                  WT3DObj.destoryObj(_o);
        });
       modelBussiness.tempNameList = [];
   }
    this.functionState = menuType;
    //layer.load();
    switch (menuType) {
        case "xfmdyl":
        case "xzldb":
        case "rooms":
        case "door":
        case "environment"://环境
        case "aircontrol"://空调
        case "radio"://广播
        case "fire":
        case "TV":
        case "video": {
            
            WT3DObj.commonFunc.changeCameraPosition({ x: 8026.832919779723, y: 11410.537277765132, z: 8678.638422438804 }, { x: 556.4874673700924, y: 4427.39332904184, z: -494.69977246193355 }, 200,
                function () {
                modelBussiness.vAllModel(function () {
                    modelBussiness.showAllVisuFloor();
                        layer.closeAll();
                 });
            });
          }
          break;
        case "lift"://电梯
            {
              modelBussiness.showLiftModel();
              $.each(modelBussiness.tempNameList, function (_i, _o) {
                WT3DObj.destoryObj(_o);
              });
              modelBussiness.tempNameList = [];
               
            }
            break;
        case "ltxt": {
            modelBussiness.showAllBuild(function () {
                WT3DObj.commonFunc.changeCameraPosition({x: 4187.131036680923, y: 5464.426260502498, z: 2030.4192806797732},
                       { x: 1043.3158032062647, y: 2641.232605326482, z: -499.18168864866135 }, 1000,
                        function () {
                            layer.closeAll();
                    });
            });
        }
            break;
        case "index":
        case "back"://
            {
                modelBussiness.showAllBuild(function () {
                    layer.closeAll();
                });
            }
            break;
           
    }
} 
ModelBussiness.prototype.showAllVisuFloor = function () {
  var _this = this;
  this.showFloors(function () {


      $.each(modelBussiness.tempNameList, function (_i, _o) {
          WT3DObj.destoryObj(_o);
      });

     // webapi.getPositionData(modelBussiness.functionState, -1, function (data)
      {
          var data = modelList[modelBussiness.functionState].data;
          modelBussiness.tempNameList = [];
          $.each(data, function (_index, _obj) {
              if (_obj.show == false) {

              } else {
              var floor = _obj.floor;
                  var floorHeight = modelBussiness.getFloorHeigth(floor) + 10;
                  var name = "devLogo_" + _this.functionState +  "_" + _obj.type+"_" + _obj.id + "_" + _obj.name;
                  modelBussiness.tempNameList.push(name);

                  var iconimg = _obj.icon ? _obj.icon : modelList[_this.functionState].icon;

                  modelBussiness.commonFunc.addDevMark(name, { x: _obj.x, y: floorHeight, z: _obj.z }, iconimg, modelList[_this.functionState].iconSize);
              }
          })
      }
      //);

  });

}
ModelBussiness.prototype.showAllBuild = function (callBack) {
  var _this = this;
  _this.hideHelpModels();
  _this.showAllModel(function () {
    var xrange = { x: 1 }
    new TWEEN.Tween(xrange).to({
      x: 1.1
    }, 1500).onUpdate(function () {
    //  modelBussiness.params.exposure = this.x;
    }).onComplete(function () {
      new TWEEN.Tween(xrange).to({
        x: 1
      }, 2000).onUpdate(function () {
       // modelBussiness.params.exposure = this.x;
      }).onComplete(function () {
          if (callBack) {
              callBack();
          }
      }).start();
    }).start();
  });
}
//掀开你的头盖骨
ModelBussiness.prototype.hideTopFloorsModel = function (floorNub) {
    var floors=[
    ["F1_B3"],//-3
    ["F1_B2"],
    ["F1_B1"],
    ["F1_1", "F3_1"],//1
    ["F1_2", "F3_2"],//2
    ["F1_3", "F3_3"],//3
    ["F1_4", "F3_4"],//4
    ["F1_5", "F3_5"],//5
    ]
    for (var i = 6; i <= 42;i++){
        floors.push(["F2_" + i, "F3_" + i]);
    }
    floors.push(["F2_43"]);
    floors.push(["F2_44"]);
   
    $.each(WT3DObj.scene.children, function (_index, _obj) {
        if (!_obj.oldPositionY && _obj.oldPositionY != 0) {
            _obj.oldPositionY = _obj.position.y;
            _obj.visible = true;
        }
    });
    if (floorNub == 0) {
        var floorNames = [];
        $.each(floors, function (_findex, _fobj) {
            floorNames = floorNames.concat(_fobj);
        });
        var models = WT3DObj.commonFunc.findObjectsByNames(floorNames);
        $.each(models, function (_findex, _fobj) {
            if (_fobj.oldPositionY || _fobj.oldPositionY == 0) {
                _fobj.position.y = _fobj.oldPositionY;
                _fobj.visible = true;
            }
        });
    } else {
        var floorNames = [];
        $.each(floors, function (_findex, _fobj) {
            if (_findex-2 > floorNub ) {
            floorNames = floorNames.concat(_fobj);
            }
        });
        var bootomNames = [];
        $.each(floors, function (_findex, _fobj) {
            if (_findex-2 <= floorNub) {
                bootomNames = bootomNames.concat(_fobj);
            }
        });
        var bottommodels = WT3DObj.commonFunc.findObjectsByNames(bootomNames);
        $.each(bottommodels, function (_findex, _fobj) {
            if (_fobj.oldPositionY || _fobj.oldPositionY == 0) {
                _fobj.position.y = _fobj.oldPositionY;
                _fobj.visible = true;
            }
        });


        var movemodes = [];
        var topmodels = WT3DObj.commonFunc.findObjectsByNames(floorNames);
        $.each(topmodels, function (_findex, _fobj) {
            if (!_fobj.oldPositionY&& _fobj.oldPositionY!= 0) {
                _fobj.oldPositionY = _fobj.position.y;
            }
            if (_fobj.position.y > _fobj.oldPositionY) {
                _fobj.position.y = 10000 + _fobj.oldPositionY;
                _fobj.visible = false;
            } else {
                movemodes.push(_fobj);
            }
        });
        if (movemodes) {
            var yR = {y:0}
            new TWEEN.Tween(yR).to({
                y: 10000
            }, 500).onUpdate(function () {
                var _thisx=this;
                $.each(movemodes, function (_findex, _fobj) {
                    _fobj.position.y = _fobj.oldPositionY + _thisx.y;
                });
            }).onComplete(function () {
                $.each(movemodes, function (_findex, _fobj) {
                    _fobj.position.y = 10000 + _fobj.oldPositionY;
                    _fobj.visible = false;
                });
            }).start();
        }


    }
    
}
ModelBussiness.prototype.showFloorDev = function (floorNub, type) 
    {
        floorNub = parseInt(floorNub);
        var models = WT3DObj.commonFunc.findObjectsByNames(modelBussiness.tempNameList);
        this.hideTopFloorsModel(floorNub);
        if (floorNub == 0) {
            $.each(models, function (_index, _obj) {
                _obj.visible = true;
            });
            WT3DObj.commonFunc.changeCameraPosition({ x: 4911.210369862361, y: 10841.747779303612, z: 7670.509455766194 }, { x: 127.36338796169231, y: 4716.795093859403, z: -379.3846010914671 }, 500,
                function () {
              
                });
        } else {

            //查找该楼层设备
            var showmodels = [];
            $.each(modelList[type].data, function (_devindex, _devobj) {
                if (parseInt(_devobj.floor) == floorNub) {
                    if (type == "rooms") {
                        showmodels.push("devLogo_" + type + "_room_" + _devobj.id + "_" + _devobj.name)
                    } else {
                        showmodels.push("devLogo_" + type + "_device_" + _devobj.id + "_" + _devobj.name)
                    }

                }
            });

            $.each(models, function (_index, _obj) {
                if (showmodels.indexOf(_obj.name) < 0) {
                    _obj.visible = false;
                } else {
                    _obj.visible = true;

                }
            });


            WT3DObj.commonFunc.changeCameraPosition({ x: 2842.032108861517, y: 15466.564073695303 - (43 - floorNub) * 200, z: 1543.7861561756818 }, { x: -402.0797318127744, y: 5157.3929866002245 - (43 - floorNub) * 200, z: -1354.1029952588615 }, 500,
              function () {
             
              });


        }

    }
 


ModelBussiness.prototype.tempNameList = [];
ModelBussiness.prototype.tempNetNameList = [];
ModelBussiness.prototype.tempJJNameList = [];
ModelBussiness.prototype.lastSelectedObj = null;
ModelBussiness.prototype.ClickSelect = function (_obj, _face, objs) {
  var _this = modelBussiness;
  if (_this.functionState == "lift") {
    WT3DObj.commonFunc.setSkinColorByObj(WT3DObj.commonFunc.findObject("elevator_dev_1"), 0x000000);
    WT3DObj.commonFunc.setSkinColorByObj(WT3DObj.commonFunc.findObject("elevator_dev_2"), 0x000000);
    if (objs && objs.length > 0) {
    var selectliftobj = null;
    $.each(objs, function (_index, _lobj) {
      if (_lobj.object && _lobj.object.name && _lobj.object.name.indexOf("elevator_dev_") >= 0) {
        selectliftobj = _lobj.object;
      }
    });
    if (selectliftobj) {
      WT3DObj.commonFunc.setSkinColorByObj(selectliftobj, 0xffff00);
        $("#liftDetail").show();
        $("#liftDetail").attr("data-state", 1);
        indexPage.showLiftDetailByModel(selectliftobj.name);
    } else {
      $("#liftDetail").hide();
      $("#liftDetail").attr("data-state", 0);
    }
  }
  }
}


//悬停
ModelBussiness.prototype.mouseOverCallBack = function (_obj, face) {
}
ModelBussiness.prototype.mouseInCurrentObj = null;
ModelBussiness.prototype.lastMouseInCurrentObj = null;
//鼠标滑入事件
ModelBussiness.prototype.mouseOverInCallBack = function (_obj, face, objs) {
  console.log(_obj.name);
  var _this = modelBussiness;
 
  var color = 0xbfffea;
  modelBussiness.lastMouseInCurrentObj = _obj;
  modelBussiness.mouseInCurrentObj = _obj;
  if (_this.functionState == "lift") {
    if (_obj.name.indexOf("devLogo_") >= 0&& _obj.name.indexOf("video") >= 0) {

      modelBussiness.mouseInCurrentObj = _sobj;
      var screenPostion = WT3DObj.commonFunc.transToScreenCoord(_obj.position);
      $("#MarkMessageHelper").remove();
      $("body").append("<div id='MarkMessageHelper' style='position:absolute;left:" + (screenPostion.x - 20) + "px;top:" + screenPostion.y + "px;height:2px;width:2px;z-index:1000;'></div>");
      //devLogo_TV_1674_3F
      var devType = _obj.name.split("_")[1];
      var devId = _obj.name.split("_")[2];
      var devName = _obj.name.split("_")[3];
      var showobj = showDevDetail(devType, devId, devName);
      layer.tips(showobj.html, "#MarkMessageHelper", {
        tips: [1, 'rgba(3,24,60,0.62)'],
        area: [showobj.width, showobj.height],
        time: 0
      })
    }

  }
  else {
    if (_obj.name.indexOf("vf_") >= 0) {
      var floor = parseInt(_obj.name.replace("vf_", ""));
      if (floor == modelBussiness.currentSelectFloor) {
        return;
      }
      if (modelBussiness.currentSelectFloor>0) {
          return;
      }
      var _sobj = _obj;
      if (_obj.name.indexOf("OBJCREN") > 0) {
        _sobj = _obj.parent;
      }

      
      modelBussiness.mouseInCurrentObj = _sobj;
      _sobj.visible = true;
     WT3DObj.commonFunc.setSkinColorByObj(_sobj, 0x00ffff);

     WT3DObj.commonFunc.changeObjsOpacity([_sobj], 0, 0.2, 10, function () { });

      $("#MarkMessageHelper").remove();
      $("body").append("<div id='MarkMessageHelper' style='position:absolute;left:" + (window.event.pageX ) + "px;top:" + (window.event.pageY-10) + "px;height:2px;width:2px;z-index:1000;'></div>");
      layer.tips("<font style='font-size:18px;'>楼层:" + floor+ "楼</font>", "#MarkMessageHelper", {
        tips: [1, '#003333'],
        time: 0
      });

    }
    else if (_obj.name.indexOf("devLogo_") >= 0) {

      modelBussiness.mouseInCurrentObj = _sobj;
      var screenPostion = WT3DObj.commonFunc.transToScreenCoord(_obj.position);
      $("#MarkMessageHelper").remove();
      $("body").append("<div id='MarkMessageHelper' style='position:absolute;left:" + (screenPostion.x - 20) + "px;top:" + screenPostion.y + "px;height:2px;width:2px;z-index:1000;'></div>");
      //var devType = _obj.name.split("_")[1];
      //var devId = _obj.name.split("_")[2];
      //var devName = _obj.name.split("_")[3];
    
      var showobj = showDevDetail(_obj.name);

      layer.tips(showobj.html, "#MarkMessageHelper", {
        tips: [1, 'rgba(3,24,60,0.62)'],
        area: [showobj.width, showobj.height],
        time: 0
      })
    }

  }

}
//鼠标滑出事件
ModelBussiness.prototype.mouseOverLeaveCallBack = function (_obj, face, nowobj) {
  var _this = modelBussiness;
  var color = 0x000000;
  if (_this.functionState == "lift") {
    if (_obj.name.indexOf("devLogo_") >= 0
     || _obj.name.indexOf("rack_") >= 0
     || _obj.name.indexOf("dev_") >= 0) {
      layer.closeAll();
    }
  } else {
    if (_obj.name.indexOf("vf_") >= 0) {
      layer.closeAll();
      var _sobj = _obj;
      if (_obj.name.indexOf("OBJCREN") > 0) {
        _sobj = _obj.parent;
      }
      WT3DObj.commonFunc.setSkinColorByObj(_sobj, 0x000000);
      WT3DObj.commonFunc.changeObjsOpacity([_sobj], 0.2, 0, 10, function () {
      });
    } else if (_obj.name.indexOf("devLogo_") >= 0 || _obj.name.indexOf("rack_") >= 0 || _obj.name.indexOf("dev_") >= 0) {

      layer.closeAll();
    }
  }

}

//播放摄像头
ModelBussiness.prototype.playVideo = function (wsSrc) {
    var html = "<div id='devInfo'>";
    html += ' <video id="videoPlayer" style="width:450px;height:300px;margin:0px;cursor:pointer;" autoplay muted>\
                                <source src="" type="application/x-rtsp">\
                            </video>';
    html += "</div>";
     layer.open({
        title:"实时视频",
        type: 1,
        shade: 0,
        content: html,
        moveEnd: function (a) {
        },
        maxmin: false,
        cancel: function () {
            layer.closeAll();
        }
    });
     var wsPlayer = new WSPlayer("videoPlayer", {
        modules: [
            {
                client: RTSPClient,
                transport: {
                    constructor: WebsocketTransport,
                    options: {
                        socket: wsSrc
                    }
                }
            }
        ]
    });
    wsPlayer.setSource(wsSrc, "rtsp");
}
ModelBussiness.prototype.hmodels = null;
ModelBussiness.prototype.getHelpModels = function () {
    if (!modelBussiness.hmodels) {
      var hnames = [];
      for (var i = 1; i <= 13; i++) {
        hnames.push("vf_" + i);
      }
       modelBussiness.hmodels = WT3DObj.commonFunc.findObjectsByNames(hnames);
       $.each(modelBussiness.hmodels, function (_i, _o) { _o.material.depthTest = false; }
       );
    }
    return modelBussiness.hmodels;
}
ModelBussiness.prototype.hideHelpModels = function () {
    
    this.hideFloors();
    var ms = modelBussiness.getHelpModels();
    $.each(ms, function (_i, _o) {
      _o.visible = true;
    });
    WT3DObj.commonFunc.changeObjsOpacity(ms, 0.8, 0, 10, function () {
    });
    $.each(modelBussiness.tempNameList, function (_i, _o) {
        WT3DObj.destoryObj(_o);
    });
    modelBussiness.tempNameList = [];
    $.each(modelBussiness.tempNetNameList, function (_i, _o) {
        WT3DObj.destoryObj(_o);
    });
    modelBussiness.tempNetNameList = [];
    $.each(modelBussiness.tempJJNameList, function (_i, _o) {
        WT3DObj.destoryObj(_o);
    });
    modelBussiness.tempJJNameList = [];
  
}

ModelBussiness.prototype.nearCameraPostion = function (_obj, _face) {
    //此处设置双击聚焦
    {
        var mainCamera = WT3DModel.camera;//主场景

        var objpositionx = _obj.position.x;
        var objpositiony = _obj.position.y;
        var objpositionz = _obj.position.z;
        if (typeof (_obj.parent) != 'undefined' && _obj.parent != null && typeof (_obj.parent.position) != 'undefined' && _obj.parent.position != null) {
            objpositionx += _obj.parent.position.x;
            objpositiony += _obj.parent.position.y;
            objpositionz += _obj.parent.position.z;
        }
        if (typeof (_obj.oldPosition) != 'undefined' && _obj.oldPosition != null) {
            objpositionx = _obj.oldPosition.x;
            objpositiony = _obj.oldPosition.y;
            objpositionz = _obj.oldPosition.z;
        }
        new TWEEN.Tween(WT3DModel.controls.target).to({
            x: objpositionx, y: objpositiony, z: objpositionz
        }, 600).onComplete(function () {
            var x_distance = mainCamera.position.x - objpositionx;
            var y_distance = mainCamera.position.y - objpositiony;
            var z_distance = mainCamera.position.z - objpositionz;
            var lv = 300 / Math.sqrt(x_distance * x_distance + y_distance * y_distance + z_distance * z_distance);
            var runtweenTime = 1000;
            if (lv > 0.6) {
                runtweenTime = 400;
            } else if (lv > 0.3) {
                runtweenTime = 1000;
            } else if (lv > 0.1) {
                runtweenTime = 1200;
            } else if (lv > 0.05) {
                runtweenTime = 1600;
            } else if (lv > 0.01) {
                runtweenTime = 2000;
            } else {
                runtweenTime = 2500;
            }
            if (x_distance * x_distance + y_distance * y_distance + z_distance * z_distance > 300 * 300 && lv < 0.9999) {
                new TWEEN.Tween(mainCamera.position).to({
                    x: objpositionx + (mainCamera.position.x - objpositionx) * lv, y: objpositiony + (mainCamera.position.y - objpositiony) * lv, z: objpositionz + (mainCamera.position.z - objpositionz) * lv
                }, runtweenTime).start();
            }
        }).start();
    }
}

 
/*
==============================电梯===============================================
*/
//显示电梯
ModelBussiness.prototype.showLiftModel = function () {
  this.functionState = "lift";
  this.vAllModel(function () {
    WT3DObj.commonFunc.changeCameraPosition({ x: 2934.252457615192, y: 6578.88534028727, z: 7045.186930258046 },
        { x: -394.1032500428694, y: 845.5404737020468, z: -572.4129363162384 }, 1000,
        function () {
          modelBussiness.showLiftHelpModels();
        });
  })
}
ModelBussiness.prototype.closeLiftModel = function () {
  this.functionState = "";
  this.hideLiftHelpModels(function () {
    WT3DObj.commonFunc.changeCameraPosition({ x: 2934.252457615192, y: 6578.88534028727, z: 7045.186930258046 },
        { x: -394.1032500428694, y: 845.5404737020468, z: -572.4129363162384 }, 1000,
        function () {
            window.modelBussiness.showAllBuild();;
            modelBussiness.currentSelectFloor = -1;
        });
  });
}
ModelBussiness.prototype.showLiftHelpModels = function (callBack) {
  var liftModelNames = ["elevator_shaft_1", "elevator_shaft_2", "elevator_dev_1", "elevator_dev_2"];
  var liftModels = WT3DObj.commonFunc.findObjectsByNames(liftModelNames);
  $.each(liftModels, function (_i, _o) {
    _o.material.depthTest = false;
    if (_o.material.materials) {
      _o.material.materials.forEach(function (a) { a.depthTest = false; })
    }
  })
  WT3DModel.commonFunc.changeObjsOpacity(liftModels, 0.05, 1, 800, function () {
    if (callBack) {
      callBack();
    }
  });
}

ModelBussiness.prototype.hideLiftHelpModels = function (callBack) {
  var liftModelNames = ["elevator_shaft_1", "elevator_shaft_2", "elevator_dev_1", "elevator_dev_2"];
  var liftModels = WT3DObj.commonFunc.findObjectsByNames(liftModelNames);
  $.each(liftModels, function (_i, _o) {
    _o.material.depthTest = true;
    if (_o.material.materials) {
      _o.material.materials.forEach(function (a) { a.depthTest = true; })
    }

  });
  WT3DModel.commonFunc.changeObjsOpacity(liftModels, 1, 0.05, 800, function () {
    if (callBack) {
      callBack();
    }
  });
}
ModelBussiness.prototype.changeLiftHeight = function (name, floor) {
    var height = this.getFloorHeigth(floor);
    var lift = WT3DObj.commonFunc.findObject(name);
    new TWEEN.Tween(lift.position).to({
        y: height
    }, 1500).start();
}
  /*
==============================电梯END===============================================
*/
ModelBussiness.prototype.getFloorHeigth = function (floor) {
    
    var height = -1000;
    if (floor < 0) {
        height = 300 * floor+75;
    } else if (floor <= 43) {
        height = 200 * (floor - 1)+75;

    } else if (floor <= 44) {
        height = 8705 + 75;

    }
  return height;
}



/*
==============================楼层模型处理===============================================
*/

//加载楼层
ModelBussiness.prototype.showFloors = function (callBack) {
    var _this = this;
    var floorModels = this.getFloorModels();
    if (floorModels) {
        $.each(floorModels, function (_index, _obj) {
            if (_obj.oldPositionY || _obj.oldPositionY == 0) {
                _obj.position.y = _obj.oldPositionY;
            }
            _obj.visible = true;
        });
        
        if (callBack) {
            callBack();
        }
    } else {
        httpGet("../js/models/floors.json", function (rs) {
            WT3DObj.commonFunc.loadModelsByJsons(rs, { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0 }, true, function (models) {
                console.log(models);
                var floorModels = _this.getFloorModels();

                if (callBack) {
                    callBack();
                }
            });
        });
    }
}
ModelBussiness.prototype.hideFloors = function (callBack) {
    var floorModels = this.getFloorModels();
    if (floorModels) {
        $.each(floorModels, function (_index, _obj) {
            if (!_obj.oldPositionY) {
                if (_obj.oldPositionY!=0) {
                
                _obj.oldPositionY = _obj.position.y;
                }
            }
            _obj.position.y = 100000;
            _obj.visible = false;
        });

    }

    if (callBack) {
        callBack();
    }
}
ModelBussiness.prototype.FloorModels = null;
ModelBussiness.prototype.getFloorModels = function () {
    if (!this.FloorModels) {
        var floorModels = [];
        $.each(WT3DObj.scene.children, function (_index, _obj) {
            if (_obj.name.indexOf("F1_") >= 0
            || _obj.name.indexOf("F2_") >= 0
            || _obj.name.indexOf("F3_") >= 0
          ) {
                floorModels.push(_obj);
            }
        });
        if (floorModels.length > 0) {
            this.FloorModels = floorModels;
        }
    }
    return this.FloorModels;
}
/*
==============================大楼模型处理===============================================
*/
//获取大楼模型
ModelBussiness.prototype.BigBuildModelsCache = null;
ModelBussiness.prototype.getAllBuildModels = function () {
  if (this.BigBuildModelsCache) {
    } else {
        var f1models = [];
        var buildmodels = [];
        $.each(WT3DObj.scene.children, function (_index, _obj) {
            if (_obj.name != "backFloor"
            && _obj.name.indexOf("roadFlow") < 0
            && _obj.name.indexOf("Light") < 0
            && _obj.type.indexOf("Light") < 0
            && _obj.name.indexOf("roadCase") < 0
            && _obj.name.indexOf("F1_") < 0
            && _obj.name.indexOf("F2_") < 0
            && _obj.name.indexOf("F3_") < 0
            && _obj.name.indexOf("skybox") < 0
            && _obj.name.indexOf("vf_") < 0
            && _obj.name.indexOf("hb_") < 0) {
                buildmodels.push(_obj);
            }
        }); 
        this.BigBuildModelsCache = buildmodels;
    }
  return this.BigBuildModelsCache;
}
//虚化隐藏大楼
ModelBussiness.prototype.vAllModel = function (callBack) {
  modelBussiness.getAllBuildModels();
  
  WT3DModel.commonFunc.changeObjsOpacity(modelBussiness.BigBuildModelsCache, 1, 0.02, 1500, function () {
    $.each(modelBussiness.BigBuildModelsCache, function (_index, _obj) {
        if (!_obj.oldPositionY) {

            if (_obj.oldPositionY != 0) {

                _obj.oldPositionY = _obj.position.y;
            }
        }
        _obj.position.y = 100000;
        _obj.visible = false;
    });
    if (callBack) {
      callBack();
    }
  });
}
//显示大楼
ModelBussiness.prototype.showAllModel = function (callBack) {
  modelBussiness.getAllBuildModels();
  $.each(modelBussiness.BigBuildModelsCache, function (_index, _obj) {
      if (_obj.oldPositionY || _obj.oldPositionY==0) {
          _obj.position.y=  _obj.oldPositionY ;
      }
      _obj.visible = true;
  });
  WT3DModel.commonFunc.changeObjsOpacity(modelBussiness.BigBuildModelsCache, 0.05, 1, 800, function () {
    if (callBack) {
      callBack();
    }
  });
} 
//通道特效处理
ModelBussiness.prototype.UnrealBoom = function (a, b, c, d) {
    renderScene = new THREE.RenderPass(WT3DObj.scene, WT3DObj.camera);
    effectFXAA = new THREE.ShaderPass(THREE.FXAAShader);
    effectFXAA.uniforms['resolution'].value.set(1 / window.innerWidth, 1 / window.innerHeight);

    var copyShader = new THREE.ShaderPass(THREE.CopyShader);
    copyShader.renderToScreen = true;

    modelBussiness.bloomPass = new THREE.UnrealBloomPass(new THREE.Vector2(window.innerWidth, window.innerHeight), (1.5), (0.4), (0.85));//1.0, 9, 0.5, 512);
    modelBussiness.bloomPass.threshold = c ? c : 0.81;
    modelBussiness.bloomPass.strength = b ? b : 1.5;
    modelBussiness.bloomPass.radius = d ? d : 0.85;

    modelBussiness.composer = new THREE.EffectComposer(WT3DObj.renderer);
    modelBussiness.composer.setSize(window.innerWidth, window.innerHeight);
    modelBussiness.composer.addPass(renderScene);
    modelBussiness.composer.addPass(effectFXAA);
    modelBussiness.composer.addPass(modelBussiness.bloomPass);
    modelBussiness.composer.addPass(copyShader);
    modelBussiness.params = {
        projection: 'normal',
        background: false,
        exposure: (a ? a : 1.0),
        bloomStrength: (b ? b : 1.5),
        bloomThreshold: (c ? c : 0.85),
        bloomRadius: (d ? d : 0.4)
    };

    WT3DObj.renderer.toneMapping = THREE.ReinhardToneMapping;
    WT3DObj.renderer.gammaInput = true;
    WT3DObj.renderer.gammaOutput = true;
    WT3DObj.postProcessFuc = function () {
        WT3DObj.renderer.toneMappingExposure = Math.pow(modelBussiness.params.exposure, 4.0);
        modelBussiness.composer.render();
    }
    var xrange = { x: 1 }
    new TWEEN.Tween(xrange).to({
        x: 1.2
    }, 1500).onUpdate(function () {
        modelBussiness.params.exposure = this.x;
    }).onComplete(function () {
        new TWEEN.Tween(xrange).to({
            x: 1
        }, 2000).onUpdate(function () {
            modelBussiness.params.exposure = this.x;
        }).onComplete(function () {

        }).start();
    }).start();
}

/*
==============================通用方法===============================================
*/
ModelBussiness.prototype.commonFunc = {
    showVideo: function (_obj) {
        //获取位置
        var screenPostion = WT3DObj.commonFunc.transToScreenCoord(_obj.position);
        var cameraId = _obj.name.split("_")[3];
        var title = config.Videos[cameraId];
        $("#videoTitle").html(title + "(" + cameraId + ")");
        $("#MarkMessageHelper").remove();
        $("body").append("<div id='MarkMessageHelper' style='position:absolute;left:" + (screenPostion.x) + "px;top:" + screenPostion.y + "px;height:2px;width:2px;z-index:1000;'></div>");
        $("#videoDetail").show();
        $("#videoDetail").css("left", $("#MarkMessageHelper").css("left"));
        $("#videoDetail").css("top", (parseFloat($("#MarkMessageHelper").css("top")) - 300) + "px");

    },
    showNetDetail: function (_obj) {
        //获取位置
        var screenPostion = WT3DObj.commonFunc.transToScreenCoord(_obj.position);
        $("#MarkMessageHelper").remove();
        $("body").append("<div id='MarkMessageHelper' style='position:absolute;left:" + (screenPostion.x) + "px;top:" + screenPostion.y + "px;height:2px;width:2px;z-index:1000;'></div>");
        $("#netDetail").show();
        $("#netDetail").css("left", $("#MarkMessageHelper").css("left"));
        $("#netDetail").css("top", (parseFloat($("#MarkMessageHelper").css("top")) - 200) + "px");
        indexPage.showNetDevDetail(_obj.name);

    },
    showJJDetail: function (_obj) {
        //获取位置
        var screenPostion = WT3DObj.commonFunc.transToScreenCoord(_obj.position);
        $("#MarkMessageHelper").remove();
        $("body").append("<div id='MarkMessageHelper' style='position:absolute;left:" + (screenPostion.x) + "px;top:" + screenPostion.y + "px;height:2px;width:2px;z-index:1000;'></div>");
        $("#netDetail").show();
        $("#netDetail").css("left", $("#MarkMessageHelper").css("left"));
        $("#netDetail").css("top", (parseFloat($("#MarkMessageHelper").css("top")) - 200) + "px");
        indexPage.showNetDevDetail(_obj.name);

    },
    showDHDevDetail: function (_obj) {
        //获取位置
        var screenPostion = WT3DObj.commonFunc.transToScreenCoord(_obj.position);
        $("#MarkMessageHelper").remove();
        $("body").append("<div id='MarkMessageHelper' style='position:absolute;left:" + (screenPostion.x) + "px;top:" + screenPostion.y + "px;height:2px;width:2px;z-index:1000;'></div>");
        layer.closeAll();
        if (_obj.name.indexOf("dhF1_Rack") >= 0) {
            $("#rackDetail").show();
            $("#rackDetail").css("left", $("#MarkMessageHelper").css("left"));
            $("#rackDetail").css("top", (parseFloat($("#MarkMessageHelper").css("top")) - 170) + "px");

        } else if (_obj.name.indexOf("dhF1_UPS") >= 0) {
            $("#upsDetail").show();
            $("#upsDetail").css("left", $("#MarkMessageHelper").css("left"));
            $("#upsDetail").css("top", (parseFloat($("#MarkMessageHelper").css("top")) - 170) + "px");

        } else if (_obj.name.indexOf("dhF1_camera_") >= 0) {
            $("#dhVideoDetail").show();
            var cameraId = config.Videos.dhCameraId;
            var title = config.Videos.dhCameraTitle;
            $("#dhVideoDetail table td:first").html(title + '<i class="ace-icon fa fa-wifi" style="margin-left:5px;color:#1bff00;" />')
            $("#dhVideoDetail").css("left", $("#MarkMessageHelper").css("left"));
            $("#dhVideoDetail").css("top", (parseFloat($("#MarkMessageHelper").css("top")) - 170) + "px");
        } else if (_obj.name.indexOf("dhF1_AirConfig") >= 0) {
            $("#airConfig2Detail").show();
            $("#airConfig2Detail").css("left", $("#MarkMessageHelper").css("left"));
            $("#airConfig2Detail").css("top", (parseFloat($("#MarkMessageHelper").css("top")) - 170) + "px");
        }
    }
    , showDoorInfo: function (_obj) {
        //获取位置
        var screenPostion = WT3DObj.commonFunc.transToScreenCoord(_obj.position);
        $("#MarkMessageHelper").remove();
        $("body").append("<div id='MarkMessageHelper' style='position:absolute;left:" + (screenPostion.x) + "px;top:" + screenPostion.y + "px;height:2px;width:2px;z-index:1000;'></div>");
        $("#doorDetail").show();
        $("#doorDetail").css("left", $("#MarkMessageHelper").css("left"));
        $("#doorDetail").css("top", (parseFloat($("#MarkMessageHelper").css("top")) - 230) + "px");
        indexPage.showDoorDetail(_obj.name);
    } 
    }
}
var modelBussiness = new ModelBussiness();
View Code

3.3、交互逻辑代码

var indexPage = null;
$(function () {
    indexPage = new IndexPage();
    indexPage.init();
    window.parent.parent.indexPage = indexPage;
});
function IndexPage() {
  this.currentMebu = "首页";
  this.state = 0;//0正常状态 1 加载状态
  this.runAutoRoute = false;//运行自动漫游
  this.liftVideoCache = null;
};
function closeAutoRouteFunc() {
  indexPage.runAutoRoute = false;
  $(".btn_li").attr("class", "btn_li");
  layer.closeAll();
}
IndexPage.prototype.init = function () {
 


  $("#indexBtn").click(function () {
      $(".btn_li").attr("class", "btn_li");
      $("#indexBtn").attr("class", "btn_li action");
      indexPage.selectControl('index')

  });

  $("#sbfBtn").click(function () {
      $(".btn_li").attr("class", "btn_li");
      $("#sbfBtn").attr("class", "btn_li action");
      indexPage.selectControl('rooms')
  });
  $("#xzldbBtn").click(function () {
      $(".btn_li").attr("class", "btn_li");
      $("#xzldbBtn").attr("class", "btn_li action");
      indexPage.selectControl('xzldb')




      //if (window.parent && window.parent.parent && window.parent.parent.openAutoRoute) {
      //  window.parent.parent.openAutoRoute();
      //}
      //  indexPage.songpaifeng();
  });
  $("#xfmdylBtn").click(function () {
      $(".btn_li").attr("class", "btn_li");
      $("#xfmdylBtn").attr("class", "btn_li action");
      indexPage.selectControl('xfmdyl')
 
  });
  $("#room_exitBtn").click(function () {
      $("#chart_index").show();
      if (window.parent.iframeOpenHeaderFun) {
          window.parent.iframeOpenHeaderFun();
      }
      layer.closeAll();

  });
  $("#ltxtBtn").click(function () {
      $(".btn_li").attr("class", "btn_li");
      $("#ltxtBtn").attr("class", "btn_li action");
      indexPage.selectControl('ltxt')

  });

  $("#searchDoorEventBtn").click(function () {
    indexPage.searchDoorEventEvent();
  })
 
  $("#exitDoorEventBtn").click(function () {
      layer.closeAll();

  });
  $("#exitDevAlarmBtn").click(function () {
    layer.closeAll();
  });
  $("#searchDevAlarmBtn").click(function () {
    indexPage.showAlarmListByDev($("#selectEAlarmDevid").val(), $("#alarmStartTime").val(), $("#alarmEndTime").val());
  });

     
}
IndexPage.prototype.selectControl = function (menuType) {
    var _this = this;
  if (indexPage.state == 1) {
    layer.msg(indexPage.currentMebu+"系统加载中,请稍后操作");
    return;
  }
  indexPage.state = 1;
  setTimeout(function () {
    indexPage.state = 0;
  }, 1500);
  indexPage.currentMebuType = menuType;
  modelBussiness.addVitureDev(menuType);
  $(".contentRight").hide();
  $("#fourBtns").show();
  this.commonFunc.removeAllVideo();
  $("#floorsBtn").html("");
  switch (menuType) {
      case "index": {
          indexPage.currentMebu = "首页";
          indexPage.indexPage(menuType, "首页");
          if (window.parent.iframeOpenFun) {
              window.parent.iframeOpenFun();
          }
      } break;
      case "rooms": {
          if (window.parent.iframeCloseFun) {
              window.parent.iframeCloseFun();
          }
          indexPage.currentMebu = "设备房";



          var floorsbtn = ' <div class="floorNub action" id="floorBtn_0" onclick="indexPage.selectFloor(0,\'rooms\')">全楼层</div>';
          modelList.rooms.data = modelList.rooms.data.sort(function (a, b) { return parseInt(b.floor) - parseInt(a.floor) });
          var floornub = -100;
          $.each(modelList.rooms.data, function (_index, _obj) {
              if (floornub != _obj.floor) {
                  floorsbtn += ' <div class="floorNub" id="floorBtn_' + _obj.floor + '"  onclick="indexPage.selectFloor(' + _obj.floor + ',\'rooms\')">楼层' + _obj.floor + '</div>';
                  floornub = _obj.floor;
              }
          });
          setTimeout(function () {
              $("#floorsBtn").html(floorsbtn);
          }, 3000);


          _this.showRooms();

      } break;
      case "xzldb": {
          if (window.parent.iframeCloseFun) {
              window.parent.iframeCloseFun();
          }
          indexPage.currentMebu = "写字楼电表";
   
          var floorsbtn = ' <div class="floorNub action" id="floorBtn_0" onclick="indexPage.selectFloor(0,\'xzldb\')">全楼层</div>';
          modelList.xzldb.data = modelList.xzldb.data.sort(function (a, b) { return parseInt(b.floor) - parseInt(a.floor) });
          var floornub = -100;
          $.each(modelList.xzldb.data, function (_index,_obj) {
              if (floornub != _obj.floor) {
                  floorsbtn += ' <div class="floorNub" id="floorBtn_' + _obj.floor + '"  onclick="indexPage.selectFloor(' + _obj.floor + ',\'xzldb\')">楼层' + _obj.floor + '</div>';
                  floornub = _obj.floor;
              }
          });

          setTimeout(function () {
              $("#floorsBtn").html(floorsbtn);
          }, 3000);

          var roomnubs = modelList.xzldb.roomId.length;
          var result = [];
          $.each(modelList.xzldb.roomId, function (_i, _o) {
               
              webapi.getDevAndVluesList(_o, function (response) {
                  roomnubs--;
                  if (response && response.result && response.result.length >= 0) {
                      result = result.concat(response.result)
                  }
                  if (roomnubs == 0) {
                      _this.showListDetail(result);
                  };
          
              });
          })
      } break;
      case "xfmdyl": {
          if (window.parent.iframeCloseFun) {
              window.parent.iframeCloseFun();
          }
          indexPage.currentMebu = "消防压力";


          var floorsbtn = ' <div class="floorNub action" id="floorBtn_0" onclick="indexPage.selectFloor(0,\'xfmdyl\')">全楼层</div>';
          modelList.xfmdyl.data = modelList.xfmdyl.data.sort(function (a, b) { return parseInt(b.floor) - parseInt(a.floor) });
          var floornub = -100;
          $.each(modelList.xfmdyl.data, function (_index, _obj) {
              if (floornub != _obj.floor) {
                  floorsbtn += ' <div class="floorNub" id="floorBtn_' + _obj.floor + '"  onclick="indexPage.selectFloor(' + _obj.floor + ',\'xfmdyl\')">楼层' + _obj.floor + '</div>';
                  floornub = _obj.floor;
              }
          });

          setTimeout(function () {
              $("#floorsBtn").html(floorsbtn);
          }, 3000);

          webapi.getDevAndVluesList(modelList.xfmdyl.roomId, function (response) {
              if (response && response.result && response.result.length >= 0) {
                  _this.showListDetail(response.result);
                //  if (callBack) { callBack(response.result); }
              } else {
                  layer.msg("获取设备失败");
              }
          });
      } break;
      case "ltxt": {
          if (window.parent.iframeCloseFun) {
              window.parent.iframeCloseFun();
          }
          indexPage.currentMebu = "冷通系统";
          webapi.getDevAndVluesList(modelList.ltxt.roomId, function (response) {
              if (response && response.result && response.result.length >= 0) {
                  _this.showListDetail(response.result);
               //   if (callBack) { callBack(response.result); }
              } else {
                  layer.msg("获取设备失败");
              }
          });
      } break;

    case "door": {
      indexPage.currentMebu = "门禁";
      indexPage.doorPage(menuType,"门禁");
      $("#fourBtns").hide();
    } break;
    case "TV": {
      indexPage.currentMebu = "信息发布";
      indexPage.TVPage(menuType, "信息发布");
      $("#fourBtns").hide();
    } break;
    case "environment": {
      indexPage.currentMebu = "环境";
      indexPage.environmentPage(menuType, "环境");
      $("#fourBtns").hide();
    } break;
    case "aircontrol": {
      indexPage.currentMebu = "空调";
      indexPage.aircontrolPage(menuType, "空调");
      $("#fourBtns").hide();
    } break;
    case "radio": {
      indexPage.currentMebu = "广播";
      indexPage.radioPage(menuType, "广播");
      $("#fourBtns").hide();
    } break;
    case "video": {
      indexPage.currentMebu = "视频";
      indexPage.videooPage(menuType, "视频");
      $("#fourBtns").hide();
    } break;
    case "fire": {
      indexPage.currentMebu = "消防";
      indexPage.firePage(menuType, "消防");
      $("#fourBtns").hide();
    } break;
    case "lift": {
      indexPage.currentMebu = "电梯";
      indexPage.liftPage(menuType, "电梯");
      $("#fourBtns").hide();
    } break;
    case "pds": {
      console.log(window);
      window.location.href = "pdsCenter.html";
    } break;
    case "dataCenter": {
      window.location.href = "dataCenter.html";
    } break;
  
  }
}
IndexPage.prototype.selectFloor = function (floornub,type) {
    $(".floorNub").attr("class", "floorNub")
    $("#floorBtn_" + floornub).attr("class", "floorNub action");
    modelBussiness.showFloorDev(floornub, type);
}

//通用方法
IndexPage.prototype.webRtcServers = {};
IndexPage.prototype.commonFunc ={
  addVideo: function (divId, url, video) {
    if (indexPage.webRtcServers["video_" + divId]) {
      indexPage.webRtcServers["video_" + divId].disconnect();
    }
    indexPage.webRtcServers["video_" + divId] = null;
    var urlConfig = { video: video, audio: null };
    indexPage.webRtcServers["video_" + divId] = new WebRtcStreamer(divId, url);
    indexPage.webRtcServers["video_" + divId].connect(urlConfig.video, urlConfig.audio, "rtptransport=tcp&timeout=60");
   // window.onbeforeunload = function () { this.webRtcServer.disconnect() }
  },
  removeVideo: function (divId) {
    if (indexPage.webRtcServers["video_" + divId]) {
      indexPage.webRtcServers["video_" + divId].disconnect();
    }
    indexPage.webRtcServers["video_" + divId] = null;
  }
  ,
  removeAllVideo: function () {
    for (var webrtc in indexPage.webRtcServers) {
      if (indexPage.webRtcServers[webrtc]) {
        indexPage.webRtcServers[webrtc].disconnect();
      }
      indexPage.webRtcServers[webrtc] = null;
    }
  }
  ,
  createPIEChart: function (id, giftImageUrl, value) {
    if ($("#" + id).length > 0) {
    var myChart = echarts.init(document.getElementById(id));
     
    var option = {
      graphic: {
        elements: [{
          type: 'image',
          style: {
            image: giftImageUrl,
            width: 20,
            height: 20
          },
          left: 'center',
          top: 'center'
        }]
      },
      polar: {
        radius: ['65%', '78%'],
        center: ['50%', '50%'],
      },
      angleAxis: {
        max: 100,
        show: false,
      },
      radiusAxis: {
        type: 'category',
        show: true,
        axisLabel: {
          show: false,
        },
        axisLine: {
          show: false,
        },
        axisTick: {
          show: false,
        },
      },
      series: [{
        name: '',
        type: 'bar',
        roundCap: true,
        barWidth: 90,
        showBackground: true,
        backgroundStyle: {
          color: 'rgba(66, 66, 66, .0)',
        },
        data: [value],
        coordinateSystem: 'polar',

        itemStyle: {
          normal: {
            color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
              offset: 0,
              color: '#16CEB9',
            },
                {
                  offset: 1,
                  color: '#6648FF',
                },
            ]),
          },
        },
      },
          {
            name: '',
            type: 'pie',
            startAngle: 80,
            radius: ['90%'],
            hoverAnimation: false,
            center: ['50%', '50%'],
            itemStyle: {
              color: 'rgba(66, 66, 66, .1)',
              borderWidth: 1,
              borderColor: '#5269EE',
            },
            data: [100],
          },

      ],

    };
    myChart.setOption(option);
    }
  }
  ,
  createStaticByDevType: function (devType) { }
  }

//=============设备房==========================
IndexPage.prototype.showRooms = function () {
    $("#chart_index").show();
    var _this = this;
    var html = "";
    var allNub = modelList.rooms.data.length;
    var onlineNub = modelList.rooms.data.length;
    $.each(modelList.rooms.data, function (_index, _obj) {
        html += _this.showRoomDetail(_obj);
    });

    createCSystemRoomsStatic("index", allNub, onlineNub);
    $("#index_1").html(html);
    var roomNub = modelList.rooms.data.length;
    var Allonnub = 0;
    var Alloffnub = 0;
    $.each(modelList.rooms.data, function (_rindex, _robj) {
        webapi.getDevAndVluesList(_robj.id, function (response) {
            roomNub--;
            var roomContentDevHtml = "";
            if (response && response.result && response.result.length >= 0) {
                var ronnub = 0;
                var roffnub = 0;
                $.each(response.result, function (_devindex, _eobj) {
                   
                    if (_eobj) {
                        {
                            roomContentDevHtml += ' <div class="dev_DivMete">\
                      <div class="dev_DivMeteName" title=' + _eobj.objName + '>\
                        ' + _eobj.objName + ':\
                      </div>\
                      <div class="dev_DivMeteValue">' + (_eobj.objState == "ONLINE" ? "在线" : "<font style='color:red;'>离线</font>") + '\
                      </div>\
                    </div>';
                            _eobj.objState == "ONLINE" ? ronnub++ : roffnub++;
                        }
                    }
                });
                $("#room_" + _robj.id).html(roomContentDevHtml);
                $("#room_" + _robj.id + "_all").html(ronnub + roffnub);
                $("#room_" + _robj.id + "_on").html(ronnub);
                $("#room_" + _robj.id + "_off").html(roffnub);
                Allonnub += ronnub;
                Alloffnub+=roffnub;
                if (roomNub == 0) {
                    createCSystemStatic("index", (Allonnub + Alloffnub), Allonnub);

                }
            } else {
                console.log("error:获取设备失败,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
        }
    });
    });
 
}

IndexPage.prototype.showRoomDetail = function (_obj) {
    var html = "";
    if (_obj ) {

        html = ' <div class="fireLi_Div" style="height:auto;">\
            <div class="fireLi_DivTop">\
              <font class="fireLi_DivTopName" title="' + _obj.name + '">' + _obj.name + '</font>\
              <font class="fireLi_DivTopState">总数:<font style="color:#ff9900;font-size:14px;"  id="room_' + _obj.id + '_all" >3</font>;在线:<font style="color:#ff9900;font-size:14px;"  id="room_' + _obj.id + '_on" >3</font>;离线:<font style="color:#ff9900;font-size:14px;"  id="room_' + _obj.id + '_off" >3</font></font>\
            </div>\
            <div class="fireLi_DivContent" id="room_' + _obj.id + '"> </div>\
            </div>';
    }
    return html;
}
//=============其它设备==========================

IndexPage.prototype.showListDetail = function (result) {
    $("#chart_index").show();
    var _this = this;
    var html = "";
    var allNub = 0;
    var onlineNub = 0;
    $.each(result, function (_index, _obj) {
        html += _this.showDetail(_obj);
        allNub++;
        if (_obj.objState == "ONLINE") {
        
            onlineNub++;
        }
    });
    createCSystemStatic("index", allNub, onlineNub);
    $("#index_1").html(html);
}
IndexPage.prototype.showDetail = function (_obj) {
    var html = "";
  
        html = ' <div class="fireLi_Div' + (_obj.objState == "ONLINE" ? "" : " offline") + '" style="height:auto;">\
            <div class="fireLi_DivTop">\
              <font class="fireLi_DivTopName" title="' + _obj.objName + '">' + _obj.objName + '</font>\
              <font class="fireLi_DivTopState">' + (_obj.objState == "ONLINE" ? "在线" : "<font style='color:red'>离线</font>") + '</font>\
            </div>\
            <div class="fireLi_DivContent">';
        if (_obj && _obj.values && _obj.values.length > 0) {

            $.each(_obj.values, function (_eindex, _eobj) {
                {
                    if (_eobj.key) {
                    
                    
                    _eobj.sValue2 = _eobj.sValue;
                    if (_eobj.sValue == "END") {
                        _eobj.sValue2 = "无告警"
                    } else if (_eobj.sValue == "BEGIN") {
                        _eobj.sValue2 = "<font style='color:red;'>告警</font>"
                    }

                    html += '        <div class="dev_DivMete">\
                      <div class="dev_DivMeteName"  title=' + _eobj.meteName + '>\
                        ' + _eobj.meteName + ':\
                      </div>\
                      <div class="dev_DivMeteValue"  data-unit="' + _eobj.unit + '" data-keyname="' + _eobj.meteName + '" id="devParamValue_' + _eobj.meteId + '">' + _eobj.sValue2+(_eobj.unit ? _eobj.unit : "") + '\
                      </div>\
                    </div>';
                    }
                }
            });
        }
        html += ' </div>\
            </div>';
    
    return html;
}
//===================================
IndexPage.prototype.XZLDBPage = function (id, name) {
    var _this = this;
    $("#chart_" + id).show();
    createCSystemStatic(id, name, config.XZLDB.deviceTypeId, false, function (result) {
        _this.showXZLDBListDetail(result);
    });
}

IndexPage.prototype.showXZLDBListDetail = function (result) {
    var _this = this;
    var html = "";
    var meteids = [];
    result = result.sort(function (a, b) { return b.onlineState - a.onlineState });
    $.each(result, function (_index, _obj) {
        var hobj = _this.showXZLDBDetail(_obj);
        html += hobj.html;
        meteids = meteids.concat(hobj.meteids);
    });
    $("#XZLDB_2").html(html);
    setTimeout(function () {
        _this.flashXZLDBDetailValue(meteids);
    }, 200);
    if (_this.flashXZLDBDetailValueInterval) {
        clearInterval(_this.flashXZLDBDetailValueInterval);
    }
    _this.flashXZLDBDetailValueInterval = setInterval(function () {
        if (_this.currentMebuType == "XZLDB" && meteids.length > 0) {
            _this.flashXZLDBDetailValue(meteids);
        } else {
            clearInterval(_this.flashXZLDBDetailValueInterval);
        }
    }, 5000);
}
IndexPage.prototype.flashXZLDBDetailValueInterval = null;
IndexPage.prototype.flashXZLDBDetailValue = function (meteids) {
    var _this = this;
    webapi.bulkGetRealTimeData(meteids, function (data) {
        if (data && data.length > 0) {
            $.each(data, function (_dindex, _dobj) {
                var keyname = $("#devParamValue_" + _dobj.pointId).attr("data-keyname");
                if (keyname) {
                    if (keyname.indexOf("温度") >= 0) {
                        _dobj.value += "℃";
                    } else if (keyname.indexOf("湿度") >= 0) {
                        _dobj.value += "%";
                    }
                }
                console.log("#devParamValue_" + _dobj.pointId)
                console.log(_dobj.value)
                $("#devParamValue_" + _dobj.pointId).html(_dobj.value);
            });
        }
    });

}
IndexPage.prototype.showXZLDBDetail = function (_obj) {
    var html = ' <div class="fireLi_Div' + (_obj.onlineState == 1 ? "" : " offline") + '" style="height:auto;">\
            <div class="fireLi_DivTop">\
              <font class="fireLi_DivTopName" title="' + _obj.name + '">' + _obj.name + '</font>\
              <font class="fireLi_DivTopState">' + (_obj.onlineState == 1 ? "在线" : "离线") + '</font>\
            </div>\
            <div class="fireLi_DivContent">';
    var meteids = [];
    if (_obj && _obj.extra && _obj.extra.length > 0) {

        $.each(_obj.extra, function (_eindex, _eobj) {
            if (_eobj.key.indexOf("控制") < 0) {
                html += '        <div class="fireLi_DivMete">\
                      <div class="fireLi_DivMeteName" >\
                        ' + _eobj.key + ':\
                      </div>\
                      <div class="fireLi_DivMeteValue" data-keyname="' + _eobj.key + '" id="devParamValue_' + _eobj.value + '">\
                       <img src="../plugs/layer/layui/css/modules/layer/default/loading-1.gif" style="width:16px;height:16px;" />\
                      </div>\
                    </div>';
                meteids.push(_eobj.value);
            }
        });
    }
    html += ' </div>\
            <div class="fireLi_DivBottom">\
              <div class="fireLi_divBtn1">\
                <font style="float:left;margin-left: 27px;">位置:</font>\
               <font style="float:left;">' + _obj.shortAddress + '</font>\
              </div>\
              <div class="fireLi_divBtn2"  onclick="indexPage.showEDevAlarmListByDev(\'' + _obj.serialNumber + '\')">\
                查看报警记录\
              </div>\
            </div>\
            </div>';
    return {
        html: html,
        meteids: meteids
    };
} 
 
//==============主页===========================

IndexPage.prototype.indexPage = function (id, name) {
} 
 
//自动漫游
IndexPage.prototype.showAutoRunRouteTimeIndex = null;
 
//机房
IndexPage.prototype.showDataCenter = function (filter) {
  layer.open({
    type: 1,
    shade: 0.8,
    skin: 'myLayer',
    title: false,
    area: ["1050px", "750px"],
    content: $('#dataCeneterDiv'),
    cancel: function () {
      indexPage.runAutoRoute = false;
      if (indexPage.showAutoRunRouteTimeIndex) {
        clearTimeout(indexPage.showAutoRunRouteTimeIndex);
      }
      if (window.parent && window.parent.parent && window.parent.parent.closeAutoRoute) {
        window.parent.parent.closeAutoRoute();
      }
      $(".btn_li").attr("class", "btn_li");
      $("#iframe_dataCenterContent").html('')
    },
    success: function () {

      $("#iframe_dataCenterContent").html('<iframe src="dataCenter.html' + (filter?"?filter="+filter:"") + '" style="width:100%;border:0px solid black;height:600px;" id="iframe_bpd"></iframe>')
    }
  });

}
//变电站
IndexPage.prototype.showBianDianZhan = function () {
  layer.closeAll();
  setTimeout(function () { 
  layer.open({
    type: 1,
    shade: 0.8,
    skin: 'myLayer',
    title: false,
    area: ["1050px", "750px"],
    content: $('#peidianshi'),
    cancel: function () {
      indexPage.runAutoRoute = false;
      if (indexPage.showAutoRunRouteTimeIndex) {
        clearTimeout(indexPage.showAutoRunRouteTimeIndex);
      }
      if (window.parent && window.parent.parent && window.parent.parent.closeAutoRoute) {
        window.parent.parent.closeAutoRoute();
      }
        $(".btn_li").attr("class", "btn_li");
        $("#iframe_bpdContent").html('')
    },
    success: function () {
       
        $("#iframe_bpdContent").html('<iframe src="pdsCenter.html" style="width:100%;border:0px solid black;height:600px;" id="iframe_bpd"></iframe>')
    }
  });
  }, 200)
}
//显示首页视频
IndexPage.prototype.showIndexVideo = function () {
  var url = { video: location.search.slice(1) };
  var options = webrtcConfig.options;
  if (typeof URLSearchParams != 'undefined') {
    var params = new URLSearchParams(location.search);
    if (params.has("video") || params.has("audio")) {
      url = { video: params.get("video"), audio: params.get("audio") };
    }
    if (params.has("options")) {
      options = params.get("options");
    }
  }
  window.onload = function () {
    this.webRtcServer = new WebRtcStreamer("video", webrtcConfig.url);
    document.getElementById("title").innerHTML = url.video;
    webRtcServer.connect(url.video, url.audio, options);
    fetch(webrtcConfig.url + "/api/version").then(r => r.text()).then((response) => {
      document.getElementById("footer").innerHTML = "<p><a href='https://github.com/mpromonet/webrtc-streamer'>WebRTC-Streamer</a> " + JSON.parse(response).split(" ")[0] + "</p>";
    });
  }
  window.onbeforeunload = function () { this.webRtcServer.disconnect() }

}
//==============给排水===========================
IndexPage.prototype.showJiPaiShui = function () {
  layer.closeAll();

  $(".btn_li").attr("class", "btn_li");
  $("#jipaishuiBtn").attr("class", "btn_li action");
  setTimeout(function () { 
  layer.open({
    type: 1,
    shade: 0.8,
    skin: 'myLayer',
    title: false,
    area: ["985px", "750px"],
    content: $('#jpaishui'),
    cancel: function () {
      indexPage.runAutoRoute = false;
      if (indexPage.showAutoRunRouteTimeIndex) {
        clearTimeout(indexPage.showAutoRunRouteTimeIndex);
      }
      if (window.parent && window.parent.parent && window.parent.parent.closeAutoRoute) {
        window.parent.parent.closeAutoRoute();
      }
        $(".btn_li").attr("class", "btn_li");
    },
    success: function () {
      webapi.getDeviceList(config.water.deviceTypeId, function (result) {
        console.log(result);
        var _html = "";
        var meteids = [];
        if (result && result.length > 0) {
          result = result.sort(function (a, b) { return a.type - b.type });
          var typenub = 0;
          $.each(result, function (_index, _obj) {
            if (_obj.type != typenub) {
              typenub = _obj.type;
              _html += "<div style='width:100%;padding-left:20px;padding-right:23px;'><div style='width:100%;line-height: 200%;color: white; padding-left: 10px;border: 1px solid rgba(255,255,255,0.11);background: rgba(1,44,110,0.38);'>" + (_obj.type == 1 ? " 发电机房" : (_obj.type == 2 ? "消防泵房" : "消防稳压泵")) + "</div></div>";
            }
            _html += '<div class="' + (_obj.onlineState == 1 ? "" : "offline") + '" style="float:left;margin:10px;padding:5px;background:rgba(190, 225, 255, 0.05);width:280px;height:270px;margin:20px;">\
          <div style="height:33px;border-bottom:2px solid rgba(255,255,255,0.3);width:100%;line-height:33px !important;">\
            <font style="float:left;color:white;margin-left:5px;font-size:12px;">' + _obj.name + '</font>\
            <font id="meteValueRun_' + _obj.extra[0].value + '" style="display:none;float:right;color:white;margin-right:5px;font-size:12px;color:#32C5FF">-</font>\
          </div>\
          <div style="height:120px;padding-top:10px;">\
            ' + (_obj.name.indexOf("泵") >= 0 && _obj.name.indexOf("井") < 0 ? '<div><img src="../img/pics/icons/shuibeng.png" style="width:86px;height:100px;margin-left:94px;" /></div>' : '<img src="../img/pics/icons/water2.png" style="width:150px;height:100px;margin-left:62px;" />') + '\
<div data-runid="meteValueRunState_' + _obj.extra[0].value + "_" + _obj.extra[1].value + '_" class="' + (_obj.name.indexOf("泵") >= 0 && _obj.name.indexOf("井") < 0 ? 'shuibeng' : 'jipaishui') + '"></div>\
          </div>';

            if (_obj.extra && _obj.extra.length>0) {
              $.each(_obj.extra, function (_eindex, _eobj) {
                _html += '<div style="height:33px;width:' + (_obj.extra.length > 2 ? "50%" : "100%") + ';line-height:33px !important;">\
                  <font style="float:left;color:white;margin-left:5px;font-size:12px;">' + _eobj.key + ':<font id="meteValue_' + _eobj.value + '" data-keyname="' + _eobj.key + '"></font></font>\
                </div>';
                meteids.push(_eobj.value);
              })
            }
          //  _html += '<div style="height:33px;width:100%;line-height:33px !important;">\
          //  <font style="float:left;color:white;margin-left:5px;font-size:12px;">高液位:<font id="meteValue_' + _obj.extra[0].value + '"></font></font>\
          //</div>\
          //<div style="height:33px;width:100%;line-height:33px !important;">\
          //  <font style="float:left;color:white;margin-left:5px;font-size:12px;">底液位:<font id="meteValue_' + _obj.extra[1].value + '"></font></font>\
          //</div>';
            _html += '<div class="divBtn" style="margin-left:90px;" onclick="indexPage.showEDevAlarmListByDev(\'' + _obj.serialNumber + '\')">\
            查看告警记录\
          </div>\
        </div>';
        
          //  meteids.push(_obj.extra[1].value);
          });

        } 
        $("#waterCotent").html(_html);
        //获取量的值
        webapi.bulkGetRealTimeData(meteids, function (data) {
          if (data && data.length > 0) {
            $.each(data, function (_dindex, _dobj) {
              if ($("#meteValue_" + _dobj.pointId).attr("data-keyname").indexOf("手自动") >= 0) {
                $("#meteValue_" + _dobj.pointId).html(_dobj.value == "1" ? "自动" : "手动");
              } else if ($("#meteValue_" + _dobj.pointId).attr("data-keyname").indexOf("运行状态") >= 0) {
                $("#meteValue_" + _dobj.pointId).html(_dobj.value == "1" ? "运行" : "停止");
                if (_dobj.value == "1") {
                  var dclass = $("div[data-runid*='_" + _dobj.pointId + "_']").attr("class");
                  $("div[data-runid*='_" + _dobj.pointId + "_']").attr("class", dclass + " RunSW");
                }
              } else if ($("#meteValue_" + _dobj.pointId).attr("data-keyname").indexOf("高液位") >= 0) {
                $("#meteValue_" + _dobj.pointId).html(_dobj.value == "0" ? "正常" : "<font style='color:red;'>报警</font>");
                if (_dobj.value!="0") {

                  $("div[data-runid*='_" + _dobj.pointId + "_']").attr("class", "jipaishuiGW");
                }
              } else if ($("#meteValue_" + _dobj.pointId).attr("data-keyname").indexOf("低液位") >= 0) {
                $("#meteValue_" + _dobj.pointId).html(_dobj.value == "0" ? "正常" : "<font style='color:red;'>报警</font>");
                if (_dobj.value != "0") {
                  $("div[data-runid*='_" + _dobj.pointId + "_']").attr("class", "jipaishuiDSW");
                }
              } else {
              $("#meteValue_" + _dobj.pointId).html(_dobj.value == "1" ? "<font style='color:red;'>报警</font>" : "正常");
              }
              $("#meteValueRun_" + _dobj.pointId).html(_dobj.value == "1" ? "运行" : "停止");
            })

          }
        })
      }, true);
    }
  });
  }, 200);
}
//==============送排风===========================
IndexPage.prototype.songpaifeng = function () {
  layer.closeAll();
  $(".btn_li").attr("class", "btn_li");
  $("#songpaifengBtn").attr("class", "btn_li action");
  setTimeout(function () { 
    layer.open({
    type: 1,
    shade: 0.8,

    skin: 'myLayer',
    title: false,
    area: ["975px", "750px"],
    content: $('#songfeng'),
    cancel: function () {
      indexPage.runAutoRoute = false;
      if (indexPage.showAutoRunRouteTimeIndex) {
        clearTimeout(indexPage.showAutoRunRouteTimeIndex);
      }
      if (window.parent && window.parent.parent && window.parent.parent.closeAutoRoute) {
        window.parent.parent.closeAutoRoute();
      }
        $(".btn_li").attr("class", "btn_li");
    },
    success: function () {
      webapi.getDeviceList(config.wind.deviceTypeId, function (result) {
        console.log(result);
        var _html = "";
        var meteids = [];
        if (result && result.length > 0) {
          $.each(result, function (_index,_obj) {
            _html += '<div class="' + (_obj.onlineState == 1 ? "" : "offline") + '" style="float:left;margin:10px;padding:5px;background:rgba(190, 225, 255, 0.05);width:280px;height:270px;margin:20px;">\
          <div style="height:33px;border-bottom:2px solid rgba(255,255,255,0.3);width:100%;line-height:33px !important;">\
            <font style="float:left;color:white;margin-left:5px;font-size:12px;">' + _obj.name+ '</font>\
            <font id="meteValueRun_' + _obj.extra[0].value + '" style="display:none;float:right;color:white;margin-right:5px;font-size:12px;color:#32C5FF"></font>\
          </div>\
          <div style="height:120px;padding-top:10px;">\
            <img src="../img/pics/icons/songpaifeng2.png" style="width:150px;height:100px;margin-left:65px;" />\
  <div id="meteValueRunState_' + _obj.extra[0].value + '" class="songPaiFengFS"></div>\
          </div>\
        <div style="height:33px;width:50%;line-height:33px !important;">\
            <font style="float:left;color:white;margin-left:5px;font-size:12px;">' + _obj.extra[0].key + ':<font id="meteValue_' + _obj.extra[0].value + '" data-keyname="' + _obj.extra[0].key + '"></font></font>\
          </div>\
        <div style="height:33px;width:50%;line-height:33px !important;">\
            <font style="float:left;color:white;margin-left:5px;font-size:12px;">故障报警:<font id="meteValue_' + _obj.extra[1].value + '" data-keyname="' + _obj.extra[1].key + '"></font></font>\
          </div>\
          <div style="height:33px;width:100%;line-height:33px !important;">\
            <font style="float:left;color:white;margin-left:5px;font-size:12px;">位置:' + _obj.shortAddress + '</font>\
          </div>\
          <div class="divBtn" style="margin-left:90px;" onclick="indexPage.showEDevAlarmListByDev(\'' + _obj.serialNumber + '\')">\
            查看告警记录\
          </div>\
        </div>';

            meteids.push(_obj.extra[0].value);
            meteids.push(_obj.extra[1].value);
          });

        }
        $("#songfengContent").html(_html);

        //获取量的值
        webapi.bulkGetRealTimeData(meteids, function (data) {
          if (data && data.length > 0) {
            $.each(data, function (_dindex, _dobj) {
              if ($("#meteValue_" + _dobj.pointId).attr("data-keyname").indexOf("手自动") >= 0) {
                $("#meteValue_" + _dobj.pointId).html(_dobj.value == "1" ? "自动" : "手动");
              } else if ($("#meteValue_" + _dobj.pointId).attr("data-keyname").indexOf("运行状态") >= 0) {
                $("#meteValue_" + _dobj.pointId).html(_dobj.value == "1" ? "运行" : "停止");
                if (_dobj.value == "1") {
                  $("#meteValueRunState_" + _dobj.pointId).attr("class", "songPaiFengFS Run");
                } else {
                  $("#meteValueRunState_" + _dobj.pointId).attr("class", "songPaiFengFS");
                }
                
              } else {
                $("#meteValue_" + _dobj.pointId).html(_dobj.value == "1" ? "<font style='color:red;'>报警</font>" : "正常");
              }
              $("#meteValueRun_" + _dobj.pointId).html(_dobj.value == "1" ? "运行" : "停止");
            })

          }
        })
      }, true);
    }

  });
  }, 200);
}

//================告警列表========================
IndexPage.prototype.showAlarmsList = function () {
  var _this = this;
  layer.open({
    type: 1,
    shade: 0.8,
    skin: 'myLayer',
    title: false,
    area: ["700px", "650px"],
    content: $('#alarmsList'),
    cancel: function () {
      indexPage.runAutoRoute = false;
      if (indexPage.showAutoRunRouteTimeIndex) {
        clearTimeout(indexPage.showAutoRunRouteTimeIndex);
      }
      if (window.parent && window.parent.parent && window.parent.parent.closeAutoRoute) {
        window.parent.parent.closeAutoRoute();
      }
      $("#AlarmListResult").html("");
    },
    success: function () {
      _this.flashAlarmList(layer.load());
    }
  });
}
IndexPage.prototype.flashAlarmList = function (layerloadindex) {
  webapi.getAlarmDataList(function (records) {
    if (layerloadindex) {
    layer.close(layerloadindex);
    }
    if (records && records.length > 0) {
      console.log(records);
      var _html = '';
      var nub = 0;
      $.each(records, function (_index, _obj) {
        if (_obj.device) {//存在设备信息
          nub++;
          _html += '<div class="alarmLi_Div" id="alarmDetal_' + _obj.id + '">\
                    <table >\
                      <tr>\
                        <td>设备类型:</td>\
                        <td class="alarmParamValue">' + getDeviceTypeById(_obj.device.deviceTypeId) + '</td>\
                        <td>设备名称:</td>\
                        <td class="alarmParamValue">' + _obj.device.name + '</td>\
                        <td>报警时间:</td>\
                        <td class="alarmParamValue">' + _obj.time + '</td>\
                      </tr>\
                      <tr>\
                        <td>报警原因:</td>\
                        <td colspan="3" title="' + _obj.message + '" style="overflow:hidden;line-height: 18px;">' + _obj.message + '</td>\
                        <td  colspan="2" style="width:180px;"> <div onclick="indexPage.showAlarmPosition(\'' + _obj.device.deviceTypeId + '\',\'' + _obj.device.id + '\',\'' + _obj.device.name + '\',\'' + _obj.device.serialNumber + '\')" class="alarmListBtn">巡游报警位置</div><div onclick="indexPage.cancelAlarm(\'' + _obj.id + '\')" class="alarmListBtn">解除报警</div></td>\
                      </tr>\
                    </table>\
                </div>';

        }
      });

      $("#alarmListNub").html(nub);
      $("#AlarmListResult").html(_html);
    }
  });
}
IndexPage.prototype.showAlarmPosition = function (deviceTypeid, id, name, serialNumber) {
  layer.closeAll();
  switch (""+deviceTypeid) {
    case config.water.deviceTypeId:
      indexPage.showJiPaiShui()
      break;
    case config.dataCenter.deviceTypeId:
      indexPage.showDataCenter(serialNumber);

      break;
    case config.powerCenter.deviceTypeId:
      indexPage.showBianDianZhan();

      break;
    case config.wind.deviceTypeId:
      indexPage.songpaifeng()
      break;
    case config.energy.deviceTypeId:
      break;
    case config.lift.deviceTypeId:
      indexPage.selectControl('lift')
      break;
    case config.environment.deviceTypeId:
      indexPage.selectControl('environment');

      break;
    case config.aircontrol.deviceTypeId:
      indexPage.selectControl('aircontrol')
      break;
    case config.fire.deviceTypeId:
      indexPage.selectControl('fire')
      break;
    case config.video.deviceTypeId:
      indexPage.selectControl('video');
      break;
    case config.radio.deviceTypeId:
      indexPage.selectControl('radio')
      break;
    case config.door.deviceTypeId:
      indexPage.selectControl('door')
      break;
    case config.TV.deviceTypeId:
      indexPage.selectControl('TV')
      break; 
  }

  setTimeout(function () {
    var tvmodel = WT3DObj.commonFunc.findObject("devLogo_" + indexPage.currentMebuType + "_" + id + "_" + name)
    if (tvmodel) {
      WT3DObj.commonFunc.changeCameraPosition({ x: tvmodel.position.x + 500, y: tvmodel.position.y + 500, z: tvmodel.position.z + 500 }, tvmodel.position,
       500, function () {

        WT3DObj.commonFunc.flashObjs([tvmodel], "0x000000", "0x00ffff", 10, 200, 0);

      });
    }
  }, 2000);
}
IndexPage.prototype.cancelAlarm = function (id) {
  layer.confirm("是否确认解除该报警?", function () {
    var layerloadindex=layer.load();
    webapi.deviceAlarmRelieve(id, function (res) {
      layer.close(layerloadindex);
      if (res.status == 200) {
        layer.msg("解除成功");
        $("#alarmDetal_" + id).remove();
        _this.flashAlarmList();
      } else {
        layer.msg("解除失败");
        console.log(res);
      }
    })
  }, function () {

  })
}
//=============门禁=============================
IndexPage.prototype.doorPage = function (id, name) {
  var _this = this;
  $("#chart_" + id).show();
  createCSystemStatic(id, name, config.door.deviceTypeId, false, function (result) {
    _this.showDoorListDetail(result);
  });
}

IndexPage.prototype.showDoorListDetail = function (result) {
  var _this = this;
  var html = "";
  result = result.sort(function (a, b) { return b.onlineState - a.onlineState });
  $.each(result, function (_index, _obj) {
    html += _this.showDoorDetail(_obj);
  });
  $("#door_2").html(html);
  _this.getDoorState();
}
IndexPage.prototype.showDoorDetail = function (_obj,td) {
  var html = '<div class="doorLi_Div' + (_obj.onlineState+"" == "1" ? "" : " offline") + '""  id="doorDetailDiv_' + (td ? td + "_" : "") + _obj.serialNumber + '">\
            <div class="doorLi_DivTop">\
              <font class="doorLi_DivTopName" title="' + _obj.name + '">' + _obj.name + '</font>\
              <font class="doorLi_DivTopState" id="doorOnlineState_' + (td ? td + "_" : "") + _obj.serialNumber + '">' + (_obj.onlineState + "" == "1" ? "在线" : "离线") + '</font>\
            </div>\
            <div class="doorLi_DivBottom">\
              <img class="doorLi_DivBottomImg" src="../img/pics/icons/doorPic.png" />\
              <div class="doorLi_divBtn1">\
                <font style="float:left;">门禁开关:</font>\
                <div style="cursor:pointer;" class="doorLi_openClose" id="doorCloseOpenBtn_' + (td ? td + "_" : "") + _obj.serialNumber + '" data-id="' + ( _obj.serialNumber) + '" data-senserSate="' + (_obj.relay ? _obj.relay : "") + '" onclick="indexPage.doorCloseOpenBtn(\'' + ("doorCloseOpenBtn_" + (td ? td + "_" : "") + _obj.serialNumber) + '\')">开</div>\
              </div>\
              <div class="doorLi_divBtn2" id="doorShowEventListBtn_' + (td ? td + "_" : "") + _obj.serialNumber + '" onclick="indexPage.showDoorEvent(\'' + (_obj.ssid ? _obj.ssid : "") + '\')">\
                查看门禁记录\
              </div>\
            </div>\
          </div>';
  return html;

}
IndexPage.prototype.doorCloseOpenBtn = function (devControlBtnId) {
  var className = $("#" + devControlBtnId).attr("class");
  var devid = $("#" + devControlBtnId).attr("data-id");// devControlBtnId.split("_")[devControlBtnId.split("_").length-1];
  var sSate = $("#" + devControlBtnId).attr("data-senserSate");
  if (sSate == "2") {

    layer.tips("状态未知", "#" + devControlBtnId);
    return;
  }

  if (className.indexOf("closeBtn") < 0){
    layer.confirm("是否确认关门",{title:"远程关门"}, function () {
      webapi.remoteDoorCloseById(devid, function (res) {
        if (res.status == 200) {
          layer.closeAll();
          layer.msg("远程关门成功");
          $("#" + devControlBtnId).attr("class", "doorLi_openClose closeBtn");
        } else {
          console.log(res);
          layer.msg("远程关门异常:" + res.msg);
        }
      })
    }, function () {  })
  } else {
    layer.confirm("开门时长:<input style='width:120px;color:black;' id='timeLong' value='10'/>秒", { title: "远程开门" }, function () {
     var loadindex= layer.load();
      var timelong = parseInt($("#timeLong").val());
      webapi.remoteDoorOpenById(devid, timelong, function (res) {
        layer.close(loadindex);
        if (res&&res.status &&res.status == 200) {
          layer.closeAll();
          layer.msg("远程开门成功");
          $("#" + devControlBtnId).attr("class", "doorLi_openClose");
        } else {
          console.log(res);
          layer.msg("远程开门失败:"+res.msg);
        }
      })
    }, function () { })


  }
}
IndexPage.prototype.getDoorState = function (fromCache) {
  webapi.getAllDoorState(function (dataList) {
    /*
    alarm: "0"
connect: "1"
deviceId: "40288a857a514c53017a516404210970"
id: "40288a857a514c53017a5164042b09c9"
name: "192.168.10.219-1"
relay: "0"
sensor: "0"
    */
    var doorStateobj = {}
    if (dataList && dataList.length > 0) {
      $.each(dataList, function (_index, _obj) {
        
        doorStateobj["door_" + _obj.id] = _obj;
      });
    }
    var doorClist = webapi.DeviceListCache["deviceType_" + config.door.deviceTypeId]
    if (doorClist) {
      $.each(doorClist, function (_index, _obj) {
        if (doorStateobj["door_" + _obj.serialNumber]) {
          var doorState = doorStateobj["door_" + _obj.serialNumber];
          _obj.name = doorState.name;
          _obj.onlineState = doorState.connect;//设备链接状态(0离线,1在线,2禁用)
          _obj.doorId = doorState.id;
          _obj.doorSensorState = doorState.sensor;//门磁状态(0未知,1无门磁,2关闭,3打开)
          _obj.alarm = doorState.alarm;//报警状态(无,报警,门开超时,门被意外打开,防拆,胁迫密码 开门,胁迫指纹开门,胁迫开门,门开超时,常开报警,电池电压过低,立即更 换电池,非法操作,后备电源,未知)
          _obj.relay = doorState.relay;//继电器状态(0关闭,1打开,2未知)
          if (_obj.relay + "" == "0") {
            $("#doorCloseOpenBtn_" + _obj.serialNumber).attr("class", "doorLi_openClose closeBtn")
            $("#doorCloseOpenBtn_3d_" + _obj.serialNumber).attr("class", "doorLi_openClose closeBtn")

            $("#doorCloseOpenBtn_" + _obj.serialNumber).html("关")
            $("#doorCloseOpenBtn_3d_" + _obj.serialNumber).html("关")
          } else if (_obj.relay + "" == "2") {//未知
            $("#doorCloseOpenBtn_" + _obj.serialNumber).attr("class", "doorLi_openClose nouse")
            $("#doorCloseOpenBtn_3d_" + _obj.serialNumber).attr("class", "doorLi_openClose nouse");

            $("#doorCloseOpenBtn_" + _obj.serialNumber).html("未知")
            $("#doorCloseOpenBtn_3d_" + _obj.serialNumber).html("未知")
            
          }
          
          else if (_obj.relay + "" == "1") {//打开
            $("#doorCloseOpenBtn_" + _obj.serialNumber).attr("class", "doorLi_openClose")
            $("#doorCloseOpenBtn_3d_" + _obj.serialNumber).attr("class", "doorLi_openClose");

            $("#doorCloseOpenBtn_" + _obj.serialNumber).html("开")
            $("#doorCloseOpenBtn_3d_" + _obj.serialNumber).html("开")
          }
           
          $("#doorCloseOpenBtn_" + _obj.serialNumber).attr("data-senserSate", _obj.relay);
          $("#doorCloseOpenBtn_3d_" + _obj.serialNumber).attr("data-senserSate", _obj.relay);
           
          $("#doorCloseOpenBtn_" + _obj.serialNumber).attr("data-id", _obj.doorId)
          $("#doorCloseOpenBtn_3d_" + _obj.serialNumber).attr("data-id", _obj.doorId)
           
          $("#doorDetailDiv_" + _obj.serialNumber + " .doorLi_DivTopName").attr("title",_obj.name);
          $("#doorDetailDiv_" + _obj.serialNumber + " .doorLi_DivTopName").html(_obj.name);
          if (_obj.onlineState + "" == "1") {
            $("#doorDetailDiv_" + _obj.serialNumber + " .doorLi_DivTopState").html("在线")
            $("#doorDetailDiv_3d_" + _obj.serialNumber).attr("class", "doorLi_Div")
            $("#doorDetailDiv_" + _obj.serialNumber).attr("class", "doorLi_Div")
          } else {
            if (_obj.onlineState + "" == "0") {
              $("#doorDetailDiv_" + _obj.serialNumber + " .doorLi_DivTopState").html("离线")
            } else {
              $("#doorDetailDiv_" + _obj.serialNumber + " .doorLi_DivTopState").html("禁用")
            }
            $("#doorDetailDiv_" + _obj.serialNumber).attr("class", "doorLi_Div offline")
            $("#doorDetailDiv_3d_" + _obj.serialNumber).attr("class", "doorLi_Div offline")
          }
           
          $("#doorShowEventListBtn_" + _obj.serialNumber).attr("onclick", "indexPage.showDoorEvent('" + _obj.ssid + "')")
          $("#doorShowEventListBtn_3d_" + _obj.serialNumber).attr("onclick", "indexPage.showDoorEvent('" + _obj.ssid + "')")


        }
      });
    }
    console.log("门禁状态:");
    console.log(dataList);
    /*
    alarm: "0"报警状态(无,报警,门开超时,门被意外打开,防拆,胁迫密码 开门,胁迫指纹开门,胁迫开门,门开超时,常开报警,电池电压过低,立即更 换电池,非法操作,后备电源,未知)
connect: "1"设备链接状态(0离线,1在线,2禁用)
deviceId: "40288a857a514c53017a5163b37b06d5"
id: "40288a857a514c53017a5163b3d0072e"
name: "192.168.10.206-1"
relay: "0"继电器状态(关闭,打开,未知
sensor: "0" 门磁状态(未知,无门磁,关闭,打开)
    */ 
  }, fromCache)
}
IndexPage.prototype.showDoorEvent = function (deviceSn) {
  var _this = this;
  layer.open({
    type: 1,
    shade: 0.8,
    skin: 'myLayer',
    title: false,
    area: ["700px", "615px"],
    content: $('#doorEventList'),
    colseBtn:0,
    cancel: function () {
      _this.runAutoRoute = false;
      if (indexPage.showAutoRunRouteTimeIndex) {
        clearTimeout(indexPage.showAutoRunRouteTimeIndex);
      }
      if (window.parent && window.parent.parent && window.parent.parent.closeAutoRoute) {
        window.parent.parent.closeAutoRoute();
      }
    },
    success: function () {
     
      var startTime = new Date().format("yyyy-MM-dd 00:00:00");
      var endTime = new Date().format("yyyy-MM-dd hh:mm:ss");
      $("#doorEventStartTime").val(startTime);
      $("#doorEventEndTime").val(endTime);
      $("#doorDevicecSn").val(deviceSn);
      _this.searchDoorEventEvent();
      //webapi.transactionDevice(deviceSn, startTime, endTime, 1, 1000, function (data) {
      //  if (data && data.length > 0) {
      //    _this.addDoorEventList(data);
      //  } else {

      //  }
      //});
      //layer.close(layerLoadindex);
    }
  });
}
IndexPage.prototype.searchDoorEventEvent = function () {
  //var startTime = new Date().format("yyyy-MM-dd 00:00:00");
  //var endTime = new Date().format("yyyy-MM-dd hh:mm:ss");
  var layerLoadindex = layer.load();
  var deviceSn = $("#doorDevicecSn").val();
  var startTime = $("#doorEventStartTime").val();
  var endTime = $("#doorEventEndTime").val();
  //var timeleng = (new Date(endTime).getTime() - new Date(startTime).getTime()) / 1000 / 3600 / 24;
  //if (timeleng < 0 || timeleng > 30) {
  //  layer.tips("查询间隔需在30天内", "#doorEventEndTime", {
  //    tips: [1, '#fc8b11'],
  //    time: 4000
  //  });
  //  layer.close(layerLoadindex)
  //  return;
  //}
  webapi.transactionDevice(deviceSn, startTime, endTime, 1, 1000, function (data) {
    layer.close(layerLoadindex)
    if (data && data.length > 0) {
      _this.addDoorEventList(data);
    } else {
      $("#doorEventListResult").html("<div style='text-align:center;width:100%;'>查无事件<div>");
    }
  });
}
/*
id        设备id
eventTime    Date    记录设备触发时间
deptName        部门名称
areaName        区域名称
cardNo        卡号
pin        人员编号
name        人员名称
lastName        人员姓名,英文下才有用
devSn        设备序列号
verifyModeName        验证方式名称
eventName        事件描述
eventPointName        事件出发点名称
readerName        读头名称
devName        设备名称
logId        事件索引值,根据设备是否支持才有值
*/
IndexPage.prototype.addDoorEventList = function (data){
  var _html = ' ';
  var pins = [];
  $.each(data, function (_index, _obj) {
    if (_obj.eventName.indexOf("连接断开") < 0
      && _obj.eventName.indexOf("设备启动") < 0
      && _obj.eventName.indexOf("取消报警") < 0
      ) {



    if (_obj.pin && _obj.pin!="") {
     pins.push(_obj.pin);
    }
    _html += '  <div style="width:100%;float:left;margin-top:15px;">\
            <div style="float:left;width:85px;">\
              <img id="personPhoto_' + _obj.pin + "_" + _index + '" src="../img/pics/icons/doorP.png" style="width:65px;height:80px;margin-left:15px; border:1px solid #32C5FF" />\
            </div>\
            <div style="float:left;width:590px;">\
              <table class="doorEventTable">\
                <tr>\
                  <td  class="doorEvent_paramName">事件</td>\
                  <td  class="doorEvent_paramValue">' + _obj.eventName + '</td>\
                  <td  class="doorEvent_paramName">进入时间</td>\
                  <td  class="doorEvent_paramValue">' + (new Date(_obj.eventTime).format("yyyy-MM-dd hh:mm:ss")) + '</td>\
                </tr>\
                 <tr>\
                  <td class="doorEvent_paramName">姓名</td>\
                  <td class="doorEvent_paramValue">' + _obj.name + '</td>\
                  <td  class="doorEvent_paramName">所属部门</td>\
                  <td  class="doorEvent_paramValue">' + _obj.deptName + '</td>\
                </tr>\
              </table>\
            </div>\
          </div>';
  }
  });
 
  $("#doorEventListResult").html(_html);
  webapi.getPerson(pins + "", function (data) {
   
    if (data && data.length > 0) {
      $.each(data, function (_index, _obj) {
        if (_obj.personPhoto && _obj.personPhoto!="") {
          $("img[id^='personPhoto_" + _obj.pin + "_']").attr("src", "data:image/jpg;base64," + _obj.personPhoto);
          $("img[id^='personPhoto_" + _obj.pin + "_']").css("cursor", "url('../img/pics/icons/fangdajingSmall.png'), auto");
          $("img[id^='personPhoto_" + _obj.pin + "_']").click(function () {
            layer.open({
              type: 1,
              shade: 0.8,
              skin: 'myLayer',
              title: false,
              area: ["350px", "420px"],
              content: '<img  src="data:image/jpg;base64,' + _obj.personPhoto + '" style="width:325px;height:400px;margin-left:15px; border:1px solid #32C5FF" />',
              colseBtn: 0,
              cancel: function () {
            
              },
              success: function () {

              }
            });

          });
        }
      });
    }
  });


}

//==============信息发布=============================
IndexPage.prototype.TVPage = function (id, name) {
  var _this = this;
   $("#chart_" + id).show();
   createCSystemStatic(id, name, config.TV.deviceTypeId,false, function (result) {
     _this.showTVListDetail(result);
   });
}
IndexPage.prototype.showTVListDetail = function (result) {
  var _this = this;
  var html = "";
  result = result.sort(function (a, b) { return b.onlineState - a.onlineState });
  $.each(result, function (_index, _obj) {
    html += _this.showTVDetail(_obj);
  });
  $("#TV_2").html(html);
}
IndexPage.prototype.showTVDetail = function (_obj, td) {
  if (_obj.onlineState == 1) {
    webapi.getTVScreenshot(_obj.serialNumber, function (res) {
      if (res.status == 200 && res.data && res.data.img) {
        $("#TVLi_DivBottomImg_" + (td ? td + "_" : "") + _obj.serialNumber).attr("src", res.data.img);
        $("#TVLi_DivBottomImg_" + _obj.serialNumber).attr("src", res.data.img);
      }
    });
  }
  var html = '<div data-id="' + _obj.serialNumber +td+ '" class="TVLi_Div' + (_obj.onlineState == 1 ? "" : " offline") + '">\
             <div class="TVLi_DivTop">\
               <font class="TVLi_DivTopName"  title="' + _obj.name + '">' + _obj.name + '</font>\
               <font class="TVLi_DivTopState">' + (_obj.onlineState == 1 ? "在线" : "离线") + '</font>\
             </div>\
             <div class="TVLi_DivBottom">\
               <img class="TVLi_DivBottomImg" id="TVLi_DivBottomImg_' + (td ? td + "_" : "") + _obj.serialNumber + '"  src="../img/pics/icons/tvPic.png" />\
               <div class="TVLi_divBtn1">\
                 <font style="float:left;">远程关机:</font>\
     <div style="cursor:pointer;" class="TVLi_openClose closeBtn' + (_obj.onlineState == 1 ? "" : " nouse") + '" id="TVLiCloseOpenBtn_' + (td ? td + "_" : "") + _obj.serialNumber + '" onclick="indexPage.TVCloseOpenBtn(\'' + ("TVLiCloseOpenBtn_" + (td ? td + "_" : "") + _obj.serialNumber) + '\',\'' + _obj.onlineState + '\')">' + (_obj.onlineState == 1 ? "关机" : " 离线") + '</div>\
               </div>\
               <div class="TVLi_divBtn3">\
                 <table style="width:100%;">\
                   <tr><td  style="cursor:pointer;" class="' + (_obj.onlineState == 1 ? "" : " nouse") + '" onclick="indexPage.setTVVolume(\'' + _obj.serialNumber + '\',\'' + _obj.onlineState + '\')">\
               <img src="../img/pics/icons/voiceBtn2.png" style="width:25px;height:25px;' + (_obj.onlineState == 1 ? "" : " opacity:0.2") + '"/>\
             </td><td style="cursor:pointer;"  class="' + (_obj.onlineState == 1 ? "" : " nouse") + '"  onclick="indexPage.setTVRestart(\'' + _obj.serialNumber + '\',\'' + _obj.onlineState + '\')">\
             <img src="../img/pics/icons/restartBtn2.png" style="width:25px;height:25px;' + (_obj.onlineState == 1 ? "" : " opacity:0.2") + '"/></td></tr>\
                   <tr><td  style="cursor:pointer;"  class="' + (_obj.onlineState == 1 ? "" : " nouse") + '"  onclick="indexPage.setTVVolume(\'' + _obj.serialNumber + '\',\'' + _obj.onlineState + '\')">设置音量</td>\
<td  style="cursor:pointer;"  class="' + (_obj.onlineState == 1 ? "" : " nouse") + '"  onclick="indexPage.setTVRestart(\'' + _obj.serialNumber + '\',\'' + _obj.onlineState + '\')">设备重启</td></tr>\
                 </table>\
               </div>\
               <div class="TVLi_divBtn2" style="' + (_obj.onlineState == 1 ? "" : " color:#999 !important;background:rgba(0,0,0,0.3)") + '" onclick="indexPage.showTVScreenshot(\'' + _obj.serialNumber + '\',\'' + _obj.onlineState + '\')">\
                 查看发布内容\
               </div>\
             </div>\
           </div>';
  return html;
}
IndexPage.prototype.changeTVDetail = function (_obj,td) {
  _obj.onlineState = 0;
  var html = '<div class="TVLi_DivTop">\
               <font class="TVLi_DivTopName"  title="' + _obj.name + '">' + _obj.name + '</font>\
               <font class="TVLi_DivTopState">' + (_obj.onlineState == 1 ? "在线" : "离线") + '</font>\
             </div>\
             <div class="TVLi_DivBottom">\
               <img class="TVLi_DivBottomImg" id="TVLi_DivBottomImg_' + (td ? td + "_" : "") + _obj.serialNumber + '"  src="../img/pics/icons/tvPic.png" />\
               <div class="TVLi_divBtn1">\
                 <font style="float:left;">远程关机:</font>\
     <div style="cursor:pointer;" class="TVLi_openClose closeBtn' + (_obj.onlineState == 1 ? "" : " nouse") + '" id="TVLiCloseOpenBtn_' + (td ? td + "_" : "") + _obj.serialNumber + '" onclick="indexPage.TVCloseOpenBtn(\'' + ("TVLiCloseOpenBtn_" + (td ? td + "_" : "") + _obj.serialNumber) + '\',\'' + _obj.onlineState + '\')">' + (_obj.onlineState == 1 ? "关机" : " 离线") + '</div>\
               </div>\
               <div class="TVLi_divBtn3">\
                 <table style="width:100%;">\
                   <tr><td  style="cursor:pointer;" class="' + (_obj.onlineState == 1 ? "" : " nouse") + '" onclick="indexPage.setTVVolume(\'' + _obj.serialNumber + '\',\'' + _obj.onlineState + '\')">\
               <img src="../img/pics/icons/voiceBtn2.png" style="width:25px;height:25px;' + (_obj.onlineState == 1 ? "" : " opacity:0.2") + '"/>\
             </td><td style="cursor:pointer;"  class="' + (_obj.onlineState == 1 ? "" : " nouse") + '"  onclick="indexPage.setTVRestart(\'' + _obj.serialNumber + '\',\'' + _obj.onlineState + '\')">\
             <img src="../img/pics/icons/restartBtn2.png" style="width:25px;height:25px;' + (_obj.onlineState == 1 ? "" : " opacity:0.2") + '"/></td></tr>\
                   <tr><td  style="cursor:pointer;"  class="' + (_obj.onlineState == 1 ? "" : " nouse") + '"  onclick="indexPage.setTVVolume(\'' + _obj.serialNumber + '\',\'' + _obj.onlineState + '\')">设置音量</td>\
<td  style="cursor:pointer;"  class="' + (_obj.onlineState == 1 ? "" : " nouse") + '"  onclick="indexPage.setTVRestart(\'' + _obj.serialNumber + '\',\'' + _obj.onlineState + '\')">设备重启</td></tr>\
                 </table>\
               </div>\
               <div class="TVLi_divBtn2" style="' + (_obj.onlineState == 1 ? "" : " color:#999 !important;background:rgba(0,0,0,0.3)") + '" onclick="indexPage.showTVScreenshot(\'' + _obj.serialNumber + '\',\'' + _obj.onlineState + '\')">\
                 查看发布内容\
               </div>\
             </div>';
  $(".TVLi_Div[data-id^='" + _obj.serialNumber + td + "']").attr("class", "TVLi_Div offline");
  $(".TVLi_Div[data-id^='" + _obj.serialNumber + td + "']").html(html);

  var tvmodel = WT3DObj.commonFunc.findObject("devLogo_TV_" + _obj.id + "_" + _obj.name)
  if (tvmodel) {
    var textture = WT3DObj.createSkinPic(WT3DObj, null, null, {
      imgurl: "../img/icons/tvLogo_offline.png",
    });
    tvmodel.material.map = textture;
  }
}
IndexPage.prototype.TVCloseOpenBtn = function (devControlBtnId, state) {
  if (state != "1") {
    //layer.msg("设备离线,无法控制");
    return;
  }
 
  var className = $("#" + devControlBtnId).attr("class");
  var devid = devControlBtnId.split("_")[devControlBtnId.split("_").length - 1];
  if (className.indexOf("closeBtn") >= 0) {
    layer.confirm("是否确认关机", { title: "远程关机" }, function () {
      var loadindex = layer.load();
      var data = {
        data: [devid]
      }
      webapi.TVDoAction(data, "shutdown", function (res) {
        if (res.status == 200) {
          layer.closeAll();
         
          var tvlist = webapi.DeviceListCache["deviceType_" + config.TV.deviceTypeId];
          if (tvlist && tvlist.length > 0) {

            $.each(tvlist, function (_index, _obj) {
              if (_obj.serialNumber == devid) {
                indexPage.changeTVDetail(_obj, "");
                indexPage.changeTVDetail(_obj,"3d");
              }
            });
          }

         
          layer.msg("远程关机成功");
          //  $("#" + devControlBtnId).attr("class", "doorLi_openClose closeBtn");
        } else {
          console.log(res);
          layer.msg("远程关机异常:" + res.msg);
        }
        layer.close(loadindex);
      })
    }, function () {  })
  }
} 
IndexPage.prototype.setTVRestart = function (id, state) {
  if (state != "1") {
    // layer.msg("设备离线,无法控制");
    return;
  }
  layer.confirm("是否确认重启", {
    title: "重启设备"
  }, function () {
    layer.msg("重启命令已发送");
    var loadindex = layer.load();
    var data = {
      data: [id]
    }
    webapi.TVDoAction(data, "reboot", function (res) {
      console.log(res);
      layer.close(loadindex);
      if (res.status == 200) {
        layer.closeAll();
        layer.msg("重启命令成功!");
      } else {
        layer.msg("命令发送失败:" + res.msg);
      }
    })
  }, function () { })
}
IndexPage.prototype.setTVVolume = function (id, state) {
  if (state != "1") {
   // layer.msg("设备离线,无法控制");
    return;
  }
  layer.confirm('<div  style="float:left;width:80px;margin-top:20px;">音量设置:</div><div style="float:left;width:150px;margin-top:30px;" id="slideTest1" class="demo-slider"> </div><input type="hidden" id="slideTest1Value" />', {
    title: "音量设置",
    success: function () {
      layui.use('slider', function () {
        var $ = layui.$
        , slider = layui.slider;
        //默认滑块
        slider.render({
          elem: '#slideTest1',
          change: function (value) {
            $("#slideTest1Value").val(value);
           console.log('当前数值:' + value);
          }
        });
      });
    }
  }, function () {
    var loadindex = layer.load();
    var data = {
      data: [id],
      volume: parseInt($("#slideTest1Value").val())
    }
    webapi.TVDoAction(data, "setVolume", function (res) {
      console.log(res);
      layer.close(loadindex);
      if (res.status == 200) {
        layer.closeAll();
        layer.msg("音量设置成功!");
      } else {
        layer.msg("命令发送失败:" + res.msg);
      }
    })
  }, function () { })
}
IndexPage.prototype.showTVScreenshot = function (id, state) {
  if (state != "1") {
    // layer.msg("设备离线,无法控制");
    return;
  }
  layer.load();
  webapi.getTVScreenshot(id, function (res) {
    layer.closeAll();
    console.log(res);
    if (res.status == 200 && res.data) {
      var width = res.data.width;
      var height = res.data.height;
      if (width > 1000) {
        width = 1000;
        height = height * 1000 / res.data.width;
      }
      if (window.parent && window.parent.parent && window.parent.parent.openAutoRoute) {
        window.parent.parent.openAutoRoute();
      }
      layer.open({
        type: 1,
        shade: 0.8,
        skin: 'myLayer',
        title: res.data.programName + "-信息展示",
        area: [width + "px", (height + 50) + "px"],
        content: "<img src='" + res.data.img + "' style='width:" + width + ";height:" + height + "px'/>",
        cancel: function () {
          if (window.parent && window.parent.parent && window.parent.parent.closeAutoRoute) {
            window.parent.parent.closeAutoRoute();
          }
        },
        success: function () {
        }
      });
    } else {
      layer.msg("获取失败:" + res.msg);

    }
  })
}
//=============电梯==========================
IndexPage.prototype.liftPage = function (id, name) {
   $("#chart_" + id).show();
   createCSystemStatic(id, name, config.lift.deviceTypeId,true);
   
     var data = indexPage.liftVideoCache;
     if (data && data.length > 0) {
       $("#lift_title_1").html(data[0].label);
       $("#lift_title_2").html(data[1].label);
         indexPage.commonFunc.addVideo("lift_video1", config.videoBaseUrl, data[0].value);
         $("#lift_video1_title").html(data[0].label);
         indexPage.commonFunc.addVideo("lift_video2", config.videoBaseUrl, data[1].value);
         $("#lift_video2_title").html(data[1].label);
       }
     
}
IndexPage.prototype.showVideoWin = function (index) {
  var data = indexPage.liftVideoCache;
  var videoobj = data[index];
  if (window.parent && window.parent.parent && window.parent.parent.openAutoRoute) {
    window.parent.parent.openAutoRoute();
  }

  html = '<div class="videoShowDiv" style="width: 190px;height:110px; float: left;">\
       <video id="videoDetail_' + index + '" muted playsinline controls style="width:450px; height:300px;position:relative;"></video>\
      <div id="playbtn_' + index + '" style="position:relative;bottom:200px;width:100%;height:60px;padding-left:200px;cursor:pointer;" ><img onclick="$(\'#playbtn_' + index + '\').hide();indexPage.commonFunc.addVideo(\'videoDetail_' + index + '\', \'' + config.videoBaseUrl + '\', \'' + videoobj.value + '\');" src="../img/pics/icons/play-filling.png" style="width:60px;height:60px;"/></div>\
     </div>';
  layer.open({
    type: 1,
    shade: 0.8,
    skin: 'myLayer',
    title: videoobj.label + "-实时视频",
    area: ["450px", "350px"],
    content: html,
    cancel: function () {
      if (window.parent && window.parent.parent && window.parent.parent.closeAutoRoute) {
        window.parent.parent.closeAutoRoute();
      }
    },
    success: function () {
    }
  });
}
//=============消防==============================
IndexPage.prototype.firePage = function (id, name) {
   $("#chart_" + id).show();
   createCSystemStatic(id, name, config.fire.deviceTypeId);
 

}
//==============空调=============================
IndexPage.prototype.aircontrolPage = function (id, name) {
  var _this = this;
  $("#chart_" + id).show();
  createCSystemStatic(id, name, config.aircontrol.deviceTypeId, false, function (result) {
    _this.showAircontrolListDetail(result);
  });
}
IndexPage.prototype.showAircontrolListDetail = function (result) {
  var _this = this;
  var html = "";
  var meteids = [];
  result = result.sort(function (a, b) { return b.onlineState - a.onlineState });
  result = result.sort(function (a, b) { return b.type - a.type });
  $.each(result, function (_index, _obj) {
    html += _this.showAircontrolDetail(_obj);
    $.each(_obj.extra, function (_eindex, _eobj) {
      if (_eobj.key == "开关") {
        meteids.push(_eobj.value);
      }
      if (_eobj.key == "模式") {
        meteids.push(_eobj.value);
      }
      if (_eobj.key == "温度") {
        meteids.push(_eobj.value);
      }
    });
  });
  $("#aircontrol_2").html(html);
  _this.getOpenCloseState(meteids);
}
IndexPage.prototype.showAircontrolDetail = function (_obj, td) {
  var data_openid = "";
  var data_zlid = "";
  var data_tempid = "";
  var data_ms = "";
  var data_temp = "";
  $.each(_obj.extra, function (_eindex, _eobj) {
    if (_eobj.key == "开关") {
      data_openid = _eobj.value;
    }
    if (_eobj.key == "模式") {
      data_ms = _eobj.value;
    }
    if (_eobj.key == "温度") {
      data_temp = _eobj.value;
    }
    if (_eobj.key == "模式控制") {
      data_zlid = _eobj.value;
    }
    if (_eobj.key == "温度控制") {
      data_tempid = _eobj.value;
    }
  });
  var html = '<div class="airControlLi_Div' + (_obj.onlineState == 1 ? "" : " offline") + '"">\
            <div class="airControlLi_DivTop">' + (_obj.type == 1 ? '<img src="../img/pics/icons/cumputer.png" style="width:14px;height:14px;float:left;    margin-top: 8px;" />' : "") + '\
              <font class="airControlLi_DivTopName"  title="' + _obj.name + '">' + _obj.name + '</font>\
              <font class="airControlLi_DivTopState">' + (_obj.onlineState == 1 ? "在线" : "离线") + '</font>\
            </div>\
            <div class="airControlLi_DivBottom">\
              <div class="airControlLi_DivBottomImg" id="airControlLi_DivBottomImg_' + (td ? td + "_" : "") + _obj.serialNumber + '"  data-modelmeteid="' + data_ms + '">\
               <font class="airControlLi_modelValue" data-modelopenid="' + data_openid + '"  data-modelmeteid="' + data_ms + '">模式</font><font class="airControlLi_tempValue" data-tempopenid="' + data_openid + '"  data-tempmeteid="' + data_temp + '">温度</font>\
              </div>\
              <div class="airControlLi_divBtn1">\
                <font style="float:left;">空调开关:</font>\
    <div style="cursor:pointer;" class="airControlLi_openClose" data-openid="' + data_openid + '" id="airControlCloseOpenBtn_' + (td ? td + "_" : "") + _obj.serialNumber + '" onclick="indexPage.airControlCloseOpenBtn(\'' + ("airControlCloseOpenBtn_" + (td ? td + "_" : "") + _obj.serialNumber) + '\')">开</div>\
              </div>\
              <div class="airControlLi_divBtn3">\
                <div class="airControlLi_btn_1"  id="airControlBtn1_' + (td ? td + "_" : "") + _obj.serialNumber + '"  data-openmeteid="' + data_openid + '" onclick="indexPage.setCoolTemp(\'' + _obj.serialNumber + "\'" + (td ? ",\'" + td + "\'" : "") + ')" >\
                  <img src="../img/pics/icons/voiceBtn2.png" style="width:10px;height:10px;display:none;" />制冷\
                </div>\
                <div class="airControlLi_btn_1"  id="airControlBtn2_' + (td ? td + "_" : "") + _obj.serialNumber + '"   data-openmeteid="' + data_openid + '"  onclick="indexPage.setHotTemp(\'' + _obj.serialNumber + "\'" + (td ? ",\'" + td + "\'" : "") + ')" >\
                  <img src="../img/pics/icons/voiceBtn2.png" style="width:10px;height:10px;display:none;" />制热\
                </div>\
              </div>\
              <div class="airControlLi_divBtn2"  id="airControlBtn3_' + (td ? td + "_" : "") + _obj.serialNumber + '"   data-openmeteid="' + data_openid + '" onclick="indexPage.setAirConfigTempTure(\'' + _obj.serialNumber + "\'" + (td ? ",\'" + td + "\'" : "") + ')">\
                温度调节\
              </div>\
              <div class="airControlLi_divBtn4">\
               位置:' + _obj.shortAddress + '\
              </div>\
            </div>\
          </div>';
  return html;
}
IndexPage.prototype.getOpenCloseState= function (meteIDs) {
  webapi.bulkGetRealTimeData(meteIDs, function (data) {
    if (data && data.length > 0) {
      $.each(data, function (_dindex, _dobj) {

        $("div[data-modelmeteid='" + _dobj.pointId + "']").css("color", _dobj.value + "" == "2" ? "#C3EEFF" : "#FF8484");
        $("font[data-modelmeteid='" + _dobj.pointId + "']").html( _dobj.value+""=="2"?"制冷":"制热");
        $("font[data-tempmeteid='" + _dobj.pointId + "']").html( _dobj.value + "℃");
        

        $("div[data-openid='" + _dobj.pointId + "']").attr("data-state", _dobj.value)
        $(".airControlLi_btn_1[data-openmeteid='" + _dobj.pointId + "']").attr("data-state", _dobj.value)
        $(".airControlLi_divBtn2[data-openmeteid='" + _dobj.pointId + "']").attr("data-state", _dobj.value)
        if (_dobj.value + "" == "0") {
          $("font[data-modelopenid='" + _dobj.pointId + "']").hide();
          $("font[data-tempopenid='" + _dobj.pointId + "']").hide();

          $("div[data-openid='" + _dobj.pointId + "']").html("关")
          $("div[data-openid='" + _dobj.pointId + "']").attr("class", "airControlLi_openClose closeBtn")
          $(".airControlLi_btn_1[data-openmeteid='" + _dobj.pointId + "']").attr("class", "airControlLi_btn_1 nouse");
          $(".airControlLi_divBtn2[data-openmeteid='" + _dobj.pointId + "']").attr("class", "airControlLi_divBtn2 nouse");
        }else{
          $("font[data-modelopenid='" + _dobj.pointId + "']").show();
          $("font[data-tempopenid='" + _dobj.pointId + "']").show();
          $("div[data-openid='" + _dobj.pointId + "']").html("开")
          $("div[data-openid='" + _dobj.pointId + "']").attr("class", "airControlLi_openClose")
          $(".airControlLi_btn_1[data-openmeteid='" + _dobj.pointId + "']").attr("class", "airControlLi_btn_1");
          $(".airControlLi_divBtn2[data-openmeteid='" + _dobj.pointId + "']").attr("class", "airControlLi_divBtn2");
        }
      });
    }
  })
}
IndexPage.prototype.setCoolTemp = function (serialNumber,td) {
  if ($("#airControlBtn1_"  +(td ? td + "_" : "") + serialNumber).attr("data-state")=="0") {

    return;
  }
  layer.confirm("是否确认调节为制冷模式", { title: "调节为制冷模式" }, function () {
    var loadindex=layer.load();
    var meteid = "";
    var airlist = webapi.DeviceListCache["deviceType_" + config.aircontrol.deviceTypeId];
    if (airlist && airlist.length > 0) {

      $.each(airlist, function (_index,_obj) {
        if (_obj.serialNumber == serialNumber) {
          $.each(_obj.extra, function (_eindex, _eobj) {
            if (_eobj.key == "模式控制") {
              meteid = _eobj.value;
            }
          })
        }
      });
    }
    webapi.bulkSetRealTimeData(meteid, 2, function (res) {
      layer.close(loadindex);
      if (res.status == 200) {
        layer.closeAll();
        layer.msg("调节为制冷模式成功");
      } else {
        console.log(res);
        layer.msg("调节为制冷模式异常:" + res.msg);
      }
    })
  }, function () { })
}
IndexPage.prototype.setHotTemp = function (serialNumber, td) {

  if ($("#airControlBtn2_"  +(td ? td + "_" : "") + serialNumber).attr("data-state") == "0") {

    return;
  }
  layer.confirm("是否确认调节为制热模式", { title: "调节为制热模式" }, function () {
    var loadindex = layer.load();
    var meteid = "";
    var airlist = webapi.DeviceListCache["deviceType_" + config.aircontrol.deviceTypeId];
    if (airlist && airlist.length > 0) {
      $.each(airlist, function (_index, _obj) {
        if (_obj.serialNumber == serialNumber) {
          $.each(_obj.extra, function (_eindex, _eobj) {
            if (_eobj.key == "模式控制") {
              meteid = _eobj.value;
            }
          })
        }
      });
    }
    webapi.bulkSetRealTimeData(meteid,1, function (res) {
      layer.close(loadindex);
      if (res.status == 200) {
        layer.closeAll();
        layer.msg("调节为制热模式成功");
      } else {
        console.log(res);
        layer.msg("调节为制热模式异常:" + res.msg);
      }
    })
  }, function () { })
}
IndexPage.prototype.airControlCloseOpenBtn = function (devControlBtnId) {
  var className = $("#" + devControlBtnId).attr("class");
  var serialNumber = devControlBtnId.split("_")[devControlBtnId.split("_").length - 1];
  if (className.indexOf("closeBtn")< 0) {
    layer.confirm("是否确认关闭", { title: "远程关闭" }, function () {
      var loadindex = layer.load();
      var meteid = "";
      var airlist = webapi.DeviceListCache["deviceType_" + config.aircontrol.deviceTypeId];
      if (airlist && airlist.length > 0) {
        $.each(airlist, function (_index, _obj) {
          if (_obj.serialNumber == serialNumber) {
            $.each(_obj.extra, function (_eindex, _eobj) {
              if (_eobj.key == "开关控制") {
                meteid = _eobj.value;
              }
            })
          }
        });
      }
      webapi.bulkSetRealTimeData(meteid, 0, function (res) {
        layer.close(loadindex);
        if (res.status == 200) {
          layer.closeAll();
          layer.msg("远程关闭成功");
          //修改按钮样式
          $("#" + devControlBtnId).attr("class", "airControlLi_openClose closeBtn");
          $("#" + devControlBtnId).html("关");
          $("#airControlBtn1_" + serialNumber).attr("class", "airControlLi_btn_1 nouse");
          $("#airControlBtn2_" + serialNumber).attr("class", "airControlLi_btn_1 nouse");
          $("#airControlBtn3_" + serialNumber).attr("class", "airControlLi_divBtn2 nouse");
          $("#airControlBtn1_" + serialNumber).attr("data-state", "0");
          $("#airControlBtn2_" + serialNumber).attr("data-state", "0");
          $("#airControlBtn3_" + serialNumber).attr("data-state", "0");
          $("#airControlLi_DivBottomImg_" + serialNumber+" font").hide();

          

        } else {
          console.log(res);
          layer.msg("远程关闭异常:" + res.msg);
        }
      })
    }, function () { })
  } else {
    layer.confirm("远程开启", { title: "远程开启" }, function () {
      var loadindex = layer.load();
      var timelong = parseInt($("#timeLong").val());
      var meteid = "";
      var airlist = webapi.DeviceListCache["deviceType_" + config.aircontrol.deviceTypeId];
      if (airlist && airlist.length > 0) {
        $.each(airlist, function (_index, _obj) {
          if (_obj.serialNumber == serialNumber) {
            $.each(_obj.extra, function (_eindex, _eobj) {
              if (_eobj.key == "开关控制") {
                meteid = _eobj.value;
              }
            })
          }
        });
      }
      webapi.bulkSetRealTimeData(meteid, 1, function (res) {
        layer.close(loadindex);
        if (res.status == 200) {
          layer.closeAll();
          layer.msg("远程开启成功");

          //修改按钮样式
          $("#" + devControlBtnId).attr("class", "airControlLi_openClose");
          $("#" + devControlBtnId).html("开");

          $("#airControlBtn1_" + serialNumber).attr("class", "airControlLi_btn_1");
          $("#airControlBtn2_" + serialNumber).attr("class", "airControlLi_btn_1");
          $("#airControlBtn3_" + serialNumber).attr("class", "airControlLi_divBtn2");

          $("#airControlBtn1_" + serialNumber).attr("data-state", "1");
          $("#airControlBtn2_" + serialNumber).attr("data-state", "1");
          $("#airControlBtn3_" + serialNumber).attr("data-state", "1");

          $("#airControlLi_DivBottomImg_" + serialNumber + " font").show();
        } else {
          console.log(res);
          layer.msg("远程开启失败:" + res.msg);
        }
      })
    }, function () { })
  }
}
IndexPage.prototype.setAirConfigTempTure = function (serialNumber, td) {

  if ($("#airControlBtn3_" +(td ? td + "_" : "") + serialNumber).attr("data-state") == "0") {
    return;
  }
  layer.confirm('<div  style="float:left;width:80px;margin-top:20px;">温度:</div><div style="float:left;width:150px;margin-top:30px;" id="slideTest1" class="demo-slider"></div><input type="hidden" id="slideTest1Value" />', {
    title: "温度设置",
    success: function (){
      layui.use('slider', function () {
        var $ = layui.$
        , slider = layui.slider;
        //默认滑块


        var ins1 = slider.render({
          elem: '#slideTest1',
          min: 16 //最小值
        , max: 30, //最大值
          change: function (value) {
            $("#slideTest1Value").val(value);
            //  console.log('当前数值:' + value);
          }
        });
     

        //获取值
        var meteid = "";
        var airlist = webapi.DeviceListCache["deviceType_" + config.aircontrol.deviceTypeId];
        if (airlist && airlist.length > 0) {
          $.each(airlist, function (_index, _obj) {
            if (_obj.serialNumber == serialNumber) {
              $.each(_obj.extra, function (_eindex, _eobj) {
                if (_eobj.key == "温度") {
                  meteid = _eobj.value;
                }
              })
            }
          });
        }
        webapi.bulkGetRealTimeData([meteid], function (data) {
          if (data && data.length > 0) {
            $.each(data, function (_dindex, _dobj) {
            ins1.setValue(parseInt(_dobj.value)-16);
            });
          }
        })
       

      });

   
    }
  }, function () {
  
    var loadindex = layer.load();
    var meteid = "";
    var airlist = webapi.DeviceListCache["deviceType_" + config.aircontrol.deviceTypeId];
    if (airlist && airlist.length > 0) {
      $.each(airlist, function (_index, _obj) {
        if (_obj.serialNumber == serialNumber) {
          $.each(_obj.extra, function (_eindex, _eobj) {
            if (_eobj.key == "温度控制") {
              meteid = _eobj.value;
            }
          })
        }
      });
    }
    webapi.bulkSetRealTimeData(meteid, parseInt($("#slideTest1Value").val()), function (res) {
      layer.close(loadindex);
      console.log(res);
      if (res.status == 200) {
        layer.closeAll();
        layer.msg("设置成功!");
      } else {
        layer.msg("命令发送失败:" + res.msg);
      }
    })
  }, function () { })
 
}
//===============环境============================
IndexPage.prototype.environmentPage = function (id, name) {
  var _this = this;
  $("#chart_" + id).show();
   createCSystemStatic(id, name, config.environment.deviceTypeId, false, function (result) {
     _this.showEnvironmentListDetail(result);
   });
}

IndexPage.prototype.showEnvironmentListDetail = function (result) {
  var _this = this;
  var html = "";
  var meteids = [];
  result = result.sort(function (a, b) { return b.onlineState - a.onlineState });
  $.each(result, function (_index, _obj) {
    var hobj = _this.showEnvironmentDetail(_obj);
    html += hobj.html;
    meteids = meteids.concat(hobj.meteids);
  });
  $("#environment_2").html(html);
  setTimeout(function () { 
    _this.flashEnvironmentDetailValue(meteids);
  }, 200);
  if (_this.flashEnvironmentDetailValueInterval) {
    clearInterval(_this.flashEnvironmentDetailValueInterval);
  }
  _this.flashEnvironmentDetailValueInterval = setInterval(function () {
    if (_this.currentMebuType == "environment" && meteids.length>0) {
      _this.flashEnvironmentDetailValue(meteids);
    } else {
      clearInterval(_this.flashEnvironmentDetailValueInterval);
    }
  },5000);
}
IndexPage.prototype.flashEnvironmentDetailValueInterval = null;
IndexPage.prototype.flashEnvironmentDetailValue = function (meteids) {
  var _this=this;
  webapi.bulkGetRealTimeData(meteids, function (data) {
    if (data && data.length > 0) {
      $.each(data, function (_dindex, _dobj) {
        var keyname = $("#devParamValue_" + _dobj.pointId).attr("data-keyname");
        if (keyname) {
          if (keyname.indexOf("温度") >= 0) {
            _dobj.value += "℃";
          } else if (keyname.indexOf("湿度") >= 0) {
            _dobj.value += "%";
          }
        }
        console.log("#devParamValue_" + _dobj.pointId)
        console.log(_dobj.value)
        $("#devParamValue_" + _dobj.pointId).html(_dobj.value);
      });
    }
  });

}
IndexPage.prototype.showEnvironmentDetail = function (_obj) {
  var html = ' <div class="fireLi_Div' + (_obj.onlineState == 1 ? "" : " offline") + '" style="height:auto;">\
            <div class="fireLi_DivTop">\
              <font class="fireLi_DivTopName" title="' + _obj.name + '">' + _obj.name + '</font>\
              <font class="fireLi_DivTopState">' + (_obj.onlineState == 1 ? "在线" : "离线") + '</font>\
            </div>\
            <div class="fireLi_DivContent">';
  var meteids = [];
  if (_obj && _obj.extra && _obj.extra.length > 0) {
  
    $.each(_obj.extra, function (_eindex, _eobj) {
      if (_eobj.key.indexOf("控制") < 0) {
        html += '        <div class="fireLi_DivMete">\
                      <div class="fireLi_DivMeteName">\
                        ' + _eobj.key+ ':\
                      </div>\
                      <div class="fireLi_DivMeteValue" data-keyname="' + _eobj.key + '" id="devParamValue_' + _eobj.value + '">\
                       <img src="../plugs/layer/layui/css/modules/layer/default/loading-1.gif" style="width:16px;height:16px;" />\
                      </div>\
                    </div>'; 
        meteids.push(_eobj.value);
      }
    });
  } 
  html += ' </div>\
            <div class="fireLi_DivBottom">\
              <div class="fireLi_divBtn1">\
                <font style="float:left;margin-left: 27px;">位置:</font>\
               <font style="float:left;">' + _obj.shortAddress + '</font>\
              </div>\
              <div class="fireLi_divBtn2"  onclick="indexPage.showEDevAlarmListByDev(\'' + _obj.serialNumber + '\')">\
                查看报警记录\
              </div>\
            </div>\
            </div>';
           return {
             html:html,
             meteids:meteids
           };
}
IndexPage.prototype.showMetesValueDetail = function (objname) {

    var devType = objname.split("_")[1];
    var devId = objname.split("_")[3];
    var devName = objname.split("_")[4];
    var devdatas = modelList[devType].data;
    var devinfo = null;
    $.each(devdatas, function (_index, _obj) {
        if (_obj.id == devId) {
            devinfo = _obj;
        }
    })
    var html = ' <div class="fireLi_Div3D"  id="showMetes_' + devId + '">\
            <div class="fireLi_DivTop3D" >\
              <font class="fireLi_DivTopName3D" title="' + devName + '">' + devName + '</font>\
            </div>\
            <div class="fireLi_DivContent" id="showMeteContent3D_' + devId + '" style="height: 90px;overflow-y: auto;"><img src="../plugs/layer/layui/css/modules/layer/default/loading-1.gif" style="width:16px;height:16px;margin-top:30px;margin-left:200px;" />';
  html += ' </div>\
            <div class="fireLi_DivBottom">\
              <div class="fireLi_divBtn1">\
                <font style="float:left;margin-left: 27px;">位置:</font>\
               <font style="float:left;">' + devinfo.shortAddress + '</font>\
              </div>\
              <div class="fireLi_divBtn2"  onclick="indexPage.showAllMeteListByDev(\'' + devId + '\')">\
                查看更多\
              </div>\
            </div>\
            </div>';
  setTimeout(function () {
  webapi.getDevValue(devId, function (response) {
          if (response && response.result ) {
              _obj = response.result;
              if (_obj && _obj.values && _obj.values.length > 0) {
                  var _mhtml = "";
                  $.each(_obj.values, function (_eindex, _eobj) {
                      {
                          if(_eobj.key){
                          
                      
                          _eobj.sValue2 = _eobj.sValue;
                          if (_eobj.sValue == "END") {
                              _eobj.sValue2 = "无告警"
                          } else if (_eobj.sValue == "BEGIN") {
                              _eobj.sValue2 = "<font style='color:red;'>告警</font>"
                          }
 
                          _mhtml += '        <div class="fireLi_DivMete" style="width:50%;">\
                      <div class="fireLi_DivMeteName"  style="width:65%;">\
                        ' + _eobj.meteName + ':\
                      </div>\
                      <div class="fireLi_DivMeteValue"  style="width:35%;">' + _eobj.sValue2 + (_eobj.unit ? _eobj.unit : "") + '\
                      </div>\
                    </div>';
                          }
                      }
                  });
                  if (_obj.objState == "OFFLINE") {
                    
                      $("#showMetes_" + devId).attr("class", "fireLi_Div3D offline");
                  }
                  $("#showMeteContent3D_" + devId).html(_mhtml);
              }
          } else {
              console.log("error:获取设备失败,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
          }
      }); 
  }, 200);
  return html;
  
}

IndexPage.prototype.showAirControlMetesValueDetail = function (seobj) {
  var _obj = seobj;
  var html = ' <div class="fireLi_Div3D' + (_obj.onlineState == 1 ? "" : " offline") + '" style="width:270px;">\
            <div class="fireLi_DivTop3D">\
              <font class="fireLi_DivTopName3D" title="' + _obj.name + '">' + _obj.name + '</font>\
            </div>\
            <div class="fireLi_DivContent">';
  var meteids = [];
  if (_obj && _obj.extra && _obj.extra.length > 0) {

    $.each(_obj.extra, function (_eindex, _eobj) {
      if (_eobj.key.indexOf("控制") < 0) {
        html += '        <div class="fireLi_DivMete" style="width:50%;">\
                      <div class="fireLi_DivMeteName">\
                        ' + _eobj.key + ':\
                      </div>\
                      <div class="fireLi_DivMeteValue" data-keyname="' + _eobj.key + '" id="devParamValue3D_' + _eobj.value + '">\
                       <img src="../plugs/layer/layui/css/modules/layer/default/loading-1.gif" style="width:16px;height:16px;" />\
                      </div>\
                    </div>';
        meteids.push(_eobj.value);
      }
    });

  }
  html += ' </div>\
            <div class="fireLi_DivBottom">\
              <div class="fireLi_divBtn1">\
                <font style="float:left;margin-left: 27px;">位置:</font>\
               <font style="float:left;">' + _obj.shortAddress + '</font>\
              </div>\
            </div>\
            </div>';
  webapi.bulkGetRealTimeData(meteids, function (data) {
    if (data && data.length > 0) {
      $.each(data, function (_dindex, _dobj) {
        var keyname = $("#devParamValue3D_" + _dobj.pointId).attr("data-keyname");
        if (keyname) {

          if (keyname.indexOf("开关") >= 0) {
            _dobj.value = (_dobj.value == 0 ? "关" : "开");
          } else if (keyname.indexOf("模式") >= 0) {
            _dobj.value = (_dobj.value == 1 ? "制热" : "制冷");
          } else if (keyname.indexOf("报警状态") >= 0) {
            _dobj.value = (_dobj.value == 0 ? "正常" : "<font style='color:red;'>告警</font>");
          } else if (keyname.indexOf("状态") >= 0) {
            _dobj.value = (_dobj.value == 0 ? "停止" : "<font style='color:red;'>开启</font>");
          }
        }
        $("#devParamValue3D_" + _dobj.pointId).html(_dobj.value);
        $("#devParamValue_" + _dobj.pointId).html(_dobj.value);
      });
    }
  })
  return html;

}

IndexPage.prototype.showAllMeteListByDev = function (devId) {
    $('#devMeteListResult').html("");
    var _this = this;
    layer.open({
        type: 1,
        shade: 0.8,
        skin: 'myLayer',
        title: false,
        area: ["700px", "615px"],
        content: $('#devAllMeteList'),
        colseBtn: 0,
        cancel: function () {
          
        },
        success: function () {

            webapi.getDevValue(devId, function (response) {
                if (response && response.result) {

                    _obj = response.result;
                    $("#devTitle").html(_obj.objName )
                    if (_obj && _obj.values && _obj.values.length > 0) {
                        var _mhtml = "";
                        _obj.values = _obj.values.sort(function (a, b) { return a.sort - b.sort });
                        $.each(_obj.values, function (_eindex, _eobj) {
                            if (_eobj.key) {



                                _eobj.sValue2 = _eobj.sValue;
                                if (_eobj.sValue == "END") {
                                    _eobj.sValue2 = "无告警"
                                } else if (_eobj.sValue == "BEGIN") {
                                    _eobj.sValue2 = "<font style='color:red;'>告警</font>"
                                }

                                _mhtml += '        <div class="fireLi_DivMete" style="width:50%;border: 1px solid rgba(255,255,255,0.1);">\
                      <div class="fireLi_DivMeteName" style="width:65%;text-align:center;">\
                        ' + _eobj.meteName + ':\
                      </div>\
                      <div class="fireLi_DivMeteValue" style="width:35%;text-align:center;">' + _eobj.sValue2 + '\
                      </div>\
                    </div>';

                            }
                        });
                        _mhtml += '<div style="background: rgba(115,134,164,0.5);width:100%;border: 1px solid rgba(255,255,255,0.1);"></div>';
                        $.each(_obj.values, function (_eindex, _eobj) {
                            if (!_eobj.key) {


                                _eobj.sValue2 = _eobj.sValue;
                                if (_eobj.sValue == "END") {
                                    _eobj.sValue2 = "无告警"
                                } else if (_eobj.sValue == "BEGIN") {
                                    _eobj.sValue2 = "<font style='color:red;'>告警</font>"
                                }

                                _mhtml += '        <div class="fireLi_DivMete" style="width:50%;border: 1px solid rgba(255,255,255,0.1);">\
                      <div class="fireLi_DivMeteName" style="width:65%;text-align:center;">\
                        ' + _eobj.meteName + ':\
                      </div>\
                      <div class="fireLi_DivMeteValue" style="width:35%;text-align:center;">' + _eobj.sValue2 + '\
                      </div>\
                    </div>';

                            }
                        });
                        $("#devMeteListResult").html(_mhtml);
                    }
                } else {
                    console.log("error:获取设备失败,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
                }
            });

        }
    });
   
    
}
IndexPage.prototype.showEDevAlarmListByDev = function (devId) {

  var _this = this;
  layer.open({
    type: 1,
    shade: 0.8,
    skin: 'myLayer',
    title: false,
    area: ["700px", "615px"],
    content: $('#devAlarmList'),
    colseBtn:0,
    cancel: function () {
      _this.runAutoRoute = false;
      if (indexPage.showAutoRunRouteTimeIndex) {
        clearTimeout(indexPage.showAutoRunRouteTimeIndex);
      }
      if (window.parent && window.parent.parent && window.parent.parent.closeAutoRoute) {
        window.parent.parent.closeAutoRoute();
      }
    },
    success: function () {
    
      var StartTime = new Date().format("yyyy-MM-01 00:00:00");
      var EndTime = new Date().format("yyyy-MM-dd hh:mm:ss");
      $("#alarmStartTime").val(StartTime);
      $("#alarmEndTime").val(EndTime);
      $("#selectEAlarmDevid").val(devId);
      _this.showAlarmListByDev(devId, StartTime, EndTime);
    }
  });
}
IndexPage.prototype.showAlarmListByDev = function (devId, StartTime, EndTime) {
  var layerLoadindex = layer.load();
  webapi.getAlarmDataList(function (records) {
    layer.close(layerLoadindex);
      if (records && records.length > 0) {
        if ($("#alarmDevSort").val() == 1) {
          records = records.sort(function (a, b) {

            return new Date(a.createTime).getTime() - new Date(b.createTime).getTime()
          })
        } else {
          records = records.sort(function (a, b) {
            return new Date(b.createTime).getTime() - new Date(a.createTime).getTime()
          })
        }
        console.log(records);
        var _html = '';
        $.each(records, function (_index, _obj) {

          if (_obj.device) {
            _html += '<div style="float:left;width:99%;">\
            <table class="devAlarmTable">\
              <tr>\
                <td class="devAlarm_paramName">报警类型</td>\
                <td class="devAlarm_paramValue">' + _obj.message + '</td>\
                <td class="devAlarm_paramName">报警时间</td>\
                <td class="devAlarm_paramValue">' + _obj.createTime + '</td>\
                <td class="devAlarm_paramName">解除时间</td>\
                <td class="devAlarm_paramValue">' + _obj.updateTime + '</td>\
              </tr>\
            </table>\
          </div>';
          }
        });
        $("#devAlarmListResult").html(_html);
      } else {
        $("#devAlarmListResult").html("<div style='width:100%;text-align:center;'>查无数据</div>");

      }
  }, devId,StartTime, EndTime);

}
//==============广播============================
IndexPage.prototype.radioPage = function (id, name) {
  var _this = this;
  $("#chart_" + id).show();
  createCSystemStatic(id, name, config.radio.deviceTypeId, false, function (result) {
    _this.showRadioListDetail(result);
  });
}
IndexPage.prototype.showRadioListDetail = function (result) {
  var _this = this;
  var html = "";
  result = result.sort(function (a, b) { return b.onlineState - a.onlineState });
  $.each(result, function (_index, _obj) {
      html += _this.showRadioDetail(_obj);
  });
  $("#radio_2").html(html);
}
IndexPage.prototype.showRadioDetail = function (_obj, td) {

  var html = '  <div class="radioLi_Div' + (_obj.onlineState == 1 ? "" : " offline") + '"">\
            <div class="radioLi_DivTop">\
              <font class="radioLi_DivTopName"  title="' + _obj.name + '">' + _obj.name + '</font>\
              <font class="radioLi_DivTopState">' + (_obj.onlineState == 1 ? "在线" : "离线") + '</font>\
            </div>\
            <div class="radioLi_DivBottom">\
              <img class="radioLi_DivBottomImg" src="../img/pics/icons/radioPic2.png" />\
              <div class="radioLi_divBtn1">\
                <font style="float:left;">音量调节:</font>\
<div  style="cursor:pointer;line-height:30px;" class="' + (_obj.onlineState == 1 ? "" : " nouse") + '" onclick="indexPage.setRadioVolume(\'' + _obj.serialNumber + '\',\'' + _obj.onlineState + '\')">\
               <img src="../img/pics/icons/voiceBtn2.png" style="width:25px;height:25px;"/>\
             </div>\
              </div>\
            </div>\
          </div>';
  //<div style="cursor:pointer;" class="radioLi_openClose closeBtn" id="radioCloseOpenBtn_' + (td ? td + "_" : "") + _obj.serialNumber + '" onclick="indexPage.RadioCloseOpenBtn(\'' + ("radioCloseOpenBtn_" + (td ? td + "_" : "") + _obj.serialNumber) + '\')">开</div>\
  return html;
}

IndexPage.prototype.setRadioVolume = function (id, state) {
  if (state != "1") {
    layer.msg("设备离线,无法控制");
    return;
  }
  layer.confirm('<div  style="float:left;width:80px;margin-top:20px;">音量设置:</div><div style="float:left;width:150px;margin-top:30px;" id="slideTest1" class="demo-slider"> </div><input type="hidden" id="slideTest1Value" />', {
    title: "音量设置",
    success: function () {
      layui.use('slider', function () {
        var $ = layui.$
        , slider = layui.slider;
        //默认滑块
        slider.render({
          elem: '#slideTest1',
          min: 0 //最小值
        , max: 15, //最大值,
          change: function (value) {
            $("#slideTest1Value").val(value);
            console.log('当前数值:' + value);
          }
        });
      });
    }
  }, function () {
    var data = {
      data: [id],
      volume: parseInt($("#slideTest1Value").val())
    }
    webapi.setmachinecodece(id, parseInt($("#slideTest1Value").val()), function (res) {
      console.log(res);
      if (res.msg && res.status!=200) {
        layer.msg(res.msg);
      }else{
        layer.closeAll();
      }
    });
   
  }, function () { })
}
IndexPage.prototype.RadioCloseOpenBtn = function (devControlBtnId) {
  var className = $("#" + devControlBtnId).attr("class");
  var devid = devControlBtnId.split("_")[devControlBtnId.split("_").length - 1];
  if (className.indexOf("closeBtn") >= 0) {
    layer.msg("远程关机接口异常");
    return;
    layer.confirm("是否确认关机", { title: "远程关机" }, function () {
      
      //webapi.remoteDoorCloseById(devid, function (res) {
      //  if (res.status == 200) {
      //    layer.closeAll();
      //    layer.msg("远程关机成功");
      // //   $("#" + devControlBtnId).attr("class", "doorLi_openClose closeBtn");
      //  } else {
      //    console.log(res);
      //    layer.msg("远程关机异常:" + res.msg);
      //  }
      //})
    }, function () { })
  } else {
    layer.confirm("开门时长:<input style='width:120px;color:black;' id='timeLong' value='10'/>秒", { title: "远程开门" }, function () {
      var timelong = parseInt($("#timeLong").val());
      webapi.remoteDoorOpenById(devid, timelong, function (res) {
        if (res.status == 200) {
          layer.closeAll();
          layer.msg("远程开门成功");
          $("#" + devControlBtnId).attr("class", "doorLi_openClose");
        } else {
          console.log(res);
          layer.msg("远程开门失败:" + res.msg);
        }
      })
    }, function () { })


  }
}
//==============摄像头============================
IndexPage.prototype.videooPage = function (id, name) {
  var _this = this;
  $("#chart_" + id).show();
   createCSystemStatic(id, name, config.video.deviceTypeId, false, function (result) {
     _this.showVideoListDetail(result);
   });
}


IndexPage.prototype.showVideoListDetail = function (result) {
  var _this = this;
  var html = "";
  result = result.sort(function (a, b) { return b.onlineState - a.onlineState });
  result = result.sort(function (a, b) { return b.status - a.status });
  var showNub = 0;
  $.each(result, function (_index, _obj) {
    if (showNub < 6) {
      showNub++;
    html += _this.showVideoDetail(_obj);
    }
  });
  $("#video_2").html(html);
  $.each(result, function (_index, _obj) {
    if (_index < 6) {
      if (_obj.stream) {
        indexPage.commonFunc.addVideo("videoList_" + _obj.id, config.videoBaseUrl, _obj.stream)
      }
    }
  });
 

}
IndexPage.prototype.showVideoDetail = function (_obj) {
  
  var html = '<div class="videoShowDiv' + (_obj.onlineState == 1 ? "" : " offline") + '"" style="width: 190px;height:110px; float: left;margin-left:20px;margin-top:15px;">\
       <video id="videoList_' + _obj.id + '" muted playsinline controls style="width:190px; height:110px;position:relative;"></video>\
       <div class="indexVideoContent" style="position:relative;bottom:46px;">\
         <font class="indexVideoTitle">' + _obj.name + '</font>\
         <font class="indexVideoState">' + (_obj.onlineState == 1 ? "在线" : "离线") + '</font>\
       </div>\
     </div>';
  return html;
}
//电梯
IndexPage.prototype.showLiftDetailByModel = function (modelName) {
  $("#liftNub").html(config.liftRunningDetail[modelName].name);
  var cameraId = config.Videos[modelName];
  webapi.runningDetail(config.liftRunningDetail[modelName].identifier, function (data) {
    $("#nowFloor").html(data.floor);
    $("#liftequipmentStatus").html(data.equipmentStatus);
    $("#lifttimes").html(data.times);
    $("#liftmileage").html(data.mileage);
  });
}
function createCSystemStatic(id, count, onlineState) {
    $("#chart_" + id).show();
    var _html = "<table style='width:100%;height:100%;'><tr><td style='height:120px; widht:50%;' id='" + id + "_chart1'> </td>\
    <td style='width:50%;color:white;font-size:16px;line-height:200%;'>\
<table style='width:100%;'>\
<tr><td colspan=2>监测设备总数</td></tr>\
<tr><td style='width:50%'><font style='color:#ff9900;font-size:20px;font-weight:700;'  id='right_" + id + "_all'>0</font>/个</td><td></td></tr>\
<tr><td >在线总数</td><td>离线总数</td></tr>\
<tr><td><font style='color:#ff9900;font-size:20px;font-weight:700;'  id='right_" + id + "_online'>0</font>/个</td><td><font style='color:#ff9900;font-size:20px;font-weight:700;' id='right_" + id + "_offline'>0</font>/个</td></tr>\
</table >\
</td></tr > ";
    _html += "</table>";
    $("#" + id + "_chart").html(_html);
    $("#right_" + id + "_all").html(count);
    $("#right_" + id + "_offline").html(count - onlineState);
    $("#right_" + id + "_online").html(onlineState);
    var rate = 0;
    if (count > 0) {
        rate = onlineState / count;
    }
    createDevRunPercent("index_chart1", rate);
}

function createCSystemRoomsStatic(id, count, onlineState) {
    $("#chart_" + id).show();
    var _html = "<table style='width:100%;height:100%;'><tr><td style='height:120px; widht:50%;' id='" + id + "_chart1'> </td>\
    <td style='width:50%;color:white;font-size:16px;line-height:200%;'>\
<table style='width:100%;'>\
<tr><td colspan=2>监测房间数</td></tr>\
<tr><td style='width:50%'><font style='color:#ff9900;font-size:20px;font-weight:700;'  id='right_" + id + "_all'>0</font>/个</td><td></td></tr>\
<tr><td >在线总数</td><td>离线总数</td></tr>\
<tr><td><font style='color:#ff9900;font-size:20px;font-weight:700;'  id='right_" + id + "_online'>0</font>/个</td><td><font style='color:#ff9900;font-size:20px;font-weight:700;' id='right_" + id + "_offline'>0</font>/个</td></tr>\
</table >\
</td></tr > ";
    _html += "</table>";
    $("#" + id + "_chart").html(_html);
    $("#right_" + id + "_all").html(count);
    $("#right_" + id + "_offline").html(count - onlineState);
    $("#right_" + id + "_online").html(onlineState);
    var rate = 0;
    if (count > 0) {
        rate = onlineState / count;
    }
    createDevRunPercent("index_chart1", rate);
}
function createDevRunPercent(id,value) {
  $("#" + id).html("<div id='" + id + "_Chart' style='width:100%;height:100%;float:left;'></div>");
     var myChart = echarts.init(document.getElementById(id + "_Chart"));
     let title = '运行率';
     let int = value.toFixed(2).split('.')[0];
     let float = value.toFixed(2).split('.')[1];
     var percent = parseInt(parseFloat(value.toFixed(2)) * 100)
     option = {
       title: {
         text: '{a|' + percent + '}{b|%}\n{c|' + title + '}',
         x: 'center',
         y: 'center',
         textStyle: {
           rich: {
             a: {
               fontSize: 28,
               color: '#fff',
               fontWeight: '600',
             },
             b: {
               fontSize: 16,
               color: '#fff',
               padding: [0, 0, 14, 0]
             },
             c: {
               fontSize: 16,
               color: '#fff',
               padding: [5, 0]
             }
           }
         }
       },
       series: [
         {
           type: 'gauge',
           radius: '100%',
           clockwise: false,
           startAngle: '90',
           endAngle: '-269.9999',
           splitNumber: 30,
           detail: {
             offsetCenter: [0, -20],
             formatter: ' '
           },
           pointer: {
             show: false
           },
           axisLine: {
             show: true,
             lineStyle: {
               color: [
                 [0, '#2CFAFC'],
                 [( 1 - (parseFloat(value.toFixed(2))==1?0.999: parseFloat(value.toFixed(2)))) , '#0ff'],
                 [1, '#0f232e']
               ],
               width: 20
             }
           },
           axisTick: {
             show: false
           },
           splitLine: {
             show: true,
             length: 100,
             lineStyle: {
               shadowBlur: 10,
               shadowColor: 'rgba(0, 255, 255, 1)',
               shadowOffsetY: '0',
               color: '#020f18',
               width: 2
             }
           },
           axisLabel: {
             show: false
           }
         },
         {
           type: 'pie',
           radius: ['74%', '75%'],
           hoverAnimation: false,
           clockWise: false,
           itemStyle: {
             normal: {
               color: '#0C355E'
             }
           },
           label: {
             show: false
           },
           data: _dashed()
         },

         {
           type: 'pie',
           radius: [0, '60%'],
           hoverAnimation: false,
           clockWise: false,
           itemStyle: {
             normal: {
               shadowBlur: 20,
               shadowColor: '#000',
               color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{
                 offset: 0,
                 color: '#0FF',
               }, {
                 offset: 1,
                 color: '#060f20'
               }])
             }
           },
           label: {
             show: false
           },
           data: [100]
         },
         {
           type: 'pie',
           radius: ['94%', '95.5%'],
           hoverAnimation: false,
           clockWise: false,
           itemStyle: {
             normal: {
               shadowBlur: 20,
               shadowColor: 'rgba(0, 255, 255,.3)',
               color: '#0f232e'
             }
           },
           label: {
             show: false
           },
           data: [100]
         },
         {
           type: 'pie',
           radius: ['98%', '99.5%'],
           hoverAnimation: false,
           clockWise: false,
           itemStyle: {
             normal: {
               shadowBlur: 20,
               shadowColor: 'rgba(0, 255, 255,.3)',
               color: 'rgba(15, 35, 46,.6)',
             }
           },
           label: {
             show: false
           },
           data: [100]
         },
       ]
     };

     function _dashed() {
       let dataArr = [];
       for (var i = 0; i < 100; i++) {
         if (i % 2 === 0) {
           dataArr.push({
             name: (i + 1).toString(),
             value: 20,
             itemStyle: {
               normal: {
                 color: 'rgb(0,255,255,.3)',
               }
             }
           })
         } else {
           dataArr.push({
             name: (i + 1).toString(),
             value: 20,
             itemStyle: {
               normal: {
                 color: 'rgb(0,0,0,0)',
                 borderWidth: 1,
                 borderColor: "rgba(0,255,255,1)"
               }
             }
           })
         }

       }
       return dataArr

     }
    myChart.setOption(option);
}
//创建在线离线柱状图
function createDevNubs(id, allDates, onlinedatas) {
  $("#" + id).html("<div id='" + id + "_Chart' style='width:60%;height:100%;float:left;'></div><div id='" + id +"_Chart2' style='width:40%;height:100%;float:left;'></div>");
  {
  var myChart = echarts.init(document.getElementById(id + "_Chart"));
  var salvProName = ["F13", "F12", "F11", "F10", "F9", "F8", "F7", "F6", "F5", "F4", "F3", "F2", "F1"];
  var salvProValue = onlinedatas;
  //for (var i = 0; i < 13; i++) {
  //  salvProValue.push(parseInt(Math.random()*100));
  //}
  var salvProMax = allDates;//背景按最大值
  //for (let i = 0; i < salvProValue.length; i++) {
  //  salvProMax.push(100)
  //}
  option = {
    grid: {
      left: '2%',
      right: '2%',
      bottom: '2%',
      top: '2%',
      containLabel: true
    },
    tooltip: {
      trigger: 'axis',
      axisPointer: {
        type: 'none'
      },
      formatter: function (params) {
        return params[0].name + ' : ' + params[0].value
      }
    },
    xAxis: {
      show: false,
      type: 'value'
    },
    yAxis: [{
      type: 'category',
      inverse: true,
      axisLabel: {
        show: true,
        textStyle: {
          color: '#fff',fontSize:9
        },
      },
      splitLine: {
        show: false
      },
      axisTick: {
        show: false
      },
      axisLine: {
        show: false
      },
      data: salvProName
    }, {
      type: 'category',
      inverse: true,
      axisTick: 'none',
      axisLine: 'none',
      show: true,
      axisLabel: {
        textStyle: {
          color: 'rgb(46,200,207,1)',
          fontSize: '10'
        },
      },
      data: salvProValue
    }],
    series: [{
      name: '值',
      type: 'bar',
      zlevel: 1,
      itemStyle: {
        normal: {
          barBorderRadius:9,
          color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
            offset: 0,
            color: 'rgb(46,200,207,0)'
          }, {
            offset: 1,
            color: 'rgb(46,200,207,1)'
          }]),
        },
      },
      barWidth: 4,
      data: salvProValue
    },
    {
      name: '背景',
      type: 'bar',
      barWidth: 4,
      barGap: '-100%',
      data: salvProMax,
      itemStyle: {
        normal: {
          color: 'rgba(24,31,68,1)',
          barBorderRadius: 9,
        }
      },
    },
    {
      name: '检查',
      type: 'pictorialBar',
      symbol: 'image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAAA6CAMAAADWZboaAAAAZlBMVEUAAABe3uVe3+Vf3uVf3+Zf3uVg3+Zg3+Zf3+Vi4OZh4OZg3+Z86/Bh3+Zi4Odj4Odi4OZ86/B76/B86/Bj4ed56+9x5+xn4umB7/N87PB36e+A7/N+7fF/7vJ/7vJ+7fGA7/OB7/PReX+lAAAAIXRSTlMABQkVDREmIhk3MR10LEFFPHh7cUprXE35h2XnqMLAp+mHAG9cAAAB5ElEQVRIx83WjU7CMBQFYIoiKMqU/XUboHv/l/Tce7t2XamDNSacETEmX86tlK2rx4py150o+MstMBLwWRfHKo6JCVxLnvmFGBjFQ58oF1//sUZhGy/ClSTWObgnL4O+bkeN4nY2okfNMbkRt9/vtxz8InoTsWplJSCzFxPmO8+GpSIByX3YQAuGDWtRKhKjCnxDXhF6Z4yxnZ20Wgko7BMRDmxtSGVaI4kdTIgb+zTYoJQlIMlDlmUFgrcDWWC201qSayqlTkiCddWWeV62VU0YlnpRi9VOKaSUsiyq/N0krwq2Ugt7lVpZl5BfHNiytjagMi+XYp0kCR45hMlivVQrE/uU5pXSrCB5bM6d1t2lOZItMqmliT3q5uVxqxzyW/ccfYLNKx7ZTeykMvNyac2yt2Fbc61MHLSC0rwoxbiNdlQ3GBm1NLHQsHUrtEXppR/ljNpW6DbSCoqlFiVoN6YdaFlgsSFVPs1BdT8OaB5QyQzVcaqWDows/zepxR8ObLglTrdtCRVuRNj4Rrxh+//0ke2f8KVL+Kon3GCSbmsJN9OUW3j6g0Ns+LgCij2u0h+Sghc8mlMPBMgdx5DFh59VmOVHrvmDnoNxCz3J7MFWsMuaLyR089xz/xhlfijvwutR8gv3zk6BLUUeCgAAAABJRU5ErkJggg==',
      symbolSize: [18, 18], symbolPosition: 'end',
      symbolOffset: [8, 0],
      z: 12,
      data: salvProValue
    }
    ]
  };
  myChart.setOption(option);

  }
  {

    var myChart = echarts.init(document.getElementById(id + "_Chart2"));
    var salvProName = ["F13", "F12", "F11", "F10", "F9", "F8", "F7", "F6", "F5", "F4", "F3", "F2", "F1"];
    var salvProValue = [];
    //for (var i = 0; i < 13; i++) {
    //  salvProValue.push(parseInt(Math.random() *30));
    //}
    var offlineData = [];
    $.each(allDates, function (_i,_o) {
      offlineData.push(_o - onlinedatas[_i]);
    })
    salvProValue = offlineData;
    var salvProMax = allDates;//背景按最大值
    //for (let i = 0; i < salvProValue.length; i++) {
    //  salvProMax.push(100)
    //}
    option = {
      grid: {
        left: '2%',
        right: '2%',
        bottom: '0%',
        top: '2%',
        containLabel: true
      },
      tooltip: {
        trigger: 'axis',
        axisPointer: {
          type: 'none'
        },
        formatter: function (params) {
          return params[0].name + ' : ' + params[0].value
        }
      },
      xAxis: {
        show: false,
        type: 'value'
      },
      yAxis: [{
        type: 'category',
        inverse: true,
        axisLabel: {
          show: false,
          textStyle: {
            color: '#fff'
          },
        },
        splitLine: {
          show: false
        },
        axisTick: {
          show: false
        },
        axisLine: {
          show: false
        },
        data: salvProName
      }, {
        type: 'category',
        inverse: true,
        axisTick: 'none',
        axisLine: 'none',
        show: true,
        axisLabel: {
          textStyle: {
            color: '#ff8D63',
            fontSize: '10'
          },
        },
        data: salvProValue
      }],
      series: [{
        name: '值',
        type: 'bar',
        zlevel: 1,
        itemStyle: {
          normal: {
            barBorderRadius: 9,
            color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
              offset: 0,
              color: 'rgb(238,141,99,0)'
            }, {
              offset: 1,
              color: '#EE8D63'
            }]),
          },
        },
        barWidth: 4,
        data: salvProValue
      },
      {
        name: '背景',
        type: 'bar',
        barWidth: 4,
        barGap: '-100%',
        data: salvProMax,
        itemStyle: {
          normal: {
            color: 'rgba(24,31,68,1)',
            barBorderRadius: 9,
          }
        },
      }
      ]
    };
    myChart.setOption(option);

  }
}
function showDevDetail(objname) {
    //devType, devId, devName
    //"devLogo_" + _this.functionState +  "_" + _obj.type+"_" + _obj.id + "_" + _obj.name;
  
    var devType = objname.split("_")[1];
    var devId = objname.split("_")[3];
    var devName = objname.split("_")[4];
  var html = "设备信息";
  var height = "150px";
  var width = "100px";
    {
      switch (devType) {
       case "rooms": {
           html = '<div style="height:40px;text-align:center;font-size:16px;line-height:40px;">';
           html += devName+' </div>';
           height = "50px"
              width = "auto"
          } break;
          case "xzldb":
          case "xfmdyl":
              {
           html = indexPage.showMetesValueDetail(objname);
              height = "160px"
              width = "415px"
          } break;
      case "door": {
        html = indexPage.showDoorDetail(devDataInfo, "3d");
        setTimeout(function () {
          indexPage.getDoorState(true);
        }, 200)
        height = "220px"
        width = "185px"
      } break;
      case "aircontrol": {
        html = indexPage.showAirControlMetesValueDetail(devDataInfo);
        height = "150px"
        width = "270px"
      } break;
      case "radio": {
        html = indexPage.showRadioDetail(devDataInfo);
        height = "220px"
        width = "185px"

      } break;
      case "fire": {


      } break;
      case "TV": {
        html = indexPage.showTVDetail(devDataInfo, "3d");
        height = "250px"
        width = "185px"
      } break;
      case "video": {
        html = '<div class="videoShowDiv' + (devDataInfo.onlineState == 1 ? "" : " offline") + '"" style="width: 190px;height:110px; float: left;">\
       <video id="videoDetail_' + devDataInfo.id + '" muted playsinline controls style="width:190px; height:110px;position:relative;"></video>\
       <div class="indexVideoContent" style="position:relative;bottom:36px;">\
         <font class="indexVideoTitle">' + devDataInfo.name + '</font>\
         <font class="indexVideoState">' + (devDataInfo.onlineState == 1 ? "在线" : "离线") + '</font>\
       </div>\
      <div id="playbtn_' + devDataInfo.id + '" style="position:relative;bottom:130px;width:100%;height:60px;padding-left:60px;cursor:pointer;" ><img onclick="$(\'#playbtn_' + devDataInfo.id + '\').hide();indexPage.commonFunc.addVideo(\'videoDetail_' + devDataInfo.id + '\', \'' + config.videoBaseUrl + '\', \'' + devDataInfo.stream + '\');" src="../img/pics/icons/play-filling.png" style="width:60px;height:60px;"/></div>\
     </div>';
        height = "140px";
        width = "220px";
        //if (devDataInfo.stream) {
        //setTimeout(function () {
        //  
        //}, 1000);
        //}
      } break;
      case "lift": { } break;
    }
  } 
  return {
    html:html,
    width: width,
    height: height,

  };
}
function showDevListByType(devType,list) {
  switch (devType) {
    case "door": { indexPage.showDoorListDetail(list); } break;
    case "aircontrol": { indexPage.showAircontrolListDetail(list); } break;
    case "radio": { indexPage.showRadioListDetail(list); } break;
    case "fire": { } break;
    case "TV": {indexPage.showTVListDetail(list);} break;
    case "video": { indexPage.showVideoListDetail(list); } break;
    case "environment": { indexPage.showEnvironmentListDetail(list); } break;
    case "lift": { } break;
  }
}
function getDevInfoByTypeIdAndDevId(tid,did) {
  var devDatas = webapi.DeviceListCache["deviceType_" + tid];
  var devinfo = null;
  $.each(devDatas, function (_index, _obj) {
    if (_obj.id == did) {
      devinfo = _obj;
    }
  });
  return devinfo;
}
View Code

 

 

 

由于篇幅原因,这一课先介绍到这里 

后面我将继续讲解用webgl 建立 3D隧道、3D桥梁、webgl实现三维隧道桥梁、three.js实现三维隧道桥梁、桥梁隧道三维应用炫酷效果等等

技术交流 1203193731@qq.com

交流微信:

    

如果你有什么要交流的心得 可邮件我

 

 

其它相关文章:

使用webgl(three.js)创建3D机房,3D机房微模块详细介绍(升级版二)

如何用webgl(three.js)搭建一个3D库房-第一课

如何用webgl(three.js)搭建一个3D库房,3D密集架,3D档案室,-第二课

使用webgl(three.js)搭建一个3D建筑,3D消防模拟——第三课

使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课

如何用webgl(three.js)搭建不规则建筑模型,客流量热力图模拟

 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课(炫酷版一)

使用webgl(three.js)搭建3D智慧园区、3D大屏,3D楼宇,智慧灯杆三维展示,3D灯杆,web版3D,bim管理系统——第六课

 

posted @ 2021-11-19 21:13  魂断蓝桥666  阅读(4441)  评论(3编辑  收藏  举报