From 04a859aa95b231c032c71d06518497a973c2f4e8 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Thu, 15 Jan 2026 17:41:07 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
applications/drone-command/src/views/areaManage/defenseZone/FormDiaLog.vue | 166 +++++++++++++++++++++++++++++--------------------------
1 files changed, 88 insertions(+), 78 deletions(-)
diff --git a/applications/drone-command/src/views/areaManage/defenseZone/FormDiaLog.vue b/applications/drone-command/src/views/areaManage/defenseZone/FormDiaLog.vue
index ed069a0..7018438 100644
--- a/applications/drone-command/src/views/areaManage/defenseZone/FormDiaLog.vue
+++ b/applications/drone-command/src/views/areaManage/defenseZone/FormDiaLog.vue
@@ -1,64 +1,88 @@
<template>
- <el-dialog v-model="visible" :title="titleEnum[dialogMode]" :close-on-click-modal="false" width="80%">
- <div class="bodyBox">
- <div class="leftMap ztzf-cesium" id="mapContainer"></div>
- <div class="rightInfo">
- <div v-if="readonly">
- <div>防区名称: {{ formData.zoneName }}</div>
- <div>防区面积: {{ formatZoneArea(formData.zoneArea) }}</div>
- <el-table :data="sceneList" row-key="id">
- <el-table-column prop="sceneName" label="场景名称" />
- <el-table-column prop="sceneType" label="场景类型">
- <template v-slot="{ row }">
- {{ getDictLabel(row.sceneType, dictObj.sceneType) }}
- </template>
- </el-table-column>
- </el-table>
+ <el-dialog class="ztzf-page-map-view-dialog" v-model="visible" :show-close="false" :close-on-click-modal="false">
+ <div class="dialog-container">
+ <div class="left-container">
+ <div class="leftMap ztzf-cesium" id="mapContainer"></div>
+ </div>
+
+ <div class="right-container">
+ <div class="header">
+ {{ titleEnum[dialogMode] }}
</div>
- <el-form v-else ref="formRef" :model="formData" :rules="rules" :disabled="readonly" label-width="100px">
+
+ <div class="dialog-container" v-if="readonly">
+ <div class="detail-title">防区详情</div>
<el-row>
<el-col :span="24">
- <el-form-item label="防区名称" prop="zoneName">
- <el-input v-model="formData.zoneName" maxlength="50" placeholder="请输入" clearable />
- </el-form-item>
+ <div class="label">防区名称</div>
+ <div class="val">{{ formData.zoneName }}</div>
</el-col>
<el-col :span="24">
- <el-form-item label="防区面积" prop="zoneArea">{{ formatZoneArea(formData.zoneArea) }}</el-form-item>
- </el-col>
- <el-col :span="24">
- <div>
- <div>
- 关联场景
- <el-input v-model="searchName" placeholder="请输入" clearable></el-input>
- </div>
- <el-form-item label="关联场景" prop="defenseSceneIds" label-width="0">
- <el-table
- ref="sceneTableRef"
- :data="sceneList.filter(item => item.sceneName.includes(searchName))"
- row-key="id"
- @selection-change="handleSceneSelectionChange"
- >
- <el-table-column type="selection" width="55" :reserve-selection="true" />
- <el-table-column prop="sceneName" label="场景名称" />
- <el-table-column prop="sceneType" label="场景类型">
- <template v-slot="{ row }">
- {{ getDictLabel(row.sceneType, dictObj.sceneType) }}
- </template>
- </el-table-column>
- </el-table>
- </el-form-item>
- </div>
+ <div class="label">防区面积</div>
+ <div class="val">{{ formatZoneArea(formData.zoneArea) }}</div>
</el-col>
</el-row>
+
+ <div class="detail-title">关联场景</div>
+ <div class="ztzf-table-container">
+ <div class="ztzf-table-content">
+ <el-table class="ztzf-data-cockpit-table" :data="sceneList" row-key="id">
+ <el-table-column prop="sceneName" label="场景名称" />
+ <el-table-column prop="sceneType" label="场景类型">
+ <template v-slot="{ row }">
+ {{ getDictLabel(row.sceneType, dictObj.sceneType) }}
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </div>
+ </div>
+
+ <el-form class="dialog-form" v-else ref="formRef" :model="formData" :rules="rules" :disabled="readonly"
+ label-width="96px">
+ <el-form-item label="防区名称" prop="zoneName">
+ <el-input class="ztzf-data-cockpit-search-input" v-model="formData.zoneName" maxlength="50"
+ placeholder="请输入" clearable />
+ </el-form-item>
+ <el-form-item label="防区面积" prop="zoneArea">
+ <div class="val">{{ formatZoneArea(formData.zoneArea) }}</div>
+ </el-form-item>
+
+ <div class="search-table-container">
+ <div class="search-box">
+ <div class="label">
+ 关联场景
+ </div>
+
+ <el-input class="ztzf-data-cockpit-search-input" v-model="searchName" placeholder="请输入"
+ clearable></el-input>
+ </div>
+
+ <el-form-item prop="defenseSceneIds" label-width="0">
+ <el-table class="ztzf-data-cockpit-table" ref="sceneTableRef"
+ :data="sceneList.filter(item => item.sceneName.includes(searchName))" row-key="id"
+ @selection-change="handleSceneSelectionChange">
+ <el-table-column type="selection" width="55" :reserve-selection="true" />
+ <el-table-column prop="sceneName" label="场景名称" />
+ <el-table-column prop="sceneType" label="场景类型">
+ <template v-slot="{ row }">
+ {{ getDictLabel(row.sceneType, dictObj.sceneType) }}
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-form-item>
+ </div>
</el-form>
+
+ <div class="footer">
+ <el-button color="#2B2B4C" @click="handleCancel">{{ readonly ? '关闭' : '取消' }}</el-button>
+ <el-button color="#284FE3" v-if="!readonly" type="primary" :loading="submitting"
+ :disabled="submitting" @click="handleSubmit">
+ 确定
+ </el-button>
+ </div>
</div>
</div>
- <template #footer>
- <el-button @click="handleCancel">{{ readonly ? '关闭' : '取消' }}</el-button>
- <el-button v-if="!readonly" type="primary" :loading="submitting" :disabled="submitting" @click="handleSubmit">
- 确定
- </el-button>
- </template>
</el-dialog>
</template>
@@ -106,12 +130,12 @@
}
// 关闭弹框
-function handleCancel() {
+function handleCancel () {
visible.value = false
}
// 提交新增/编辑
-async function handleSubmit() {
+async function handleSubmit () {
const isValid = await formRef.value?.validate().catch(() => false)
if (!isValid) return
if (!pointList.length) {
@@ -134,14 +158,14 @@
}
// 加载详情
-async function loadDetail() {
+async function loadDetail () {
if (!formData.value.id) return
const res = await fwDefenseZoneDetailApi({ id: formData.value.id })
formData.value = res?.data?.data ?? initForm()
}
// 获取场景列表
-async function getSceneList() {
+async function getSceneList () {
const res = await fwDefenseSceneListApi({ filterSelected: 1, zoneId: formData.value.id })
sceneList.value = res?.data?.data ?? []
if (readonly.value) {
@@ -151,19 +175,19 @@
}
// 获取场景ID列表
-function getSceneIdList() {
+function getSceneIdList () {
if (!formData.value.defenseSceneIds) return []
return formData.value.defenseSceneIds.split(',')
}
// 关联场景变更
-function handleSceneSelectionChange(rows) {
+function handleSceneSelectionChange (rows) {
selectedSceneRows.value = rows
formData.value.defenseSceneIds = rows.map(item => item.id).join(',')
}
// 同步关联场景
-function syncSceneSelection() {
+function syncSceneSelection () {
if (!sceneTableRef.value) return
sceneTableRef.value.clearSelection()
const ids = getSceneIdList()
@@ -178,13 +202,13 @@
}
// 格式化防区面积
-function formatZoneArea(value) {
+function formatZoneArea (value) {
if (value == null || value === '') return ''
return `${value}k㎡`
}
// 初始化地图实例
-function initMap() {
+function initMap () {
const publicCesiumInstance = new PublicCesium({
dom: 'mapContainer',
flatMode: false,
@@ -210,14 +234,14 @@
}
// 新增模式绘制
-function addPolygon() {
+function addPolygon () {
drawPolygonExample = new DrawPolygon(viewer)
drawPolygonExample.initHandler(viewer)
drawPolygonExample.subscribe('getPolygonPositions', drawFinished)
}
// 编辑面
-function editPolygon() {
+function editPolygon () {
if (!formData.value?.geom) return
pointList = geomAnalysis(formData.value.geom)
drawPolygonExample?.destroy()
@@ -232,7 +256,7 @@
}
// 查看面
-function viewPolygon() {
+function viewPolygon () {
if (!formData.value?.geom) return
pointList = geomAnalysis(formData.value.geom)
const result = pointList.map(item => [item.longitude, item.latitude]).flat()
@@ -250,7 +274,7 @@
}
// 打开弹框
-async function open({ mode, row } = {}) {
+async function open ({ mode, row } = {}) {
dialogMode.value = mode || 'add'
formData.value = dialogMode.value === 'add' ? initForm() : row
selectedSceneRows.value = []
@@ -277,18 +301,4 @@
})
</script>
-<style scoped lang="scss">
-.bodyBox {
- display: flex;
- height: 600px;
- .leftMap {
- width: 70%;
- height: 100%;
- }
- .rightInfo {
- width: 30%;
- height: 100%;
- overflow: auto;
- }
-}
-</style>
+<style scoped lang="scss"></style>
--
Gitblit v1.9.3