diff --git a/frontend/electron/main.ts b/frontend/electron/main.ts index 6252a69..8580a50 100644 --- a/frontend/electron/main.ts +++ b/frontend/electron/main.ts @@ -1,4 +1,4 @@ -import { app, BrowserWindow, ipcMain, dialog } from 'electron' +import { app, BrowserWindow, ipcMain, dialog, shell } from 'electron' import * as path from 'path' import * as fs from 'fs' import { spawn } from 'child_process' @@ -74,7 +74,6 @@ function createWindow() { }) mainWindow.setMenuBarVisibility(false) - const devServer = process.env.VITE_DEV_SERVER_URL if (devServer) { mainWindow.loadURL(devServer) @@ -121,6 +120,17 @@ ipcMain.handle('select-file', async (event, filters = []) => { return result.canceled ? null : result.filePaths[0] }) +// 在系统默认浏览器中打开URL +ipcMain.handle('open-url', async (event, url: string) => { + try { + await shell.openExternal(url) + return { success: true } + } catch (error) { + console.error('打开链接失败:', error) + return { success: false, error: error.message } + } +}) + // 环境检查 ipcMain.handle('check-environment', async () => { const appRoot = getAppRoot() diff --git a/frontend/electron/preload.ts b/frontend/electron/preload.ts index 3ccc9d1..4db6e31 100644 --- a/frontend/electron/preload.ts +++ b/frontend/electron/preload.ts @@ -9,6 +9,7 @@ contextBridge.exposeInMainWorld('electronAPI', { openDevTools: () => ipcRenderer.invoke('open-dev-tools'), selectFolder: () => ipcRenderer.invoke('select-folder'), selectFile: (filters?: any[]) => ipcRenderer.invoke('select-file', filters), + openUrl: (url: string) => ipcRenderer.invoke('open-url', url), // 初始化相关API checkEnvironment: () => ipcRenderer.invoke('check-environment'), diff --git a/frontend/src/components/NoticeModal.vue b/frontend/src/components/NoticeModal.vue index 2252562..360010d 100644 --- a/frontend/src/components/NoticeModal.vue +++ b/frontend/src/components/NoticeModal.vue @@ -23,7 +23,12 @@ class="notice-tab-pane" >