Blame view

HHECS.Web/src/views/main/components/DeviceMonitor.vue 7.43 KB
王硕 authored
1
<template>
胡菁 authored
2
  <el-container class="device-monitor">
胡菁 authored
3
    <el-aside width="225px">
胡菁 authored
4
5
      <el-card class="box-card">
        <div slot="header" class="clearfix">
胡菁 authored
6
          <span>{{ $t("main.monitor.overview") }}</span>
胡菁 authored
7
8
        </div>
        <div class="container">
胡菁 authored
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
          <div
            v-for="(item, index) in overyviewsList"
            :key="item.code"
            class="text item"
          >
            <div
              :style="
                index == 0
                  ? 'background-color:#1E9FFF'
                  : index == 1
                  ? 'background-color:#009688'
                  : index == 2
                  ? 'background-color:#FFB800'
                  : 'background-color:#1E9FFF'
              "
            >
胡菁 authored
25
26
              <el-row>
                <el-col :span="14">
胡菁 authored
27
                  {{ item.name }}
胡菁 authored
28
29
30
                </el-col>
                <el-col :span="10">
                  <!-- <br/> -->
胡菁 authored
31
                  <span>{{ item.description }}</span>
胡菁 authored
32
33
                </el-col>
              </el-row>
胡菁 authored
34
35
36
37
            </div>
          </div>
        </div>
      </el-card>
胡菁 authored
38
      <el-card class="box-card">
胡菁 authored
39
        <div slot="header" class="clearfix">
胡菁 authored
40
          <span>{{ $t("main.monitor.deviceOverview") }}</span>
胡菁 authored
41
        </div>
胡菁 authored
42
43
44
45
46
        <div class="device-info">
          <el-divider
            v-if="srmList.length > 0"
            content-position="center"
            style="width: 100vw"
胡菁 authored
47
            >{{ $t("main.monitor.stacker") }}</el-divider
胡菁 authored
48
49
50
51
52
53
54
55
56
57
          >
          <el-tag
            v-for="item in srmList"
            :key="item.name"
            :type="getTagType(item)"
            effect="dark"
            class="tag-item"
          >
            {{ item.name }}
          </el-tag>
胡菁 authored
58
59
60
          <el-divider v-if="stationList.length > 0" content-position="center">{{
            $t("main.monitor.station")
          }}</el-divider>
胡菁 authored
61
62
63
64
65
66
67
68
69
          <el-tag
            v-for="item in stationList"
            :key="item.name"
            :type="getTagTypePort(item)"
            effect="dark"
            class="tag-item"
          >
            {{ item.name.replace("StationMonitor", "") }}
          </el-tag>
胡菁 authored
70
71
72
          <el-divider v-if="rgvList.length > 0" content-position="center">{{
            $t("main.monitor.rgv")
          }}</el-divider>
胡菁 authored
73
74
75
76
77
78
79
80
81
          <el-tag
            v-for="item in rgvList"
            :key="item.name"
            :type="getTagType(item)"
            effect="dark"
            class="tag-item"
          >
            {{ item.name }}
          </el-tag>
胡菁 authored
82
83
84
          <el-divider v-if="crgvList.length > 0" content-position="center">{{
            $t("main.monitor.crgv")
          }}</el-divider>
胡菁 authored
85
86
87
88
89
90
91
92
93
94
          <el-tag
            v-for="item in crgvList"
            :key="item.name"
            :type="getTagTypePort(item)"
            effect="dark"
            class="tag-item"
          >
            {{ item.name }}
          </el-tag>
        </div>
胡菁 authored
95
96
      </el-card>
    </el-aside>
胡菁 authored
97
    <el-main>
胡菁 authored
98
      <map-module ref="map" />
胡菁 authored
99
    </el-main>
胡菁 authored
100
  </el-container>
王硕 authored
101
102
103
</template>

