feat: 项目结构优化

This commit is contained in:
DEV_DSW
2025-12-09 17:02:56 +08:00
parent 06ad5ac4b0
commit b842f946a5
13 changed files with 168 additions and 146 deletions

View File

@@ -1,7 +1,7 @@
import { contextBridge, ipcRenderer } from 'electron'
import { IPCChannel, IPCAPI } from '@/shared/types/ipc.types'
import { IPC_EVENTS, WindowApi } from '@common/constants';
const api: IPCAPI = {
const api: WindowApi = {
versions: process.versions,
external: {
@@ -9,24 +9,24 @@ const api: IPCAPI = {
},
window: {
minimize: () => ipcRenderer.send('window-min'),
maximize: () => ipcRenderer.send('window-max'),
close: () => ipcRenderer.send('window-close')
minimize: () => ipcRenderer.send(IPC_EVENTS.WINDOW_MINIMIZE),
maximize: () => ipcRenderer.send(IPC_EVENTS.WINDOW_MAXIMIZE),
close: () => ipcRenderer.send(IPC_EVENTS.WINDOW_CLOSE)
},
app: {
setFrameless: (route?: string) => ipcRenderer.invoke('app:set-frameless', route)
setFrameless: (route?: string) => ipcRenderer.invoke(IPC_EVENTS.APP_SET_FRAMELESS, route)
},
tabs: {
create: (url?: string) => ipcRenderer.invoke('tab:create', url),
list: () => ipcRenderer.invoke('tab:list'),
navigate: (tabId: string, url: string) => ipcRenderer.invoke('tab:navigate', { tabId, url }),
reload: (tabId: string) => ipcRenderer.invoke('tab:reload', tabId),
back: (tabId: string) => ipcRenderer.invoke('tab:back', tabId),
forward: (tabId: string) => ipcRenderer.invoke('tab:forward', tabId),
switch: (tabId: string) => ipcRenderer.invoke('tab:switch', tabId),
close: (tabId: string) => ipcRenderer.invoke('tab:close', tabId),
create: (url?: string) => ipcRenderer.invoke(IPC_EVENTS.TAB_CREATE, url),
list: () => ipcRenderer.invoke(IPC_EVENTS.TAB_LIST),
navigate: (tabId: string, url: string) => ipcRenderer.invoke(IPC_EVENTS.TAB_NAVIGATE, { tabId, url }),
reload: (tabId: string) => ipcRenderer.invoke(IPC_EVENTS.TAB_RELOAD, tabId),
back: (tabId: string) => ipcRenderer.invoke(IPC_EVENTS.TAB_BACK, tabId),
forward: (tabId: string) => ipcRenderer.invoke(IPC_EVENTS.TAB_FORWARD, tabId),
switch: (tabId: string) => ipcRenderer.invoke(IPC_EVENTS.TAB_SWITCH, tabId),
close: (tabId: string) => ipcRenderer.invoke(IPC_EVENTS.TAB_CLOSE, tabId),
on: (event: 'tab-updated' | 'tab-created' | 'tab-closed' | 'tab-switched', handler: (payload: any) => void) => {
const listener = (_e: any, payload: any) => handler(payload)
ipcRenderer.on(event, listener)
@@ -35,38 +35,35 @@ const api: IPCAPI = {
},
// 通过 IPC 调用主进程
readFile: (filePath: string) => ipcRenderer.invoke('read-file', filePath),
readFile: (filePath: string) => ipcRenderer.invoke(IPC_EVENTS.READ_FILE, filePath),
// 同步调用
invoke: (channel: IPCChannel, ...args: any[]) => ipcRenderer.sendSync('ipc:invoke', channel, ...args),
invoke: (channel: IPC_EVENTS, ...args: any[]) => ipcRenderer.sendSync(IPC_EVENTS.INVOKE, channel, ...args),
// 异步调用
invokeAsync: (channel: IPCChannel, ...args: any[]) => {
invokeAsync: (channel: IPC_EVENTS, ...args: any[]) => {
try {
ipcRenderer.invoke('ipc:invokeAsync', channel, ...args)
ipcRenderer.invoke(IPC_EVENTS.INVOKE_ASYNC, channel, ...args)
} catch (error) {
throw error
}
},
// 监听主进程消息
on: (event: IPCChannel, callback: (...args: any[]) => void) => {
on: (event: IPC_EVENTS, callback: (...args: any[]) => void) => {
const subscription = (_event: any, ...args: any[]) => callback(...args)
ipcRenderer.on(event, subscription)
return () => ipcRenderer.removeListener(event, subscription)
},
// 发送消息到主进程
send: (channel: IPCChannel, ...args: any[]) => ipcRenderer.send(channel, ...args),
send: (channel: IPC_EVENTS, ...args: any[]) => ipcRenderer.send(channel, ...args),
// 获取窗口ID
getCurrentWindowId: () => ipcRenderer.sendSync(IPCChannel.GET_WINDOW_ID),
getCurrentWindowId: () => ipcRenderer.sendSync(IPC_EVENTS.GET_WINDOW_ID),
// 发送日志
logToMain: (logLevel: string, message: string) => ipcRenderer.send('log-to-main', logLevel, message),
// 打开新窗口
openNewTab: (url: string) => ipcRenderer.invoke('open-new-tab', url)
logToMain: (logLevel: string, message: string) => ipcRenderer.send(IPC_EVENTS.LOG_TO_MAIN, logLevel, message),
}
contextBridge.exposeInMainWorld('ipcAPI', api)
contextBridge.exposeInMainWorld('api', api)