diff --git a/src/App.vue b/src/App.vue index 378a2e8..9b3d174 100644 --- a/src/App.vue +++ b/src/App.vue @@ -2,7 +2,7 @@ import Toolbar from './components/Toolbar.vue'; import ProjectExplorer from './components/ProjectExplorer.vue'; import ComponentsPanel from './components/flow/ComponentsPanel.vue'; -import { computed, ref, onMounted, onUnmounted, onBeforeUpdate, reactive, provide, inject } from "vue"; +import { computed, ref, onMounted, onUnmounted, onBeforeUpdate, reactive, provide, inject, watch } from "vue"; import { useFilesStore } from "@/ts/useStore"; import Vue3DraggableResizable from 'vue3-draggable-resizable'; import { TabPaneName, TabsPaneContext } from "element-plus"; @@ -24,6 +24,7 @@ const contentHeight = computed(() => `${windowHeight.value - toolbarHeight}px`); const flowEditorRef = ref(null); const flowEditorRefs = ref({}); +const lastActiveFile = ref(filesStore.activeFile); const handleTabsEdit = ( targetName: String | undefined, @@ -85,6 +86,24 @@ const handleAddNode = (nodeData) => { } }; +const handleSaveViewport = (viewport) => { + filesStore.updateFileViewport(filesStore.activeFile, viewport); +}; +const handleRequestViewport = () => { + return filesStore.getFileViewport(filesStore.activeFile); +}; + +watch( + () => filesStore.activeFile, + (newVal, oldVal) => { + // 切换前保存旧 tab 的 viewport + if (oldVal && flowEditorRef.value && flowEditorRef.value.getViewport) { + const viewport = flowEditorRef.value.getViewport(); + filesStore.updateFileViewport(oldVal, viewport); + } + lastActiveFile.value = newVal; + } +); @@ -110,20 +129,20 @@ const handleAddNode = (nodeData) => { :key="`${file.name}-${filesStore.activeFile}`" :label="file.label" :name="file.name.toString()" - > -
- - -
- + /> +
+ +
- diff --git a/src/components/flow/FlowEditor.vue b/src/components/flow/FlowEditor.vue index d014d1b..8c5d77c 100644 --- a/src/components/flow/FlowEditor.vue +++ b/src/components/flow/FlowEditor.vue @@ -1,5 +1,5 @@