From a5a396f60ed305eec85e0e4fb091a65b94d4843b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Mon, 12 Jan 2026 07:09:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=98=B6=E6=AE=B5=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/file-editor/EditorPane.vue | 4 +- .../file-editor/EditorStatusBar.vue | 16 +++++--- .../components/file-editor/EditorToolbar.vue | 38 +++++++------------ .../components/file-editor/FileEditorView.vue | 2 +- web/src/components/file-editor/FileTree.vue | 6 ++- 5 files changed, 31 insertions(+), 35 deletions(-) diff --git a/web/src/components/file-editor/EditorPane.vue b/web/src/components/file-editor/EditorPane.vue index 8ab86e3b..99d234a1 100644 --- a/web/src/components/file-editor/EditorPane.vue +++ b/web/src/components/file-editor/EditorPane.vue @@ -51,7 +51,7 @@ async function initEditor() { // Display settings lineNumbers: settings.lineNumbers, renderWhitespace: settings.renderWhitespace, - 'bracketPairColorization.enabled': settings.bracketPairColorization, + bracketPairColorization: { enabled: settings.bracketPairColorization }, guides: { indentation: settings.guides, bracketPairs: settings.guides @@ -308,7 +308,7 @@ watch( // Display settings lineNumbers: settings.lineNumbers, renderWhitespace: settings.renderWhitespace, - 'bracketPairColorization.enabled': settings.bracketPairColorization, + bracketPairColorization: { enabled: settings.bracketPairColorization }, guides: { indentation: settings.guides, bracketPairs: settings.guides diff --git a/web/src/components/file-editor/EditorStatusBar.vue b/web/src/components/file-editor/EditorStatusBar.vue index a8bad625..79d78e50 100644 --- a/web/src/components/file-editor/EditorStatusBar.vue +++ b/web/src/components/file-editor/EditorStatusBar.vue @@ -40,10 +40,10 @@ const encodings = ['utf-8', 'gbk', 'gb2312', 'iso-8859-1', 'utf-16', 'utf-16le', // 缩进选项 const indentOptions = computed(() => [ - { label: `${$gettext('Spaces')}: 2`, value: { tabSize: 2, insertSpaces: true } }, - { label: `${$gettext('Spaces')}: 4`, value: { tabSize: 4, insertSpaces: true } }, - { label: `${$gettext('Tabs')}: 2`, value: { tabSize: 2, insertSpaces: false } }, - { label: `${$gettext('Tabs')}: 4`, value: { tabSize: 4, insertSpaces: false } } + { label: `${$gettext('Spaces')}: 2`, value: '2-spaces' }, + { label: `${$gettext('Spaces')}: 4`, value: '4-spaces' }, + { label: `${$gettext('Tabs')}: 2`, value: '2-tabs' }, + { label: `${$gettext('Tabs')}: 4`, value: '4-tabs' } ]) // 当前缩进显示 @@ -74,8 +74,12 @@ function handleLanguageChange(value: string) { } // 更新缩进 -function handleIndentChange(value: { tabSize: number; insertSpaces: boolean }) { - editorStore.updateSettings(value) +function handleIndentChange(value: string) { + const [size, type] = value.split('-') + editorStore.updateSettings({ + tabSize: parseInt(size), + insertSpaces: type === 'spaces' + }) } diff --git a/web/src/components/file-editor/EditorToolbar.vue b/web/src/components/file-editor/EditorToolbar.vue index f8e2f5fd..ef197aa3 100644 --- a/web/src/components/file-editor/EditorToolbar.vue +++ b/web/src/components/file-editor/EditorToolbar.vue @@ -142,9 +142,10 @@ function handleSettings() { } // 字体大小调整 -function handleFontSizeChange(delta: number) { - const newSize = Math.max(10, Math.min(24, editorStore.settings.fontSize + delta)) - editorStore.updateSettings({ fontSize: newSize }) +function handleFontSizeChange(value: number | null) { + if (value !== null) { + editorStore.updateSettings({ fontSize: value }) + } } // 切换小地图 @@ -244,21 +245,16 @@ defineExpose({ - - - - - - {{ editorStore.settings.fontSize }} - - - - - + diff --git a/web/src/components/file-editor/FileEditorView.vue b/web/src/components/file-editor/FileEditorView.vue index e1fbb8fc..5fd50d1e 100644 --- a/web/src/components/file-editor/FileEditorView.vue +++ b/web/src/components/file-editor/FileEditorView.vue @@ -64,7 +64,7 @@ watch(rootPath, (newPath) => { // 键盘快捷键 function handleKeydown(e: KeyboardEvent) { - const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0 + const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.userAgent) const modKey = isMac ? e.metaKey : e.ctrlKey // Ctrl/Cmd+S 保存 diff --git a/web/src/components/file-editor/FileTree.vue b/web/src/components/file-editor/FileTree.vue index e9f5cfa4..fb0e3edd 100644 --- a/web/src/components/file-editor/FileTree.vue +++ b/web/src/components/file-editor/FileTree.vue @@ -117,11 +117,13 @@ function handleExpandedKeysUpdate(keys: string[]) { } // 选择节点(打开文件) -async function handleSelect(keys: string[], option: TreeOption[]) { +function handleSelect(keys: string[], option: (TreeOption | null)[]) { if (keys.length === 0) return selectedKeys.value = keys const node = option[0] + if (!node) return + const isDir = (node as any)?.isDir // 搜索模式下点击文件夹,跳转到该目录 @@ -784,7 +786,7 @@ defineExpose({ @update:selected-keys="handleSelect" selectable expand-on-click - virtual-scroll + virtual-scrollå class="file-tree-content" style="height: 100%" />