From d39cbacef551e58361947269f9609bb63d2abcca Mon Sep 17 00:00:00 2001 From: ruotongyu Date: Thu, 20 Jun 2024 23:17:56 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(createWindow.ts)=EF=BC=9A=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0createWindow=E5=87=BD=E6=95=B0=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E5=88=9B=E5=BB=BAElectron=E7=AA=97=E5=8F=A3=20=F0=9F=93=9D(ind?= =?UTF-8?q?ex.ts)=EF=BC=9A=E6=9B=B4=E6=96=B0=E6=96=87=E4=BB=B6=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E6=B3=A8=E9=87=8A=20=E2=9C=A8(ipc.ts)=EF=BC=9A?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0IPC=E4=BA=8B=E4=BB=B6=E7=9B=91=E5=90=AC?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E7=94=A8=E4=BA=8E=E6=89=93=E5=BC=80=E5=92=8C?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=AA=97=E5=8F=A3=20=E2=9C=A8(windows.ts)?= =?UTF-8?q?=EF=BC=9A=E6=B7=BB=E5=8A=A0getWindow=E5=87=BD=E6=95=B0=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E8=8E=B7=E5=8F=96=E6=8C=87=E5=AE=9A=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E7=9A=84=E7=AA=97=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/autoMate/src/main/createWindow.ts | 46 ++++++++++++++++++++++++++++ ui/autoMate/src/main/index.ts | 5 ++- ui/autoMate/src/main/ipc.ts | 10 ++++++ ui/autoMate/src/main/windows.ts | 27 ++++++++++++++++ 4 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 ui/autoMate/src/main/createWindow.ts create mode 100644 ui/autoMate/src/main/ipc.ts create mode 100644 ui/autoMate/src/main/windows.ts diff --git a/ui/autoMate/src/main/createWindow.ts b/ui/autoMate/src/main/createWindow.ts new file mode 100644 index 0000000..ff496cb --- /dev/null +++ b/ui/autoMate/src/main/createWindow.ts @@ -0,0 +1,46 @@ + +import { BrowserWindow, BrowserWindowConstructorOptions, shell } from 'electron' +import { is } from '@electron-toolkit/utils' +import icon from '../../../resources/icon.png?asset' +import { join } from 'path' + +export interface OptionsType extends Partial{ + openDevTools?: boolean +} +export function createWindow(options: OptionsType): BrowserWindow { // Create the browser window. + const win = new BrowserWindow(Object.assign({ + width: 500, + height: 350, + center: true, + show: false, + frame: false, + transparent: true, + // alwaysOnTop: true, + autoHideMenuBar: true, + ...(process.platform === 'linux' ? { icon } : {}), + webPreferences: { + preload: join(__dirname, '../preload/index.js'), + sandbox: false + } + }, options)) + // 如果是在开发环境下并且选项是打开开发者工具 + if (is.dev && options.openDevTools) win.webContents.openDevTools() + win.on('ready-to-show', () => { + win.show() + }) + + win.webContents.setWindowOpenHandler((details) => { + shell.openExternal(details.url) + return { action: 'deny' } + }) + + // HMR for renderer base on electron-vite cli. + // Load the remote URL for development or the local html file for production. + if (is.dev && process.env['ELECTRON_RENDERER_URL']) { + win.loadURL(process.env['ELECTRON_RENDERER_URL']) + } else { + win.loadFile(join(__dirname, '../renderer/index.html')) + } + + return win +} diff --git a/ui/autoMate/src/main/index.ts b/ui/autoMate/src/main/index.ts index af24fca..87670d3 100644 --- a/ui/autoMate/src/main/index.ts +++ b/ui/autoMate/src/main/index.ts @@ -1,7 +1,10 @@ import { app, ipcMain } from 'electron' import { electronApp, optimizer } from '@electron-toolkit/utils' -import "./code" +// import "./code" import "./db" +import "./windows" +import "./ipc" + // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. diff --git a/ui/autoMate/src/main/ipc.ts b/ui/autoMate/src/main/ipc.ts new file mode 100644 index 0000000..c5b1ce5 --- /dev/null +++ b/ui/autoMate/src/main/ipc.ts @@ -0,0 +1,10 @@ +import { ipcMain, IpcMainEvent } from "electron" +import { getWindow, WindowNameType } from "./windows" + +ipcMain.on('openWindow', (_event: IpcMainEvent, name: WindowNameType) => { + getWindow(name).show() +}) + +ipcMain.on('closeWindow', (_event: IpcMainEvent, name: WindowNameType) => { + getWindow(name).hide() +}) diff --git a/ui/autoMate/src/main/windows.ts b/ui/autoMate/src/main/windows.ts new file mode 100644 index 0000000..75a8530 --- /dev/null +++ b/ui/autoMate/src/main/windows.ts @@ -0,0 +1,27 @@ +import { BrowserWindow } from "electron" +import { OptionsType, createWindow} from "./createWindow" +export type WindowNameType = 'search' | 'config' +export const config = { + search: { + id: 0, + options: {} + }, + config: { + id: 0, + options: {} + } + +} as Record +// createWindow({}) + + +export const getWindow = (name: WindowNameType)=>{ + // 根据id取得窗口 + let win = BrowserWindow.fromId(config[name].id) + // 避免重复点击重复创建窗口 + if (!win) { + win = createWindow(config[name].options) + config[name].id = win.id + } + return win +} \ No newline at end of file