Răsfoiți Sursa

refactor(TerrainViewer): move sensor data fetch logic to viewer component

- remove duplicate sensor data fetch code from App.vue
- add loading state for sensor metrics
- auto fetch sensor data when device marker is clicked
wenhongquan 1 lună în urmă
părinte
comite
2ab9c6ced1

Fișier diff suprimat deoarece este prea mare
+ 0 - 0
dist/assets/index--A2ma0J3.js


Fișier diff suprimat deoarece este prea mare
+ 0 - 0
dist/assets/index-Tp7mW4_a.css


+ 2 - 2
dist/index.html

@@ -7,8 +7,8 @@
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>3D 大屏 - 倾斜摄影</title>
-    <script type="module" crossorigin src="/assets/index-CSsNmMlT.js"></script>
-    <link rel="stylesheet" crossorigin href="/assets/index-Ci-fmrzT.css">
+    <script type="module" crossorigin src="/assets/index--A2ma0J3.js"></script>
+    <link rel="stylesheet" crossorigin href="/assets/index-Tp7mW4_a.css">
   </head>
   <body>
     <div id="app"></div>

+ 0 - 24
src/App.vue

@@ -94,30 +94,6 @@ async function loadAllData() {
   console.log('已加载设备数据:', deviceMarkers.length, '个,视频数据:', videoMarkers.length, '个')
 }
 
-// 获取传感器数据
-async function fetchSensorData(nodeId) {
-  try {
-    const response = await fetch(config.getApiUrl('/service/page/sensor.json?paged=1&pageSize=50'), {
-      method: 'POST',
-      headers: config.getHeaders(),
-      body: JSON.stringify({ node_id: nodeId })
-    })
-    
-    const result = await response.json()
-    
-    if (result.status === 2 && result.data?.data) {
-      return result.data.data.map(sensor => ({
-        name: sensor.name,
-        value: sensor.sdata,
-        unit: sensor.measure_unit || ''
-      }))
-    }
-  } catch (error) {
-    console.error('获取传感器数据失败:', error)
-  }
-  return []
-}
-
 // 接收父窗口消息的处理函数
 function handleMessage(event) {
   // 安全检查:可以验证消息来源

+ 33 - 0
src/components/TerrainViewer.vue

@@ -515,6 +515,34 @@ function createMarkers() {
   })
 }
 
+// 获取传感器实时数据
+async function fetchSensorData(nodeId) {
+  try {
+    loadingMetrics.value = true
+    const response = await fetch(config.getApiUrl('/service/page/sensor.json?paged=1&pageSize=50'), {
+      method: 'POST',
+      headers: config.getHeaders(),
+      body: JSON.stringify({ node_id: nodeId })
+    })
+
+    const result = await response.json()
+
+    if (result.status === 2 && result.data?.data) {
+      realtimeMetrics.value = result.data.data.map(sensor => ({
+        label: sensor.name,
+        value: sensor.sdata,
+        unit: sensor.measure_unit || ''
+      }))
+      return
+    }
+  } catch (error) {
+    console.error('获取传感器数据失败:', error)
+  } finally {
+    loadingMetrics.value = false
+  }
+  realtimeMetrics.value = []
+}
+
 function openMarkerPopup(marker) {
   activeMarker.value = marker
   realtimeMetrics.value = []  // 清空之前的实时数据
@@ -530,6 +558,11 @@ function openMarkerPopup(marker) {
     markerType: marker.type
   })
   emit('markerClick', marker)
+
+  // 设备类型标记点自动拉取传感器数据
+  if (marker.type === 'device' && marker.nodeId) {
+    fetchSensorData(marker.nodeId)
+  }
 }
 
 function updatePopupPosition() {

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff