123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- 'use strict'
- import { app, protocol, BrowserWindow, Menu, globalShortcut, screen } from 'electron'
- import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'
- import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'
- import { updateHandle } from './update'
- const isDevelopment = process.env.NODE_ENV !== 'production'
- if (!isDevelopment) {
- global.__static = require("path")
- .join(__dirname, "/static")
- .replace(/\\/g, "\\\\");
- }
- let mainWindow, loadingWindow;
- const loadingURL =
- isDevelopment //加载loading.html页面地址
- ? require("path").join(__static, "loading.html")
- : `file://${__static}/loading.html`;
- const showLoading = (cb) => {
- loadingWindow = new BrowserWindow({
- show: false,
- frame: false, // 无边框(窗口、工具栏等),只包含网页内容
- width: 400,
- height: 300,
- resizable: false,
- transparent: true, // 窗口是否支持透明,如果想做高级效果最好为true
- });
-
- loadingWindow.once("show", cb);
- loadingWindow.loadURL(loadingURL);
- loadingWindow.show();
- };
- // Scheme must be registered before the app is ready
- protocol.registerSchemesAsPrivileged([
- { scheme: 'app', privileges: { secure: true, standard: true } }
- ])
- async function createWindow() {
- const {width,height} = screen.getPrimaryDisplay().workAreaSize;//获取到屏幕的宽度和高度
- console.log(width,height);
- // Create the browser window.
- const win = new BrowserWindow({
- width: width,
- height: height,
- darkTheme: true,
- minWidth: 710,
- minHeight: 500,
- show: true,
- backgroundColor: '#211f1d',
- fullscreen: false,
- webPreferences: {
- webSecurity: false,
- enableRemoteModule: true,
- // Use pluginOptions.nodeIntegration, leave this alone
- // See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
- nodeIntegration: true,
- contextIsolation: false,
- icon: `${__static}/app.ico`
- }
- })
- mainWindow = win
- if (process.env.WEBPACK_DEV_SERVER_URL) {
- // Load the url of the dev server if in development mode
- // await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
- await win.loadURL('http://localhost:8000/')
- if (!process.env.IS_TEST) win.webContents.openDevTools()
- } else {
- createProtocol('app')
- win.loadURL(process.env.VUE_APP_API_BASE_URL)
- win.on('ready-to-show', (event) => {
- setTimeout(() => {
- // loadingWindow.hide();
- // loadingWindow.close();
- win.show()
- }, 2000);
- })
- }
- // 在开发环境和生产环境均可通过快捷键打开devTools
- globalShortcut.register('CommandOrControl+Shift+i', function () {
- win.webContents.openDevTools()
- })
- // 设置菜单栏
- Menu.setApplicationMenu(null)
- // 更新,第二个参数就是public里的url
- updateHandle(win, process.env.VUE_APP_API_BASE_URL+'electron')
- }
- const gotTheLock = app.requestSingleInstanceLock()
- if (!gotTheLock) {
- app.quit()
- } else {
- /**
- * 兼容https非可信域
- */
- app.on('certificate-error', (event, webContents, url, error, certificate, callback) => {
- //允许私有证书
- event.preventDefault()
- callback(true)
- });
- app.on('second-instance', (event) => {
- if (mainWindow) {
- if (mainWindow.isMinimized()) mainWindow.restore()
- mainWindow.focus()
- }
- })
- // 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 (BrowserWindow.getAllWindows().length === 0) createWindow()
- })
- // 禁用缓存
- app.commandLine.appendSwitch("--disable-http-cache")
- // 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
- try {
- await installExtension(VUEJS_DEVTOOLS)
- } catch (e) {
- console.error('Vue Devtools failed to install:', e.toString())
- }
- }
-
- // showLoading(createWindow);
- createWindow()
- })
- }
- // 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()
- })
- }
- }
|