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/HistoryWarning.vue | 117 ++++++++++++++++++++++++++--------------------------------
1 files changed, 52 insertions(+), 65 deletions(-)
diff --git a/applications/drone-command/src/views/dataCockpit/components/HistoryWarning.vue b/applications/drone-command/src/views/dataCockpit/components/HistoryWarning.vue
index 4ce65c7..01d5958 100644
--- a/applications/drone-command/src/views/dataCockpit/components/HistoryWarning.vue
+++ b/applications/drone-command/src/views/dataCockpit/components/HistoryWarning.vue
@@ -1,5 +1,10 @@
<template>
- <div class="history-warning">
+ <div
+ class="history-warning"
+ v-loading="loading"
+ element-loading-background="rgba(5, 5, 15, 0.6)"
+ element-loading-text="加载中..."
+ >
<!-- 搜索区(设计稿红框) -->
<div class="search-box">
<!-- 关键字 -->
@@ -20,39 +25,27 @@
<!-- 列表 -->
<div class="list-content">
- <HistoryTemplate v-for="(item, ind) in filteredList" :key="item.id || ind" :data="item"
- @click="onCardClick" />
+ <EmptyState v-if="!filteredList.length" />
+ <HistoryTemplate
+ v-else
+ v-for="(item, ind) in filteredList"
+ :key="item.id || ind"
+ :data="item"
+ @click="onCardClick"
+ />
</div>
</div>
</template>
<script setup>
-import { ref, computed } from 'vue'
+import { ref, computed, onMounted } from 'vue'
import HistoryTemplate from './templateComponents/HistoryTemplate.vue'
+import { alarmLogApi } from '@/api/dataCockpit'
+import EmptyState from './EmptyState.vue'
-// 原始数据(别动它,过滤用 computed)
-const historyWarningData = ref([
- {
- id: 'drone_001',
- name: '无人机名称',
- serialNumber: 'XLH78945645456',
- dataSource: '侦测反制设备名称',
- frequency: '5800MHZ',
- discoveredAt: { date: '2025年12月30日', time: '14:55:06' },
- stayTime: '00:10:50',
- counterMethod: '信号干扰'
- },
- {
- id: 'drone_002',
- name: '无人机名称',
- serialNumber: 'XLH78945645456',
- dataSource: '侦测反制设备名称',
- frequency: '2400MHZ',
- discoveredAt: { date: '2025年12月30日', time: '15:08:12' },
- stayTime: '00:03:21',
- counterMethod: '诱导驱离'
- }
-])
+const historyWarningData = ref([])
+const loading = ref(false)
+const minLoadingMs = 400
// 查询条件:keyword + dateRange(YYYY-MM-DD数组)
const query = ref({
@@ -61,53 +54,46 @@
})
const onSearch = () => {
- // 目前是本地过滤:computed 会自动更新
- // 后续如果你要走接口,这里换成 fetchList(query.value) 即可
+ fetchHistoryWarning()
}
const onCardClick = (item) => {
console.log('点击无人机卡片:', item.id)
}
-// "2025年12月30日" -> "2025-12-30"
-const cnDateToISO = (cn) => {
- if (!cn) return ''
- const m = cn.match(/(\d{4})年(\d{1,2})月(\d{1,2})日/)
- if (!m) return ''
- const y = m[1]
- const mm = String(m[2]).padStart(2, '0')
- const dd = String(m[3]).padStart(2, '0')
- return `${y}-${mm}-${dd}`
-}
-
-const inRange = (targetISO, startISO, endISO) => {
- if (!targetISO) return false
- const t = new Date(`${targetISO}T00:00:00`).getTime()
- const s = startISO ? new Date(`${startISO}T00:00:00`).getTime() : null
- const e = endISO ? new Date(`${endISO}T23:59:59`).getTime() : null
- if (s !== null && t < s) return false
- if (e !== null && t > e) return false
- return true
+const fetchHistoryWarning = async () => {
+ const startAt = Date.now()
+ loading.value = true
+ try {
+ const [startTime, endTime] = query.value.dateRange || []
+ const keyword = (query.value.keyword || '').trim()
+ const params = {
+ current: 1,
+ size: 20,
+ alarmType: '2',
+ startTime,
+ endTime,
+ droneName: keyword || undefined,
+ droneSerialNo: keyword || undefined
+ }
+ const res = await alarmLogApi(params)
+ const records = res?.data?.data?.records ?? []
+ historyWarningData.value = records
+ } finally {
+ const elapsed = Date.now() - startAt
+ if (elapsed < minLoadingMs) {
+ await new Promise((resolve) => setTimeout(resolve, minLoadingMs - elapsed))
+ }
+ loading.value = false
+ }
}
const filteredList = computed(() => {
- const kw = (query.value.keyword || '').trim().toLowerCase()
- const [start, end] = query.value.dateRange || []
+ return historyWarningData.value
+})
- return historyWarningData.value.filter((item) => {
- // 1) 关键字:name / serialNumber / dataSource
- const hitKeyword = !kw
- ? true
- : [item.name, item.serialNumber, item.dataSource]
- .filter(Boolean)
- .some((v) => String(v).toLowerCase().includes(kw))
- if (!hitKeyword) return false
-
- // 2) 日期范围:按 discoveredAt.date
- if (!start && !end) return true
- const itemISO = cnDateToISO(item?.discoveredAt?.date)
- return inRange(itemISO, start, end)
- })
+onMounted(() => {
+ fetchHistoryWarning()
})
</script>
@@ -133,4 +119,5 @@
flex: 1;
}
}
-</style>
\ No newline at end of file
+
+</style>
--
Gitblit v1.9.3