syzDetails.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762
  1. <template>
  2. <el-dialog
  3. width="90%"
  4. @open="opened"
  5. @closed="closed"
  6. :fullscreen="true"
  7. :show-close="true"
  8. class="dialogs"
  9. >
  10. <template #title>
  11. <div class="showTitles currentShowTitles">
  12. <div class="titles">升压站</div>
  13. </div>
  14. </template>
  15. <div class="bodyy">
  16. <el-tabs
  17. type="border-card"
  18. stretch
  19. lazy
  20. style="width: 100%; height: 100%"
  21. v-model="activeTab"
  22. @tab-click="tabClick"
  23. >
  24. <el-tab-pane
  25. class="syzDetailsPaneItem"
  26. v-for="(item, index) in syzArray"
  27. :key="index"
  28. :name="item.id"
  29. >
  30. <template #label>
  31. <span v-if="pageshowMode % 2">
  32. <el-badge is-dot v-if="item.isWarning === '1'">
  33. <span>{{ item.name }}</span>
  34. </el-badge>
  35. <span v-else>{{ item.name }}</span>
  36. </span>
  37. <span v-else>
  38. <el-badge is-dot v-if="item.isWarning === '1'">
  39. <span>{{ item.name }}</span>
  40. </el-badge>
  41. <span v-else>{{ item.name }}</span>
  42. </span>
  43. </template>
  44. <div class="buttonGroup" v-if="item.id === 'all'" >
  45. <el-button-group>
  46. <el-button type="plain" size="small" @click="changeHeight('D')" :class="allHeight === 'D' ? 'showSty' : ''">大图标</el-button>
  47. <el-button type="plain" size="small" @click="changeHeight('Z')" :class="allHeight === 'Z' ? 'showSty' : ''">中图标</el-button>
  48. <el-button type="plain" size="small" @click="changeHeight('X')" :class="allHeight === 'X' ? 'showSty' : ''">小图标</el-button>
  49. </el-button-group>
  50. </div>
  51. <div v-if="item.id === 'all'" :style="allpageHeight" style="width: 100%;display: inline-block;overflow-y:auto">
  52. <div v-for="(item, index) in allSvgMsgData" :key="index" :style="getStyle(allHeight)">
  53. <div class="showAllSvgMsg" @dblclick="dblgetSvgDataFn(item.id)" :class="getWarnstyle(item)">
  54. <div class="showAllSvgMsg_top" v-html="item.msg"></div>
  55. <div class="showAllSvgMsg_bot">
  56. <span>{{item.name}}</span>
  57. </div>
  58. </div>
  59. </div>
  60. </div>
  61. <div id="svg" :style="pageHeight" v-if="item.id !== 'all' && item.id === activeTab" v-html="svgMsg" v-loading="loading"></div>
  62. <!-- <Mhs ref="svgRef" v-if="item.id === 'MHS_BT'" />
  63. <Nss ref="svgRef" v-if="item.id === 'NSS_FDC'" />
  64. <Qs ref="svgRef" v-if="item.id === 'QS_FDC'" />
  65. <Sbq ref="svgRef" v-if="item.id === 'SBQ_FDC'" />
  66. <Xs ref="svgRef" v-if="item.id === 'XS_FDC'" /> -->
  67. <!-- <Pl1 ref="svgRef" v-if="item.id === 'PL1_GDC'" />
  68. <Pl2 ref="svgRef" v-if="item.id === 'PL2_GDC'" />
  69. <Dwk ref="svgRef" v-if="item.id === 'DWK_GDC'" />
  70. <Mch ref="svgRef" v-if="item.id === 'MCH_GDC'" />
  71. <Xh ref="svgRef" v-if="item.id === 'XH_GDC'" />
  72. <Sbdl ref="svgRef" v-if="item.id === 'QS3_FDC'" /> -->
  73. <div class="alarmIconBox" v-if="item.id !== 'all'" @click="switchAlarmSound(index)">
  74. <el-tooltip
  75. v-if="item.isMute"
  76. effect="light"
  77. :content="`当前${item.name}升压站报警已消音,请注意`"
  78. placement="left"
  79. >
  80. <i
  81. class="el-icon-close-notification"
  82. style="color: orangered"
  83. ></i>
  84. </el-tooltip>
  85. <i v-else class="el-icon-bell" style="color: rgb(219, 215, 0)"></i>
  86. </div>
  87. </el-tab-pane>
  88. </el-tabs>
  89. <CurrentWarningCard
  90. :currentClass="$store.state.currentWarningCardClass"
  91. :activeTab="activeTab || 'MHS_FDC'"
  92. v-if="activeTab !== 'all'"
  93. />
  94. </div>
  95. </el-dialog>
  96. </template>
  97. <script>
  98. import Mhs from "../BoosterStation/mhs.vue";
  99. import Nss from "../BoosterStation/nss.vue";
  100. import Qs from "../BoosterStation/qs.vue";
  101. import Sbq from "../BoosterStation/sbq.vue";
  102. import Xs from "../BoosterStation/xs.vue";
  103. import Dwk from "../BoosterStation/dwk.vue";
  104. import Sbdl from "../BoosterStation/sbdl.vue";
  105. import Pl1 from "../BoosterStation/pl1.vue";
  106. import Pl2 from "../BoosterStation/pl2.vue";
  107. import Mch from "../BoosterStation/mch.vue";
  108. import Xh from "../BoosterStation/xh.vue";
  109. import api from "api/index";
  110. import CurrentWarningCard from "./currentWarningCard.vue";
  111. export default {
  112. props: {
  113. activeTabStation: {
  114. type: String,
  115. default: "",
  116. },
  117. },
  118. components: {
  119. Mhs,
  120. Nss,
  121. Qs,
  122. Sbq,
  123. Xs,
  124. Dwk,
  125. Sbdl,
  126. Pl1,
  127. Pl2,
  128. Mch,
  129. Xh,
  130. CurrentWarningCard
  131. },
  132. data() {
  133. return {
  134. activeTab: this.$store.state.activeTab,
  135. svgVisible: true,
  136. audio: null,
  137. timmer: null,
  138. syzArray: [],
  139. pageshowMode: 0,
  140. svgMsg: '',
  141. loading: false,
  142. allTagidArr: [],
  143. starTimer: null,
  144. allTagsMS: {},
  145. allrefreshData: {},
  146. allConditions: {},
  147. onlytag: {},
  148. allSvgMsgData: [],
  149. allHeight: 'D',
  150. allWarnData: [],
  151. starTimerWarn: null,
  152. numm: 0
  153. };
  154. },
  155. computed: {
  156. pageHeight() {
  157. return {
  158. 'height': document.documentElement.clientHeight-60 + 'px'
  159. }
  160. },
  161. allpageHeight() {
  162. return {
  163. 'height': document.documentElement.clientHeight-200 + 'px'
  164. }
  165. },
  166. },
  167. mounted() {
  168. },
  169. updated() {},
  170. methods: {
  171. // 获取升压站报警数据
  172. getSyzWarnData() {
  173. api.alarmFault().then((res) => {
  174. if (res && res.data) {
  175. let datas = res.data
  176. let arr = []
  177. datas.forEach(it =>{
  178. if (it.rank === '5') {
  179. if (it.stationName.indexOf('风电场') !== -1 ) {
  180. str = it.stationName.substring(0, it.stationName.indexOf('风电场'))
  181. } else if (it.stationName.indexOf('光伏电站') !== -1) {
  182. str = it.stationName.substring(0, it.stationName.indexOf('光伏电站'))
  183. }
  184. arr.push(str)
  185. }
  186. let str = ''
  187. })
  188. this.allWarnData = this.unique(arr)
  189. }
  190. })
  191. },
  192. unique(arr) {
  193. let newArr = []
  194. for(let i=0; i<arr.length; i++) {
  195. if (newArr.indexOf(arr[i]) === -1) {
  196. newArr.push(arr[i])
  197. }
  198. }
  199. return newArr
  200. },
  201. getWarnstyle(item) {
  202. let showWarn = ''
  203. this.allWarnData.forEach(it=> {
  204. if (it === item.name) {
  205. showWarn = 'warningMaskNew'
  206. }
  207. })
  208. return showWarn
  209. },
  210. getStyle(type) {
  211. let num = null
  212. let num1 = null
  213. let num2 = null
  214. if (type === 'D') {
  215. return {
  216. 'width': '33.3%',
  217. 'float': 'left',
  218. 'height': '400px'
  219. }
  220. } else if (type === 'Z') {
  221. num = parseInt(this.allSvgMsgData.length / 4)
  222. num1 = this.allSvgMsgData.length % 4
  223. num2 = num1 > 0 ? num + 1 : num
  224. return {
  225. 'width': '25%',
  226. 'float': 'left',
  227. 'height': (document.documentElement.clientHeight-200) / num2 + 'px'
  228. }
  229. } else {
  230. num = parseInt(this.allSvgMsgData.length / 5)
  231. num1 = this.allSvgMsgData.length % 5
  232. num2 = num1 > 0 ? num + 1 : num
  233. return {
  234. 'width': '20%',
  235. 'float': 'left',
  236. 'height': (document.documentElement.clientHeight-200) / num2 + 'px'
  237. }
  238. }
  239. },
  240. changeHeight(type) {
  241. this.allHeight = type
  242. },
  243. getAllStationtab() {
  244. let obj = {
  245. id: 'all',
  246. name: '全部'
  247. }
  248. api.getAllStationTab().then((res) => {
  249. if (res && res.data) {
  250. res.data.unshift(obj)
  251. this.syzArray = res.data
  252. this.activeTab = res.data[0].id
  253. if (this.activeTab === 'all') {
  254. let allMsg = res.data
  255. this.allSvgMsgData = []
  256. allMsg.forEach(it =>{
  257. if (it.id !== 'all') {
  258. this.getallSvgDataFn(it.id, it.name)
  259. }
  260. })
  261. // window.sessionStorage.setItem('allSvgData', [])
  262. console.log('allSvgMsgData', this.allSvgMsgData)
  263. }
  264. // this.getSvgDataFn(res.data[0].id)
  265. }
  266. })
  267. },
  268. // 获取所有升压站数据
  269. getallSvgDataFn(id, name) {
  270. let params = {
  271. id: id
  272. }
  273. api.getSvgData(params).then((res) => {
  274. let str = ''
  275. str = res.data.substring(res.data.indexOf('<svg'))
  276. str = str.replace('<svg', '<svg viewBox="0 -100 1900 1260"')
  277. let obj = {
  278. id: id,
  279. name: name,
  280. msg: str
  281. }
  282. this.allSvgMsgData.push(obj)
  283. })
  284. },
  285. // 获取升压站数据
  286. getSvgDataFn(val) {
  287. this.svgMsg = ''
  288. this.loading = true
  289. let params = {
  290. id: val
  291. }
  292. api.getSvgData(params).then((res) => {
  293. if (res && res.data) {
  294. let str = ''
  295. str = res.data.substring(res.data.indexOf('<svg'))
  296. str = str.replace('<svg', '<svg viewBox="0 0 1900 1260"')
  297. this.svgMsg = str
  298. let html = document.getElementById('svg')
  299. let svg1 = document.getElementsByTagName('svg')
  300. this.$nextTick(() =>{
  301. if (svg1) {
  302. let allTags = []
  303. let allTagsxc = []
  304. let status = ['g', 'text', 'rect', 'line', 'polyline', 'circle', 'ellipse', 'polygon']
  305. status.forEach(it =>{
  306. let allgs = []
  307. allgs = document.querySelectorAll(it);
  308. allTags.push(allgs)
  309. })
  310. allTags = [...allTags[0], ...allTags[1], ...allTags[2], ...allTags[3], ...allTags[4], ...allTags[5], ...allTags[6], ...allTags[7]]
  311. allTags.forEach((it) => {
  312. if (it.getAttribute("tagid")) {
  313. allTagsxc.push(it);
  314. }
  315. });
  316. console.log('allTags222=>', allTagsxc)
  317. this.allTagidArr = allTagsxc
  318. this.getSvgInfo()
  319. }
  320. console.log('html111=>', html)
  321. })
  322. this.loading = false
  323. }
  324. })
  325. },
  326. // 获取触发器
  327. getSvgInfo() {
  328. let params = {
  329. id: this.activeTab
  330. }
  331. api.getAllStationSvgInfo(params).then((res) => {
  332. if (res && res.data) {
  333. if (res.data.tags) {
  334. let strarr = []
  335. let str = ''
  336. for(let i in res.data.tags) {
  337. strarr.push(res.data.tags[i].tag)
  338. }
  339. str = strarr.join(',')
  340. this.allTagsMS = res.data.tags
  341. this.allConditions = res.data.conditions
  342. // this.getrefreshData(str)
  343. this.starTimer = setInterval(() =>{
  344. this.getrefreshData(str)
  345. }, 1000)
  346. }
  347. console.log('SvgInfo333=>', res)
  348. }
  349. })
  350. },
  351. // 获取根盾数据
  352. getrefreshData(val) {
  353. api.refreshData(val).then((res) => {
  354. if (res && res.data) {
  355. this.allrefreshData = res.data
  356. this.refreshDataFn(this.allTagsMS)
  357. }
  358. console.log('refreshData444=>', res)
  359. })
  360. },
  361. // 刷新数据
  362. refreshDataFn(datas) {
  363. for (let it in datas) {
  364. let tagId = datas[it];
  365. this.toRefreshFn(it, tagId);
  366. }
  367. },
  368. // 刷新自定义组件
  369. toRefreshFn(val, data) {
  370. var tag = this.allrefreshData[data.tag];
  371. if (!tag) return;
  372. this.allTagidArr.forEach(it =>{
  373. this.onlytag = {}
  374. if (it.attributes.tagid) {
  375. if (val === it.attributes.tagid.value) {
  376. this.onlytag = it
  377. if (it.nodeName === 'polyline') {
  378. console.log('onlyTag666', this.onlytag)
  379. }
  380. if (it.nodeName !== 'text') {
  381. if (this.onlytag.attributes.csid) {
  382. let csid = this.onlytag.attributes.csid.value.split(';')
  383. csid.forEach(ic =>{
  384. if (ic) {
  385. if (!this.allConditions[ic].isBinding) {
  386. let num = parseInt(this.allConditions[ic].value) === 0 ? '0' : parseInt(this.allConditions[ic].value)
  387. if (num) {
  388. let num2 = tag.value === 0 ? '0' : tag.value
  389. if (num === num2) {
  390. this.onlytag.setAttribute(this.allConditions[ic].property, this.allConditions[ic].propertyValue)
  391. return
  392. }
  393. }
  394. } else {
  395. this.onlytag.setAttribute(this.allConditions[ic].property, this.allConditions[ic].propertyValue)
  396. }
  397. }
  398. })
  399. }
  400. } else {
  401. this.onlytag.textContent = tag.value.toFixed(2)
  402. }
  403. }
  404. }
  405. })
  406. // console.log('onlyTag555', this.onlytag)
  407. },
  408. // '全部'界面双击事件
  409. dblgetSvgDataFn(name) {
  410. this.activeTab = name
  411. this.getSvgDataFn(name)
  412. },
  413. // 初始化第一次报警并判断是否播放声音
  414. initAlarm() {
  415. let syzAlarmArray = this.$store.getters.syzAlarmArray;
  416. const firstAlarmItem = syzAlarmArray.find((ele) => {
  417. return !ele.isConfirm && ele.rank === this.$store.state.syzAlarmRank;
  418. });
  419. firstAlarmItem &&
  420. this.audioPlay(this.getSound(firstAlarmItem.soundSource));
  421. firstAlarmItem &&
  422. this.$store.getters.syzAlarmArray.forEach((ele) => {
  423. if (ele.stationId === firstAlarmItem.stationId) {
  424. ele.isConfirm = true;
  425. }
  426. });
  427. this.activeTab =
  428. this.activeTabStation ||
  429. firstAlarmItem?.stationId ||
  430. syzAlarmArray.find((ele) => {
  431. return ele.rank === this.$store.state.syzAlarmRank;
  432. })?.stationId ||
  433. this.$store.getters.syzArray[0].id;
  434. syzAlarmArray.forEach((ele) => {
  435. if (ele.stationId === firstAlarmItem?.stationId) {
  436. ele.isConfirm = true;
  437. this.clearWarningTag(ele.stationId);
  438. } else if (
  439. !ele.isConfirm &&
  440. ele.stationId !== firstAlarmItem?.stationId
  441. ) {
  442. this.renderWarningTag(ele.stationId);
  443. }
  444. });
  445. this.$store.commit("syzAlarmArray", syzAlarmArray);
  446. },
  447. // 定时器循环数据判断小红点渲染及是否播放声音
  448. renderAlarm(stationId = "", playSound = true) {
  449. let syzAlarmArray = this.$store.getters.syzAlarmArray;
  450. syzAlarmArray.forEach((ele) => {
  451. if (ele.stationId === stationId) {
  452. ele.isConfirm = true;
  453. this.clearWarningTag(ele.stationId);
  454. } else if (!ele.isConfirm && ele.stationId !== stationId) {
  455. this.renderWarningTag(ele.stationId);
  456. }
  457. });
  458. const res = syzAlarmArray.find((ele) => {
  459. return !ele.isConfirm;
  460. });
  461. if (playSound) {
  462. // this.audioPlay("./static/sound/syz.mp3");
  463. }
  464. this.$store.commit("syzAlarmArray", syzAlarmArray);
  465. },
  466. // 返回音频文件路径
  467. getSound(fileName) {
  468. return `./static/sound/${fileName}.mp3`;
  469. },
  470. // 播放音频
  471. audioPlay(audioPath) {
  472. let soundMuteSelf = [];
  473. let soundMuteOther = [];
  474. this.$store.getters.syzAlarmArray.forEach((ele) => {
  475. if (ele.stationId === this.activeTab) {
  476. soundMuteSelf.push(ele);
  477. } else {
  478. soundMuteOther.push(ele);
  479. }
  480. });
  481. let alarmSelfLock = soundMuteSelf.some((ele) => {
  482. return !ele.isConfirm;
  483. });
  484. let alarmOtherLock = soundMuteOther.some((ele) => {
  485. return !ele.isConfirm;
  486. });
  487. if (alarmOtherLock) {
  488. this.audio = new Audio(audioPath);
  489. this.audio.play();
  490. } else if (alarmSelfLock) {
  491. this.$store.getters.syzArray.forEach((ele) => {
  492. if (ele.stationId === this.activeTab) {
  493. ele.isMute = false;
  494. this.audio = new Audio(audioPath);
  495. this.audio.play();
  496. }
  497. });
  498. } else if (!alarmSelfLock) {
  499. this.$store.getters.syzArray.forEach((ele) => {
  500. if (ele.stationId === this.activeTab) {
  501. if (!ele.isMute) {
  502. this.audio = new Audio(audioPath);
  503. this.audio.play();
  504. }
  505. }
  506. });
  507. }
  508. },
  509. // 显示某个小红点
  510. renderWarningTag(stationId = "") {
  511. this.$store.getters.syzArray.forEach((ele) => {
  512. if (ele.id === stationId) {
  513. ele.isWarning = "1";
  514. }
  515. });
  516. this.pageshowMode++;
  517. },
  518. // 清除某个小红点
  519. clearWarningTag(stationId = "") {
  520. this.$store.getters.syzArray.forEach((ele) => {
  521. if (ele.id === stationId) {
  522. ele.isWarning = "0";
  523. }
  524. });
  525. this.pageshowMode++;
  526. },
  527. // 切换报警声音开关
  528. switchAlarmSound(index) {
  529. this.$store.getters.syzArray[index].isMute =
  530. !this.$store.getters.syzArray[index].isMute;
  531. },
  532. opened() {
  533. this.initAlarm();
  534. this.getAllStationtab()
  535. this.timmer = setInterval(() => {
  536. this.renderAlarm();
  537. }, 3000);
  538. let starTimerWarn = setInterval(() =>{
  539. this.getSyzWarnData()
  540. }, 2000)
  541. },
  542. closed() {
  543. // this.$refs.svgRef[0].closed()
  544. // this.$refs.svgRef[1].closed()
  545. // this.$refs.svgRef[2].closed()
  546. // this.$refs.svgRef[3].closed()
  547. // this.$refs.svgRef[4].closed()
  548. clearInterval(this.starTimer);
  549. clearInterval(this.starTimerWarn);
  550. clearInterval(this.timmer);
  551. this.starTimer = null
  552. this.starTimerWarn = null
  553. this.timmer = null;
  554. this.$store.commit("activeTab", "");
  555. this.$store.commit("syzDialogShow", false);
  556. },
  557. tabClick(res) {
  558. clearInterval(this.starTimer);
  559. this.starTimer = null;
  560. this.$store.commit("activeTab", res.props.name);
  561. this.renderAlarm(res.props.name, false);
  562. if (res.props.name !== 'all') {
  563. this.getSvgDataFn(res.props.name)
  564. }
  565. },
  566. },
  567. watch: {
  568. "$store.state.syzArray"(res) {
  569. this.syzArray = res;
  570. },
  571. },
  572. };
  573. </script>
  574. <style lang="less" scoped>
  575. .bodyy {
  576. display: flex;
  577. flex-direction: row;
  578. background-color: black;
  579. width: 98%;
  580. margin-top: -30px;
  581. height: 90vh;
  582. position: relative;
  583. overflow: hidden;
  584. margin-left: 44px;
  585. .syzDetailsPaneItem {
  586. position: relative;
  587. .buttonGroup{
  588. margin-bottom: 10px;
  589. display: flex;
  590. // justify-content: end;
  591. float: right;
  592. .el-button-group{
  593. .el-button{
  594. min-height: 30px !important;
  595. }
  596. .showSty{
  597. color: #409eff;
  598. border-color: #c6e2ff;
  599. background-color: #ecf5ff;
  600. outline: 0;
  601. }
  602. }
  603. }
  604. .warningMaskNew {
  605. background-color: rgba(186, 50, 55, 0.5);
  606. animation: fade 2000ms infinite;
  607. -webkit-animation: fade 2000ms infinite;
  608. }
  609. @keyframes fade {
  610. from {
  611. opacity: 0.7;
  612. }
  613. 50% {
  614. opacity: 0.3;
  615. }
  616. to {
  617. opacity: 0.7;
  618. }
  619. }
  620. @-webkit-keyframes fade {
  621. from {
  622. opacity: 0.7;
  623. }
  624. 50% {
  625. opacity: 0.3;
  626. }
  627. to {
  628. opacity: 0.7;
  629. }
  630. }
  631. .showAllSvgMsg{
  632. width: calc(100% - 15px);
  633. height: calc(100% - 15px);
  634. // padding: 20px;
  635. // margin-bottom: 20px;
  636. // background: #3a3a3a;
  637. // border: 3px solid #3a3a3a;
  638. border: 3px solid #646464;
  639. border-radius: 10px;
  640. .showAllSvgMsg_top{
  641. border-radius: 10px 10px 0 0;
  642. height: calc(100% - 40px);
  643. width: 100%;
  644. // background: #fff;
  645. }
  646. .showAllSvgMsg_bot{
  647. background: #3a3a3a;
  648. border-radius: 0 0 8px 8px;
  649. height: 40px;
  650. text-align: center;
  651. span{
  652. position: relative;
  653. top: 10px;
  654. font-weight: bold;
  655. color: #fff;
  656. }
  657. }
  658. }
  659. .alarmIconBox {
  660. position: absolute;
  661. right: 0;
  662. top: 0;
  663. cursor: pointer;
  664. i {
  665. font-size: 20px;
  666. }
  667. }
  668. }
  669. }
  670. </style>
  671. <style lang="less">
  672. .bodyy {
  673. .pop-up-main,
  674. .paln-box {
  675. width: 100%;
  676. height: 90vh;
  677. overflow: hidden;
  678. position: relative;
  679. }
  680. .movableItem {
  681. // width: 1920PX !important;
  682. // height: 800PX !important;
  683. .svg {
  684. // width: 100%;
  685. // height: 92%;
  686. margin-left: 0;
  687. margin-top: 8%;
  688. }
  689. }
  690. .el-badge__content.is-fixed.is-dot {
  691. right: 0;
  692. top: 10px;
  693. background: #f25656;
  694. animation: twinkle 0.75s infinite;
  695. border-color: transparent;
  696. }
  697. @keyframes twinkle {
  698. 0% {
  699. opacity: 0;
  700. }
  701. 50% {
  702. opacity: 1;
  703. }
  704. 100% {
  705. opacity: 0;
  706. }
  707. }
  708. }
  709. .currentShowTitles {
  710. width: 100%;
  711. position: relative;
  712. .alarIcon {
  713. position: absolute;
  714. right: 50px;
  715. top: 5;
  716. font-size: 20px;
  717. cursor: pointer;
  718. }
  719. }
  720. </style>