吉安感知网项目-前端
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
<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.areaName || '-' }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">区域类型</div>
                    <div class="val">{{ getDictLabel(formData.areaType, dictObj.areaType) }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">关联场景</div>
                    <div class="val">{{ formData.sceneName || '-' }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">场景类型</div>
                    <div class="val">{{ getDictLabel(formData.sceneType, dictObj.CommandSceneType) }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">设备数量</div>
                    <div class="val">{{ formData.deviceCount ?? '-' }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">告警次数</div>
                    <div class="val">{{ formData.alarmCount ?? '-' }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">侦测反制次数</div>
                    <div class="val">{{ formData.counterCount ?? '-' }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">反制成功次数</div>
                    <div class="val">{{ formData.counterSuccessCount ?? '-' }}</div>
                </el-col>
                <el-col :span="24">
                    <div class="label">管控效果</div>
                    <div class="val">{{ formData.controlEffect || '-' }}</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 { inject, ref } from 'vue'
import { fwAreaDivideDetailApi } from './areaStatisticsApi'
import { getDictLabel } from '@ztzf/utils'
 
// 初始化表单
const initForm = () => ({
    alarmCount: null, // 告警次数
    areaName: '', // 区域名称
    areaType: '', // 区域类型
    controlEffect: '', // 管控效果
    counterCount: null, // 侦测反制次数
    counterSuccessCount: null, // 反制成功次数
    deviceCount: null, // 设备数量
    geom: '', // 经纬度面
    sceneName: '', // 场景名称
    sceneType: '', // 场景类型
})
 
const formData = ref(initForm()) // 弹框显隐
const visible = defineModel() // 弹框模式
const dialogMode = ref('view') // ????
const titleEnum = ref({ view: '查看' })
const dictObj = inject('dictObj')
 
// 关闭弹框
function handleCancel() {
    visible.value = false
}
 
// 合并详情数据
function mergeDetail(detail) {
    formData.value = { ...formData.value, ...detail }
}
 
// 加载详情
async function loadDetail() {
    if (!formData.value.id || formData.value.geom) return
    const res = await fwAreaDivideDetailApi({ id: formData.value.id })
    const detail = res?.data?.data
    if (detail) mergeDetail(detail)
}
 
// 打开弹框
async function open({ mode, row } = {}) {
    dialogMode.value = mode || 'view'
    formData.value = row ? { ...initForm(), ...row } : initForm()
    await loadDetail()
}
 
defineExpose({
    open,
})
</script>
 
<style scoped lang="scss">
</style>