Browse Source

1、控制思维导图 章节节点不能删除

2、思维导图跳转
zq 3 weeks ago
parent
commit
f25b1c3c05

+ 2 - 2
src/components/CommonPreview.vue

@@ -512,8 +512,8 @@ export default {
         if (node) {
           await this.$nextTick();
           this.$refs.previewMain.scrollTo({
-            top: node.offsetTop - 50,
-            left: node.offsetLeft - 50,
+            top: node.$el.offsetTop - 50,
+            left: node.$el.offsetLeft - 50,
             behavior: 'smooth',
           });
         }

+ 25 - 0
src/components/MindMap.vue

@@ -60,6 +60,7 @@ export default {
   },
   mounted() {
     this.initMindMap();
+    this.bindKeyEvents();
   },
   beforeDestroy() {
     this.destroyMindMap();
@@ -119,10 +120,14 @@ export default {
         });
       }
     },
+    bindKeyEvents() {
+      document.addEventListener('keydown', this.handleDeleteKey);
+    },
     destroyMindMap() {
       if (this.mindMap) {
         this.mindMap.destroy();
       }
+      document.removeEventListener('keydown', this.handleDeleteKey);
     },
     addParentNode() {
       if (!this.mindMap) return;
@@ -162,8 +167,28 @@ export default {
     },
     removeNode() {
       if (!this.mindMap) return;
+      const currentNode = this.mindMap.renderer.activeNodeList[0];
+      const nodeData = currentNode?.nodeData.data;
+      if (nodeData && (nodeData.type === 0 || nodeData.type === 1)) {
+        this.$message.warning('章节节点不能删除!');
+        return;
+      }
       this.mindMap.execCommand('REMOVE_NODE');
     },
+    handleDeleteKey(e) {
+      if (e.key === 'Delete' || e.key === 'Del') {
+        const currentNode = this.mindMap?.renderer.activeNodeList[0];
+        const nodeData = currentNode?.nodeData.data;
+        if (nodeData && (nodeData.type === 0 || nodeData.type === 1)) {
+          e.preventDefault();
+          e.stopPropagation();
+          e.returnValue = false;
+          this.$message.warning('章节节点不能删除!');
+          return false;
+        }
+      }
+      return true;
+    },
     forward() {
       this.mindMap.execCommand('FORWARD');
     },

+ 1 - 1
src/views/book/courseware/preview/CoursewarePreview.vue

@@ -363,7 +363,7 @@ export default {
      */
     async findChildComponentByKey(id) {
       await this.$nextTick();
-      return this.$refs.preview.find((child) => child.dataset.id === id);
+      return this.$refs.preview.find((child) => child.$el && child.$el.dataset && child.$el.dataset.id === id);
     },
     /**
      * 模拟回答