liulingling.177216
2024-08-26 349f1cfc5fa77fbc636d542df0d8050fddec48c2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<template>
  <div v-html="svgHtml"/>
</template>
 
<script>
import {getConfigure, getLiveData} from "@/api/basicSetup/equipmentfile";
 
export default {
  props: ["nodeId"],
  created() {
    let nodeId = this.$props.nodeId;
    if (nodeId) {
      this.show(nodeId);
    }
  },
  data() {
    return {
      svgHtml: null,
      filePath: null,
      tags: null,
      tagCodes: [],
      valueItems: null,
      timer: null
    }
  },
  mounted() {
    clearInterval(this.timer);
    this.refreshData()
  },
  methods: {
    show(nodeId) {
      console.log(nodeId)
      this.tagCodes = [];
      this.filePath = '';
      getConfigure(nodeId).then(response => {
        this.tags = [];
        this.svgHtml = '';
        if (response.code === 200) {
          if (response.data) {
            this.filePath = process.env.VUE_APP_BASE_API + response.data.filePath;
            this.tags = response.data.infoList;
            this.getSvg();
            this.refresh();
          }
        } else {
          this.msgError(response.msg);
        }
      });
    },
    getSvg() {
      const xhr = new XMLHttpRequest();
      xhr.open("GET", this.filePath, true);
      xhr.send();
      xhr.addEventListener("load", () => {
        const resXML = xhr.responseXML;
        let svgDom = resXML.documentElement.cloneNode(true);
        let values = svgDom.getElementsByTagName('text');
        for (let i = 0; i < values.length; i++) {
          let tag = this.tags.filter(f => f.param === values[i].textContent);
          if (tag && tag.length > 0) {
            let tagCode = tag[0].tag;
            values[i].textContent = '';
            if (tagCode) {
              values[i].setAttribute("id", tagCode);
              this.tagCodes.push(tagCode)
            }
          }
        }
 
        let oSerializer = new XMLSerializer();
        this.svgHtml = oSerializer.serializeToString(svgDom);
      });
    },
    refreshData() {
      this.timer = setInterval(() => {
        this.refresh();
      }, 3000);
    },
    refresh() {
      if (this.tagCodes.length === 0) {
        return;
      }
 
      getLiveData(this.tagCodes).then(response => {
        if (response.code === 200) {
          if (response.data) {
            response.data.forEach(tagValue => {
              let value = '';
              if (tagValue.value) {
                value = parseFloat(tagValue.value).toFixed(2);
              } else {
                value = "0";
              }
 
              let el = document.getElementById(tagValue.tagCode);
              if (el) {
                el.textContent = value;
              }
            });
            //这块是单独加的 用来处理 没有指标或者指标没有结果的 都设置0
            let allText = document.getElementsByTagName("text");
            for (let i = 0; i < allText.length; i++) {
              // console.log(i + "textContent=" + allText[i].textContent);
              if (allText[i].textContent == null || allText[i].textContent == "") {
                allText[i].textContent = "0";
              }
            }
          }
        }
      });
    }
  },
  beforeDestroy() {
    clearInterval(this.timer)
  }
}
</script>