فهرست منبع

编辑器-导航-场景导航:bugfix:删除或移动二级分组后,保证一级分组中至少有一个二级分组(默认二级分组)。

任一存 3 سال پیش
والد
کامیت
4c81bcc189

+ 29 - 0
packages/code/src/components/insertPositionTipInEditor.vue

@@ -217,6 +217,15 @@ export default {
             })
             parentGroup.children.splice(idxToDelete, 1)
             
+            // 如果被拖拽的二级分组原属的一级分组中没有任何二级分组了,则新增一个默认二级分组
+            if (parentGroup.children.length === 0) {
+              let newGroupLevel2Id = 'c_' + this.$randomWord(true, 8, 8)
+              parentGroup.children.push(newGroupLevel2Id)
+              this.info.catalogs.push({
+                id: newGroupLevel2Id,
+                name: '默认二级分组',
+              })
+            }
             break;
           } else if (this.topologyLevel === 2) {
             // console.log('情况6:被拖拽的是拓扑结构中二级分组,拖拽到一级分组中');
@@ -247,6 +256,16 @@ export default {
               })
               originalParentGroup.children.splice(toDeleteIndex, 1)
             })
+
+            // 如果被拖拽的二级分组原属的一级分组中没有任何二级分组了,则新增一个默认二级分组
+            if (originalParentGroup.children.length === 0) {
+              let newGroupLevel2Id = 'c_' + this.$randomWord(true, 8, 8)
+              originalParentGroup.children.push(newGroupLevel2Id)
+              this.info.catalogs.push({
+                id: newGroupLevel2Id,
+                name: '默认二级分组',
+              })
+            }
           } else if (this.topologyLevel === 3) {
             // console.log('情况7:被拖拽的是拓扑结构中二级分组,拖拽到隐藏的默认二级分组中');
 
@@ -268,6 +287,16 @@ export default {
               return id === this.dragInfo.node.id
             })
             originalGroupLevel1.children.splice(idxToDelete, 1)
+
+            // 如果被拖拽的二级分组原属的一级分组中没有任何二级分组了,则新增一个默认二级分组
+            if (originalGroupLevel1.children.length === 0) {
+              let newGroupLevel2Id = 'c_' + this.$randomWord(true, 8, 8)
+              originalGroupLevel1.children.push(newGroupLevel2Id)
+              this.info.catalogs.push({
+                id: newGroupLevel2Id,
+                name: '默认二级分组',
+              })
+            }
           }
           break;
         case 'topologyGroupLevel1': // 被拖拽的是拓扑结构中一级分组

+ 18 - 4
packages/code/src/views/navigation/groupSettings.vue

@@ -98,7 +98,7 @@ export default {
       this.newGroupName = ''
       this.addGroupLevel = 1
     },
-    onConfirmAddingGroup() {
+    onConfirmAddingGroup() { 
       if (this.addGroupLevel === 1) {
         let newGroupLevel2Id = 'c_' + this.$randomWord(true, 8, 8)
         const newGroupLevel1 = {
@@ -165,10 +165,11 @@ export default {
     },
     onDeleteGroup(groupId, groupLevel) {
       const deleteGroupLevel2 = (groupId) => {
-        // 删除所属一级分组中的children中元素
-        // 因为用户无法看到、操作默认二级分组,所以这里要删除的group不可能是默认二级分组
+        // 要删除的二级分组在catalogRoot[x].children中的索引
         let targetGroupIdxLevel2 = null
+        // 要删除的二级分组所属的一级分组在catalogRoot中的索引
         let belongGroupIdxLevel1 = null
+        // 确定上边两个变量的取值
         for (const [groupIdxLevel1, groupLevel1] of this.info.catalogRoot.entries()) {
           for (const [groupIdxLevel2, childId] of groupLevel1.children.entries()) {
             if (childId === groupId) {
@@ -185,9 +186,11 @@ export default {
           console.log(targetGroupIdxLevel2, belongGroupIdxLevel1);
           throw('一级分组列表中没有找到要删除的二级分组!')
         }
+
+        // 删除catalogRoot[x].children中那个二级分组条目
         this.info.catalogRoot[belongGroupIdxLevel1].children.splice(targetGroupIdxLevel2, 1)
         
-        // 删除二级分组列表中元素
+        // 删除catalogs中那个二级分组条目
         const targetIdx = this.info.catalogs.findIndex((item) => {
           return item.id === groupId
         })
@@ -200,6 +203,17 @@ export default {
         this.info.scenes = this.info.scenes.filter((item) => {
           return item.category !== groupId
         })
+
+        // 如果所属一级分组中没有任何二级分组了,则新增一个默认二级分组
+        if (this.info.catalogRoot[belongGroupIdxLevel1].children.length === 0) {
+          let newGroupLevel2Id = 'c_' + this.$randomWord(true, 8, 8)
+          this.info.catalogRoot[belongGroupIdxLevel1].children.push(newGroupLevel2Id)
+          this.info.catalogs.push({
+            id: newGroupLevel2Id,
+            name: '默认二级分组',
+          })
+        }
+
         return
       }