123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- import { BrowserWindow, ipcMain, screen } from "electron";
- import { join } from "node:path";
- import { ICON, DIST, preload, url } from "../main/utils";
- import log from "electron-log/main";
- const NODE_ENV = process.env.NODE_ENV;
- const indexHtml = join(DIST, "./index.html");
- let mainWindow: BrowserWindow | null;
- const extra = {
- activeClose: false,
- };
- // 主窗口
- const createWindow = (): BrowserWindow => {
- //动态适应宽高
- const { width } = screen.getPrimaryDisplay().workAreaSize;
- // 设置窗口的宽度和高度
- const winWidth = 420;
- const winHeight = 700;
- // 计算窗口在右上角的位置
- const x = width - winWidth;
- const y = 10;
- // 创建浏览器窗口
- mainWindow = new BrowserWindow({
- title: "九海健康",
- icon: ICON,
- x,
- y,
- width: winWidth,
- height: winHeight,
- frame: false,
- show: false,
- // transparent: true,
- alwaysOnTop: true, // 始终在顶部
- backgroundColor: "#fff",
- webPreferences: {
- preload,
- webviewTag: true, // 启用webview标签
- // webSecurity: false,
- },
- });
- ipcMain.handle("get-window-info", async (event) => {
- const [width] = mainWindow?.getSize() || [0, 0]; // 获取当前窗口宽度
- const display = screen.getPrimaryDisplay();
- const scaleFactor = display.scaleFactor; // 缩放因子,例如 1.5
- return { width, scaleFactor }; // 返回宽度值
- });
- mainWindow.setMenu(null); // 去掉顶部菜单
- // log.info("Log from the main process");
- // const args = process.argv.slice(2); // 去掉前两个默认参数(node 和 script 路径)
- // console.log("args==>", args); // 输出实际传递的参数
- if (url) {
- mainWindow.loadURL(url);
- } else {
- mainWindow.loadFile(indexHtml);
- }
- // mainWindow.webContents.openDevTools();
- // mainWindow.on("closed", () => {
- // mainWindow = null;
- // });
- mainWindow.once("ready-to-show", () => {
- log.info("启动参数process.argv==> hidden表示开机重启成功", process.argv);
- if (process.argv.indexOf("--hidden") < 0) {
- showMainWin();
- }
- });
- // 监听窗口的关闭事件
- mainWindow.on("close", (e) => {
- if (!extra.activeClose) {
- e.preventDefault();
- hideMainWin();
- } else {
- extra.activeClose = true;
- }
- });
- return mainWindow;
- };
- // 关闭窗口
- function closeMainWin() {
- if (mainWindow?.isDestroyed()) {
- mainWindow!.close();
- }
- mainWindow = null;
- }
- // 打开窗口
- function openMainWin() {
- mainWindow = createWindow();
- mainWindow!.show();
- }
- // 显示窗口
- function showMainWin() {
- if (!mainWindow || mainWindow?.isDestroyed()) {
- mainWindow = createWindow();
- }
- mainWindow!.show();
- }
- // 隐藏窗口
- function hideMainWin() {
- mainWindow!.hide();
- // app.quit();
- }
- // 最小化窗口
- function minimizeMainWin() {
- mainWindow!.minimize();
- }
- // 最大化窗口
- function maximizeMainWin() {
- mainWindow!.maximize();
- }
- function middleMainWin() {
- if (mainWindow?.isMaximized()) {
- mainWindow.unmaximize();
- }
- const display = screen.getPrimaryDisplay();
- const { width } = display.workAreaSize; // 逻辑像素
- const scaleFactor = display.scaleFactor; // 缩放因子,例如 1.5
- let currentWidth = mainWindow?.getBounds().width || 0;
- const winSys = process.platform === "win32";
- const baseWidth = winSys ? 420 * scaleFactor : 420;
- if (currentWidth && currentWidth > baseWidth) {
- mainWindow?.setBounds({
- width: 420,
- x: width - 420,
- });
- return;
- }
- mainWindow?.setBounds({
- width: 840,
- x: width - 840,
- });
- }
- // 取消最大化窗口
- function unmaximizeMainWin() {
- mainWindow!.unmaximize();
- }
- // 是否最大化
- function isMaximized() {
- return mainWindow!.isMaximized();
- }
- function focusMainWin() {
- if (mainWindow) {
- // Focus on the main window if the user tried to open another
- if (mainWindow.isMinimized()) mainWindow.restore();
- mainWindow.focus();
- }
- }
- export {
- mainWindow,
- extra,
- createWindow,
- closeMainWin,
- openMainWin,
- hideMainWin,
- showMainWin,
- focusMainWin,
- minimizeMainWin,
- isMaximized,
- maximizeMainWin,
- unmaximizeMainWin,
- middleMainWin,
- };
|