index.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  1. <!-- 安全总览 -->
  2. <template>
  3. <div class="newSafetyOverview">
  4. <!--背景遮罩层-->
  5. <img class="map-back-img" src="@/assets/ZDimages/map_back.png">
  6. <!--背景地图-->
  7. <canvasMap ref="canvasMap" class="canvasMap-box"></canvasMap>
  8. <!--左侧-->
  9. <div class="left-max-big-box">
  10. <laboratoryData></laboratoryData>
  11. <secondaryCollegeUnitLaboratoryStatistics></secondaryCollegeUnitLaboratoryStatistics>
  12. <subComponents></subComponents>
  13. </div>
  14. <!--中间-->
  15. <div class="center-max-big-box">
  16. <div class="center-top-button-max-box">
  17. <img class="position-img position-img-1" src="@/assets/ZDimages/img_bg_cdo@1x.png">
  18. <img class="position-img position-img-2" src="@/assets/ZDimages/img_bg_xz@1x.png">
  19. <img class="position-img position-img-3" src="@/assets/ZDimages/img_bg_zc@1x.png">
  20. <img class="position-img position-img-4" src="@/assets/ZDimages/img_bg_zc@1x.png">
  21. <img class="position-img position-img-5" src="@/assets/ZDimages/img_bg_zc@1x.png">
  22. <img class="position-img position-img-6" src="@/assets/ZDimages/img_bg_zc@1x.png">
  23. <img class="position-img position-img-7" src="@/assets/ZDimages/img_bg_zc@1x.png">
  24. <img class="position-img position-img-8" src="@/assets/ZDimages/img_bg_cdo@1x.png">
  25. <p class="null-p"></p>
  26. <p class="button-check-p">安全总览</p>
  27. <p class="button-p" @click="goPage(2)">资源设备</p>
  28. <p class="button-p" @click="goPage(3)">三维模型</p>
  29. <p class="button-p" @click="goPage(4)">视频监控</p>
  30. <p class="button-p" @click="goPage(5)">应急管控</p>
  31. <p class="button-p" @click="goPage(6)">纯水监测</p>
  32. <p class="null-p"></p>
  33. </div>
  34. <centerNumData></centerNumData>
  35. </div>
  36. <!--右侧-->
  37. <div class="right-max-big-box">
  38. <statisticalAnalysisOfHazardSources></statisticalAnalysisOfHazardSources>
  39. <statisticalAnalysisOfHazardousChemicals></statisticalAnalysisOfHazardousChemicals>
  40. <resourceAndEquipmentStatistics></resourceAndEquipmentStatistics>
  41. </div>
  42. </div>
  43. </template>
  44. <script>
  45. import mqtt from 'mqtt'
  46. import {
  47. laboratoryBigViewSelectTriggerInfo,
  48. } from "@/api/index";
  49. import laboratoryData from "./pageComponent/laboratoryData.vue";
  50. import secondaryCollegeUnitLaboratoryStatistics from "./pageComponent/secondaryCollegeUnitLaboratoryStatistics.vue";
  51. import subComponents from "./pageComponent/subComponents.vue";
  52. import statisticalAnalysisOfHazardSources from "./pageComponent/statisticalAnalysisOfHazardSources.vue";
  53. import statisticalAnalysisOfHazardousChemicals from "./pageComponent/statisticalAnalysisOfHazardousChemicals.vue";
  54. import resourceAndEquipmentStatistics from "./pageComponent/resourceAndEquipmentStatistics.vue";
  55. import centerNumData from "./pageComponent/centerNumData.vue";
  56. import canvasMap from "./pageComponent/canvasMap.vue";
  57. export default {
  58. name: 'index',
  59. components: {
  60. laboratoryData,
  61. secondaryCollegeUnitLaboratoryStatistics,
  62. subComponents,
  63. statisticalAnalysisOfHazardSources,
  64. statisticalAnalysisOfHazardousChemicals,
  65. resourceAndEquipmentStatistics,
  66. centerNumData,
  67. canvasMap,
  68. },
  69. data () {
  70. return {
  71. //预案MQTT
  72. planOpic:'lab/risk/plan/change',
  73. planClient:{},
  74. //预案数据
  75. alarmPropsData:{},
  76. //校区模型关系
  77. schoolModelList:[
  78. // {school:'B', name:'5号楼', buildId:'101093843117592833',buildIdList:[],},
  79. {school:'B', name:'6B教学楼', buildId:'101093843117592815',buildIdList:[],},
  80. {school:'B', name:'中心实验楼', buildId:'101093843117592829',buildIdList:[],},
  81. {school:'B', name:'信息工程学院教学楼', buildId:'101093843117592812',buildIdList:[],},
  82. {school:'B', name:'养虫楼', buildId:'101093843117592805',buildIdList:[],},
  83. {school:'B', name:'农业机械实验室平房', buildId:'101093843117592807',buildIdList:[],},
  84. {school:'B', name:'农药研究所', buildId:'101093843117592804',buildIdList:[],},
  85. {school:'B', name:'动物中心B座', buildId:'101093843117592785',buildIdList:[],},
  86. {school:'B', name:'动物中心实验楼A', buildId:'101093843117592765',buildIdList:[],},
  87. {school:'B', name:'动物中心实验楼B', buildId:'101093843117592764',buildIdList:[],},
  88. {school:'B', name:'动物科技学院楼', buildId:'101093843117592831',buildIdList:[],},
  89. {school:'B', name:'动科楼', buildId:'101093843117592832',buildIdList:[],},
  90. {school:'B', name:'北1号教学楼', buildId:'101093843117592802',buildIdList:[],},
  91. {school:'B', name:'北2号教学楼', buildId:'101093843117592813',buildIdList:[],},
  92. {school:'B', name:'北3号教学楼', buildId:'101093843117592782',buildIdList:[],},
  93. {school:'B', name:'北4号教学楼', buildId:'101093843117592781',buildIdList:[],},
  94. {school:'B', name:'北5号教学楼', buildId:'101093843117592783',buildIdList:['101093843117592783','101093843117592833'],},
  95. {school:'B', name:'北6号教学楼', buildId:'101093843117592814',buildIdList:[],},
  96. {school:'B', name:'北7号教学楼', buildId:'101093843117592816',buildIdList:[],},
  97. {school:'B', name:'危化品服务中心', buildId:'101093843117592826',buildIdList:[],},
  98. // {school:'B', name:'原农一站办公楼', buildId:'101093843117592811',buildIdList:[],},
  99. // {school:'B', name:'工程训练中心楼', buildId:'101093843117592808',buildIdList:[],},
  100. // {school:'B', name:'教学办公楼', buildId:'101093843117592806',buildIdList:[],},
  101. // {school:'B', name:'未知实验室 ',buildId:'1855791848753147906',buildIdList:[],},
  102. // {school:'B', name:'机械及液压实验室平房', buildId:'101093843117592810',buildIdList:[],},
  103. {school:'B', name:'机电锻铸车间', buildId:'101093843117592809',buildIdList:['101093843117592809','101093843117592811','101093843117592808','101093843117592806','1855791848753147906','101093843117592810'],},
  104. // {school:'B', name:'水利与建筑工程学院', buildId:'101093843117592788',buildIdList:[],},
  105. // {school:'B', name:'水利与建筑工程学院A', buildId:'101093843117592766',buildIdList:[],},
  106. // {school:'B', name:'水利与建筑工程学院B', buildId:'101093843117592768',buildIdList:[],},
  107. // {school:'B', name:'水利与建筑工程学院C', buildId:'101093843117592769',buildIdList:[],},
  108. // {school:'B', name:'水利与建筑工程学院D', buildId:'101093843117592767',buildIdList:[],},
  109. {school:'B', name:'水工厅', buildId:'1871736666456633346',buildIdList:['1871736666456633346','101093843117592788','101093843117592766','101093843117592768','101093843117592769','101093843117592767'],},
  110. {school:'B', name:'水工水力学实验大厅', buildId:'1871729400227606529',buildIdList:[],},
  111. {school:'B', name:'理科综合实验楼A', buildId:'101093843117592774',buildIdList:['101093843117592774','101093843117592779','101093843117592775','101093843117592776','101093843117592780'],},
  112. // {school:'B', name:'理科综合实验楼B', buildId:'101093843117592779',buildIdList:[],},
  113. // {school:'B', name:'理科综合实验楼C', buildId:'101093843117592775',buildIdList:[],},
  114. // {school:'B', name:'理科综合实验楼D', buildId:'101093843117592776',buildIdList:[],},
  115. // {school:'B', name:'理科综合实验楼E', buildId:'101093843117592780',buildIdList:[],},
  116. {school:'B', name:'老昆虫博物馆', buildId:'101093843117592786',buildIdList:[],},
  117. {school:'B', name:'食品楼', buildId:'101093843117592789',buildIdList:['101093843117592789','101093843117592771','101093843117592770','101093843117592772','101093843117592773'],},
  118. // {school:'B', name:'食品楼A', buildId:'101093843117592771',buildIdList:[],},
  119. // {school:'B', name:'食品楼B', buildId:'101093843117592770',buildIdList:[],},
  120. // {school:'B', name:'食品楼C', buildId:'101093843117592772',buildIdList:[],},
  121. // {school:'B', name:'食品楼D', buildId:'101093843117592773',buildIdList:[],},
  122. {school:'N', name:'农科楼(农学院)', buildId:'101084081109864872',buildIdList:['101084081109864872','101084081109864874','101084081109864873','101093843117592803'],},
  123. // {school:'N', name:'农科楼(园艺学院)', buildId:'101084081109864874',buildIdList:[],},
  124. // {school:'N', name:'农科楼(植物保护学院)', buildId:'101084081109864873',buildIdList:[],},
  125. // {school:'N', name:'农科楼(资源环境学院)', buildId:'101093843117592803',buildIdList:[],},
  126. {school:'N', name:'农科院子校教学楼(初中)', buildId:'101093843117592823',buildIdList:[],},
  127. {school:'N', name:'南2号教学楼', buildId:'101093843117592817',buildIdList:[],},
  128. {school:'N', name:'南3号教学楼', buildId:'101093843117592820',buildIdList:[],},
  129. {school:'N', name:'南校子校楼', buildId:'101093843117592800',buildIdList:[],},
  130. {school:'N', name:'南校水保楼', buildId:'101093843117592801',buildIdList:[],},
  131. {school:'N', name:'家畜生物学重点实验室楼', buildId:'101093843117592787',buildIdList:[],},
  132. {school:'N', name:'木艺坊', buildId:'101093843117592819',buildIdList:[],},
  133. {school:'N', name:'林学院实验楼', buildId:'101093843117592818',buildIdList:[],},
  134. {school:'N', name:'科研主楼', buildId:'101093843117592784',buildIdList:['101093843117592784','101093843117592822'],},
  135. // {school:'N', name:'科研楼', buildId:'101093843117592822',buildIdList:[],},
  136. {school:'N', name:'经管园林楼(文科楼)A', buildId:'101093843117592777',buildIdList:[],},
  137. {school:'N', name:'经管园林楼(文科楼)C', buildId:'101093843117592778',buildIdList:[],},
  138. {school:'N', name:'草业与草原楼', buildId:'101093843117592825',buildIdList:[],},
  139. {school:'N', name:'林学院实验楼', buildId:'101093843117592821',buildIdList:[],},
  140. {school:'旱研院校区', name:'农一站科研楼', buildId:'101093843117592827',buildIdList:[],},
  141. {school:'旱研院校区', name:'农机一站平房', buildId:'101093843117592828',buildIdList:[],},
  142. {school:'校外', name:'农三站科研办公楼', buildId:'101093843117592790',buildIdList:[],},
  143. {school:'校外', name:'器材楼', buildId:'101093843117592792',buildIdList:[],},
  144. {school:'水保所校区', name:'人工降雨实验大厅', buildId:'101093843117592793',buildIdList:[],},
  145. {school:'水保所校区', name:'南校区农科楼', buildId:'101093843117592799',buildIdList:[],},
  146. {school:'水保所校区', name:'国家重点实验室西楼', buildId:'101093843117592798',buildIdList:[],},
  147. {school:'水保所校区', name:'水保所人工干旱环境气候室工程', buildId:'101093843117592795',buildIdList:[],},
  148. {school:'水保所校区', name:'水保所国家重点实验室楼', buildId:'101093843117592794',buildIdList:[],},
  149. {school:'水保所校区', name:'水保所科研大楼', buildId:'101093843117592797',buildIdList:[],},
  150. {school:'水保所校区', name:'水保所西区科研楼', buildId:'101093843117592796',buildIdList:[],},
  151. {school:'老附中校区', name:'附中实验楼', buildId:'101093843117592830',buildIdList:[],},
  152. {school:'老附中校区', name:'附中教学楼', buildId:'101093843117592791',buildIdList:[],},
  153. ],
  154. }
  155. },
  156. created () {
  157. },
  158. mounted () {
  159. //判断是否已有预警MQTT链接
  160. if(!this.planClient.unsubscribe){
  161. this.offPlanMQTT('on');
  162. }
  163. //查询是否有预案发生
  164. this.laboratoryBigViewSelectTriggerInfo();
  165. },
  166. methods: {
  167. demo(){
  168. console.log('demo')
  169. // let list = [{
  170. // "subName": "分子设计育种实验室",
  171. // "riskPlanName": "温度测试预案",
  172. // "eventStartTime": "2025-03-12T10:42:18",
  173. // "deptName": "草业学院",
  174. // "schoolName": "南校区",
  175. // "buildId": "101093843117592777",
  176. // "buildName": "草业与草原楼",
  177. // "floorName": "1层",
  178. // "roomNum": "109",
  179. // "classLevelName": "Ⅲ级",
  180. // "classLevelColor": "#FFBB00",
  181. // },{
  182. // "subName": "分子设计育种实验室",
  183. // "riskPlanName": "温度测试预案",
  184. // "eventStartTime": "2025-03-12T10:42:18",
  185. // "deptName": "草业学院",
  186. // "schoolName": "南校区",
  187. // "buildId": "101084081109864872",
  188. // "buildName": "草业与草原楼",
  189. // "floorName": "1层",
  190. // "roomNum": "109",
  191. // "classLevelName": "Ⅲ级",
  192. // "classLevelColor": "#FFBB00",
  193. // },{
  194. // "subName": "分子设计育种实验室",
  195. // "riskPlanName": "温度测试预案",
  196. // "eventStartTime": "2025-03-12T10:42:18",
  197. // "deptName": "草业学院",
  198. // "schoolName": "南校区",
  199. // "buildId": "101093843117592817",
  200. // "buildName": "草业与草原楼",
  201. // "floorName": "1层",
  202. // "roomNum": "109",
  203. // "classLevelName": "Ⅲ级",
  204. // "classLevelColor": "#FFBB00",
  205. // },{
  206. // "subName": "分子设计育种实验室",
  207. // "riskPlanName": "温度测试预案",
  208. // "eventStartTime": "2025-03-12T10:42:18",
  209. // "deptName": "草业学院",
  210. // "schoolName": "南校区",
  211. // "buildId": "101093843117592820",
  212. // "buildName": "草业与草原楼",
  213. // "floorName": "1层",
  214. // "roomNum": "109",
  215. // "classLevelName": "Ⅲ级",
  216. // "classLevelColor": "#FFBB00",
  217. // },{
  218. // "subName": "分子设计育种实验室",
  219. // "riskPlanName": "温度测试预案",
  220. // "eventStartTime": "2025-03-12T10:42:18",
  221. // "deptName": "草业学院",
  222. // "schoolName": "南校区",
  223. // "buildId": "101093843117592787",
  224. // "buildName": "草业与草原楼",
  225. // "floorName": "1层",
  226. // "roomNum": "109",
  227. // "classLevelName": "Ⅲ级",
  228. // "classLevelColor": "#FFBB00",
  229. // },{
  230. // "subName": "分子设计育种实验室",
  231. // "riskPlanName": "温度测试预案",
  232. // "eventStartTime": "2025-03-12T10:42:18",
  233. // "deptName": "草业学院",
  234. // "schoolName": "南校区",
  235. // "buildId": "101093843117592819",
  236. // "buildName": "草业与草原楼",
  237. // "floorName": "1层",
  238. // "roomNum": "109",
  239. // "classLevelName": "Ⅲ级",
  240. // "classLevelColor": "#FFBB00",
  241. // },{
  242. // "subName": "分子设计育种实验室",
  243. // "riskPlanName": "温度测试预案",
  244. // "eventStartTime": "2025-03-12T10:42:18",
  245. // "deptName": "草业学院",
  246. // "schoolName": "南校区",
  247. // "buildId": "101093843117592784",
  248. // "buildName": "草业与草原楼",
  249. // "floorName": "1层",
  250. // "roomNum": "109",
  251. // "classLevelName": "Ⅲ级",
  252. // "classLevelColor": "#FFBB00",
  253. // },{
  254. // "subName": "分子设计育种实验室",
  255. // "riskPlanName": "温度测试预案",
  256. // "eventStartTime": "2025-03-12T10:42:18",
  257. // "deptName": "草业学院",
  258. // "schoolName": "南校区",
  259. // "buildId": "101093843117592825",
  260. // "buildName": "草业与草原楼",
  261. // "floorName": "1层",
  262. // "roomNum": "109",
  263. // "classLevelName": "Ⅲ级",
  264. // "classLevelColor": "#FFBB00",
  265. // },{
  266. // "subName": "分子设计育种实验室",
  267. // "riskPlanName": "温度测试预案",
  268. // "eventStartTime": "2025-03-12T10:42:18",
  269. // "deptName": "草业学院",
  270. // "schoolName": "南校区",
  271. // "buildId": "101093843117592821",
  272. // "buildName": "草业与草原楼",
  273. // "floorName": "1层",
  274. // "roomNum": "109",
  275. // "classLevelName": "Ⅲ级",
  276. // "classLevelColor": "#FFBB00",
  277. // },{
  278. // "subName": "分子设计育种实验室",
  279. // "riskPlanName": "温度测试预案",
  280. // "eventStartTime": "2025-03-12T10:42:18",
  281. // "deptName": "草业学院",
  282. // "schoolName": "南校区",
  283. // "buildId": "101093843117592821",
  284. // "buildName": "草业与草原楼",
  285. // "floorName": "1层",
  286. // "roomNum": "109",
  287. // "classLevelName": "Ⅲ级",
  288. // "classLevelColor": "#FFBB00",
  289. // },{
  290. // "subName": "分子设计育种实验室",
  291. // "riskPlanName": "温度测试预案",
  292. // "eventStartTime": "2025-03-12T10:42:18",
  293. // "deptName": "草业学院",
  294. // "schoolName": "南校区",
  295. // "buildId": "101093843117592821",
  296. // "buildName": "草业与草原楼",
  297. // "floorName": "1层",
  298. // "roomNum": "109",
  299. // "classLevelName": "Ⅲ级",
  300. // "classLevelColor": "#FFBB00",
  301. // },];
  302. let list = [{
  303. "subName": "分子设计育种实验室",
  304. "riskPlanName": "温度测试预案",
  305. "eventStartTime": "2025-03-12T10:42:18",
  306. "deptName": "草业学院",
  307. "schoolName": "南校区",
  308. "buildId": "101093843117592809",
  309. "buildName": "草业与草原楼",
  310. "floorName": "1层",
  311. "roomNum": "109",
  312. "classLevelName": "Ⅲ级",
  313. "classLevelColor": "#FFBB00",
  314. "school":'B'
  315. },{
  316. "subName": "分子设计育种实验室",
  317. "riskPlanName": "温度测试预案",
  318. "eventStartTime": "2025-03-12T10:42:18",
  319. "deptName": "草业学院",
  320. "schoolName": "南校区",
  321. "buildId": "101093843117592809",
  322. "buildName": "草业与草原楼",
  323. "floorName": "1层",
  324. "roomNum": "109",
  325. "classLevelName": "Ⅲ级",
  326. "classLevelColor": "#FFBB00",
  327. "school":'B'
  328. }]
  329. let obj = {
  330. "subName": "分子设计育种实验室",
  331. "riskPlanName": "温度测试预案",
  332. "eventStartTime": "2025-03-12T10:42:18",
  333. "deptName": "草业学院",
  334. "schoolName": "南校区",
  335. "buildId": "101093843117592809",
  336. "buildName": "草业与草原楼",
  337. "floorName": "1层",
  338. "roomNum": "109",
  339. "classLevelName": "Ⅲ级",
  340. "classLevelColor": "#FFBB00",
  341. "school":'B'
  342. };
  343. this.$refs['canvasMap'].alarmTrigger(list,obj,obj.school);
  344. },
  345. demo1(){
  346. this.$refs['canvasMap'].alarmOff();
  347. },
  348. //页面切换
  349. goPage(type){
  350. this.$parent.pageCheck(type);
  351. },
  352. checkComponentType(type){
  353. this.$set(this,'pageType',type);
  354. },
  355. //预案-MQTT连接
  356. offPlanMQTT(type){
  357. let self = this;
  358. if(self.planClient.unsubscribe){
  359. self.planClient.unsubscribe(self.planOpic, error => {
  360. if (error) {
  361. // console.log('mqtt关闭连接错误:', error)
  362. }
  363. })
  364. self.planClient.end();
  365. this.$set(this,'planClient',{});
  366. }
  367. //判断传入参数如果存在 发起一次新的连接
  368. if(type){
  369. this.planMQTT();
  370. }
  371. },
  372. //预案-MQTT订阅
  373. planMQTT(){
  374. let self = this;
  375. this.planClient = mqtt.connect(localStorage.getItem('mqttUrl'), {
  376. username: localStorage.getItem('mqttUser'),
  377. password:localStorage.getItem('mqttPassword')
  378. });
  379. this.planClient.on("connect", e =>{
  380. this.planClient.subscribe(self.planOpic, (err) => {
  381. if (!err) {
  382. // console.log("预案-订阅成功:" + self.planOpic);
  383. }else{
  384. // console.log("预案-连接错误:" + err);
  385. }
  386. });
  387. });
  388. this.planClient.on("message", (topic, message) => {
  389. if (message){
  390. //获取预案数据
  391. this.laboratoryBigViewSelectTriggerInfo();
  392. }
  393. });
  394. },
  395. //查询当前正在发生的预案
  396. laboratoryBigViewSelectTriggerInfo(){
  397. let self = this;
  398. laboratoryBigViewSelectTriggerInfo().then(response => {
  399. if(response.data[0]){
  400. response.data.forEach((item)=>{
  401. item.triggerUploadData = JSON.parse(item.triggerUploadData);
  402. item.alarmText = item.riskPlanName.split('预案');
  403. item.alarmText = item.alarmText[0].split('预警');
  404. item.alarmText = item.alarmText[0]+'预警';
  405. //修正楼栋ID用于匹配本地数据
  406. self.schoolModelList.forEach((minItem)=>{
  407. if(minItem.buildIdList[0]){
  408. minItem.buildIdList.forEach((minItemMin)=>{
  409. if(item.buildId == minItemMin){
  410. item.buildId = minItem.buildId;
  411. }
  412. })
  413. }
  414. })
  415. })
  416. //报警提示title信息
  417. this.$set(this,'alarmTitle',response.data[response.data.length-1].alarmText);
  418. //报警窗口数据
  419. this.$set(this,'alarmPropsData',response.data[response.data.length-1]);
  420. //报警窗口开启
  421. this.$set(this,'pageType',2);
  422. this.$set(this,'deptVideoType',false);
  423. //判断报警楼栋属于南北校区
  424. setTimeout(function(){
  425. self.schoolModelList.forEach((item)=>{
  426. if(item.buildId == response.data[response.data.length-1].buildId){
  427. self.$refs['canvasMap'].alarmTrigger(response.data,response.data[response.data.length-1],item.school);
  428. }
  429. })
  430. },1500);
  431. //报警声音
  432. if(this.audioType){
  433. /* 报警音频播放 */
  434. const audio = this.$refs.audioPlayer;
  435. // 尝试静音自动播放
  436. audio.play().catch(() => {
  437. // 如果失败,延迟 2 秒再次尝试(趁浏览器未完全冻结)
  438. setTimeout(() => audio.play(), 2000);
  439. });
  440. // 延迟 3 秒后尝试取消静音(需浏览器允许)
  441. setTimeout(() => {
  442. audio.muted = false;
  443. }, 3000);
  444. }
  445. }else{
  446. //报警结束
  447. this.$set(this,'pageType',1);
  448. this.$set(this,'deptVideoType',false);
  449. setTimeout(function(){
  450. self.$refs['canvasMap'].alarmOff();
  451. },1500);
  452. }
  453. })
  454. },
  455. },
  456. beforeDestroy() {
  457. let self = this;
  458. // MQTT预警
  459. self.offPlanMQTT();
  460. },
  461. destroyed() {
  462. }
  463. }
  464. </script>
  465. <style scoped lang="scss">
  466. .newSafetyOverview{
  467. padding:0 62px;
  468. height:1409px;
  469. display: flex;
  470. //地图背景遮罩
  471. .map-back-img{
  472. position: absolute;
  473. z-index:11;
  474. width:2594px;
  475. height:1320px;
  476. top: 122px;
  477. left: 64px;
  478. }
  479. //地图
  480. .canvasMap-box{
  481. z-index: 10;
  482. }
  483. //左侧
  484. .left-max-big-box{
  485. width:652px;
  486. padding-top:10px;
  487. z-index: 15;
  488. }
  489. //中间
  490. .center-max-big-box{
  491. width:1293px;
  492. position: relative;
  493. z-index: 15;
  494. .center-top-button-max-box{
  495. width:911px;
  496. position: absolute;
  497. left:50%;
  498. margin:0 -445px;
  499. height:60px;
  500. display: flex;
  501. .position-img-1{
  502. position:absolute;
  503. top:0;
  504. left:-74px;
  505. }
  506. .position-img-2{
  507. position:absolute;
  508. top:0;
  509. left:9px;
  510. }
  511. .position-img-3{
  512. position:absolute;
  513. top:0;
  514. left:154px;
  515. }
  516. .position-img-4{
  517. position:absolute;
  518. top:0;
  519. left:300px;
  520. }
  521. .position-img-5{
  522. position:absolute;
  523. top:0;
  524. left:446px;
  525. }
  526. .position-img-6{
  527. position:absolute;
  528. top:0;
  529. left:592px;
  530. }
  531. .position-img-7{
  532. position:absolute;
  533. top:0;
  534. left:740px;
  535. }
  536. .position-img-8{
  537. position:absolute;
  538. top:0;
  539. left:888px;
  540. }
  541. .null-p{
  542. flex:1;
  543. }
  544. .button-p{
  545. z-index:5;
  546. cursor: pointer;
  547. font-family: Source Han Sans, Source Han Sans;
  548. width:145px;
  549. font-size:24px;
  550. font-weight:700;
  551. line-height:60px;
  552. text-align: center;
  553. background: -webkit-linear-gradient(0deg, #FFFFFF, #FFFFFF); /* Chrome, Safari */
  554. background: linear-gradient(0deg, #FFFFFF, #FFFFFF); /* 标准语法 */
  555. -webkit-background-clip: text; /* Chrome, Safari */
  556. background-clip: text;
  557. -webkit-text-fill-color: transparent; /* Chrome, Safari */
  558. color: transparent; /* 其他浏览器 */
  559. }
  560. .button-check-p{
  561. z-index:5;
  562. cursor: pointer;
  563. font-family: Source Han Sans, Source Han Sans;
  564. width:145px;
  565. font-weight:700;
  566. font-size:24px;
  567. line-height:24px;
  568. height:24px;
  569. margin-top:18px;
  570. text-align: center;
  571. background: -webkit-linear-gradient(0deg, #34e4ff, #FFFFFF); /* Chrome, Safari */
  572. background: linear-gradient(0deg, #34e4ff, #FFFFFF); /* 标准语法 */
  573. -webkit-background-clip: text; /* Chrome, Safari */
  574. background-clip: text;
  575. -webkit-text-fill-color: transparent; /* Chrome, Safari */
  576. color: transparent; /* 其他浏览器 */
  577. }
  578. }
  579. }
  580. //右侧
  581. .right-max-big-box{
  582. width:652px;
  583. padding-top:10px;
  584. z-index: 15;
  585. }
  586. }
  587. </style>