1
0

syzDetails.vue 23 KB

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