chenyc
2025-12-09 a7fb2f5eab3e548f040004c1019f1c994eb91ad4
electron/main/index.ts
@@ -1,11 +1,11 @@
import { app, BrowserWindow, shell, ipcMain,Menu } from 'electron'
import { app, BrowserWindow, shell, ipcMain,Menu, IpcMainEvent } from 'electron'
import { release } from 'os'
import { join } from 'path'
import fs from 'fs'
import iconv from 'iconv-lite'
import logger from '../preload/logger.js'
//koa----
import  Koa from 'koa';
import  Router from 'koa-router';
import { checkUpdate } from './appVersion.js';
const koaBody = require('koa-body');
const creatorKoa=(win)=>{
  const app = new Koa();
@@ -39,11 +39,6 @@
const  store = new Store();
console.log(store.path)
// 读
// console.log(store.get('clientCode'))
// console.log(store.get('deviceList'))
// 写
// store.set("testr","test001")
// Disable GPU Acceleration for Windows 7
if (release().startsWith('6.1')) app.disableHardwareAcceleration()
@@ -64,16 +59,23 @@
const url = `http://${process.env['VITE_DEV_SERVER_HOST']}:${process.env['VITE_DEV_SERVER_PORT']}`
async function createWindow() {
  win = new BrowserWindow({
    title: 'Main window',
    fullscreen: true,
    autoHideMenuBar:true,
    transparent: true,
    frame:store.get('debug')===undefined?true:store.get('debug'),//关闭菜单栏
    fullscreen: true,// 开启默认全屏
    kiosk: true,
    movable:false,// 关闭窗口移动
    resizable: false, // 禁止调整窗口大小
    // autoHideMenuBar:store.get('debug'),
    webPreferences: {
      preload: splash,
      nodeIntegration: true,
      contextIsolation: false,
    },
  })
  if (app.isPackaged) {
    win.loadFile(join(__dirname, '../../index.html'))
  } else {
@@ -86,7 +88,7 @@
    creatorKoa(win)
    win?.webContents.send('getScreenTimeout',store.get('screenTimeout'))
    win?.webContents.send('getPcName',store.get('machineName'))
    win?.webContents.send('getConfigData',store.get('clientCode'),store.path)
    win?.webContents.send('getConfigData',store.get(),store.path)
  })
  // Make all links open with the browser, not with the application
@@ -103,6 +105,9 @@
  if (process.platform !== 'darwin') app.quit()
})
app.on('second-instance', () => {
  if (win) {
    // 如果用户试图打开另一个窗口,则将焦点放在主窗口上
@@ -110,6 +115,14 @@
    win.focus()
  }
})
app.on('render-process-gone',(e,w,d)=>{
  logger.info(`${new Date()}渲染进程被杀死${d.reason}\n`)
  // 基于我在开发的程序本身的设定,此处重启应用就可以了
  app.relaunch({args: process.argv.slice(1).concat(['--relaunch'])});
  // 尝试关闭所有窗口
  app.quit();
})
app.on('activate', () => {
  const allWindows = BrowserWindow.getAllWindows()
@@ -119,6 +132,10 @@
    createWindow()
  }
})
// 自动更新
// app.on('ready', async () => {
//   updater()
// })
// 新窗口示例arg:新的Windows url
ipcMain.handle("open-win", (event, arg) => {
@@ -137,6 +154,37 @@
    // childWindow.webContents.openDevTools({ mode: "undocked", activate: true })
  }
})
// 主进程处理日志定义
ipcMain.handle('logger', async(event, arg) => {  //与渲染进程通信
  return new Promise((resolve, reject) => {
    logger.info(arg)
  })
})
/**
* 版本更新检测
*/
ipcMain.handle("check-update",(e:any)=>{
  // 获取发送通知的渲染进程窗口
  const currentWin = getWindowByEvent(e);
  // 升级校验
  // checkUpdate(currentWin);
});
/**
 * 通过窗口事件获取发送者的窗口
 * @param event ipc发送窗口事件
 */
function getWindowByEvent(event: IpcMainEvent): BrowserWindow {
  const webContentsId = event.sender.id;
  for (const currentWin of BrowserWindow.getAllWindows()) {
    if (currentWin.webContents.id === webContentsId) {
      return currentWin;
    }
  }
  return null;
}
// 渲染端发送消息到主进程
ipcMain.on("winClose",()=>{
  win?.close()
@@ -149,16 +197,4 @@
    "machineName": arg.machineName,
    "screenTimeout": arg.screenTimeout,
  }
  //对比两端配置文件
  if(JSON.stringify(mode1)!=JSON.stringify(mode2)){
    //更新cofing.json
    console.log('update confing.json')
    store.set(mode2)
    // 重新建立sockte 通讯
    win?.webContents.send('getScreenTimeout',store.get('screenTimeout'))
    win?.webContents.send('getPcName',store.get('machineName'))
    win?.webContents.send('getConfigData',store.get('clientCode'),store.path)
  }
})