From d07c8e0b866dfadd65f12cbe3c9c74c800b0619a Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Fri, 09 Jan 2026 16:04:59 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
applications/drone-command/src/views/dataCockpit/components/EquipmentWarning.vue | 104 ++++++++++++++++++++++++++++++++++++----------------
1 files changed, 72 insertions(+), 32 deletions(-)
diff --git a/applications/drone-command/src/views/dataCockpit/components/EquipmentWarning.vue b/applications/drone-command/src/views/dataCockpit/components/EquipmentWarning.vue
index 15531ce..4f2c8a0 100644
--- a/applications/drone-command/src/views/dataCockpit/components/EquipmentWarning.vue
+++ b/applications/drone-command/src/views/dataCockpit/components/EquipmentWarning.vue
@@ -9,44 +9,83 @@
* 2026-01-08 09:29:07
-->
<template>
- <div class="equipment-warning">
- <EquipmentTemplate v-for="(item, ind) in equipmentWarningData" :key="ind" :data="item" @click="onCardClick" />
+ <div
+ class="equipment-warning"
+ v-loading="loading"
+ element-loading-background="rgba(5, 5, 15, 0.6)"
+ element-loading-text="加载中..."
+ >
+ <EmptyState v-if="!equipmentWarningData.length" />
+ <EquipmentTemplate
+ v-else
+ v-for="(item, ind) in equipmentWarningData"
+ :key="ind"
+ :data="item"
+ @click="onCardClick"
+ />
</div>
</template>
<script setup>
+import { onMounted, ref } from 'vue'
import EquipmentTemplate from './templateComponents/EquipmentTemplate.vue'
+import { deviceSearchApi } from '@/api/dataCockpit'
+import EmptyState from './EmptyState.vue'
-const equipmentWarningData = ref([
- {
- id: 'dev_001',
- name: '反制设备名称',
- status: '离线',
- statusType: 'offline', // offline | fault | online
- type: '察打一体',
- vendor: '厂商名称',
- azimuth: 14, // 方位角(°)
- pitch: 14, // 俯仰角(°)
- range: '1.2KM', // 有效范围
- model: 'TDOAX1A', // 设备型号
- longitude: 113.877571,
- latitude: 22.547155
- },
- {
- id: 'dev_002',
- name: '反制设备名称',
- status: '故障',
- statusType: 'fault',
- type: '察打一体',
- vendor: '厂商名称',
- azimuth: 14,
- pitch: 14,
- range: '1.2KM',
- model: 'TDOAX1A',
- longitude: 113.877571,
- latitude: 22.547155
+const equipmentWarningData = ref([])
+const loading = ref(false)
+const minLoadingMs = 400
+
+const statusMap = {
+ 0: { text: '在线', statusType: 'online' },
+ 1: { text: '离线', statusType: 'offline' },
+ 2: { text: '故障', statusType: 'fault' },
+ 3: { text: '报废', statusType: 'offline' }
+}
+const deviceTypeMap = {
+ 1: '便捷侦测箱',
+ 2: '反制枪',
+ 3: '察打一体'
+}
+
+const formatDeviceItem = (item) => {
+ const statusInfo = statusMap[item?.status] || { text: '-', statusType: '' }
+ return {
+ id: item.id,
+ name: item.deviceName || item.deviceModel || '-',
+ status: statusInfo.text,
+ statusType: statusInfo.statusType,
+ type: deviceTypeMap[item.deviceType] || item.deviceType || '-',
+ manufacturer: item.manufacturer || '-',
+ azimuth: item.azimuth ?? 0,
+ pitch: item.elevation ?? 0,
+ range: item.effectiveRangeKm ?? 0,
+ model: item.deviceModel || '-',
+ longitude: item.longitude ?? '-',
+ latitude: item.latitude ?? '-'
}
-])
+}
+
+const fetchDeviceWarning = async () => {
+ const startAt = Date.now()
+ loading.value = true
+ try {
+ const params = { current: 1, size: 20, deviceStatusList: '1,2,3' }
+ const res = await deviceSearchApi(params)
+ const records = res?.data?.data?.records ?? []
+ equipmentWarningData.value = records.map(formatDeviceItem)
+ } finally {
+ const elapsed = Date.now() - startAt
+ if (elapsed < minLoadingMs) {
+ await new Promise((resolve) => setTimeout(resolve, minLoadingMs - elapsed))
+ }
+ loading.value = false
+ }
+}
+
+onMounted(() => {
+ fetchDeviceWarning()
+})
const onCardClick = (item) => {
console.log('点击设备卡片:', item.id)
@@ -58,4 +97,5 @@
width: 100%;
height: 100%;
}
-</style>
\ No newline at end of file
+
+</style>
--
Gitblit v1.9.3