From 233e4fc4f35bd00a36ee34a7fbf5e47b41db26db Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Mon, 17 Nov 2025 09:54:44 +0800
Subject: [PATCH] feat:更新初始化地形
---
src/views/layerManagement/components/rightEdit.vue | 254 +++++++++++++++++++++++++++++++-------------------
1 files changed, 158 insertions(+), 96 deletions(-)
diff --git a/src/views/layerManagement/components/rightEdit.vue b/src/views/layerManagement/components/rightEdit.vue
index 3e665be..4566fc7 100644
--- a/src/views/layerManagement/components/rightEdit.vue
+++ b/src/views/layerManagement/components/rightEdit.vue
@@ -1,13 +1,13 @@
<template>
<div class="rightContainer">
- <div class="contenttitle">{{ layerParams.fenceType === 1 ? '围栏' : '禁飞区' }}信息</div>
+ <div class="contenttitle">{{ layerParams.fenceType === 1 ? '识别区' : '禁飞区' }}信息</div>
<div class="centerBox">
<div class="itemRow">
<div class="label">文件夹名称</div>
<div>
<el-select
+ :disabled="isDisabled"
class="ztzf-layer-search"
- popper-class="ztzf-select-popper"
clearable
v-model="formData.folder_id"
placeholder="请选择"
@@ -22,50 +22,65 @@
</div>
</div>
<div class="itemRow">
- <div class="label">{{ layerParams.fenceType === 1 ? '围栏' : '禁飞区' }}名称</div>
+ <div class="label">{{ layerParams.fenceType === 1 ? '识别区' : '禁飞区' }}名称</div>
<div>
- <el-input class="ztzf-input inputName" v-model="formData.name" placeholder="请输入" />
+ <el-input
+ :disabled="isDisabled"
+ class="ztzf-layer-input inputName"
+ v-model="formData.name"
+ placeholder="请输入"
+ />
</div>
</div>
<div class="itemRow" v-if="layerParams.fenceType === 2">
<div class="label">禁飞区管控时间</div>
<div>
+ <!-- popper-class="ztzf-layer-date-picker-popper " -->
<el-date-picker
- popper-class="ztzf-layer-date-picker-popper"
- class="ztzf-layer-date-picker layertimer"
+ :disabled="isDisabled"
+ class="ztzf-layer-date-picker"
v-model="timeValue"
- type="datetimerange"
- format="YYYY-MM-DD HH:mm"
+ type="datetimerange"
+ format="YYYY-MM-DD HH:mm"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
-
/>
</div>
</div>
<div class="itemRow">
- <div class="label">{{ layerParams.fenceType === 1 ? '围栏' : '禁飞区' }}备注</div>
+ <div class="label">{{ layerParams.fenceType === 1 ? '识别区' : '禁飞区' }}备注</div>
<div>
- <el-input v-model="formData.description" :rows="5" type="textarea" placeholder="请输入" />
+ <el-input
+ :disabled="isDisabled"
+ v-model="formData.description"
+ :rows="5"
+ type="textarea"
+ placeholder="请输入"
+ />
</div>
</div>
</div>
<div class="detailInfo">
- <div class="infpItem" v-if="layerParams.fenceType === 1">
-
+ <div class="infpItem" v-if="layerParams.editNest && layerParams.fenceType === 1">
<div class="itemData">
- <div class="title">围栏面积</div>
+ <div class="title">识别区面积</div>
<div class="num">
- <span>{{ fenceArea }}</span
- >m²
+ <span class="areaStyle">{{ fenceArea }}</span> m²
+ </div>
+ </div>
+ <div class="itemData">
+ <div class="title">创建人</div>
+ <div class="num">
+ <span>{{ formData?.create_name }}</span>
</div>
</div>
</div>
<div class="infpItem" v-if="layerParams.fenceType === 2">
- <div class="itemData">
+ <div class="itemData" v-if="layerParams.editNest && layerParams.fenceType === 2">
<div class="title">禁飞区面积</div>
<div class="num">
- <span>1111</span>
+ <span class="areaStyle">{{ fenceArea }}</span> m²
</div>
</div>
<div class="itemData">
@@ -73,14 +88,16 @@
<div class="num noFly">
<span
><el-input
- class="ztzf-input inputName"
+ :disabled="isDisabled"
+ class="ztzf-layer-input inputName"
v-model="formData.altitude"
- placeholder="请输入" /></span
- >米
+ placeholder="请输入"
+ /></span>
+ 米
</div>
</div>
</div>
- <div class="infpItem" v-if="layerParams.editNest">
+ <div class="infpItem" v-if="layerParams.editNest && layerParams.fenceType === 2">
<div class="itemData">
<div class="title">创建时间</div>
<div class="num">
@@ -94,6 +111,14 @@
</div>
</div>
</div>
+ <div class="infpItem" v-if="layerParams.editNest && layerParams.fenceType === 1">
+ <div class="itemData">
+ <div class="title">创建时间</div>
+ <div class="num">
+ <span>{{ formData?.create_time }}</span>
+ </div>
+ </div>
+ </div>
</div>
<div class="btnGroups">
<img src="/src/assets/images/layerManagement/savebtn.svg" alt="" @click="submitHandle" />
@@ -104,13 +129,13 @@
<script setup>
import { ElMessage } from 'element-plus';
-import dayjs from 'dayjs'
+import dayjs from 'dayjs';
import { deitFenceApi, addFenceApi } from '@/api/layer/index';
import EventBus from '@/utils/eventBus';
const emit = defineEmits(['callParentMethod']);
const layerParams = inject('layerParams');
const options = ref([]);
-const timeValue = ref('')
+const timeValue = ref('');
options.value = layerParams.value.folderOption;
const formData = ref({
folder_id: '',
@@ -122,60 +147,90 @@
control_start_time: '',
control_end_time: '',
geo_data: '',
- noFlyZoneArea: '',
- altitude:''
});
-
const detailData = ref(null);
-const totalArea = ref(null);
-const totalCount = ref(null);
-const fenceArea = ref(0)
+const fenceArea = ref(0);
detailData.value = layerParams.value.editDetailData;
-totalArea.value = layerParams.value.total_area;
-totalCount.value = layerParams.value.total_count;
-fenceArea.value = layerParams.value.fenceArea
+fenceArea.value = layerParams.value.fenceArea;
+const isDisabled = computed(() => {
+ return layerParams.value.editingIsProhibited;
+});
watch(
() => layerParams.value.fenceArea,
- (newArea) => {
+ newArea => {
if (newArea !== undefined && newArea !== null) {
fenceArea.value = newArea;
- formData.value.area = newArea;
+ formData.value.area = newArea;
}
},
- { immediate: true }
+ { immediate: true }
+);
+// 监听editDetailData的变化
+watch(
+ () => layerParams.value.editDetailData,
+ newVal => {
+ if (newVal && layerParams.value.editingIsProhibited) {
+ // 当editDetailData有值时,填充表单
+ formData.value = {
+ ...formData.value,
+ folder_id: newVal.folder_id || '',
+ name: newVal.name || '',
+ description: newVal.description || '',
+ is_enabled: newVal.is_enabled || false,
+ area: newVal.area || '',
+ altitude: newVal.altitude || '',
+ control_start_time: newVal.control_start_time || '',
+ control_end_time: newVal.control_end_time || '',
+ geo_data: newVal.geo_data || '',
+ create_name: newVal.create_name || '',
+ create_time: newVal.create_time ? dayjs(newVal.create_time).format('YYYY年MM月DD日') : '',
+ };
+
+ // 处理文件夹选择
+ if (newVal.folder_id && options.value.length > 0) {
+ const matchedFolder = options.value.find(item => item.value === String(newVal.folder_id));
+ if (matchedFolder) {
+ formData.value.folder_id = matchedFolder.value;
+ }
+ }
+
+ // 处理时间选择
+ if (newVal.control_start_time && newVal.control_end_time) {
+ timeValue.value = [
+ dayjs(newVal.control_start_time).toDate(),
+ dayjs(newVal.control_end_time).toDate(),
+ ];
+ }
+ }
+ },
+ { immediate: true, deep: true }
);
watch(
() => timeValue.value,
- (newTimeArr) => {
-
+ newTimeArr => {
if (Array.isArray(newTimeArr) && newTimeArr.length === 2) {
- const startTime = newTimeArr[0];
- const endTime = newTimeArr[1];
+ const startTime = newTimeArr[0];
+ const endTime = newTimeArr[1];
formData.value.control_start_time = dayjs(startTime).format('YYYY-MM-DD HH:mm:ss');
formData.value.control_end_time = dayjs(endTime).format('YYYY-MM-DD HH:mm:ss');
} else {
-
formData.value.control_start_time = '';
formData.value.control_end_time = '';
}
},
- { immediate: true }
+ { immediate: true }
);
const clearAllData = () => {
detailData.value = {};
- // 清空回显相关数据
- detailData.value = {};
- totalArea.value = null;
- totalCount.value = null;
- // 重置判断状态(可选,根据业务需求是否需要)
layerParams.value.decideWhetherToAddOrEdit = 1;
// 重置面板状态和缓存数据
layerParams.value.addNest = false;
layerParams.value.editNest = false;
layerParams.value.editDetailData = null;
layerParams.value.polygonPosition = null;
+ layerParams.value.editingIsProhibited = false;
};
const cancelHandel = () => {
clearAllData();
@@ -183,49 +238,57 @@
EventBus.emit('gettreeDataApi');
};
const submitHandle = () => {
+ if (!formData.value.folder_id) {
+ ElMessage.error('请选择文件夹');
+ return;
+ }
+ if (!formData.value.name) {
+ ElMessage.error('请输入名称');
+ return;
+ }
+ if (!formData.value.altitude && layerParams.value.fenceType === 2) {
+ ElMessage.error('请输入高度');
+ return;
+ }
+ if (fenceArea.value === 0) {
+ ElMessage.error('请绘制区域');
+ return;
+ }
const params = {
- folder_id: layerParams.value.fenceType === 1 ? 1 : 2,
+ folder_id: formData.value.folder_id,
name: formData.value.name,
description: formData.value.description,
is_enabled: true,
area: formData.value.area,
altitude: formData.value.altitude,
- geo_data: layerParams.value.polygonPosition,
- control_start_time:formData.value.control_start_time,
- control_end_time:formData.value.control_end_time,
+ geo_data: layerParams.value.polygonPosition
+ ? layerParams.value.polygonPosition
+ : formData.value.geo_data,
+ control_start_time: formData.value.control_start_time,
+ control_end_time: formData.value.control_end_time,
};
// 如果是编辑模式,才添加 id
if (layerParams.value.decideWhetherToAddOrEdit === 2) {
params.id = detailData.value.id;
}
- console.log('formData', params);
-
if (layerParams.value.decideWhetherToAddOrEdit === 1) {
//围栏新增
addFenceApi(params).then(res => {
- if (res.status === 200) {
- ElMessage({
- message: '新增成功',
- type: 'success',
- });
- }
-
+ ElMessage.success('新增成功');
+ EventBus.emit('gettreeDataApi');
+ clearAllData();
+ emit('callParentMethod');
});
} else if (layerParams.value.decideWhetherToAddOrEdit === 2) {
//围栏编辑
deitFenceApi(params).then(res => {
- if (res.status === 200) {
- ElMessage({
- message: '编辑成功',
- type: 'success',
- });
- }
+ ElMessage.success('编辑成功');
+ EventBus.emit('gettreeDataApi');
+
+ clearAllData();
+ emit('callParentMethod');
});
}
-
- clearAllData();
- emit('callParentMethod');
- EventBus.emit('gettreeDataApi')
};
onMounted(() => {
// 获取判断状态(默认设为 1)
@@ -243,33 +306,22 @@
control_start_time: editData.control_start_time || '',
control_end_time: editData.control_end_time || '',
geo_data: editData.geo_data || '',
- create_name:editData.create_name,
- create_time: editData.create_time
- ? dayjs(editData.create_time).format('YYYY年MM月DD日')
- : ''
+ create_name: editData.create_name,
+ create_time: editData.create_time ? dayjs(editData.create_time).format('YYYY年MM月DD日') : '',
};
- if (editData.folder_id && options.value.length > 0) {
- const matchedFolder = options.value.find(
- item => item.value === String(editData.folder_id)
- );
+ if (editData.folder_id && options.value.length > 0) {
+ const matchedFolder = options.value.find(item => item.value === String(editData.folder_id));
if (matchedFolder) {
formData.value.folder_id = matchedFolder.value;
}
}
- if (editData.control_start_time && editData.control_end_time) {
+ if (editData.control_start_time && editData.control_end_time) {
timeValue.value = [
dayjs(editData.control_start_time).toDate(),
- dayjs(editData.control_end_time).toDate()
+ dayjs(editData.control_end_time).toDate(),
];
}
- // 回显总数和总面积(编辑时可能需要展示)
- totalArea.value = layerParams.value.total_area || 0;
- totalCount.value = layerParams.value.total_count || 0;
- fenceArea.value = editData.area|| 0;
- } else {
- // 新增状态:不回显数据,清空总数和总面积
- totalArea.value = null;
- totalCount.value = null;
+ fenceArea.value = editData.area || 0;
}
});
</script>
@@ -279,12 +331,13 @@
position: absolute;
top: 0;
right: 0;
- height: 95%;
+height: calc(100% - 32px);
z-index: 99;
width: 324px;
overflow: hidden;
- background: rgba(0, 0, 0, 0.8);
+ background: rgba(0,0,0,0.51);
+ backdrop-filter: blur(4px);
border-radius: 8px 8px 8px 8px;
padding: 16px 12px;
@@ -310,10 +363,13 @@
.label {
margin-bottom: 5px;
}
- :deep(.el-date-editor.el-input__wrapper) {
- width: auto !important;
-
-}
+ :deep(.el-date-editor.el-input__wrapper) {
+ width: auto !important;
+ background: transparent !important;
+ }
+ :deep(.el-range-editor.is-disabled input) {
+ background-color: transparent !important;
+ }
}
.detailInfo {
.infpItem {
@@ -323,10 +379,16 @@
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 14px;
- color: #ffffff;
+ color: #dfdfdf;
margin-bottom: 23px;
.num {
span {
+ font-family: Source Han Sans CN, Source Han Sans CN;
+ font-weight: bold;
+ font-size: 14px;
+ color: #ffffff;
+ }
+ .areaStyle {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 20px;
@@ -346,7 +408,7 @@
display: flex;
justify-content: center;
position: absolute;
- bottom: 59px;
+ bottom: 29px;
left: 0;
right: 0;
img {
--
Gitblit v1.9.3