From 0e3380da265740abc1ab68ef7cf3593b93e94fd5 Mon Sep 17 00:00:00 2001 From: Baobhan Sith <80159437+Heavrnl@users.noreply.github.com> Date: Fri, 18 Apr 2025 09:34:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=BC=96=E8=BE=91=E5=99=A8=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/repositories/appearance.repository.ts | 20 ++-- .../src/services/appearance.service.ts | 10 ++ .../backend/src/types/appearance.types.ts | 1 + .../frontend/src/components/MonacoEditor.vue | 110 ++++++++++++------ .../src/components/StyleCustomizer.vue | 61 ++++++++-- packages/frontend/src/locales/en.json | 7 +- packages/frontend/src/locales/zh.json | 7 +- .../frontend/src/stores/appearance.store.ts | 21 +++- 8 files changed, 181 insertions(+), 56 deletions(-) diff --git a/packages/backend/src/repositories/appearance.repository.ts b/packages/backend/src/repositories/appearance.repository.ts index 18fd7d4..974a8bf 100644 --- a/packages/backend/src/repositories/appearance.repository.ts +++ b/packages/backend/src/repositories/appearance.repository.ts @@ -16,7 +16,8 @@ const createTableIfNotExists = () => { custom_ui_theme TEXT, active_terminal_theme_id TEXT, terminal_font_family TEXT, - terminal_font_size INTEGER, -- 添加字体大小列 + terminal_font_size INTEGER, + editor_font_size INTEGER, -- 新增:编辑器字体大小 terminal_background_image TEXT, page_background_image TEXT, updated_at INTEGER NOT NULL @@ -40,7 +41,8 @@ const mapRowToAppearanceSettings = (row: any): AppearanceSettings => { customUiTheme: row.custom_ui_theme, activeTerminalThemeId: row.active_terminal_theme_id, terminalFontFamily: row.terminal_font_family, - terminalFontSize: row.terminal_font_size, // 添加字体大小映射 + terminalFontSize: row.terminal_font_size, + editorFontSize: row.editor_font_size, // 新增:编辑器字体大小映射 terminalBackgroundImage: row.terminal_background_image, // terminalBackgroundOpacity: row.terminal_background_opacity, // Removed pageBackgroundImage: row.page_background_image, @@ -58,7 +60,8 @@ const getDefaultAppearanceSettings = (): AppearanceSettings => { customUiTheme: JSON.stringify(defaultUiTheme), // Use default UI theme activeTerminalThemeId: undefined, // Needs to be set after querying default theme ID terminalFontFamily: 'Consolas, "Courier New", monospace, "Microsoft YaHei", "微软雅黑"', // Default font - terminalFontSize: 14, // 添加默认字体大小 + terminalFontSize: 14, + editorFontSize: 14, // 新增:默认编辑器字体大小 terminalBackgroundImage: undefined, // terminalBackgroundOpacity: 1.0, // Removed pageBackgroundImage: undefined, @@ -82,18 +85,19 @@ const ensureDefaultSettingsExist = () => { if (!row) { const sqlInsert = ` INSERT INTO ${TABLE_NAME} ( - id, custom_ui_theme, active_terminal_theme_id, terminal_font_family, terminal_font_size, -- 添加列 + id, custom_ui_theme, active_terminal_theme_id, terminal_font_family, terminal_font_size, editor_font_size, -- 添加 editor_font_size 列 terminal_background_image, -- terminal_background_opacity, -- Removed page_background_image, -- page_background_opacity, -- Removed updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?) -- 调整占位符数量 + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) -- 调整占位符数量 `; db.run(sqlInsert, [ SETTINGS_ID, defaults.customUiTheme, defaults.activeTerminalThemeId, // Initially undefined defaults.terminalFontFamily, - defaults.terminalFontSize, // 添加默认值参数 + defaults.terminalFontSize, + defaults.editorFontSize, // 添加 editor_font_size 默认值参数 defaults.terminalBackgroundImage, // defaults.terminalBackgroundOpacity, // Removed defaults.pageBackgroundImage, @@ -179,8 +183,8 @@ export const updateAppearanceSettings = async (settingsDto: UpdateAppearanceDto) for (const key in settingsDto) { if (Object.prototype.hasOwnProperty.call(settingsDto, key)) { const dbKey = key.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`); // Convert camelCase to snake_case - // Ensure only valid keys are updated (Added terminal_font_size) - if (['custom_ui_theme', 'active_terminal_theme_id', 'terminal_font_family', 'terminal_font_size', 'terminal_background_image', 'page_background_image'].includes(dbKey)) { + // Ensure only valid keys are updated (Added editor_font_size) + if (['custom_ui_theme', 'active_terminal_theme_id', 'terminal_font_family', 'terminal_font_size', 'editor_font_size', 'terminal_background_image', 'page_background_image'].includes(dbKey)) { updates.push(`${dbKey} = ?`); params.push((settingsDto as any)[key]); } diff --git a/packages/backend/src/services/appearance.service.ts b/packages/backend/src/services/appearance.service.ts index 4a85892..74582d7 100644 --- a/packages/backend/src/services/appearance.service.ts +++ b/packages/backend/src/services/appearance.service.ts @@ -48,6 +48,16 @@ export const updateSettings = async (settingsDto: UpdateAppearanceDto): Promise< settingsDto.terminalFontSize = size; } + // 验证 editorFontSize (如果提供了) + if (settingsDto.editorFontSize !== undefined && settingsDto.editorFontSize !== null) { + const size = Number(settingsDto.editorFontSize); + if (isNaN(size) || size <= 0) { + throw new Error(`无效的编辑器字体大小: ${settingsDto.editorFontSize}。必须是一个正数。`); + } + // 确保类型正确传递给仓库层 + settingsDto.editorFontSize = size; + } + // TODO: 如果实现了背景图片上传,这里需要处理文件路径或 URL 的验证/保存逻辑 return appearanceRepository.updateAppearanceSettings(settingsDto); diff --git a/packages/backend/src/types/appearance.types.ts b/packages/backend/src/types/appearance.types.ts index acb8c8f..aaa2406 100644 --- a/packages/backend/src/types/appearance.types.ts +++ b/packages/backend/src/types/appearance.types.ts @@ -12,6 +12,7 @@ export interface AppearanceSettings { terminalFontSize?: number; // 终端字体大小 (px) terminalBackgroundImage?: string; // 终端背景图片 URL 或路径 pageBackgroundImage?: string; // 页面背景图片 URL 或路径 + editorFontSize?: number; // 编辑器字体大小 (px) updatedAt?: number; } diff --git a/packages/frontend/src/components/MonacoEditor.vue b/packages/frontend/src/components/MonacoEditor.vue index 1a4d6de..cdabbc0 100644 --- a/packages/frontend/src/components/MonacoEditor.vue +++ b/packages/frontend/src/components/MonacoEditor.vue @@ -5,9 +5,11 @@