diff --git a/frontend/src/components/toolbar/DocumentSelector.vue b/frontend/src/components/toolbar/DocumentSelector.vue index a0c80e0..4c901da 100644 --- a/frontend/src/components/toolbar/DocumentSelector.vue +++ b/frontend/src/components/toolbar/DocumentSelector.vue @@ -150,8 +150,7 @@ const saveEdit = async () => { const trimmedTitle = editingTitle.value.trim(); const error = validateTitle(trimmedTitle); if (error) { - console.error('保存失败:', error); - // 保持编辑状态,不清除 + return; } @@ -159,8 +158,6 @@ const saveEdit = async () => { await documentStore.updateDocumentMetadata(editingId.value, trimmedTitle); await documentStore.updateDocuments(); } catch (error) { - console.error('保存失败:', error); - // 保持编辑状态,不清除 return; } } @@ -186,7 +183,7 @@ const handleDelete = async (doc: Document, event: Event) => { } } } catch (error) { - console.error('删除失败:', error); + console.error('deleted failed:', error); } deleteConfirmId.value = null; } else { diff --git a/frontend/src/components/toolbar/Toolbar.vue b/frontend/src/components/toolbar/Toolbar.vue index 53e1b49..1f99fa3 100644 --- a/frontend/src/components/toolbar/Toolbar.vue +++ b/frontend/src/components/toolbar/Toolbar.vue @@ -4,6 +4,7 @@ import {onMounted, onUnmounted, ref, watch} from 'vue'; import {useConfigStore} from '@/stores/configStore'; import {useEditorStore} from '@/stores/editorStore'; import {useUpdateStore} from '@/stores/updateStore'; +import {useDocumentStore} from '@/stores/documentStore'; import * as runtime from '@wailsio/runtime'; import {useRouter} from 'vue-router'; import BlockLanguageSelector from './BlockLanguageSelector.vue'; @@ -14,6 +15,7 @@ import {getLanguage} from '@/views/editor/extensions/codeblock/lang-parser/langu const editorStore = useEditorStore(); const configStore = useConfigStore(); const updateStore = useUpdateStore(); +const documentStore = useDocumentStore(); const {t} = useI18n(); const router = useRouter(); @@ -32,7 +34,11 @@ const toggleAlwaysOnTop = async () => { // 跳转到设置页面 const goToSettings = () => { - router.push('/settings'); + const currentDocId = documentStore.currentDocumentId; + router.push({ + path: '/settings', + query: { documentId: currentDocId || undefined } + }); }; diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 3103773..837c24e 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -12,13 +12,15 @@ const routes: RouteRecordRaw[] = [ { path: '/', name: 'Editor', - component: Editor + component: Editor, + props: route => ({ documentId: route.query.documentId ? Number(route.query.documentId) : null }) }, { path: '/settings', name: 'Settings', redirect: '/settings/general', component: Settings, + props: route => ({ returnDocumentId: route.query.documentId ? Number(route.query.documentId) : null }), children: [ { path: 'general', diff --git a/frontend/src/stores/editorStore.ts b/frontend/src/stores/editorStore.ts index ba7a473..729bf23 100644 --- a/frontend/src/stores/editorStore.ts +++ b/frontend/src/stores/editorStore.ts @@ -15,7 +15,7 @@ import {createFontExtensionFromBackend, updateFontConfig} from '@/views/editor/b import {createStatsUpdateExtension} from '@/views/editor/basic/statsExtension'; import {createContentChangePlugin} from '@/views/editor/basic/contentChangeExtension'; import {createDynamicKeymapExtension, updateKeymapExtension} from '@/views/editor/keymap'; -import {createDynamicExtensions, getExtensionManager, setExtensionManagerView} from '@/views/editor/manager'; +import {createDynamicExtensions, getExtensionManager, setExtensionManagerView, removeExtensionManagerView} from '@/views/editor/manager'; import {useExtensionStore} from './extensionStore'; import createCodeBlockExtension from "@/views/editor/extensions/codeblock"; @@ -197,7 +197,7 @@ export const useEditorStore = defineStore('editor', () => { throw new Error('Operation cancelled'); } - // 快捷键扩展(异步) + // 快捷键扩展 const keymapExtension = await createDynamicKeymapExtension(); // 检查操作有效性 @@ -205,8 +205,8 @@ export const useEditorStore = defineStore('editor', () => { throw new Error('Operation cancelled'); } - // 动态扩展(异步) - const dynamicExtensions = await createDynamicExtensions(); + // 动态扩展,传递文档ID以便扩展管理器可以预初始化 + const dynamicExtensions = await createDynamicExtensions(documentId); // 最终检查操作有效性 if (!isOperationValid(operationId, documentId)) { @@ -347,7 +347,7 @@ export const useEditorStore = defineStore('editor', () => { currentEditor.value = instance.view; // 设置扩展管理器视图 - setExtensionManagerView(instance.view); + setExtensionManagerView(instance.view, documentId); // 更新LRU updateLRU(documentId); @@ -529,6 +529,9 @@ export const useEditorStore = defineStore('editor', () => { instance.autoSaveTimer = null; } + // 从扩展管理器中移除视图 + removeExtensionManagerView(documentId); + // 移除DOM元素 if (instance.view && instance.view.dom && instance.view.dom.parentElement) { instance.view.dom.remove(); @@ -596,6 +599,7 @@ export const useEditorStore = defineStore('editor', () => { // 应用快捷键设置 const applyKeymapSettings = async () => { + // 确保所有编辑器实例的快捷键都更新 await Promise.all( Object.values(editorCache.value.instances).map(instance => updateKeymapExtension(instance.view) @@ -614,6 +618,10 @@ export const useEditorStore = defineStore('editor', () => { if (instance.autoSaveTimer) { clearTimeout(instance.autoSaveTimer); } + + // 从扩展管理器移除 + removeExtensionManagerView(instance.documentId); + // 移除DOM元素 if (instance.view.dom.parentElement) { instance.view.dom.remove(); @@ -637,19 +645,19 @@ export const useEditorStore = defineStore('editor', () => { await ExtensionService.UpdateExtensionState(id, enabled, config); } - // 更新前端编辑器扩展 + // 更新前端编辑器扩展 - 应用于所有实例 const manager = getExtensionManager(); if (manager) { - manager.updateExtension(id, enabled, config || {}); + // 使用立即更新模式,跳过防抖 + manager.updateExtensionImmediate(id, enabled, config || {}); } // 重新加载扩展配置 await extensionStore.loadExtensions(); - // 更新快捷键映射 - if (currentEditor.value) { - updateKeymapExtension(currentEditor.value); - } + // 不再需要单独更新当前编辑器的快捷键映射,因为扩展管理器会更新所有实例 + // 但我们仍需要确保快捷键配置在所有编辑器上更新 + await applyKeymapSettings(); }; // 监听文档切换 diff --git a/frontend/src/views/editor/Editor.vue b/frontend/src/views/editor/Editor.vue index a17e6a3..f913520 100644 --- a/frontend/src/views/editor/Editor.vue +++ b/frontend/src/views/editor/Editor.vue @@ -1,11 +1,16 @@