|
1
|
<template>
|
|
2
|
<el-container class="device-monitor">
|
|
3
|
<el-aside width="225px">
|
|
4
5
|
<el-card class="box-card">
<div slot="header" class="clearfix">
|
|
6
|
<span>{{ $t("main.monitor.overview") }}</span>
|
|
7
8
|
</div>
<div class="container">
|
|
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'
"
>
|
|
25
26
|
<el-row>
<el-col :span="14">
|
|
27
|
{{ item.name }}
|
|
28
29
30
|
</el-col>
<el-col :span="10">
<!-- <br/> -->
|
|
31
|
<span>{{ item.description }}</span>
|
|
32
33
|
</el-col>
</el-row>
|
|
34
35
36
37
|
</div>
</div>
</div>
</el-card>
|
|
38
|
<el-card class="box-card">
|
|
39
|
<div slot="header" class="clearfix">
|
|
40
|
<span>{{ $t("main.monitor.deviceOverview") }}</span>
|
|
41
|
</div>
|
|
42
43
44
45
46
|
<div class="device-info">
<el-divider
v-if="srmList.length > 0"
content-position="center"
style="width: 100vw"
|
|
47
|
>{{ $t("main.monitor.stacker") }}</el-divider
|
|
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>
|
|
58
59
60
|
<el-divider v-if="stationList.length > 0" content-position="center">{{
$t("main.monitor.station")
}}</el-divider>
|
|
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>
|
|
70
71
72
|
<el-divider v-if="rgvList.length > 0" content-position="center">{{
$t("main.monitor.rgv")
}}</el-divider>
|
|
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>
|
|
82
83
84
|
<el-divider v-if="crgvList.length > 0" content-position="center">{{
$t("main.monitor.crgv")
}}</el-divider>
|
|
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>
|
|
95
96
|
</el-card>
</el-aside>
|
|
97
|
<el-main>
|
|
98
|
<map-module ref="map" />
|
|
99
|
</el-main>
|
|
100
|
</el-container>
|
|
101
102
103
|
</template>
<script>
|
|
104
105
106
107
108
109
110
111
|
import {
getCRGVInfo,
getOverviews,
getRGVInfo,
getSRMInfo,
getStationMonitorInfo,
} from "@/api/main";
import MapModule from "@/components/MapModule";
|
|
112
113
|
export default {
name: "DeviceMonitor",
|
|
114
|
components: {
|
|
115
|
MapModule,
|
|
116
|
},
|
|
117
|
data() {
|
|
118
|
return {
|
|
119
|
//详情列表
|
|
120
|
overyviewsList: [],
|
|
121
|
//堆垛机列表
|
|
122
|
srmList: [],
|
|
123
|
//站台列表
|
|
124
|
stationList: [],
|
|
125
|
//rgv列表
|
|
126
|
rgvList: [],
|
|
127
|
//crgv列表
|
|
128
|
crgvList: [],
|
|
129
|
interval: null,
|
|
130
|
isCurrentTab: false,
|
|
131
|
isOpenServer: false,
|
|
132
133
|
};
},
|
|
134
135
136
137
138
139
140
141
142
143
|
props: {
// 定义接收的 startDeal 变量
startDeal: {
type: Boolean,
default: false,
},
},
watch: {
// 监听 startDeal 变量的变化
startDeal(newValue, oldValue) {
|
|
144
145
|
// console.log('处理状态发生变化:', newValue);
this.isOpenServer = newValue;
|
|
146
147
|
if (this.isCurrentTab) {
if (newValue) {
|
|
148
|
this.start();
|
|
149
|
} else {
|
|
150
151
152
|
this.stop();
}
}
|
|
153
154
|
},
},
|
|
155
|
beforeDestroy() {
|
|
156
|
clearInterval(this.interval);
|
|
157
158
|
// 移除窗口大小变化事件监听
window.removeEventListener("resize", this.setDeviceInfoHeight);
|
|
159
|
},
|
|
160
|
mounted() {
|
|
161
|
// console.log(this.$dict);
|
|
162
163
164
165
|
// 初始化高度
this.setDeviceInfoHeight();
// 监听窗口大小变化事件
window.addEventListener("resize", this.setDeviceInfoHeight);
|
|
166
167
168
|
},
methods: {
//开始刷新数据
|
|
169
|
start() {
|
|
170
|
this.isCurrentTab = true;
|
|
171
|
if (this.isOpenServer) {
|
|
172
|
this.loadData();
|
|
173
|
this.interval = setInterval(() => {
|
|
174
|
this.loadData();
|
|
175
176
|
}, 3000);
}
|
|
177
|
},
|
|
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);
},
|
|
204
|
//停止刷新数据
|
|
205
|
stop() {
|
|
206
|
this.isCurrentTab = false;
|
|
207
|
clearInterval(this.interval);
|
|
208
209
210
|
},
getTagType(item) {
|
|
211
212
213
214
|
if (item.totalError == "True") {
return "danger"; // 报警
} else {
if (item.operationModel == "5") {
|
|
215
216
217
218
219
|
if (
item.fork1TaskExcuteStatus == "2" ||
item.fork1TaskExcuteStatus == "3"
) {
return ""; // 正常
|
|
220
|
} else if (item.fork1TaskExcuteStatus == "1") {
|
|
221
|
return "success"; // 待机
|
|
222
|
} else {
|
|
223
|
return "danger"; // 报警
|
|
224
|
}
|
|
225
226
|
} else {
return "warning"; // 非自动
|
|
227
228
229
230
231
|
}
}
},
getTagTypePort(item) {
|
|
232
233
234
235
|
if (item.stationError == "1") {
return "danger"; // 报警
} else {
if (item.stationMonitorAutomation == "1") {
|
|
236
|
if (item.stationMonitorOccupied == "1") {
|
|
237
|
return ""; // 正常
|
|
238
|
} else {
|
|
239
|
return "success"; // 报警
|
|
240
|
}
|
|
241
242
|
} else {
return "warning"; // 非自动
|
|
243
|
}
|
|
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`;
|
|
254
|
}
|
|
255
|
},
|
|
256
257
258
259
260
|
},
};
</script>
<style lang="scss" scoped>
|
|
261
262
263
|
.container {
width: 100%;
}
|
|
264
|
|
|
265
266
267
268
|
.text {
font-size: 14px;
color: white;
}
|
|
269
|
|
|
270
271
272
273
|
.text span {
font-size: 16px;
font-weight: bolder;
}
|
|
274
|
|
|
275
276
277
278
279
280
281
|
.item {
border: 1px black solid;
text-align: center;
width: 100%;
line-height: 3vh;
margin-bottom: 5px;
}
|
|
282
|
|
|
283
284
285
286
287
|
.clearfix {
height: 14px;
font-size: 14px;
color: #409eff;
}
|
|
288
|
|
|
289
290
291
|
.tag-item {
margin: 0px 5px 5px 0px;
}
|
|
292
|
|
|
293
|
.device-info {
|
|
294
|
margin-top: 10px;
|
|
295
296
|
display: flex;
flex-wrap: wrap; // 允许元素换行
|
|
297
|
// max-height: 70vh; // 设置最大高度,超出显示滚动条
|
|
298
299
|
overflow-y: auto; // 超出最大高度时显示纵向滚动条
}
|
|
300
|
</style>
|
|
301
302
303
|
<style>
.device-monitor {
|
|
304
|
.el-card__body {
|
|
305
306
307
308
|
width: 225px;
}
}
</style>
|