planAlarm.vue 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933
  1. <template>
  2. <div class="planAlarm">
  3. <div class="planAlarmBlack" v-if="showType">
  4. <div class="planAlarm-max-big-box">
  5. <div class="planAlarm-title-box">
  6. <p class="top-name-p">预警事件详情</p>
  7. <p class="top-out-p el-icon-close" @click="outPlan"></p>
  8. </div>
  9. <div class="planAlarm-name-box">
  10. <div class="lv-box"
  11. :class="planData.riskPlanLevel == 1?'type-color-a':(planData.riskPlanLevel == 2?'type-color-b':(planData.riskPlanLevel == 3?'type-color-c':(planData.riskPlanLevel == 4?'type-color-d':'')))">
  12. <div>{{planData.riskPlanLevel == 1?'低风险':(planData.riskPlanLevel == 2?'中风险':(planData.riskPlanLevel == 3?'较高风险':(planData.riskPlanLevel == 4?'高风险':'')))}}
  13. </div>
  14. </div>
  15. <p class="name-p">{{subData.subName}}{{subData.roomNum?'('+subData.roomNum+')':''}}:{{planData.eventName}}</p>
  16. <p class="time-p">报警时间:{{parseTime(planData.eventStartTime)}}</p>
  17. </div>
  18. <div v-if="!lookImgType" class="planAlarm-big-box">
  19. <div class="planAlarm-left-box">
  20. <div class="video-box video-box-scrollbar">
  21. <H5PlayerVideo style="margin:0 0 10px 0;"
  22. v-for="(item,index) in videoList" :key="index" :videoProps="item"></H5PlayerVideo>
  23. <p class="null-video-p" v-if="!videoList[0]">实验室未配置摄像头</p>
  24. </div>
  25. <div class="bugle-box">
  26. <div class="bugle-for-button-box planAlarm-scrollbar">
  27. <p class="for-button-box" @click="clickLoudspeaker(item)"
  28. :class="checkLoudspeaker == item.deviceNo?'for-button-box-check':''"
  29. v-for="(item,index) in loudspeakerList" :key="index">
  30. {{item.deviceName}}
  31. </p>
  32. </div>
  33. <div class="bugle-for-text-box planAlarm-scrollbar">
  34. <p class="null-p" v-if="!loudspeakerTextList[0]">历史发送记录</p>
  35. <div class="for-text-box" v-for="(item,index) in loudspeakerTextList" :key="index">
  36. <p>{{item.time}}</p>
  37. <p>{{item.value}}</p>
  38. </div>
  39. </div>
  40. <div class="bugle-for-input-box">
  41. <el-input placeholder="请输入内容" v-model="loudspeakerInput" class="input-with-select">
  42. <p slot="append" style="cursor: pointer" @click="iotBigViewSpeakerPlayText">发送</p>
  43. </el-input>
  44. </div>
  45. </div>
  46. </div>
  47. <div class="planAlarm-right-box">
  48. <div class="planAlarm-text-box">
  49. <div class="planAlarm-text-left-box planAlarm-scrollbar">
  50. <div>
  51. <p>所属单位:</p>
  52. <p>{{subData.deptName}}</p>
  53. </div>
  54. <div>
  55. <p>所在位置:</p>
  56. <p>
  57. {{subData.buildName}}{{subData.floorName?'-'+subData.floorName:''}}{{subData.roomNum?'-'+subData.roomNum:''}}</p>
  58. </div>
  59. <div>
  60. <p>实验室负责人:</p>
  61. <p>{{subData.adminName}}</p>
  62. </div>
  63. <div>
  64. <p>实验室安全员:</p>
  65. <p><span v-for="(item,index) in subData.safeUserList" :key="index">{{index == 0 ?item.safeUserName:','+item.safeUserName}}</span>
  66. </p>
  67. </div>
  68. </div>
  69. <div class="planAlarm-text-right-box planAlarm-scrollbar">
  70. <div class="box-one">
  71. <p>持续时间:</p>
  72. <p>{{convertSecondsToHMS(seconds)}}</p>
  73. </div>
  74. <div class="box-one">
  75. <p>实验室内人员:</p>
  76. <p>{{internalPerson}}</p>
  77. </div>
  78. <div class="box-two">
  79. <p class="box-tile-p">预警通知:</p>
  80. <div class="box-two-box">
  81. <div class="box-two-box-min" v-if="messageType">
  82. <div>
  83. <p class="el-icon-check"></p>
  84. <p>短信通知</p>
  85. </div>
  86. </div>
  87. <div class="box-two-box-min" v-if="voiceType">
  88. <div>
  89. <p class="el-icon-check"></p>
  90. <p>报警电话</p>
  91. </div>
  92. </div>
  93. <div class="box-two-box-min">
  94. <div>
  95. <p class="el-icon-check"></p>
  96. <p>企业微信</p>
  97. </div>
  98. </div>
  99. <!--<div class="box-two-box-min">-->
  100. <!--<div>-->
  101. <!--<p class="el-icon-check"></p>-->
  102. <!--<p>声光报警</p>-->
  103. <!--</div>-->
  104. <!--</div>-->
  105. </div>
  106. </div>
  107. </div>
  108. </div>
  109. <div class="planAlarm-sensor-box planAlarm-scrollbar">
  110. <div v-for="(item,index) in monitorList" :key="index">
  111. <p :class="item.type?'checkColor':''">
  112. {{item.deviceValue?item.deviceValue:'-'}}{{item.unit?item.unit:''}}</p>
  113. <p>{{item.deviceName}}</p>
  114. </div>
  115. </div>
  116. <div class="planAlarm-img-box">
  117. <p class="img-title-p">报警抓拍</p>
  118. <!--<div class="for-max-box" v-if="imgList[0]">-->
  119. <div class="for-max-box">
  120. <img :src="item" @click="lookImgButton(true,item)"
  121. v-for="(item,index) in photographList" :key="index">
  122. </div>
  123. <p class="img-null-p" v-if="!photographList[0]">无抓拍照片</p>
  124. </div>
  125. </div>
  126. </div>
  127. <div v-if="lookImgType" class="planAlarm-big-box">
  128. <img class="lookImg" :src="lookImgUrl">
  129. </div>
  130. <div class="planAlarm-bottom-button-box">
  131. <p class="null-p"></p>
  132. <p class="button-out-p" @click="outPlan">关闭</p>
  133. <p class="button-finish-p" v-if="!lookImgType" @click="overPlan">结束预案</p>
  134. <p class="null-p"></p>
  135. </div>
  136. </div>
  137. </div>
  138. <fullH5PlayerVideo v-if="fullVideoType" :fullVideoProps="fullVideoProps"></fullH5PlayerVideo>
  139. </div>
  140. </template>
  141. <script>
  142. import {
  143. iotBigViewDeviceFindByType,
  144. iotBigViewDeviceList,
  145. iotBigViewDeviceFindBySubId,
  146. laboratoryEventFindByEventId,
  147. laboratorySubRelInfoGetDetailInfo,
  148. iotBigViewSpeakerPlayText,
  149. laboratoryPlanCloseRiskPlan,
  150. iotCameraFindByCondition,
  151. } from "@/api/index";
  152. import mpegtsVideo from '@/components/mpegtsVideo/mpegtsVideo.vue'
  153. import H5PlayerVideo from '@/components/H5PlayerVideo/H5PlayerVideo.vue';
  154. import fullH5PlayerVideo from '@/components/fullH5PlayerVideo/fullH5PlayerVideo.vue'
  155. export default {
  156. name: 'planAlarm',
  157. components: {
  158. mpegtsVideo,
  159. H5PlayerVideo,
  160. fullH5PlayerVideo,
  161. },
  162. data() {
  163. return {
  164. showType: false,
  165. //预案MQTT
  166. planOpic: 'lab/risk/plan/change',
  167. planClient: {},
  168. //预案参数
  169. planData: {},
  170. //实验室数据
  171. subData: {},
  172. //实验室人数
  173. internalPerson: {},
  174. //实验室人数
  175. userList: [],
  176. //持续时间
  177. seconds: null,
  178. //定时器
  179. timer: null,
  180. //抓拍照片
  181. lookImgType: false,
  182. lookImgUrl: '',
  183. photographList: [],
  184. //传感器
  185. monitorList: [],
  186. planSensorList: [],
  187. //文字转语音
  188. loudspeakerInput: '',
  189. loudspeakerTextList: [],
  190. loudspeakerList: [],
  191. checkLoudspeaker: '',
  192. //语音报警
  193. voiceType: false,
  194. //短信报警
  195. messageType: false,
  196. //视频
  197. width:640,
  198. height:363,
  199. videoType:false,
  200. videoList:[],
  201. videoTotal:0,
  202. //全屏视频参数
  203. fullVideoProps:{},
  204. fullVideoType:false,
  205. }
  206. },
  207. created() {
  208. },
  209. mounted() {
  210. },
  211. methods: {
  212. //查询当前正在发生的预案
  213. initialize(item) {
  214. clearInterval(this.timer);
  215. let planData = {
  216. buildId: item.buildId,
  217. floorId: item.floorId,
  218. subId: item.subId,
  219. infoId: item.infoId,
  220. eventId: item.eventId,
  221. eventName: item.eventName,
  222. riskPlanLevel: item.riskPlanLevel,
  223. eventStartTime: item.eventStartTime,
  224. eventStartTimestamp: item.eventStartTimestamp,
  225. };
  226. this.$set(this, 'planData', planData);
  227. //传感器
  228. let planSensorList = [];
  229. item.triggerUploadData.forEach((minItem) => {
  230. planSensorList.push(minItem.deviceNo)
  231. });
  232. this.$set(this, 'planSensorList', planSensorList);
  233. this.$nextTick(() => {
  234. Promise.all([
  235. //查询实验室喇叭
  236. this.iotBigViewDeviceFindByType(),
  237. //查询实验室摄像头
  238. // this.iotBigViewDeviceList(),
  239. this.videoInitialize(),
  240. //查询实验室传感器
  241. this.iotBigViewDeviceFindBySubId(),
  242. //查询预案详情
  243. this.laboratoryEventFindByEventId(),
  244. //查询实验室详情
  245. this.laboratorySubRelInfoGetDetailInfo(),
  246. ]).then((result) => {
  247. this.$nextTick(() => {
  248. this.newTimestamp(planData.eventStartTimestamp);
  249. this.$set(this, 'showType', true);
  250. })
  251. }).catch((error) => {
  252. })
  253. })
  254. },
  255. //查看/关闭抓拍照片
  256. lookImgButton(type, item) {
  257. if (type) {
  258. this.$set(this, 'lookImgUrl', item)
  259. this.$set(this, 'lookImgType', true)
  260. } else {
  261. this.$set(this, 'lookImgUrl', '')
  262. this.$set(this, 'lookImgType', false)
  263. }
  264. },
  265. //关闭窗口
  266. outPlan() {
  267. let self = this;
  268. if (this.lookImgType) {
  269. this.$set(this, 'lookImgType', false);
  270. } else {
  271. clearInterval(self.timer);
  272. self.$set(self, 'showType', false);
  273. }
  274. },
  275. //结束预案
  276. overPlan() {
  277. let self = this;
  278. this.$confirm('传感器数据监测异常,确定要强制结束预案?', '提示', {
  279. confirmButtonText: '确定',
  280. cancelButtonText: '取消',
  281. type: 'warning'
  282. }).then(() => {
  283. laboratoryPlanCloseRiskPlan({eventId: self.planData.eventId}).then(response => {
  284. self.$set(self, 'showType', false);
  285. });
  286. }).catch(() => {
  287. });
  288. },
  289. //选中喇叭
  290. clickLoudspeaker(item) {
  291. if (this.checkLoudspeaker != item.deviceNo) {
  292. this.$set(this, 'checkLoudspeaker', item.deviceNo);
  293. } else {
  294. this.$set(this, 'checkLoudspeaker', null);
  295. }
  296. },
  297. //发送文字转语音
  298. iotBigViewSpeakerPlayText() {
  299. if (!this.loudspeakerInput) {
  300. this.msgError('请输入内容')
  301. return
  302. } else if (!this.checkLoudspeaker) {
  303. this.msgError('请选择喇叭')
  304. return
  305. }
  306. let obj = {
  307. text: this.loudspeakerInput,
  308. deviceNo: this.checkLoudspeaker,
  309. }
  310. iotBigViewSpeakerPlayText(obj).then(response => {
  311. let s = new Date().getHours()
  312. let f = new Date().getMinutes() < 10 ? '0' + new Date().getMinutes() : new Date().getMinutes()
  313. this.loudspeakerTextList.push({
  314. time: s + ':' + f,
  315. value: this.loudspeakerInput,
  316. })
  317. this.$set(this, 'loudspeakerInput', '');
  318. })
  319. },
  320. //查询实验室喇叭
  321. iotBigViewDeviceFindByType() {
  322. let floorObj = {
  323. passageway: this.planData.floorId,
  324. typeKeyList: ['horn']
  325. }
  326. iotBigViewDeviceFindByType(floorObj).then(floorResponse => {
  327. let subjectObj = {
  328. subjectId: this.planData.subId,
  329. typeKeyList: ['horn']
  330. }
  331. iotBigViewDeviceFindByType(subjectObj).then(subjectResponse => {
  332. this.$set(this, 'loudspeakerList', floorResponse.data.concat(subjectResponse.data));
  333. })
  334. })
  335. },
  336. //查询实验室摄像头
  337. videoInitialize(){
  338. let self = this;
  339. self.$set(self, 'videoType', false);
  340. self.$set(self, 'videoList', []);
  341. // type 1.楼栋 2.楼层 3.楼道 4.实验室
  342. let obj = {
  343. page:1,
  344. pageSize:10,
  345. passageway:'',
  346. subId:[this.planData.subId],
  347. protocol:window.location.href.indexOf('https') !== -1?'wss':'ws',
  348. streamType:1,
  349. source:0,
  350. };
  351. iotCameraFindByCondition(obj).then(response => {
  352. let list = [];
  353. for(let i=0;i<response.data.records.length;i++){
  354. list.push(
  355. {
  356. width: this.width, //(宽度:非必传-默认600)
  357. height: this.height, //(高度:非必传-默认338)
  358. url: response.data.records[i].streamUrl,
  359. cameraIndexCode: response.data.records[i].deviceNo,
  360. }
  361. )
  362. }
  363. this.$set(this,'videoList',list)
  364. this.$set(this,'videoTotal',response.data.total);
  365. this.$nextTick(()=>{
  366. setTimeout(function(){
  367. self.$set(self, 'videoType', true);
  368. },1000);
  369. })
  370. });
  371. },
  372. //全屏开启-关闭轮播
  373. stopTime(cameraIndexCode){
  374. this.$set(this,'fullVideoProps',{cameraIndexCode:cameraIndexCode});
  375. this.$set(this,'fullVideoType',true);
  376. },
  377. //全屏关闭-开启轮播
  378. outFullScreen(){
  379. this.$set(this,'fullVideoType',false);
  380. this.$set(this,'fullVideoProps',{});
  381. },
  382. //查询实验室摄像头
  383. iotBigViewDeviceList() {
  384. let obj = {
  385. page: 1,
  386. pageSize: 1,
  387. subjectId: this.planData.subId,
  388. typeKey: 'camera'
  389. };
  390. iotBigViewDeviceList(obj).then(response => {
  391. let list = [];
  392. response.data.records.forEach((item) => {
  393. let obj = JSON.parse(item.reservedField)
  394. if (obj.url) {
  395. item.width = 645;
  396. item.height = 363;
  397. item.type = 'flv';
  398. item.isLive = true;
  399. item.url = '';
  400. list.push(item);
  401. }
  402. })
  403. this.$set(this, 'videoList', list);
  404. })
  405. },
  406. //查询实验室传感器
  407. iotBigViewDeviceFindBySubId() {
  408. let self = this;
  409. iotBigViewDeviceFindBySubId({subId: this.planData.subId}).then(response => {
  410. response.data.forEach((item) => {
  411. let num = 0;
  412. self.planSensorList.forEach((minItem) => {
  413. if (item.deviceNo == minItem) {
  414. num++
  415. }
  416. })
  417. item.type = num != 0;
  418. item.icon = item.icon ? localStorage.getItem('fileBrowseEnvironment') + item.icon : null;
  419. })
  420. this.$set(this, 'monitorList', response.data);
  421. })
  422. },
  423. //预案详情
  424. laboratoryEventFindByEventId() {
  425. laboratoryEventFindByEventId({eventId: this.planData.eventId}).then(response => {
  426. if (response.data.recordPhoto) {
  427. this.$set(this, 'photographList', response.data.recordPhoto.split(','));
  428. }
  429. let num1 = 0;
  430. let num2 = 0;
  431. for (let i = 0; i < response.data.messageLogVoList.length; i++) {
  432. if (response.data.messageLogVoList[i].alarmType == 1) {
  433. num1++
  434. } else if (response.data.messageLogVoList[i].alarmType == 2) {
  435. num2++
  436. }
  437. }
  438. this.$set(this, 'voiceType', num1 == 0 ? false : true);
  439. this.$set(this, 'messageType', num2 == 0 ? false : true);
  440. this.$set(this, 'internalPerson', response.data.internalPerson);
  441. })
  442. },
  443. //实验室详情
  444. laboratorySubRelInfoGetDetailInfo() {
  445. laboratorySubRelInfoGetDetailInfo({infoId: this.planData.infoId}).then(response => {
  446. this.$set(this, 'subData', response.data)
  447. })
  448. },
  449. //计算时间戳
  450. newTimestamp(value) {
  451. let timestamp = this.accSub(this.accDiv(Date.parse(new Date()), 1000), value);
  452. this.time(timestamp);
  453. console.log('timestamp', timestamp)
  454. },
  455. //定时器
  456. time(time) {
  457. let self = this;
  458. self.seconds = parseInt(time);
  459. self.timer = window.setInterval(refreshCount, 1000);
  460. function refreshCount() {
  461. self.seconds++
  462. }
  463. },
  464. //时间格式
  465. convertSecondsToHMS(seconds) {
  466. var hours = Math.floor(seconds / 3600);
  467. var minutes = Math.floor((seconds % 3600) / 60);
  468. var remainingSeconds = seconds % 60;
  469. return hours + "小时 " + minutes + "分钟 " + remainingSeconds + "秒";
  470. },
  471. },
  472. }
  473. </script>
  474. <style scoped lang="scss">
  475. .planAlarm {
  476. *{
  477. margin:0;
  478. padding:0;
  479. }
  480. .planAlarmBlack {
  481. height: 100%;
  482. width: 100%;
  483. position: absolute;
  484. top: 0;
  485. left: 0;
  486. z-index: 1000;
  487. background-color: rgba(0, 0, 0, 0.8);
  488. .planAlarm-max-big-box {
  489. position: absolute;
  490. left: 50%;
  491. top: 50%;
  492. margin-top: -387px;
  493. margin-left: -697px;
  494. width: 1394px;
  495. height: 775px;
  496. display: flex;
  497. flex-direction: column;
  498. .planAlarm-title-box {
  499. display: flex;
  500. border-bottom: 1px solid #1ed0f8;
  501. background-color: #01232A;
  502. border-top-left-radius: 10px;
  503. border-top-right-radius: 10px;
  504. .top-name-p {
  505. flex: 1;
  506. line-height: 60px;
  507. height: 60px;
  508. color: #fff;
  509. font-size: 18px;
  510. margin-left: 30px;
  511. }
  512. .top-out-p {
  513. cursor: pointer;
  514. font-size: 20px;
  515. line-height: 60px;
  516. height: 60px;
  517. color: #fff;
  518. margin-right: 30px;
  519. }
  520. }
  521. .planAlarm-name-box {
  522. height: 60px;
  523. display: flex;
  524. padding: 0 20px;
  525. background-color: #01232A;
  526. .lv-box {
  527. margin-top: 15px;
  528. width: 100px;
  529. height: 30px;
  530. border-radius: 50px;
  531. div {
  532. margin: 2px 2px;
  533. width: 96px;
  534. height: 26px;
  535. line-height: 26px;
  536. font-size: 16px;
  537. text-align: center;
  538. border-radius: 50px;
  539. }
  540. }
  541. .type-color-a {
  542. border: 1px solid #CCE6FE;
  543. div {
  544. background-color: #CCE6FE;
  545. color: #0183FA;
  546. }
  547. }
  548. .type-color-b {
  549. border: 1px solid rgb(256, 232, 206);
  550. div {
  551. background-color: rgb(256, 232, 206);
  552. color: #FF9900;
  553. }
  554. }
  555. .type-color-c {
  556. border: 1px solid rgb(251, 228, 206);
  557. div {
  558. background-color: rgb(251, 228, 206);
  559. color: #FF4800;
  560. }
  561. }
  562. .type-color-d {
  563. border: 1px solid rgb(248, 206, 205);
  564. div {
  565. background-color: rgb(248, 206, 205);
  566. color: #FF0000;
  567. }
  568. }
  569. .name-p {
  570. width: 450px;
  571. font-size: 16px;
  572. line-height: 60px;
  573. color: #fff;
  574. margin:0 0 0 20px;
  575. }
  576. .time-p {
  577. width: 450px;
  578. font-size: 16px;
  579. line-height: 60px;
  580. color: #fff;
  581. margin:0 0 0 20px;
  582. }
  583. }
  584. .planAlarm-big-box {
  585. flex: 1;
  586. display: flex;
  587. padding: 10px 10px 0;
  588. background-color: #01232A;
  589. border-bottom-left-radius: 10px;
  590. border-bottom-right-radius: 10px;
  591. .planAlarm-left-box {
  592. width: 645px;
  593. height: 599px;
  594. margin-right: 10px;
  595. border-radius: 10px;
  596. .video-box {
  597. width: 645px;
  598. height: 363px;
  599. overflow-y: scroll;
  600. .null-video-p {
  601. line-height: 363px;
  602. text-align: center;
  603. font-size: 16px;
  604. color: #999;
  605. }
  606. }
  607. .video-box-scrollbar{
  608. overflow-y: scroll;
  609. overflow-x: hidden;
  610. }
  611. .video-box-scrollbar::-webkit-scrollbar {
  612. width: 8px; /*高宽分别对应横竖滚动条的尺寸*/
  613. height: 8px;
  614. }
  615. .video-box-scrollbar::-webkit-scrollbar-thumb {
  616. border-radius: 6px;
  617. -webkit-box-shadow: inset 0 0 5px #15827C;
  618. background: #15827C;
  619. }
  620. .video-box-scrollbar::-webkit-scrollbar-track {
  621. -webkit-box-shadow: inset 0 0 6px rgba(3,44,50,0);
  622. border-radius: 0;
  623. background: rgba(3,44,50,0);
  624. }
  625. }
  626. .bugle-box {
  627. width: 645px;
  628. height: 210px;
  629. margin-top: 10px;
  630. border-radius: 10px;
  631. background-color: #032C32;
  632. display: flex;
  633. flex-direction: column;
  634. .bugle-for-button-box {
  635. padding: 10px 10px 10px;
  636. .for-button-box-check {
  637. border: 1px solid #24D1F9 !important;
  638. color: #24D1F9 !important;
  639. }
  640. .for-button-box {
  641. display: inline-block;
  642. margin: 0 22px 11px 0;
  643. cursor: pointer;
  644. width: 120px;
  645. padding: 0 10px;
  646. height: 30px;
  647. border: 1px solid #1E768E;
  648. text-align: center;
  649. font-size: 14px;
  650. line-height: 30px;
  651. border-radius: 5px;
  652. color: #fff;
  653. /*单行省略号*/
  654. overflow: hidden;
  655. text-overflow: ellipsis;
  656. white-space: nowrap;
  657. }
  658. }
  659. .bugle-for-text-box {
  660. flex: 1;
  661. padding: 10px 10px;
  662. .null-p {
  663. color: #999;
  664. font-size: 16px;
  665. text-align: center;
  666. }
  667. .for-text-box {
  668. display: flex;
  669. p:nth-child(1) {
  670. line-height: 24px;
  671. font-size: 14px;
  672. color: #24D1F9;
  673. margin-bottom: 5px;
  674. margin-right: 10px;
  675. }
  676. p:nth-child(2) {
  677. line-height: 24px;
  678. font-size: 14px;
  679. color: #fff;
  680. margin-bottom: 5px;
  681. }
  682. }
  683. }
  684. .bugle-for-input-box {
  685. margin: 20px;
  686. }
  687. ::v-deep .bugle-for-input-box {
  688. .el-input__inner {
  689. height: 40px;
  690. line-height: 40px;
  691. font-size: 14px;
  692. background-color: rgba(0, 0, 0, 0);
  693. border: 1px solid #15827C;
  694. box-shadow: 0 0 2px 1px #15827C inset;
  695. color: #FFFFFF;
  696. }
  697. .el-input-group__append, .el-input-group__prepend {
  698. height: 36px;
  699. font-size: 14px;
  700. cursor: pointer;
  701. background-color: rgba(0, 0, 0, 0);
  702. color: #FFFFFF;
  703. border: 1px solid #15827C;
  704. box-shadow: 0 0 2px 1px #15827C inset;
  705. p{
  706. margin:0;
  707. height:36px;
  708. line-height:36px;
  709. }
  710. }
  711. }
  712. }
  713. .planAlarm-right-box {
  714. width: 718px;
  715. height: 599px;
  716. .planAlarm-text-box {
  717. width: 718px;
  718. height: 160px;
  719. display: flex;
  720. .planAlarm-text-left-box {
  721. width: 349px;
  722. height: 140px;
  723. margin-right: 10px;
  724. border-radius: 10px;
  725. background-color: #032C32;
  726. padding: 10px 15px;
  727. div {
  728. display: flex;
  729. p {
  730. color: #fff;
  731. line-height: 35px;
  732. font-size: 16px;
  733. }
  734. p:nth-child(1) {
  735. }
  736. p:nth-child(2) {
  737. flex: 1;
  738. }
  739. }
  740. }
  741. .planAlarm-text-right-box {
  742. width: 349px;
  743. height: 140px;
  744. border-radius: 10px;
  745. background-color: #032C32;
  746. padding: 10px 15px;
  747. .box-one {
  748. display: flex;
  749. p {
  750. color: #fff;
  751. line-height: 35px;
  752. font-size: 16px;
  753. }
  754. p:nth-child(1) {
  755. }
  756. p:nth-child(2) {
  757. flex: 1;
  758. }
  759. }
  760. .box-two {
  761. display: flex;
  762. .box-tile-p {
  763. color: #fff;
  764. line-height: 35px;
  765. font-size: 16px;
  766. }
  767. .box-two-box {
  768. flex: 1;
  769. .box-two-box-min {
  770. display: inline-block;
  771. div {
  772. display: flex;
  773. overflow: hidden;
  774. p:nth-child(1) {
  775. overflow: hidden;
  776. background-color: #11C01D;
  777. font-size: 18px;
  778. border-radius: 50%;
  779. width: 25px;
  780. height: 25px;
  781. color: #fff;
  782. line-height: 25px;
  783. text-align: center;
  784. margin: 5px 10px;
  785. }
  786. p:nth-child(2) {
  787. font-size: 16px;
  788. line-height: 35px;
  789. color: #fff;
  790. }
  791. }
  792. }
  793. }
  794. }
  795. }
  796. }
  797. .planAlarm-sensor-box {
  798. width: 698px;
  799. height: 178px;
  800. background-color: #032C32;
  801. border-radius: 10px;
  802. margin-top: 10px;
  803. padding: 15px 0 0 20px;
  804. div {
  805. display: inline-block;
  806. margin: 0 10px 10px 0;
  807. border-radius: 10px;
  808. width: 122px;
  809. height: 51px;
  810. background-color: #053539;
  811. padding: 13px 20px;
  812. .checkColor {
  813. color: #FF0000;
  814. }
  815. p {
  816. color: #fff;
  817. }
  818. p:nth-child(1) {
  819. font-size: 18px;
  820. line-height: 20px;
  821. height: 20px;
  822. }
  823. p:nth-child(2) {
  824. margin-top: 12px;
  825. font-size: 14px;
  826. line-height: 18px;
  827. height: 18px;
  828. display: block;
  829. overflow: hidden;
  830. text-overflow: ellipsis;
  831. white-space: nowrap;
  832. }
  833. }
  834. }
  835. .planAlarm-img-box {
  836. width: 716px;
  837. height: 211px;
  838. background-color: #032C32;
  839. border-radius: 10px;
  840. margin-top: 10px;
  841. overflow: hidden;
  842. .img-title-p {
  843. font-size: 18px;
  844. height: 20px;
  845. line-height: 20px;
  846. margin: 15px 0 15px 30px;
  847. color: #fff;
  848. }
  849. .for-max-box {
  850. img {
  851. cursor: pointer;
  852. display: inline-block;
  853. width: 212px;
  854. height: 140px;
  855. border-radius: 10px;
  856. margin-left: 20px;
  857. }
  858. }
  859. .img-null-p {
  860. line-height: 150px;
  861. text-align: center;
  862. font-size: 20px;
  863. color: #999;
  864. }
  865. }
  866. }
  867. .lookImg {
  868. display: block;
  869. width: 971px;
  870. height: 546px;
  871. margin: 0 auto 0;
  872. }
  873. }
  874. .planAlarm-bottom-button-box {
  875. display: flex;
  876. .null-p {
  877. flex: 1;
  878. }
  879. .button-out-p {
  880. cursor: pointer;
  881. border: 1px solid #15827C;
  882. background-color: #000F14;
  883. color: #15827C;
  884. width: 100px;
  885. height: 30px;
  886. line-height: 30px;
  887. font-size: 14px;
  888. text-align: center;
  889. border-radius: 50px;
  890. margin-top: 15px;
  891. }
  892. .button-finish-p {
  893. cursor: pointer;
  894. border: 1px solid #15827C;
  895. background-color: #15827C;
  896. color: #fff;
  897. width: 100px;
  898. height: 30px;
  899. line-height: 30px;
  900. font-size: 14px;
  901. text-align: center;
  902. border-radius: 50px;
  903. margin-top: 15px;
  904. margin-left: 20px;
  905. }
  906. }
  907. }
  908. }
  909. .planAlarm-scrollbar {
  910. overflow-y: scroll;
  911. overflow-x: hidden;
  912. }
  913. .planAlarm-scrollbar::-webkit-scrollbar {
  914. width: 6px; /*高宽分别对应横竖滚动条的尺寸*/
  915. height: 6px;
  916. }
  917. .planAlarm-scrollbar::-webkit-scrollbar-thumb {
  918. border-radius: 6px;
  919. -webkit-box-shadow: inset 0 0 5px #15827C;
  920. background: #15827C;
  921. }
  922. .planAlarm-scrollbar::-webkit-scrollbar-track {
  923. -webkit-box-shadow: inset 0 0 6px rgba(3, 44, 50, 0);
  924. border-radius: 0;
  925. background: rgba(3, 44, 50, 0);
  926. }
  927. }
  928. </style>