From e17c0a2eceac008182504bdd40143658ab494c0b Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Wed, 29 Oct 2025 16:52:01 +0800
Subject: [PATCH] feat:新增/编辑
---
src/views/layerManagement/components/rightEdit.vue | 105 +++++++++++++++++++++++++++++++---
src/views/layerManagement/components/utils.js | 5 +
src/views/layerManagement/components/leftList.vue | 6 +
src/views/layerManagement/index.vue | 12 +++
4 files changed, 115 insertions(+), 13 deletions(-)
diff --git a/src/views/layerManagement/components/leftList.vue b/src/views/layerManagement/components/leftList.vue
index 8fcdc34..0a884ca 100644
--- a/src/views/layerManagement/components/leftList.vue
+++ b/src/views/layerManagement/components/leftList.vue
@@ -56,7 +56,7 @@
<script setup>
import { treeDataApi } from '@/api/layer/index';
import { inject, onMounted } from 'vue';
-const emit = defineEmits(['update:coverData', 'update:deitData']);
+const emit = defineEmits(['update:coverData', 'update:deitData','newFencesMethods']);
const coverData = ref();
const layerParams = inject('layerParams');
const checkedKeys = ref([]); // 存储勾选的节点key
@@ -146,6 +146,7 @@
checkedNodes.value = [];
coverData.value = [];
layerParams.value.editNest = true;
+ layerParams.value.decideWhetherToAddOrEdit = 2
emit('update:deitData', node.data);
};
@@ -156,6 +157,9 @@
// 新增围栏
const addFence = () => {
layerParams.value.addNest = true;
+ layerParams.value.decideWhetherToAddOrEdit = 1
+ emit('newFencesMethods');
+
console.log('layerParams.value',layerParams.value);
};
diff --git a/src/views/layerManagement/components/rightEdit.vue b/src/views/layerManagement/components/rightEdit.vue
index d56e34c..d8ab6ae 100644
--- a/src/views/layerManagement/components/rightEdit.vue
+++ b/src/views/layerManagement/components/rightEdit.vue
@@ -18,13 +18,13 @@
<div class="itemRow">
<div class="label">围栏名称</div>
<div>
- <el-input class="ztzf-input inputName" v-model="detailData.name" placeholder="围栏名称" />
+ <el-input class="ztzf-input inputName" v-model="formData.name" placeholder="围栏名称" />
</div>
</div>
<div class="itemRow">
<div class="label">围栏备注</div>
<div>
- <el-input v-model="detailData.description" :rows="5" type="textarea" placeholder="请输入" />
+ <el-input v-model="formData.description" :rows="5" type="textarea" placeholder="请输入" />
</div>
</div>
</div>
@@ -42,11 +42,11 @@
<div class="infpItem">
<div class="itemData">
<div class="title">创建时间</div>
- <div class="num"><span>{{detailData.create_time}}</span></div>
+ <div class="num"><span>{{formData?.create_time}}</span></div>
</div>
<div class="itemData">
<div class="title">创建人</div>
- <div class="num"><span>{{detailData.create_name}}</span></div>
+ <div class="num"><span>{{formData?.create_name}}</span></div>
</div>
</div>
</div>
@@ -61,6 +61,28 @@
import { deitFenceApi } from '@/api/layer/index';
const emit = defineEmits([ 'callParentMethod']);
const layerParams = inject('layerParams');
+const options = [
+ {
+ value: 'Option1',
+ label: '111',
+ },
+ {
+ value: 'Option2',
+ label: 'Option2',
+ },
+ {
+ value: 'Option3',
+ label: 'Option3',
+ },
+ {
+ value: 'Option4',
+ label: 'Option4',
+ },
+ {
+ value: 'Option5',
+ label: 'Option5',
+ },
+]
const formData = ref({
folder_id: '',
name: '',
@@ -73,15 +95,29 @@
geo_data: '',
});
const detailData = ref(null)
+const totalArea = ref(null)
+const totalCount = ref(null)
detailData.value = layerParams.value.editDetailData
-const totalArea = layerParams.value.total_area
-const totalCount = layerParams.value.total_count
-console.log('layerParams',detailData.value
-);
+ totalArea.value = layerParams.value.total_area
+ totalCount.value = layerParams.value.total_count
+console.log('2222222',layerParams.value.decideWhetherToAddOrEdit);
-const cancelHandel = () => {
+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;
+};
+const cancelHandel = () => {
+ clearAllData()
emit('callParentMethod');
};
const submitHandle = () => {
@@ -99,10 +135,57 @@
console.log('保存',res);
})
- layerParams.value.addNest = false;
- layerParams.value.editNest = false;
+ clearAllData()
emit('callParentMethod');
};
+onMounted(() => {
+ // 先清空表单,避免残留旧数据
+ formData.value = {
+ folder_id: '',
+ name: '',
+ description: '',
+ is_enabled: false,
+ area: '',
+ altitude: '',
+ control_start_time: '',
+ control_end_time: '',
+ geo_data: '',
+ };
+
+ // 获取判断状态(默认设为 1,防止未定义时报错)
+ const addOrEditStatus = layerParams.value.decideWhetherToAddOrEdit || 1;
+
+ if (addOrEditStatus === 2) {
+ // 编辑状态:回显数据(从 layerParams.editDetailData 读取)
+ const editData = layerParams.value.editDetailData || {};
+ // 表单数据回显(将编辑数据赋值给 formData,与表单字段一一对应)
+ formData.value = {
+ folder_id: editData.folder_id || '', // 文件夹ID(需与下拉框 options 的 value 匹配)
+ name: editData.name || '', // 围栏名称
+ description: editData.description || '', // 围栏备注
+ is_enabled: editData.is_enabled || false, // 是否启用
+ area: editData.area || '', // 面积
+ altitude: editData.altitude || '', // 高度
+ control_start_time: editData.control_start_time || '', // 控制开始时间
+ control_end_time: editData.control_end_time || '', // 控制结束时间
+ geo_data: editData.geo_data || '', // 地理数据(编辑时回显原始坐标)
+ };
+ // 下拉框回显(若 editData 中有文件夹名称,需匹配 options 的 value)
+ // 假设 editData.folder_name 是文件夹名称,需找到对应的 value 赋值给 formData.area
+ const matchedFolder = options.find(item => item.label === (editData.folder_name || ''));
+ if (matchedFolder) {
+ formData.value.area = matchedFolder.value;
+ }
+
+ // 回显总数和总面积(编辑时可能需要展示)
+ totalArea.value = layerParams.value.total_area || 0;
+ totalCount.value = layerParams.value.total_count || 0;
+ } else {
+ // 新增状态:不回显数据,清空总数和总面积
+ totalArea.value = null;
+ totalCount.value = null;
+ }
+});
</script>
<style scoped lang="scss">
diff --git a/src/views/layerManagement/components/utils.js b/src/views/layerManagement/components/utils.js
index b343230..ede07e4 100644
--- a/src/views/layerManagement/components/utils.js
+++ b/src/views/layerManagement/components/utils.js
@@ -116,6 +116,8 @@
console.log('当前不允许绘制,whetherToDraw 为 false');
return;
}
+
+
this.drawingMode = true
this.curPolygon = new Cesium.PolygonHierarchy()
@@ -334,12 +336,15 @@
// 如果不是绘制模式
if (!this.drawingMode) {
if (!isPolygon) {
+
+
this.editingMode = false
this.editPolygonPointDataSource.entities.show = false
return
}
if (isPolygon) {
+
this.editingMode = true
this.editPolygonPointDataSource.entities.show = true
}
diff --git a/src/views/layerManagement/index.vue b/src/views/layerManagement/index.vue
index f288605..b7d6140 100644
--- a/src/views/layerManagement/index.vue
+++ b/src/views/layerManagement/index.vue
@@ -15,6 +15,7 @@
@update:coverData="handleCoverDataUpdate"
@update:deitData="handleEdit"
:activeName="activeName"
+ @newFencesMethods="newFencesMethods"
></leftList>
<rightEdit
v-if="layerParams.addNest || layerParams.editNest && activeType !== '2'"
@@ -63,6 +64,7 @@
total_count: 0,
total_area: 0,
polygonPosition:null,
+ decideWhetherToAddOrEdit:null,//新增or编辑围栏
});
provide('layerParams', layerParams);
const handleClick = tab => {
@@ -76,6 +78,7 @@
const selectDataList = ref([]);
// 编辑围栏区域
const handleEdit = val => {
+viewer.entities.removeAll();
layerParams.value.editDetailData = val;
drawPolygonExample.editThePatch(true);
const positions = parseGeoDataToPositions(val.geo_data, val.altitude);
@@ -84,6 +87,13 @@
drawPolygonExample.initPolygon(viewer, positions, true);
};
+// 新增开启绘制
+const newFencesMethods =()=>{
+viewer.entities.removeAll();
+drawPolygonExample.initHandler(viewer);
+ drawPolygonExample.drawTheArea(true)
+ drawPolygonExample.startDrawing();
+}
// 清除地图数据
const parentMethod = () => {
drawPolygonExample.delPolygon()
@@ -212,7 +222,7 @@
viewer = publicCesiumInstance.getViewer();
viewInstance.value = publicCesiumInstance;
- // drawPolygonExample.initHandler(viewer);
+
};
// 编辑/绘制
--
Gitblit v1.9.3