From f2a5a09c879849110b42c46297ab4c080500e61d Mon Sep 17 00:00:00 2001
From: 严智鑫 <test>
Date: 星期四, 03 四月 2025 07:28:03 +0800
Subject: [PATCH] Merge branch 'master' of http://159.223.171.199:10439/r/JiuMuMES
---
UI-Project/src/views/MechanicalMonitor/mechanicalMonitor.vue | 78 ++++++++++++++++----------------------
1 files changed, 33 insertions(+), 45 deletions(-)
diff --git a/UI-Project/src/views/MechanicalMonitor/mechanicalMonitor.vue b/UI-Project/src/views/MechanicalMonitor/mechanicalMonitor.vue
index 02524a4..515e2d8 100644
--- a/UI-Project/src/views/MechanicalMonitor/mechanicalMonitor.vue
+++ b/UI-Project/src/views/MechanicalMonitor/mechanicalMonitor.vue
@@ -1,45 +1,25 @@
<script setup>
import { ref, onMounted, onUnmounted, computed } from 'vue';
-import axios from 'axios';
+import request from '@/utils/request';
const devices = ref([]);
-const ws = ref(null);
const activeTab = ref('line1');
-const initWebSocket = () => {
- const wsUrl = `ws://${window.location.host}/api/talk/mechanicalMonitor`;
- ws.value = new WebSocket(wsUrl);
-
- ws.value.onmessage = (event) => {
- const data = JSON.parse(event.data);
- if (data.type === 'status_change') {
- updateDeviceStatus(data.data);
+const getMechanicalStatus = () => {
+ return request({
+ url: '/deviceInteraction/mechanicalMonitor/getMechanicalStatus',
+ method: 'post',
+ headers: {
+ 'Content-Type': 'application/json'
}
- };
-
- ws.value.onclose = () => {
- console.log('WebSocket杩炴帴鍏抽棴');
- setTimeout(initWebSocket, 5000);
- };
-};
-
-const updateDeviceStatus = (newStatus) => {
- const device = devices.value.find(d => d.deviceId === newStatus.deviceId);
- if (device) {
- Object.assign(device, {
- ...newStatus,
- showAlarmInfo: device.showAlarmInfo,
- alarmTime: newStatus.alarmTime ? new Date(newStatus.alarmTime).toLocaleString() : null,
- disconnectTime: newStatus.disconnectTime ? new Date(newStatus.disconnectTime).toLocaleString() : null
- });
- }
+ });
};
const fetchDeviceStatus = async () => {
try {
- const response = await axios.post('/api/deviceInteraction/mechanicalMonitor/getMechanicalStatus');
- if (response.data.code === 200) {
- const statusData = response.data.data.mechanicalStatus;
+ const response = await getMechanicalStatus();
+ if (response.code === 200) {
+ const statusData = response.data.mechanicalStatus;
devices.value = statusData.map(device => ({
...device,
showAlarmInfo: false,
@@ -48,7 +28,7 @@
}));
}
} catch (error) {
- console.error('鑾峰彇璁惧鐘舵�佸け璐�:', error);
+ console.error('鑾峰彇璁惧鐘舵�佸け璐�:', error.message || error);
}
};
@@ -84,21 +64,17 @@
onMounted(() => {
fetchDeviceStatus();
- initWebSocket();
-});
-
-onUnmounted(() => {
- if (ws.value) {
- ws.value.close();
- }
+ const timer = setInterval(fetchDeviceStatus, 30000);
+
+ onUnmounted(() => {
+ clearInterval(timer);
+ });
});
</script>
<template>
<div class="monitoring-container">
<h1>涔濈墽璁惧杩炴帴鍙婃晠闅滄姤璀︾洃鎺�</h1>
-
- <!-- 娣诲姞鏍囩鍒囨崲缁勪欢 -->
<div class="tab-container">
<div
class="tab-item"
@@ -115,12 +91,23 @@
浜岀嚎
</div>
</div>
+
+ <!-- 娣诲姞璋冭瘯淇℃伅 -->
+ <div v-if="devices.length === 0">鏆傛棤璁惧鏁版嵁</div>
+ <div v-else>
+ <p>鎬昏澶囨暟閲�: {{ devices.length }}</p>
+ <p>涓�绾胯澶囨暟閲�: {{ groupedDevices.line1.length }}</p>
+ <p>浜岀嚎璁惧鏁伴噺: {{ groupedDevices.line2.length }}</p>
+ </div>
- <!-- 淇敼鐢熶骇绾挎樉绀洪�昏緫 -->
+ <!-- 涓�绾胯澶� -->
<div v-show="activeTab === 'line1'" class="line-section">
<h2 class="line-title">涓�绾�</h2>
<div class="device-grid">
- <div v-for="device in groupedDevices.line1" :key="device.id" class="device-panel" @click="toggleAlarmInfo(device)">
+ <div v-for="device in groupedDevices.line1"
+ :key="device.deviceId"
+ class="device-panel"
+ @click="toggleAlarmInfo(device)">
<div class="device-image">
<img :src="deviceIcon(device)" alt="璁惧鍥炬爣">
<p v-if="device.status === 1" class="status-text normal-status">姝e父</p>
@@ -148,6 +135,7 @@
</div>
</div>
+ <!-- 浜岀嚎璁惧 -->
<div v-show="activeTab === 'line2'" class="line-section">
<h2 class="line-title">浜岀嚎</h2>
<div class="device-grid">
@@ -186,7 +174,7 @@
.monitoring-container {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
padding: 20px;
- max-width: 1200px;
+ max-width: 1600px;
margin: 0 auto;
margin-bottom: 60px;
}
@@ -212,7 +200,7 @@
.device-grid {
display: grid;
- grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
+ grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 15px;
margin-bottom: 20px;
}
--
Gitblit v1.8.0