吉安感知网项目-前端
张含笑
2026-01-21 9eb8bb59b802ceef1f52d334c8e577f2bf02c90e
applications/drone-command/src/views/dataCockpit/components/templateComponents/RealTemplate.vue
@@ -2,14 +2,22 @@
   <div class="drone-card">
      <div class="header">
         <div class="title">
            <span class="name">{{ data.name }}</span>
            <el-tooltip
               class="title-tooltip"
               :content="data.droneName || '-'"
               placement="top"
               effect="dark"
               :show-after="200"
            >
               <span class="name">{{ data.droneName }}</span>
            </el-tooltip>
            <span class="status">
               <span :class="data.statusType">
               <span :class="getStatusType(data)">
               </span>
               <span>
                  {{ data.status }}
                  {{ getStatusText(data) }}
               </span>
            </span>
         </div>
@@ -24,11 +32,11 @@
      <div class="content">
         <div>
            <span class="label">序列号</span>
            {{ data.serialNumber }}
            {{ data.droneSerialNo }}
         </div>
         <div>
            <span class="label">数据源</span>
            {{ data.dataSource }}
            {{ getDataSource(data) }}
         </div>
         <div>
            <span class="label">经纬度</span>
@@ -37,21 +45,21 @@
         <div class="row">
            <div class="col">
               <span class="label">信号频段</span>
               {{ data.frequency }}
               {{ formatFrequency(data.signalFreqMhz) }}
            </div>
            <div class="col">
               <span class="label">发现时间</span>
               {{ data.discoverTime }}
               {{ getAlarmTime(data.alarmTime) }}
            </div>
         </div>
         <div class="row">
            <div class="col">
               <span class="label">飞行高度</span>
               {{ data.altitude }}
               {{ formatHeight(data.flightHeightM) }}
            </div>
            <div class="col">
               <span class="label">飞行速度</span>
               {{ data.speed }}
               {{ formatSpeed(data.flightSpeedMs) }}
            </div>
         </div>
      </div>
@@ -73,6 +81,62 @@
})
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 normalizeCounterWay = (value) => {
   if (value == null) return ''
   return String(value).trim()
}
const showSignalBtn = (item) => {
   const counterWay = normalizeCounterWay(item?.counterWay)
   return counterWay !== '1'
}
const showCounterBtn = (item) => {
   const counterWay = normalizeCounterWay(item?.counterWay)
   return counterWay !== '2'
}
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">
@@ -101,8 +165,17 @@
         display: flex;
         align-items: center;
         gap: 6px;
         min-width: 0;
         .title-tooltip {
            flex: 1;
            min-width: 0;
            display: block;
         }
         .name {
            display: inline-block;
            max-width: 100%;
            font-family: Source Han Sans CN, Source Han Sans CN;
            font-weight: bold;
            font-size: 14px;
@@ -110,9 +183,13 @@
            text-align: left;
            font-style: normal;
            text-transform: none;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
         }
         .status {
            flex-shrink: 0;
            padding: 0 10px;
            display: flex;
            align-items: center;