吉安感知网项目-前端
shuishen
2026-02-03 89380e6260a75d1d3b94de687ebcc2f50d50659d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<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>