From ebd0ec4f51288042b6fc5bf714b1febbb63cfacc Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Fri, 09 Jan 2026 18:03:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
applications/drone-command/src/views/dataCockpit/components/templateComponents/RealTemplate.vue | 245 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 245 insertions(+), 0 deletions(-)
diff --git a/applications/drone-command/src/views/dataCockpit/components/templateComponents/RealTemplate.vue b/applications/drone-command/src/views/dataCockpit/components/templateComponents/RealTemplate.vue
new file mode 100644
index 0000000..d29d7b4
--- /dev/null
+++ b/applications/drone-command/src/views/dataCockpit/components/templateComponents/RealTemplate.vue
@@ -0,0 +1,245 @@
+<template>
+ <div class="drone-card">
+ <div class="header">
+ <div class="title">
+ <span class="name">{{ data.droneName }}</span>
+ <span class="status">
+ <span :class="getStatusType(data)">
+
+ </span>
+
+ <span>
+ {{ getStatusText(data) }}
+ </span>
+ </span>
+ </div>
+
+ <div class="actions">
+ <span class="star" @click="emit('favorite')">
+ {{ data.isFavorite ? '★' : '☆' }}
+ </span>
+ </div>
+ </div>
+
+ <div class="content">
+ <div>
+ <span class="label">序列号</span>
+ {{ data.droneSerialNo }}
+ </div>
+ <div>
+ <span class="label">数据源</span>
+ {{ getDataSource(data) }}
+ </div>
+ <div>
+ <span class="label">经纬度</span>
+ {{ data.longitude }}, {{ data.latitude }}
+ </div>
+ <div class="row">
+ <div class="col">
+ <span class="label">信号频段</span>
+ {{ formatFrequency(data.signalFreqMhz) }}
+ </div>
+ <div class="col">
+ <span class="label">发现时间</span>
+ {{ getAlarmTime(data.alarmTime) }}
+ </div>
+ </div>
+ <div class="row">
+ <div class="col">
+ <span class="label">飞行高度</span>
+ {{ formatHeight(data.flightHeightM) }}
+ </div>
+ <div class="col">
+ <span class="label">飞行速度</span>
+ {{ formatSpeed(data.flightSpeedMs) }}
+ </div>
+ </div>
+ </div>
+
+ <div class="footer">
+ <el-button class="general" color="#2B2B4C" @click="emit('signal')">信号干扰</el-button>
+ <el-button color="#284FE3" type="primary" @click="emit('counter')">诱导驱离</el-button>
+ </div>
+ </div>
+</template>
+
+<script setup>
+const props = defineProps({
+ data: {
+ type: Object,
+ required: true,
+ default: () => ({})
+ }
+})
+
+const emit = defineEmits(['signal', 'counter', 'favorite'])
+
+const getStatusText = (item) => {
+ const status = item?.flightStatus
+ if (status === 1 || status === '1') return '侦测中'
+ if (status === 2 || status === '2') return '反制中'
+ return status || '侦测中'
+}
+
+const getStatusType = (item) => {
+ const statusText = getStatusText(item)
+ const counterWay = item?.counterWay
+ if (statusText.includes('反制') || counterWay === 2 || counterWay === '2' || counterWay === '诱导驱离') {
+ return 'countering'
+ }
+ return 'detecting'
+}
+
+const getDataSource = (item) => {
+ return item?.deviceName || item?.areaName || '-'
+}
+
+const formatFrequency = (value) => {
+ if (value == null || value === '') return '-'
+ return `${value}MHz`
+}
+
+const getAlarmTime = (value) => {
+ if (!value) return '-'
+ const parts = value.replace('T', ' ').split(' ')
+ return parts[1] || value
+}
+
+const formatHeight = (value) => {
+ if (value == null || value === '') return '-'
+ return `${value}m`
+}
+
+const formatSpeed = (value) => {
+ if (value == null || value === '') return '-'
+ return `${value}m/s`
+}
+</script>
+
+<style scoped lang="scss">
+.drone-card {
+ margin-top: 10px;
+ padding: 10px;
+ color: #fff;
+ background: #191933;
+ border-radius: 6px 6px 6px 6px;
+
+ &:hover {
+ background: #29294D;
+ ;
+ }
+
+ &:first-child {
+ margin-top: 0;
+ }
+
+ .header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ .title {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+
+ .name {
+ font-family: Source Han Sans CN, Source Han Sans CN;
+ font-weight: bold;
+ font-size: 14px;
+ color: #FFFFFF;
+ text-align: left;
+ font-style: normal;
+ text-transform: none;
+ }
+
+ .status {
+ padding: 0 10px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: 21px;
+
+ background: #303041;
+ border-radius: 10px;
+ gap: 6px;
+
+ span {
+ font-family: Source Han Sans CN, Source Han Sans CN;
+ font-weight: 400;
+ font-size: 10px;
+ color: #FFFFFF;
+ text-align: center;
+ font-style: normal;
+ text-transform: none;
+ }
+
+
+ span.detecting {
+ width: 4px;
+ height: 4px;
+ background: #18FF4A;
+ border-radius: 50%;
+ }
+
+ span.countering {
+ width: 4px;
+ height: 4px;
+ background: #FF4444;
+ border-radius: 50%;
+ }
+ }
+ }
+
+ .actions {
+ display: flex;
+ gap: 8px;
+ font-size: 16px;
+ cursor: pointer;
+ }
+ }
+
+ .content {
+ font-family: Source Han Sans CN, Source Han Sans CN;
+ font-weight: 400;
+ font-size: 12px;
+ color: #9E9EBA;
+ text-align: left;
+ font-style: normal;
+ text-transform: none;
+
+ &>div {
+ margin-top: 10px;
+ line-height: 22px;
+
+ span.label {
+ margin-right: 10px;
+ color: #D4D5D7;
+ }
+ }
+
+ .row {
+ display: flex;
+ justify-content: space-between;
+ }
+ }
+
+ .footer {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 10px;
+ margin-top: 10px;
+
+ ::v-deep(.el-button) {
+ width: 96px;
+ height: 36px;
+
+ &.general.el-button {
+ border-radius: 4px 4px 4px 4px;
+ border: 1px solid rgba(255, 255, 255, 0.5);
+ }
+ }
+ }
+}
+</style>
--
Gitblit v1.9.3