<template>
|
<el-dialog
|
class="command-page-view-dialog"
|
v-model="visible"
|
:title="titleEnum[dialogMode]"
|
:close-on-click-modal="false"
|
width="520px"
|
>
|
<div class="detail-container">
|
<el-row>
|
<el-col :span="12">
|
<div class="label">无人机名称</div>
|
<div class="val">{{ formData.droneName || '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">无人机类型</div>
|
<div class="val">{{ formData.droneType || '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">设备编码</div>
|
<div class="val">{{ formData.droneDeviceCode || '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">发现时间</div>
|
<div class="val">{{ formData.findTime || '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">反制效果</div>
|
<div class="val">{{ getDictLabel(formData.counterEffect, dictObj.counterEffect) || '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">反制方式</div>
|
<div class="val">{{ getCounterWayLabel(formData.counterWay) || '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">反制设备名称</div>
|
<div class="val">{{ formData.deviceName || '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">反制设备型号</div>
|
<div class="val">{{ formData.deviceModel || '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">反制设备类型</div>
|
<div class="val">{{ getDeviceTypeLabel(formData.deviceType) || '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">反制设备编码</div>
|
<div class="val">{{ formData.deviceSn || '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">区域编码</div>
|
<div class="val">{{ formData.areaCode || '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">部署位置</div>
|
<div class="val">{{ getDeployPosition() || '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">覆盖范围</div>
|
<div class="val">{{ formData.coverRadiusM ? `${formData.coverRadiusM}米` : '-' }}</div>
|
</el-col>
|
<el-col :span="12">
|
<div class="label">工作模式</div>
|
<div class="val">{{ getWorkModeLabel(formData.workMode) || '-' }}</div>
|
</el-col>
|
</el-row>
|
</div>
|
<template #footer>
|
<el-button v-if="dialogMode != 'view'" color="#2B2B4C" @click="handleCancel">关闭</el-button>
|
</template>
|
</el-dialog>
|
</template>
|
|
<script setup>
|
import { computed, ref, inject } from 'vue'
|
import { fwEffectEvalDetailApi } from './countermeasureEvaluationApi'
|
import { getDictLabel } from '../../../../../../packages/utils'
|
|
// 初始化表单数据
|
const initForm = () => ({
|
droneName: '', // 无人机名称
|
droneType: '', // 无人机类型
|
droneDeviceCode: '', // 设备编码
|
findTime: '', // 发现时间
|
counterEffect: '', // 反制效果
|
counterWay: '', // 反制方式
|
deviceName: '', // 反制设备名称
|
deviceModel: '', // 反制设备型号
|
deviceType: '', // 反制设备类型
|
deviceSn: '', // 反制设备编码
|
areaCode: '', // 区域编码
|
deployLongitude: '', // 部署经度
|
deployLatitude: '', // 部署纬度
|
coverRadiusM: '', // 覆盖范围
|
workMode: '', // 工作模式
|
})
|
|
// 注入字典数据
|
const dictObj = inject('dictObj')
|
|
const formData = ref(initForm()) // 表单数据
|
const visible = defineModel() // 弹框显隐
|
const dialogMode = ref('view') // 弹框模式
|
const readonly = computed(() => dialogMode.value === 'view')
|
const titleEnum = ref({ view: '查看' })
|
|
// 关闭弹框
|
function handleCancel() {
|
visible.value = false
|
}
|
|
// 获取反制方式标签
|
function getCounterWayLabel(value) {
|
const map = { '1': '信号干扰', '2': '诱导驱离' }
|
return map[value] || value || '暂无'
|
}
|
|
// 获取设备类型标签
|
function getDeviceTypeLabel(value) {
|
const item = dictObj.value?.deviceType?.find(item => item.dictKey === value)
|
return item ? item.dictValue : value
|
}
|
|
// 获取工作模式标签
|
function getWorkModeLabel(value) {
|
const map = { '1': '机动', '2': '固定' }
|
return map[value] || value
|
}
|
|
// 获取部署位置
|
function getDeployPosition() {
|
if (formData.value.deployLongitude && formData.value.deployLatitude) {
|
return `${formData.value.deployLongitude}, ${formData.value.deployLatitude}`
|
}
|
return ''
|
}
|
|
// 加载详情
|
async function loadDetail() {
|
if (!formData.value.id) return
|
const res = await fwEffectEvalDetailApi({ id: formData.value.id })
|
formData.value = res?.data?.data ?? {}
|
}
|
|
// 打开弹框
|
async function open({ mode, row } = {}) {
|
dialogMode.value = mode || 'view'
|
formData.value = row ? { ...row } : initForm()
|
if (readonly.value) {
|
await loadDetail()
|
}
|
}
|
|
defineExpose({ open })
|
</script>
|
|
<style scoped lang="scss"></style>
|