|
@@ -0,0 +1,924 @@
|
|
|
+<template>
|
|
|
+ <div class="SYZDetailsNoDia">
|
|
|
+ <div class="bodyy">
|
|
|
+ <el-tabs
|
|
|
+ type="border-card"
|
|
|
+ stretch
|
|
|
+ lazy
|
|
|
+ style="width: 100%; height: 100%"
|
|
|
+ v-model="activeTab"
|
|
|
+ @tab-click="tabClick"
|
|
|
+ >
|
|
|
+ <el-tab-pane
|
|
|
+ class="syzDetailsPaneItemNoD"
|
|
|
+ v-for="(item, index) in syzArray"
|
|
|
+ :key="index"
|
|
|
+ :name="item.id"
|
|
|
+ >
|
|
|
+ <template #label>
|
|
|
+ <span v-if="pageshowMode % 2">
|
|
|
+ <el-badge is-dot v-if="item.isWarning === '1'">
|
|
|
+ <span>{{ item.name }}</span>
|
|
|
+ </el-badge>
|
|
|
+ <span v-else>{{ item.name }}</span>
|
|
|
+ </span>
|
|
|
+ <span v-else>
|
|
|
+ <el-badge is-dot v-if="item.isWarning === '1'">
|
|
|
+ <span>{{ item.name }}</span>
|
|
|
+ </el-badge>
|
|
|
+ <span v-else>{{ item.name }}</span>
|
|
|
+ </span>
|
|
|
+ </template>
|
|
|
+ <div class="buttonGroup" v-if="item.id === 'all'">
|
|
|
+ <el-button-group>
|
|
|
+ <el-button
|
|
|
+ type="plain"
|
|
|
+ size="small"
|
|
|
+ @click="changeHeight('D')"
|
|
|
+ :class="allHeight === 'D' ? 'showSty' : ''"
|
|
|
+ >大图标</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ type="plain"
|
|
|
+ size="small"
|
|
|
+ @click="changeHeight('Z')"
|
|
|
+ :class="allHeight === 'Z' ? 'showSty' : ''"
|
|
|
+ >中图标</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ type="plain"
|
|
|
+ size="small"
|
|
|
+ @click="changeHeight('X')"
|
|
|
+ :class="allHeight === 'X' ? 'showSty' : ''"
|
|
|
+ >小图标</el-button
|
|
|
+ >
|
|
|
+ </el-button-group>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ v-if="item.id === 'all'"
|
|
|
+ :style="allpageHeight"
|
|
|
+ style="width: 100%; display: inline-block; overflow-y: auto"
|
|
|
+ >
|
|
|
+ <!-- v-for="(itv, index) in allSvgMsgData" -->
|
|
|
+ <div
|
|
|
+ v-for="(itv, index) in allSvgMsgTest"
|
|
|
+ :key="index"
|
|
|
+ :style="getStyle(allHeight)"
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ class="showAllSvgMsg"
|
|
|
+ @dblclick="dblgetSvgDataFn(itv.id)"
|
|
|
+ :class="getWarnstyle(itv)"
|
|
|
+ >
|
|
|
+ <!-- <div class="showAllSvgMsg_top" v-html="itv.msg"></div> -->
|
|
|
+ <div class="showAllSvgMsg_top">
|
|
|
+ <Mhs ref="svgRef" v-if="itv.svg === 'MHS_BT'" />
|
|
|
+ <Nss ref="svgRef" v-if="itv.svg === 'NSS_FDC'" />
|
|
|
+ <Qs ref="svgRef" v-if="itv.svg === 'QS_FDC'" />
|
|
|
+ <Sbq ref="svgRef" v-if="itv.svg === 'SBQ_FDC'" />
|
|
|
+ <Xs ref="svgRef" v-if="itv.svg === 'XS_FDC'" />
|
|
|
+ </div>
|
|
|
+ <div class="showAllSvgMsg_bot">
|
|
|
+ <span>{{ itv.name }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- <div
|
|
|
+ id="svg"
|
|
|
+ :style="pageHeight"
|
|
|
+ v-if="item.id !== 'all' && item.id === activeTab"
|
|
|
+ v-html="svgMsg"
|
|
|
+ v-loading="loading"
|
|
|
+ ></div> -->
|
|
|
+ <Mhs ref="svgRef" v-if="item.id === 'MHS_BT'" />
|
|
|
+ <Nss ref="svgRef" v-if="item.id === 'NSS_FDC'" />
|
|
|
+ <Qs ref="svgRef" v-if="item.id === 'QS_FDC'" />
|
|
|
+ <Sbq ref="svgRef" v-if="item.id === 'SBQ_FDC'" />
|
|
|
+ <Xs ref="svgRef" v-if="item.id === 'XS_FDC'" />
|
|
|
+ <!-- <Pl1 ref="svgRef" v-if="item.id === 'PL1_GDC'" />
|
|
|
+ <Pl2 ref="svgRef" v-if="item.id === 'PL2_GDC'" />
|
|
|
+ <Dwk ref="svgRef" v-if="item.id === 'DWK_GDC'" />
|
|
|
+ <Mch ref="svgRef" v-if="item.id === 'MCH_GDC'" />
|
|
|
+ <Xh ref="svgRef" v-if="item.id === 'XH_GDC'" />
|
|
|
+ <Sbdl ref="svgRef" v-if="item.id === 'QS3_FDC'" /> -->
|
|
|
+ <div
|
|
|
+ class="alarmIconBox"
|
|
|
+ v-if="item.id !== 'all'"
|
|
|
+ @click="switchAlarmSound(index)"
|
|
|
+ >
|
|
|
+ <el-tooltip
|
|
|
+ v-if="item.isMute"
|
|
|
+ effect="light"
|
|
|
+ :content="`当前${item.name}升压站报警已消音,请注意`"
|
|
|
+ placement="left"
|
|
|
+ >
|
|
|
+ <i
|
|
|
+ class="el-icon-close-notification"
|
|
|
+ style="color: orangered"
|
|
|
+ ></i>
|
|
|
+ </el-tooltip>
|
|
|
+ <i v-else class="el-icon-bell" style="color: rgb(219, 215, 0)"></i>
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+ <CurrentWarningCard
|
|
|
+ :currentClass="$store.state.currentWarningCardClass"
|
|
|
+ :activeTab="activeTab || 'MHS_FDC'"
|
|
|
+ v-if="activeTab !== 'all'"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import Mhs from "../BoosterStation/mhs.vue";
|
|
|
+import Nss from "../BoosterStation/nss.vue";
|
|
|
+import Qs from "../BoosterStation/qs.vue";
|
|
|
+import Sbq from "../BoosterStation/sbq.vue";
|
|
|
+import Xs from "../BoosterStation/xs.vue";
|
|
|
+import Dwk from "../BoosterStation/dwk.vue";
|
|
|
+import Sbdl from "../BoosterStation/sbdl.vue";
|
|
|
+import Pl1 from "../BoosterStation/pl1.vue";
|
|
|
+import Pl2 from "../BoosterStation/pl2.vue";
|
|
|
+import Mch from "../BoosterStation/mch.vue";
|
|
|
+import Xh from "../BoosterStation/xh.vue";
|
|
|
+
|
|
|
+import api from "api/index";
|
|
|
+
|
|
|
+import CurrentWarningCard from "./currentWarningCard.vue";
|
|
|
+
|
|
|
+import dataJson from "./syzDetailsNoDiaJson.json";
|
|
|
+export default {
|
|
|
+ props: {
|
|
|
+ activeTabStation: {
|
|
|
+ type: String,
|
|
|
+ default: "",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ components: {
|
|
|
+ Mhs,
|
|
|
+ Nss,
|
|
|
+ Qs,
|
|
|
+ Sbq,
|
|
|
+ Xs,
|
|
|
+ Dwk,
|
|
|
+ Sbdl,
|
|
|
+ Pl1,
|
|
|
+ Pl2,
|
|
|
+ Mch,
|
|
|
+ Xh,
|
|
|
+ CurrentWarningCard,
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ // activeTab: this.$store.state.activeTab,
|
|
|
+ activeTab: "all",
|
|
|
+ svgVisible: true,
|
|
|
+ audio: null,
|
|
|
+ timmer: null,
|
|
|
+ syzArray: [],
|
|
|
+ pageshowMode: 0,
|
|
|
+ svgMsg: "",
|
|
|
+ loading: false,
|
|
|
+ allTagidArr: [],
|
|
|
+ starTimer: null,
|
|
|
+ allTagsMS: {},
|
|
|
+ allrefreshData: {},
|
|
|
+ allConditions: {},
|
|
|
+ onlytag: {},
|
|
|
+ allSvgMsgData: [],
|
|
|
+ allSvgMsgTest: [
|
|
|
+ {
|
|
|
+ name: "风场1",
|
|
|
+ svg: "MHS_BT",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "风场2",
|
|
|
+ svg: "NSS_FDC",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "风场3",
|
|
|
+ svg: "QS_FDC",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "风场4",
|
|
|
+ svg: "SBQ_FDC",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "风场5",
|
|
|
+ svg: "XS_FDC",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ allHeight: "D",
|
|
|
+ allWarnData: [],
|
|
|
+ starTimerWarn: null,
|
|
|
+ numm: 0,
|
|
|
+ stationSort: [],
|
|
|
+ };
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ pageHeight() {
|
|
|
+ return {
|
|
|
+ height: document.documentElement.clientHeight - 60 + "px",
|
|
|
+ };
|
|
|
+ },
|
|
|
+ allpageHeight() {
|
|
|
+ return {
|
|
|
+ height: document.documentElement.clientHeight - 200 + "px",
|
|
|
+ };
|
|
|
+ },
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.syzArray = dataJson.syzArray;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ updated() {},
|
|
|
+ methods: {
|
|
|
+ // 获取升压站报警数据
|
|
|
+ getSyzWarnData() {
|
|
|
+ api.alarmFault().then((res) => {
|
|
|
+ if (res && res.data) {
|
|
|
+ let datas = res.data;
|
|
|
+ let arr = [];
|
|
|
+ datas.forEach((it) => {
|
|
|
+ if (it.rank === "5" && it.category1 === "SYZ") {
|
|
|
+ // if (it.stationName.indexOf('风电场') !== -1 ) {
|
|
|
+ // str = it.stationName.substring(0, it.stationName.indexOf('风电场'))
|
|
|
+ // } else if (it.stationName.indexOf('光伏电站') !== -1) {
|
|
|
+ // str = it.stationName.substring(0, it.stationName.indexOf('光伏电站'))
|
|
|
+ // }
|
|
|
+ arr.push(it.category2);
|
|
|
+ }
|
|
|
+ // let str = ''
|
|
|
+ });
|
|
|
+ this.allWarnData = this.unique(arr);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ unique(arr) {
|
|
|
+ let newArr = [];
|
|
|
+ for (let i = 0; i < arr.length; i++) {
|
|
|
+ if (newArr.indexOf(arr[i]) === -1) {
|
|
|
+ newArr.push(arr[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return newArr;
|
|
|
+ },
|
|
|
+ getWarnstyle(item) {
|
|
|
+ let showWarn = "";
|
|
|
+ this.allWarnData.forEach((it) => {
|
|
|
+ if (it === item.id) {
|
|
|
+ showWarn = "warningMaskNew";
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return showWarn;
|
|
|
+ },
|
|
|
+ getStyle(type) {
|
|
|
+ let num = null;
|
|
|
+ let num1 = null;
|
|
|
+ let num2 = null;
|
|
|
+ if (type === "D") {
|
|
|
+ return {
|
|
|
+ width: "33.3%",
|
|
|
+ float: "left",
|
|
|
+ height: "400px",
|
|
|
+ };
|
|
|
+ } else if (type === "Z") {
|
|
|
+ num = parseInt(this.allSvgMsgData.length / 4);
|
|
|
+ num1 = this.allSvgMsgData.length % 4;
|
|
|
+ num2 = num1 > 0 ? num + 1 : num;
|
|
|
+ return {
|
|
|
+ width: "25%",
|
|
|
+ float: "left",
|
|
|
+ height: (document.documentElement.clientHeight - 200) / num2 + "px",
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ num = parseInt(this.allSvgMsgData.length / 5);
|
|
|
+ num1 = this.allSvgMsgData.length % 5;
|
|
|
+ num2 = num1 > 0 ? num + 1 : num;
|
|
|
+ return {
|
|
|
+ width: "20%",
|
|
|
+ float: "left",
|
|
|
+ height: (document.documentElement.clientHeight - 200) / num2 + "px",
|
|
|
+ };
|
|
|
+ }
|
|
|
+ },
|
|
|
+ changeHeight(type) {
|
|
|
+ this.allHeight = type;
|
|
|
+ },
|
|
|
+ getAllStationtab() {
|
|
|
+ let obj = {
|
|
|
+ id: "all",
|
|
|
+ name: "全部",
|
|
|
+ };
|
|
|
+ api.getAllStationTab().then((res) => {
|
|
|
+ if (res && res.data) {
|
|
|
+ res.data.unshift(obj);
|
|
|
+ this.syzArray = res.data;
|
|
|
+ this.activeTab = res.data[0].id;
|
|
|
+ if (this.activeTab === "all") {
|
|
|
+ let allMsg = res.data;
|
|
|
+ this.allSvgMsgData = [];
|
|
|
+ this.stationSort = [];
|
|
|
+ allMsg.forEach((it) => {
|
|
|
+ if (it.id !== "all") {
|
|
|
+ this.stationSort.push(it.name);
|
|
|
+ this.getallSvgDataFn(it.id, it.name);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // window.sessionStorage.setItem('allSvgData', [])
|
|
|
+ console.log("allSvgMsgData", this.allSvgMsgData);
|
|
|
+ console.log("stationSort", this.stationSort);
|
|
|
+ console.log("allMsg", allMsg);
|
|
|
+ }
|
|
|
+
|
|
|
+ // this.getSvgDataFn(res.data[0].id)
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 获取所有升压站数据
|
|
|
+ getallSvgDataFn(id, name) {
|
|
|
+ let params = {
|
|
|
+ id: id,
|
|
|
+ };
|
|
|
+ api.getSvgData(params).then((res) => {
|
|
|
+ let str = "";
|
|
|
+ str = res.data.substring(res.data.indexOf("<svg"));
|
|
|
+ str = str.replace("<svg", '<svg viewBox="0 -100 1900 1260"');
|
|
|
+ let obj = {
|
|
|
+ id: id,
|
|
|
+ name: name,
|
|
|
+ msg: str,
|
|
|
+ };
|
|
|
+ this.allSvgMsgData.push(obj);
|
|
|
+ if (this.allSvgMsgData.length === this.stationSort.length) {
|
|
|
+ let sortArr = [];
|
|
|
+ this.stationSort.forEach((itc) => {
|
|
|
+ this.allSvgMsgData.forEach((itb) => {
|
|
|
+ if (itc === itb.name) {
|
|
|
+ sortArr.push(itb);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ this.allSvgMsgData = sortArr;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 获取升压站数据
|
|
|
+ getSvgDataFn(val) {
|
|
|
+ this.svgMsg = "";
|
|
|
+ this.loading = true;
|
|
|
+ let params = {
|
|
|
+ id: val,
|
|
|
+ };
|
|
|
+ api.getSvgData(params).then((res) => {
|
|
|
+ if (res && res.data) {
|
|
|
+ let str = "";
|
|
|
+ str = res.data.substring(res.data.indexOf("<svg"));
|
|
|
+ str = str.replace("<svg", '<svg viewBox="0 0 1900 1260"');
|
|
|
+ this.svgMsg = str;
|
|
|
+ let html = document.getElementById("svg");
|
|
|
+ let svg1 = document.getElementsByTagName("svg");
|
|
|
+ this.$nextTick(() => {
|
|
|
+ if (svg1) {
|
|
|
+ let allTags = [];
|
|
|
+ let allTagsxc = [];
|
|
|
+ let status = [
|
|
|
+ "g",
|
|
|
+ "text",
|
|
|
+ "rect",
|
|
|
+ "line",
|
|
|
+ "polyline",
|
|
|
+ "circle",
|
|
|
+ "ellipse",
|
|
|
+ "polygon",
|
|
|
+ ];
|
|
|
+ status.forEach((it) => {
|
|
|
+ let allgs = [];
|
|
|
+ allgs = document.querySelectorAll(it);
|
|
|
+ allTags.push(allgs);
|
|
|
+ });
|
|
|
+ allTags = [
|
|
|
+ ...allTags[0],
|
|
|
+ ...allTags[1],
|
|
|
+ ...allTags[2],
|
|
|
+ ...allTags[3],
|
|
|
+ ...allTags[4],
|
|
|
+ ...allTags[5],
|
|
|
+ ...allTags[6],
|
|
|
+ ...allTags[7],
|
|
|
+ ];
|
|
|
+ allTags.forEach((it) => {
|
|
|
+ if (it.getAttribute("tagid")) {
|
|
|
+ allTagsxc.push(it);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ console.log("allTags222=>", allTagsxc);
|
|
|
+ this.allTagidArr = allTagsxc;
|
|
|
+ this.getSvgInfo();
|
|
|
+ }
|
|
|
+ console.log("html111=>", html);
|
|
|
+ });
|
|
|
+ this.loading = false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 获取触发器
|
|
|
+ getSvgInfo() {
|
|
|
+ let params = {
|
|
|
+ id: this.activeTab,
|
|
|
+ };
|
|
|
+ api.getAllStationSvgInfo(params).then((res) => {
|
|
|
+ if (res && res.data) {
|
|
|
+ if (res.data.tags) {
|
|
|
+ let strarr = [];
|
|
|
+ let str = "";
|
|
|
+ for (let i in res.data.tags) {
|
|
|
+ strarr.push(res.data.tags[i].tag);
|
|
|
+ }
|
|
|
+ str = strarr.join(",");
|
|
|
+ this.allTagsMS = res.data.tags;
|
|
|
+ this.allConditions = res.data.conditions;
|
|
|
+ // this.getrefreshData(str)
|
|
|
+ this.starTimer = setInterval(() => {
|
|
|
+ this.getrefreshData(str);
|
|
|
+ }, 1000);
|
|
|
+ }
|
|
|
+ console.log("SvgInfo333=>", res);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 获取根盾数据
|
|
|
+ getrefreshData(val) {
|
|
|
+ api.refreshData(val).then((res) => {
|
|
|
+ if (res && res.data) {
|
|
|
+ this.allrefreshData = res.data;
|
|
|
+ this.refreshDataFn(this.allTagsMS);
|
|
|
+ }
|
|
|
+ console.log("refreshData444=>", res);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 刷新数据
|
|
|
+ refreshDataFn(datas) {
|
|
|
+ for (let it in datas) {
|
|
|
+ let tagId = datas[it];
|
|
|
+ this.toRefreshFn(it, tagId);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 刷新自定义组件
|
|
|
+ toRefreshFn(val, data) {
|
|
|
+ var tag = this.allrefreshData[data.tag];
|
|
|
+ if (!tag) return;
|
|
|
+ this.allTagidArr.forEach((it) => {
|
|
|
+ this.onlytag = {};
|
|
|
+ if (it.attributes.tagid) {
|
|
|
+ if (val === it.attributes.tagid.value) {
|
|
|
+ this.onlytag = it;
|
|
|
+ if (it.nodeName === "polyline") {
|
|
|
+ console.log("onlyTag666", this.onlytag);
|
|
|
+ }
|
|
|
+ if (it.nodeName !== "text") {
|
|
|
+ if (this.onlytag.attributes.csid) {
|
|
|
+ let csid = this.onlytag.attributes.csid.value.split(";");
|
|
|
+ csid.forEach((ic) => {
|
|
|
+ if (ic) {
|
|
|
+ if (!this.allConditions[ic].isBinding) {
|
|
|
+ let num =
|
|
|
+ parseInt(this.allConditions[ic].value) === 0
|
|
|
+ ? "0"
|
|
|
+ : parseInt(this.allConditions[ic].value);
|
|
|
+ if (num) {
|
|
|
+ let num2 = tag.value === 0 ? "0" : tag.value;
|
|
|
+ if (num === num2) {
|
|
|
+ this.onlytag.setAttribute(
|
|
|
+ this.allConditions[ic].property,
|
|
|
+ this.allConditions[ic].propertyValue
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.onlytag.setAttribute(
|
|
|
+ this.allConditions[ic].property,
|
|
|
+ this.allConditions[ic].propertyValue
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.onlytag.textContent = tag.value.toFixed(2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // console.log('onlyTag555', this.onlytag)
|
|
|
+ },
|
|
|
+ // '全部'界面双击事件
|
|
|
+ dblgetSvgDataFn(name) {
|
|
|
+ this.activeTab = name;
|
|
|
+ this.getSvgDataFn(name);
|
|
|
+ },
|
|
|
+ // 初始化第一次报警并判断是否播放声音
|
|
|
+ initAlarm() {
|
|
|
+ let syzAlarmArray = this.$store.getters.syzAlarmArray;
|
|
|
+
|
|
|
+ const firstAlarmItem = syzAlarmArray.find((ele) => {
|
|
|
+ return !ele.isConfirm && ele.rank === this.$store.state.syzAlarmRank;
|
|
|
+ });
|
|
|
+
|
|
|
+ firstAlarmItem &&
|
|
|
+ this.audioPlay(this.getSound(firstAlarmItem.soundSource));
|
|
|
+
|
|
|
+ firstAlarmItem &&
|
|
|
+ this.$store.getters.syzAlarmArray.forEach((ele) => {
|
|
|
+ if (ele.stationId === firstAlarmItem.stationId) {
|
|
|
+ ele.isConfirm = true;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ this.activeTab =
|
|
|
+ this.activeTabStation ||
|
|
|
+ firstAlarmItem?.stationId ||
|
|
|
+ syzAlarmArray.find((ele) => {
|
|
|
+ return ele.rank === this.$store.state.syzAlarmRank;
|
|
|
+ })?.stationId ||
|
|
|
+ this.$store.getters.syzArray[0].id;
|
|
|
+
|
|
|
+ syzAlarmArray.forEach((ele) => {
|
|
|
+ if (ele.stationId === firstAlarmItem?.stationId) {
|
|
|
+ ele.isConfirm = true;
|
|
|
+ this.clearWarningTag(ele.stationId);
|
|
|
+ } else if (
|
|
|
+ !ele.isConfirm &&
|
|
|
+ ele.stationId !== firstAlarmItem?.stationId
|
|
|
+ ) {
|
|
|
+ this.renderWarningTag(ele.stationId);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ this.$store.commit("syzAlarmArray", syzAlarmArray);
|
|
|
+ },
|
|
|
+
|
|
|
+ // 定时器循环数据判断小红点渲染及是否播放声音
|
|
|
+ renderAlarm(stationId = "", playSound = true) {
|
|
|
+ let syzAlarmArray = this.$store.getters.syzAlarmArray;
|
|
|
+
|
|
|
+ syzAlarmArray.forEach((ele) => {
|
|
|
+ if (ele.stationId === stationId) {
|
|
|
+ ele.isConfirm = true;
|
|
|
+ this.clearWarningTag(ele.stationId);
|
|
|
+ } else if (!ele.isConfirm && ele.stationId !== stationId) {
|
|
|
+ this.renderWarningTag(ele.stationId);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ const res = syzAlarmArray.find((ele) => {
|
|
|
+ return !ele.isConfirm;
|
|
|
+ });
|
|
|
+
|
|
|
+ if (playSound) {
|
|
|
+ // this.audioPlay("./static/sound/syz.mp3");
|
|
|
+ }
|
|
|
+
|
|
|
+ this.$store.commit("syzAlarmArray", syzAlarmArray);
|
|
|
+ },
|
|
|
+
|
|
|
+ // 返回音频文件路径
|
|
|
+ getSound(fileName) {
|
|
|
+ return `./static/sound/${fileName}.mp3`;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 播放音频
|
|
|
+ audioPlay(audioPath) {
|
|
|
+ let soundMuteSelf = [];
|
|
|
+ let soundMuteOther = [];
|
|
|
+
|
|
|
+ this.$store.getters.syzAlarmArray.forEach((ele) => {
|
|
|
+ if (ele.stationId === this.activeTab) {
|
|
|
+ soundMuteSelf.push(ele);
|
|
|
+ } else {
|
|
|
+ soundMuteOther.push(ele);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ let alarmSelfLock = soundMuteSelf.some((ele) => {
|
|
|
+ return !ele.isConfirm;
|
|
|
+ });
|
|
|
+
|
|
|
+ let alarmOtherLock = soundMuteOther.some((ele) => {
|
|
|
+ return !ele.isConfirm;
|
|
|
+ });
|
|
|
+
|
|
|
+ if (alarmOtherLock) {
|
|
|
+ this.audio = new Audio(audioPath);
|
|
|
+ this.audio.play();
|
|
|
+ } else if (alarmSelfLock) {
|
|
|
+ this.$store.getters.syzArray.forEach((ele) => {
|
|
|
+ if (ele.stationId === this.activeTab) {
|
|
|
+ ele.isMute = false;
|
|
|
+ this.audio = new Audio(audioPath);
|
|
|
+ this.audio.play();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else if (!alarmSelfLock) {
|
|
|
+ this.$store.getters.syzArray.forEach((ele) => {
|
|
|
+ if (ele.stationId === this.activeTab) {
|
|
|
+ if (!ele.isMute) {
|
|
|
+ this.audio = new Audio(audioPath);
|
|
|
+ this.audio.play();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 显示某个小红点
|
|
|
+ renderWarningTag(stationId = "") {
|
|
|
+ this.$store.getters.syzArray.forEach((ele) => {
|
|
|
+ if (ele.id === stationId) {
|
|
|
+ ele.isWarning = "1";
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this.pageshowMode++;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 清除某个小红点
|
|
|
+ clearWarningTag(stationId = "") {
|
|
|
+ this.$store.getters.syzArray.forEach((ele) => {
|
|
|
+ if (ele.id === stationId) {
|
|
|
+ ele.isWarning = "0";
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this.pageshowMode++;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 切换报警声音开关
|
|
|
+ switchAlarmSound(index) {
|
|
|
+ this.$store.getters.syzArray[index].isMute =
|
|
|
+ !this.$store.getters.syzArray[index].isMute;
|
|
|
+ },
|
|
|
+
|
|
|
+ opened() {
|
|
|
+ this.initAlarm();
|
|
|
+ this.getAllStationtab();
|
|
|
+ this.timmer = setInterval(() => {
|
|
|
+ this.renderAlarm();
|
|
|
+ }, 3000);
|
|
|
+
|
|
|
+ let starTimerWarn = setInterval(() => {
|
|
|
+ this.getSyzWarnData();
|
|
|
+ }, 2000);
|
|
|
+ if (this.activeTabStation) {
|
|
|
+ setTimeout(() => {
|
|
|
+ clearInterval(this.starTimer);
|
|
|
+ this.starTimer = null;
|
|
|
+ this.$store.commit("activeTab", this.activeTabStation);
|
|
|
+ this.renderAlarm(this.activeTabStation, false);
|
|
|
+ if (this.activeTabStation !== "all") {
|
|
|
+ this.activeTab = this.activeTabStation;
|
|
|
+ this.debounce(this.getSvgDataFn(this.activeTabStation), 200);
|
|
|
+ }
|
|
|
+ }, 100);
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ closed() {
|
|
|
+ // this.$refs.svgRef[0].closed()
|
|
|
+ // this.$refs.svgRef[1].closed()
|
|
|
+ // this.$refs.svgRef[2].closed()
|
|
|
+ // this.$refs.svgRef[3].closed()
|
|
|
+ // this.$refs.svgRef[4].closed()
|
|
|
+ clearInterval(this.starTimer);
|
|
|
+ clearInterval(this.starTimerWarn);
|
|
|
+ clearInterval(this.timmer);
|
|
|
+ this.starTimer = null;
|
|
|
+ this.starTimerWarn = null;
|
|
|
+ this.timmer = null;
|
|
|
+ this.$store.commit("activeTab", "");
|
|
|
+ this.$store.commit("syzDialogShow", false);
|
|
|
+ },
|
|
|
+
|
|
|
+ tabClick(res) {
|
|
|
+ // clearInterval(this.starTimer);
|
|
|
+ // this.starTimer = null;
|
|
|
+ // this.$store.commit("activeTab", res.props.name);
|
|
|
+ // this.renderAlarm(res.props.name, false);
|
|
|
+ // if (res.props.name !== "all") {
|
|
|
+ // this.debounce(this.getSvgDataFn(res.props.name), 200);
|
|
|
+ // }
|
|
|
+
|
|
|
+ this.activeTab = res.props.name;
|
|
|
+ },
|
|
|
+ debounce(fn, delay) {
|
|
|
+ var delay = delay || 200;
|
|
|
+ var timer;
|
|
|
+ return function () {
|
|
|
+ var th = this;
|
|
|
+ var args = arguments;
|
|
|
+ if (timer) {
|
|
|
+ clearTimeout(timer);
|
|
|
+ }
|
|
|
+ timer = setTimeout(function () {
|
|
|
+ timer = null;
|
|
|
+ fn.apply(th, args);
|
|
|
+ }, delay);
|
|
|
+ };
|
|
|
+ },
|
|
|
+ throttle(fn, interval) {
|
|
|
+ var last;
|
|
|
+ var timer;
|
|
|
+ var interval = interval || 200;
|
|
|
+ return function () {
|
|
|
+ var th = this;
|
|
|
+ var args = arguments;
|
|
|
+ var now = +new Date();
|
|
|
+ if (last && now - last < interval) {
|
|
|
+ clearTimeout(timer);
|
|
|
+ timer = setTimeout(function () {
|
|
|
+ last = now;
|
|
|
+ fn.apply(th, args);
|
|
|
+ }, interval);
|
|
|
+ } else {
|
|
|
+ last = now;
|
|
|
+ fn.apply(th, args);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ },
|
|
|
+ },
|
|
|
+ // watch: {
|
|
|
+ // "$store.state.syzArray"(res) {
|
|
|
+ // this.syzArray = res;
|
|
|
+ // },
|
|
|
+ // },
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="less" scoped>
|
|
|
+.SYZDetailsNoDia {
|
|
|
+ padding-top: 2%;
|
|
|
+ padding-left: 3%;
|
|
|
+ .bodyy {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ background-color: black;
|
|
|
+ width: 98%;
|
|
|
+ margin-top: -30px;
|
|
|
+ height: 90vh;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ .syzDetailsPaneItemNoD {
|
|
|
+ position: relative;
|
|
|
+ .buttonGroup {
|
|
|
+ margin-bottom: 10px;
|
|
|
+ display: flex;
|
|
|
+ // justify-content: end;
|
|
|
+ float: right;
|
|
|
+ .el-button-group {
|
|
|
+ .el-button {
|
|
|
+ min-height: 30px !important;
|
|
|
+ }
|
|
|
+ .showSty {
|
|
|
+ color: #409eff;
|
|
|
+ border-color: #c6e2ff;
|
|
|
+ background-color: #ecf5ff;
|
|
|
+ outline: 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .warningMaskNew {
|
|
|
+ background-color: rgba(186, 50, 55, 0.5);
|
|
|
+ animation: fade 2000ms infinite;
|
|
|
+ -webkit-animation: fade 2000ms infinite;
|
|
|
+ }
|
|
|
+
|
|
|
+ @keyframes fade {
|
|
|
+ from {
|
|
|
+ opacity: 0.7;
|
|
|
+ }
|
|
|
+
|
|
|
+ 50% {
|
|
|
+ opacity: 0.3;
|
|
|
+ }
|
|
|
+
|
|
|
+ to {
|
|
|
+ opacity: 0.7;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @-webkit-keyframes fade {
|
|
|
+ from {
|
|
|
+ opacity: 0.7;
|
|
|
+ }
|
|
|
+
|
|
|
+ 50% {
|
|
|
+ opacity: 0.3;
|
|
|
+ }
|
|
|
+
|
|
|
+ to {
|
|
|
+ opacity: 0.7;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .showAllSvgMsg {
|
|
|
+ width: calc(100% - 15px);
|
|
|
+ height: calc(100% - 15px);
|
|
|
+ // padding: 20px;
|
|
|
+ // margin-bottom: 20px;
|
|
|
+ // background: #3a3a3a;
|
|
|
+ // border: 3px solid #3a3a3a;
|
|
|
+ border: 3px solid #646464;
|
|
|
+ border-radius: 10px;
|
|
|
+ .showAllSvgMsg_top {
|
|
|
+ border-radius: 10px 10px 0 0;
|
|
|
+ height: calc(100% - 40px);
|
|
|
+ width: 100%;
|
|
|
+ overflow: hidden;
|
|
|
+ // background: #fff;
|
|
|
+ }
|
|
|
+ .showAllSvgMsg_bot {
|
|
|
+ background: #3a3a3a;
|
|
|
+ border-radius: 0 0 8px 8px;
|
|
|
+ height: 40px;
|
|
|
+ text-align: center;
|
|
|
+ span {
|
|
|
+ position: relative;
|
|
|
+ top: 10px;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .alarmIconBox {
|
|
|
+ position: absolute;
|
|
|
+ right: 0;
|
|
|
+ top: 0;
|
|
|
+ cursor: pointer;
|
|
|
+
|
|
|
+ i {
|
|
|
+ font-size: 20px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|
|
|
+<style lang="less">
|
|
|
+.SYZDetailsNoDia {
|
|
|
+ .bodyy {
|
|
|
+ .pop-up-main,
|
|
|
+ .paln-box {
|
|
|
+ width: 100%;
|
|
|
+ height: 90vh;
|
|
|
+ overflow: hidden;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+ .movableItem {
|
|
|
+ // width: 1920PX !important;
|
|
|
+ // height: 800PX !important;
|
|
|
+ padding-top: 5%;
|
|
|
+
|
|
|
+ .svg {
|
|
|
+ // width: 100%;
|
|
|
+ // height: 92%;
|
|
|
+ margin-left: 0;
|
|
|
+ margin-top: 8%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-badge__content.is-fixed.is-dot {
|
|
|
+ right: 0;
|
|
|
+ top: 10px;
|
|
|
+ background: #f25656;
|
|
|
+ animation: twinkle 0.75s infinite;
|
|
|
+ border-color: transparent;
|
|
|
+ }
|
|
|
+
|
|
|
+ @keyframes twinkle {
|
|
|
+ 0% {
|
|
|
+ opacity: 0;
|
|
|
+ }
|
|
|
+ 50% {
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
+ 100% {
|
|
|
+ opacity: 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .currentShowTitles {
|
|
|
+ width: 100%;
|
|
|
+ position: relative;
|
|
|
+ .alarIcon {
|
|
|
+ position: absolute;
|
|
|
+ right: 50px;
|
|
|
+ top: 5;
|
|
|
+ font-size: 20px;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|