import path from "path"; import { app, BrowserWindow, ipcMain } from "electron"; import os from "os"; // const SerialPort = require("serialport"); let win; app.whenReady().then(() => { win = new BrowserWindow({ title: "银收客", width: 1024, height: 768, fullscreenable: true, fullscreen: process.env.VITE_DEV_SERVER_URL ? false : true, simpleFullscreen: true, frame: process.env.VITE_DEV_SERVER_URL ? true : false, webPreferences: { // 集成网页和 Node.js,也就是在渲染进程中,可以调用 Node.js 方法 nodeIntegration: true, contextIsolation: false, }, }); // You can use `process.env.VITE_DEV_SERVER_URL` when the vite command is called `serve` if (process.env.VITE_DEV_SERVER_URL) { win.loadURL(process.env.VITE_DEV_SERVER_URL); // 使用vite开发服务的url路径访问应用 // win.webContents.openDevTools(); } else { win.loadFile(path.resolve(__dirname, "../dist/index.html")); // 打包后使用文件路径访问应用 } app.on("activate", () => { // 在 macOS 系统内, 如果没有已开启的应用窗口 // 点击托盘图标时通常会重新创建一个新窗口 if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } }); ipcMain.on("quitHandler", (_, msg) => { win = null; app.exit(); }); // 给渲染进程返回打印机列表 ipcMain.on("getPrintList", () => { win.webContents.getPrintersAsync().then((res) => { win.webContents.send("printList", res); }); }); // 获取本机mac ipcMain.on("getOSmacSync", () => { let mac = ""; if (os.networkInterfaces().WLAN) { mac = os.networkInterfaces().WLAN[0].mac; console.log("wlan.mac===", mac); } else { mac = os.networkInterfaces()["以太网"][0].mac; console.log("以太网.mac===", mac); } win.webContents.send("getOSmacRes", mac); }); // ipcMain.on("getSerialPort", () => { // SerialPort.SerialPort.list().then( // (ports) => { // console.log(ports); // win.webContents.send("seriaportList", ports); // }, // (err) => console.error(err) // ); // }); // 创建打印小票子窗口 const printWin = new BrowserWindow({ show: false, width: 464, height: 1726, webPreferences: { // 集成网页和 Node.js,也就是在渲染进程中,可以调用 Node.js 方法 nodeIntegration: true, contextIsolation: false, }, }); if (process.env.VITE_DEV_SERVER_URL) { // 加载打印的html文件 printWin.loadFile(path.join(__dirname, "../public/print.html")); } else { printWin.loadFile(path.resolve(__dirname, "../dist/print.html")); // 打包后使用文件路径访问应用 } // 接收订单页面发过来的参数发送给打印页 ipcMain.on("printerInfoSync", (event, arg) => { printWin.webContents.send("getParams", arg); }); // 执行打印操作 ipcMain.on("printStart", (event, arg) => { console.log(arg); const _parmas = JSON.parse(arg); // console.log(_parmas) let name = _parmas.deviceName; printWin.webContents.print({ silent: true, deviceName: name, pageSize: { width: 58000, height: 216000, }, scaleFactor: 80, landscape: false, margins: { marginType: "none", top: 0, bottom: 0, left: 0, right: 0, }, dpi: { horizontal: 203, vertical: 203, }, }); }); // 交班小票的窗口 const workPrintWin = new BrowserWindow({ show: false, width: 464, height: 1726, webPreferences: { nodeIntegration: true, contextIsolation: false, }, }); if (process.env.VITE_DEV_SERVER_URL) { // 加载打印的html文件 workPrintWin.loadFile(path.join(__dirname, "../public/work_print.html")); } else { workPrintWin.loadFile(path.resolve(__dirname, "../dist/work_print.html")); // 打包后使用文件路径访问应用 } // 接收渲染进程发送的数据 ipcMain.on("printerWorkSync", (event, arg) => { workPrintWin.webContents.send("getParams", arg); }); // 执行交班小票的打印操作 ipcMain.on("printWorkStart", (event, arg) => { // console.log(arg); const _parmas = JSON.parse(arg); // console.log(_parmas) let name = _parmas.deviceName; workPrintWin.webContents.print({ silent: true, deviceName: name, pageSize: { width: 58000, height: 216000, }, scaleFactor: 80, landscape: false, margins: { marginType: "none", top: 0, bottom: 0, left: 0, right: 0, }, dpi: { horizontal: 203, vertical: 203, }, }); }); // 标签小票的窗口 const tagPrintWin = new BrowserWindow({ show: false, width: 360, height: 240, webPreferences: { nodeIntegration: true, contextIsolation: false, }, }); if (process.env.VITE_DEV_SERVER_URL) { // 加载打印的html文件 tagPrintWin.loadFile(path.join(__dirname, "../public/tag_print.html")); } else { tagPrintWin.loadFile(path.resolve(__dirname, "../dist/tag_print.html")); // 打包后使用文件路径访问应用 } // 接收渲染进程发送的数据 ipcMain.on("printerTagSync", (event, arg) => { console.log(arg); tagPrintWin.webContents.send("getParams", arg); }); // 执行标签小票的打印操作 ipcMain.on("printTagStart", (event, arg) => { // console.log(arg); const _parmas = JSON.parse(arg); // console.log(_parmas) let name = _parmas.deviceName; tagPrintWin.webContents.print({ silent: true, deviceName: name, pageSize: { width: 45000, height: 30000, }, scaleFactor: 80, landscape: false, margins: { marginType: "none", top: 0, bottom: 0, left: 0, right: 0, }, dpi: { horizontal: 203, vertical: 203, }, }); }); const gotTheLock = app.requestSingleInstanceLock(); if (!gotTheLock) { app.quit(); } else { app.on("second-instance", (event, commandLine, workingDirectory) => { // 当运行第二个实例时,将会聚焦到mainWindow这个窗口 if (win) { if (win.isMinimized()) win.restore(); win.focus(); win.show(); } }); } // 阻止默认关闭 win.on("close", (e) => { e.preventDefault(); win.webContents.send("showCloseDialog"); }); }); app.on("window-all-closed", () => { if (process.platform !== "darwin") app.quit(); });