<script>
胡菁 authored
104
105
106
107
108
109
110
111
import {
  getCRGVInfo,
  getOverviews,
  getRGVInfo,
  getSRMInfo,
  getStationMonitorInfo,
} from "@/api/main";
import MapModule from "@/components/MapModule";
王硕 authored
112
113
export default {
  name: "DeviceMonitor",
胡菁 authored
114
  components: {
胡菁 authored
115
    MapModule,
胡菁 authored
116
  },
王硕 authored
117
  data() {
胡菁 authored
118
    return {
胡菁 authored
119
      //详情列表
胡菁 authored
120
      overyviewsList: [],
胡菁 authored
121
      //堆垛机列表
胡菁 authored
122
      srmList: [],
胡菁 authored
123
      //站台列表
胡菁 authored
124
      stationList: [],
胡菁 authored
125
      //rgv列表
胡菁 authored
126
      rgvList: [],
胡菁 authored
127
      //crgv列表
胡菁 authored
128
      crgvList: [],
胡菁 authored
129
      interval: null,
胡菁 authored
130
      isCurrentTab: false,
胡菁 authored
131
      isOpenServer: false,
胡菁 authored
132
133
    };
  },
胡菁 authored
134
135
136
137
138
139
140
141
142
143
  props: {
    // 定义接收的 startDeal 变量
    startDeal: {
      type: Boolean,
      default: false,
    },
  },
  watch: {
    // 监听 startDeal 变量的变化
    startDeal(newValue, oldValue) {
胡菁 authored
144
145
      // console.log('处理状态发生变化:', newValue);
      this.isOpenServer = newValue;
胡菁 authored
146
147
      if (this.isCurrentTab) {
        if (newValue) {
胡菁 authored
148
          this.start();
胡菁 authored
149
        } else {
胡菁 authored
150
151
152
          this.stop();
        }
      }
胡菁 authored
153
154
    },
  },
胡菁 authored
155
  beforeDestroy() {
胡菁 authored
156
    clearInterval(this.interval);
胡菁 authored
157
158
    // 移除窗口大小变化事件监听
    window.removeEventListener("resize", this.setDeviceInfoHeight);
胡菁 authored
159
  },
胡菁 authored
160
  mounted() {
胡菁 authored
161
    // console.log(this.$dict);
胡菁 authored
162
163
164
165
    // 初始化高度
    this.setDeviceInfoHeight();
    // 监听窗口大小变化事件
    window.addEventListener("resize", this.setDeviceInfoHeight);
胡菁 authored
166
167
168
  },
  methods: {
    //开始刷新数据
胡菁 authored
169
    start() {
胡菁 authored
170
      this.isCurrentTab = true;
胡菁 authored
171
      if (this.isOpenServer) {
胡菁 authored
172
        this.loadData();
胡菁 authored
173
        this.interval = setInterval(() => {
胡菁 authored
174
          this.loadData();
胡菁 authored
175
176
        }, 3000);
      }
胡菁 authored
177
    },
胡菁 authored
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
    //加载数据
    loadData() {
      getOverviews().then((response) => {
        // console.log(response);
        this.overyviewsList = response.data;
      });
      getSRMInfo().then((response) => {
        this.srmList = response.data;
      });
      //是否存在rgv
      if (window.appConfig.isExistRGV) {
        getRGVInfo().then((response) => {
          this.rgvList = response.data;
        });
      }
      //是否存在crgv
      if (window.appConfig.isExistCRGV) {
        getCRGVInfo().then((response) => {
          this.crgvList = response.data;
        });
      }
      getStationMonitorInfo().then((response) => {
        this.stationList = response.data;
      });
      this.$refs.map.updateData(this.srmList, this.rgvList, this.stationList);
    },
胡菁 authored
204
    //停止刷新数据
胡菁 authored
205
    stop() {
胡菁 authored
206
      this.isCurrentTab = false;
胡菁 authored
207
      clearInterval(this.interval);
胡菁 authored
208
209
210
    },

    getTagType(item) {
胡菁 authored
211
212
213
214
      if (item.totalError == "True") {
        return "danger"; // 报警
      } else {
        if (item.operationModel == "5") {
胡菁 authored
215
216
217
218
219
          if (
            item.fork1TaskExcuteStatus == "2" ||
            item.fork1TaskExcuteStatus == "3"
          ) {
            return ""; // 正常
胡菁 authored
220
          } else if (item.fork1TaskExcuteStatus == "1") {
胡菁 authored
221
            return "success"; // 待机
胡菁 authored
222
          } else {
胡菁 authored
223
            return "danger"; // 报警
胡菁 authored
224
          }
胡菁 authored
225
226
        } else {
          return "warning"; // 非自动
胡菁 authored
227
228
229
230
231
        }
      }
    },

    getTagTypePort(item) {
胡菁 authored
232
233
234
235
      if (item.stationError == "1") {
        return "danger"; // 报警
      } else {
        if (item.stationMonitorAutomation == "1") {
胡菁 authored
236
          if (item.stationMonitorOccupied == "1") {
胡菁 authored
237
            return ""; // 正常
胡菁 authored
238
          } else {
胡菁 authored
239
            return "success"; // 报警
胡菁 authored
240
          }
胡菁 authored
241
242
        } else {
          return "warning"; // 非自动
胡菁 authored
243
        }
胡菁 authored
244
245
246
247
248
249
250
251
252
253
      }
    },

    // ... existing code ...
    setDeviceInfoHeight() {
      const deviceInfoElement = this.$el.querySelector(".device-info");
      if (deviceInfoElement) {
        // 计算 70% 的视口高度
        const height = window.innerHeight * 0.52;
        deviceInfoElement.style.maxHeight = `${height}px`;
胡菁 authored
254
      }
胡菁 authored
255
    },
王硕 authored
256
257
258
259
260
  },
};
</script>

<style lang="scss" scoped>
胡菁 authored
261
262
263
.container {
  width: 100%;
}
胡菁 authored
264
胡菁 authored
265
266
267
268
.text {
  font-size: 14px;
  color: white;
}
胡菁 authored
269
胡菁 authored
270
271
272
273
.text span {
  font-size: 16px;
  font-weight: bolder;
}
胡菁 authored
274
胡菁 authored
275
276
277
278
279
280
281
.item {
  border: 1px black solid;
  text-align: center;
  width: 100%;
  line-height: 3vh;
  margin-bottom: 5px;
}
胡菁 authored
282
胡菁 authored
283
284
285
286
287
.clearfix {
  height: 14px;
  font-size: 14px;
  color: #409eff;
}
胡菁 authored
288
胡菁 authored
289
290
291
.tag-item {
  margin: 0px 5px 5px 0px;
}
胡菁 authored
292
胡菁 authored
293
.device-info {
胡菁 authored
294
  margin-top: 10px;
胡菁 authored
295
296
  display: flex;
  flex-wrap: wrap; // 允许元素换行
胡菁 authored
297
  //   max-height: 70vh; // 设置最大高度,超出显示滚动条
胡菁 authored
298
299
  overflow-y: auto; // 超出最大高度时显示纵向滚动条
}
王硕 authored
300
</style>
胡菁 authored
301
302
303

<style>
.device-monitor {
胡菁 authored
304
  .el-card__body {
胡菁 authored
305
306
307
308
    width: 225px;
  }
}
</style>