diff --git a/core/core-backend/src/main/java/io/dataease/map/manage/MapManage.java b/core/core-backend/src/main/java/io/dataease/map/manage/MapManage.java
index 448339da25..f774538ef8 100644
--- a/core/core-backend/src/main/java/io/dataease/map/manage/MapManage.java
+++ b/core/core-backend/src/main/java/io/dataease/map/manage/MapManage.java
@@ -1,5 +1,7 @@
 package io.dataease.map.manage;
 
+import cn.hutool.core.collection.ListUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import io.dataease.api.map.dto.GeometryNodeCreator;
 import io.dataease.api.map.vo.AreaNode;
 import io.dataease.constant.StaticResourceConstants;
@@ -29,6 +31,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import static io.dataease.constant.CacheConstant.CommonCacheConstant.WORLD_MAP_CACHE;
 
@@ -147,10 +150,30 @@ public class MapManage {
         if (!StringUtils.startsWith(code, GEO_PREFIX)) {
             DEException.throwException("内置Geometry,禁止删除");
         }
-        coreAreaCustomMapper.deleteById(code);
-        File file = buildGeoFile(code);
-        if (file.exists()) {
-            file.delete();
+        CoreAreaCustom coreAreaCustom = coreAreaCustomMapper.selectById(code);
+        if (ObjectUtils.isEmpty(coreAreaCustom)) {
+            DEException.throwException("Geometry code 不存在!");
+        }
+        List<String> codeResultList = new ArrayList<>();
+        codeResultList.add(code);
+        childTreeIdList(ListUtil.of(code), codeResultList);
+        coreAreaCustomMapper.deleteBatchIds(codeResultList);
+        codeResultList.forEach(id -> {
+            File file = buildGeoFile(id);
+            if (file.exists()) {
+                file.delete();
+            }
+        });
+    }
+
+    public void childTreeIdList(List<String> pidList, List<String> resultList) {
+        QueryWrapper<CoreAreaCustom> queryWrapper = new QueryWrapper<>();
+        queryWrapper.in("pid", pidList);
+        List<CoreAreaCustom> coreAreaCustoms = coreAreaCustomMapper.selectList(queryWrapper);
+        if (CollectionUtils.isNotEmpty(coreAreaCustoms)) {
+            List<String> codeList = coreAreaCustoms.stream().map(CoreAreaCustom::getId).toList();
+            resultList.addAll(codeList);
+            childTreeIdList(codeList, resultList);
         }
     }
 
diff --git a/core/core-frontend/src/views/system/parameter/map/Geometry.vue b/core/core-frontend/src/views/system/parameter/map/Geometry.vue
index 67244cba94..0c899a1066 100644
--- a/core/core-frontend/src/views/system/parameter/map/Geometry.vue
+++ b/core/core-frontend/src/views/system/parameter/map/Geometry.vue
@@ -40,6 +40,7 @@
             <template #default="{ node, data }">
               <span class="custom-tree-node" :class="{ 'is-disabled': node.disabled || data.root }">
                 <span
+                  class="geo-name-span"
                   :title="data.name"
                   v-html="data.colorName && keyword ? data.colorName : data.name"
                 />
@@ -304,14 +305,19 @@ loadTreeData(true)
   padding-right: 4px;
   overflow: hidden;
   justify-content: space-between;
-
+  .geo-name-span {
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+  }
   .geo-operate-container {
     display: none;
   }
 
   &:hover {
     .geo-operate-container {
-      display: contents;
+      display: inline-flex;
+      padding-left: 4px;
     }
   }
 }
diff --git a/de-xpack b/de-xpack
index 0352814e63..e584ed4e9f 160000
--- a/de-xpack
+++ b/de-xpack
@@ -1 +1 @@
-Subproject commit 0352814e63af722b8811159704d36d9ca2244c0d
+Subproject commit e584ed4e9f88eac8de7bd31c74eb32e91eb9279b