"use strict"
|
|
import { app, protocol, BrowserWindow, Menu, dialog } from "electron"
|
import { createProtocol } from "vue-cli-plugin-electron-builder/lib"
|
import { execFile } from "child_process"
|
|
// require("./preload")
|
// import path from "path"
|
|
// import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'
|
const isDevelopment = process.env.NODE_ENV !== "production"
|
|
// Keep a global reference of the window object, if you don't, the window will
|
// be closed automatically when the JavaScript object is garbage collected.
|
let win
|
|
// Scheme must be registered before the app is ready
|
protocol.registerSchemesAsPrivileged([{ scheme: "app", privileges: { secure: true, standard: true } }])
|
|
function runGoService() {
|
let process = execFile("E:/Basic/plc-reader-service/plc-reader-service.exe", (err, stdout, stderr) => {
|
if (err) {
|
console.log(err)
|
}
|
})
|
process.stdout.on("data", (data) => {
|
console.log("go:", data)
|
})
|
process.stdout.on("close", (code) => {
|
console.log("go exit", code)
|
})
|
}
|
|
function createWindow() {
|
Menu.setApplicationMenu(null)
|
// Create the browser window.
|
win = new BrowserWindow({
|
width: 780,
|
height: 820,
|
resizable: true,
|
webPreferences: {
|
// Use pluginOptions.nodeIntegration, leave this alone
|
// See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
|
// preload: path.join("src/", 'preload.js'),
|
// nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION
|
nodeIntegration: true
|
}
|
})
|
|
let appPath = app.getPath("exe")
|
console.log("appPath", appPath)
|
if (process.env.WEBPACK_DEV_SERVER_URL) {
|
// Load the url of the dev server if in development mode
|
win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
|
if (!process.env.IS_TEST) win.webContents.openDevTools()
|
} else {
|
createProtocol("app")
|
// Load the index.html when not in development
|
win.loadURL("app://./index.html")
|
}
|
win.on("close", (e) => {
|
console.log("win close")
|
e.preventDefault() //阻止默认行为,一定要有
|
|
dialog
|
.showMessageBox({
|
type: "info",
|
title: "退出",
|
defaultId: 0,
|
message: "确定要关闭吗?请确认所有电子状态已恢复为client模式",
|
buttons: ["返回", "退出"]
|
})
|
.then((ret) => {
|
console.log("rsp", ret)
|
if (ret.response === 0) {
|
// win.minimize(); //调用 最小化实例方法
|
} else {
|
win = null
|
//app.quit(); //不要用quit();试了会弹两次
|
app.exit() //exit()直接关闭客户端,不会执行quit();
|
}
|
})
|
})
|
|
win.on("closed", () => {
|
win = null
|
})
|
}
|
|
// Quit when all windows are closed.
|
app.on("window-all-closed", () => {
|
// On macOS it is common for applications and their menu bar
|
// to stay active until the user quits explicitly with Cmd + Q
|
if (process.platform !== "darwin") {
|
app.quit()
|
}
|
})
|
|
app.on("activate", () => {
|
// On macOS it's common to re-create a window in the app when the
|
// dock icon is clicked and there are no other windows open.
|
if (win === null) {
|
createWindow()
|
}
|
})
|
|
// 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.
|
app.on("ready", async () => {
|
if (isDevelopment && !process.env.IS_TEST) {
|
// Install Vue Devtools
|
// Devtools extensions are broken in Electron 6/7/<8.25 on Windows
|
// See https://github.com/nklayman/vue-cli-plugin-electron-builder/issues/378 for more info
|
// Electron will not launch with Devtools extensions installed on Windows 10 with dark mode
|
// If you are not using Windows 10 dark mode, you may uncomment the following lines (and the import at the top of the file)
|
// In addition, if you upgrade to Electron ^8.2.5 or ^9.0.0 then devtools should work fine
|
// try {
|
// await installExtension(VUEJS_DEVTOOLS)
|
// } catch (e) {
|
// console.error('Vue Devtools failed to install:', e.toString())
|
// }
|
}
|
createWindow()
|
runGoService()
|
})
|
|
// Exit cleanly on request from parent process in development mode.
|
if (isDevelopment) {
|
if (process.platform === "win32") {
|
process.on("message", (data) => {
|
if (data === "graceful-exit") {
|
app.quit()
|
}
|
})
|
} else {
|
process.on("SIGTERM", () => {
|
app.quit()
|
})
|
}
|
}
|
|
app.allowRendererProcessReuse = true
|