lilei 3 年 前
コミット
6bad9b24e8
8 ファイル変更308 行追加101 行削除
  1. 4 0
      .env
  2. 4 0
      .env.pra
  3. 4 0
      .env.uat
  4. 192 82
      package-lock.json
  5. 8 3
      package.json
  6. 4 13
      src/background.js
  7. 81 0
      src/update.js
  8. 11 3
      vue.config.js

+ 4 - 0
.env

@@ -0,0 +1,4 @@
+NODE_ENV=production
+VUE_APP_API_BASE_URL=https://iscm.360arrow.com/
+VUE_APP_VUE_APP_ID=com.iscm.360arrow.electron
+VUE_APP_PRO_NAME=iSCM智慧供应链系统

+ 4 - 0
.env.pra

@@ -0,0 +1,4 @@
+NODE_ENV=production
+VUE_APP_API_BASE_URL=https://t.qpls.360arrow.com/
+VUE_APP_VUE_APP_ID=com.iscm.360arrow.electron.pra
+VUE_APP_PRO_NAME=iSCM-练习环境

+ 4 - 0
.env.uat

@@ -0,0 +1,4 @@
+NODE_ENV=production
+VUE_APP_API_BASE_URL=http://p.iscm.360arrow.com/
+VUE_APP_VUE_APP_ID=com.iscm.360arrow.electron.uat
+VUE_APP_PRO_NAME=iSCM-预发布环境

+ 192 - 82
package-lock.json

@@ -1,5 +1,5 @@
 {
-  "name": "electron-jg-ocs",
+  "name": "electron-jg-dev",
   "version": "0.1.0",
   "lockfileVersion": 1,
   "requires": true,
@@ -1625,6 +1625,12 @@
       "integrity": "sha1-zWZ7z90CUhOq+3ylkVqTJZCs3Nw=",
       "dev": true
     },
+    "@types/semver": {
+      "version": "7.3.9",
+      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz",
+      "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==",
+      "dev": true
+    },
     "@types/serve-static": {
       "version": "1.13.10",
       "resolved": "https://registry.nlark.com/@types/serve-static/download/@types/serve-static-1.13.10.tgz",
@@ -2034,6 +2040,63 @@
           "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
         },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
+          "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
         "ssri": {
           "version": "8.0.1",
           "resolved": "https://registry.nlark.com/ssri/download/ssri-8.0.1.tgz",
@@ -2042,6 +2105,28 @@
           "requires": {
             "minipass": "^3.1.1"
           }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "vue-loader-v16": {
+          "version": "npm:vue-loader@16.8.3",
+          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
+          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chalk": "^4.1.0",
+            "hash-sum": "^2.0.0",
+            "loader-utils": "^2.0.0"
+          }
         }
       }
     },
@@ -5902,6 +5987,100 @@
       "integrity": "sha1-vXSkNnkCydQy0SnyZb9FQs3dn1Q=",
       "dev": true
     },
+    "electron-updater": {
+      "version": "4.3.9",
+      "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-4.3.9.tgz",
+      "integrity": "sha512-LCNfedSwZfS4Hza+pDyPR05LqHtGorCStaBgVpRnfKxOlZcvpYEX0AbMeH5XUtbtGRoH2V8osbbf2qKPNb7AsA==",
+      "dev": true,
+      "requires": {
+        "@types/semver": "^7.3.5",
+        "builder-util-runtime": "8.7.5",
+        "fs-extra": "^10.0.0",
+        "js-yaml": "^4.1.0",
+        "lazy-val": "^1.0.4",
+        "lodash.escaperegexp": "^4.1.2",
+        "lodash.isequal": "^4.5.0",
+        "semver": "^7.3.5"
+      },
+      "dependencies": {
+        "argparse": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+          "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+          "dev": true
+        },
+        "builder-util-runtime": {
+          "version": "8.7.5",
+          "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.5.tgz",
+          "integrity": "sha512-fgUFHKtMNjdvH6PDRFntdIGUPgwZ69sXsAqEulCtoiqgWes5agrMq/Ud274zjJRTbckYh2PHh8/1CpFc6dpsbQ==",
+          "dev": true,
+          "requires": {
+            "debug": "^4.3.2",
+            "sax": "^1.2.4"
+          }
+        },
+        "fs-extra": {
+          "version": "10.0.0",
+          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
+          "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.2.0",
+            "jsonfile": "^6.0.1",
+            "universalify": "^2.0.0"
+          }
+        },
+        "js-yaml": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+          "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+          "dev": true,
+          "requires": {
+            "argparse": "^2.0.1"
+          }
+        },
+        "jsonfile": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+          "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.6",
+            "universalify": "^2.0.0"
+          }
+        },
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "semver": {
+          "version": "7.3.5",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+          "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "universalify": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+          "dev": true
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
     "elliptic": {
       "version": "6.5.4",
       "resolved": "https://registry.nlark.com/elliptic/download/elliptic-6.5.4.tgz",
@@ -8858,6 +9037,18 @@
       "integrity": "sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY=",
       "dev": true
     },
+    "lodash.escaperegexp": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz",
+      "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=",
+      "dev": true
+    },
+    "lodash.isequal": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+      "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
+      "dev": true
+    },
     "lodash.kebabcase": {
       "version": "4.1.1",
       "resolved": "https://registry.npm.taobao.org/lodash.kebabcase/download/lodash.kebabcase-4.1.1.tgz",
@@ -13919,87 +14110,6 @@
         }
       }
     },
-    "vue-loader-v16": {
-      "version": "npm:vue-loader@16.4.1",
-      "resolved": "https://registry.nlark.com/vue-loader/download/vue-loader-16.4.1.tgz",
-      "integrity": "sha1-4Jz6pnsjpQAh7NtcJyID0sh/Fho=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "chalk": "^4.1.0",
-        "hash-sum": "^2.0.0",
-        "loader-utils": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
-          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646614989&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz",
-          "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
-          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
-          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
-          "dev": true,
-          "optional": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
-          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-2.0.0.tgz",
-          "integrity": "sha1-5MrOW4FtQloWa18JfhDNErNgZLA=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703455199&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
-          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
     "vue-style-loader": {
       "version": "4.1.3",
       "resolved": "https://registry.nlark.com/vue-style-loader/download/vue-style-loader-4.1.3.tgz",

+ 8 - 3
package.json

@@ -1,13 +1,17 @@
 {
-  "name": "electron-jg-dev",
-  "version": "0.1.0",
+  "name": "electron-jg",
+  "version": "0.1.1",
   "private": true,
   "scripts": {
     "serve": "vue-cli-service serve",
     "build": "vue-cli-service build",
     "lint": "vue-cli-service lint",
     "electron:build": "vue-cli-service electron:build",
-	"electron:build32": "vue-cli-service electron:build --ia32",
+    "electron:build32": "vue-cli-service electron:build --ia32",
+	"electron:build:uat": "vue-cli-service electron:build --mode uat",
+	"electron:build32:uat": "vue-cli-service electron:build --ia32 --mode uat",
+	"electron:build:pra": "vue-cli-service electron:build --mode pra",
+	"electron:build32:pra": "vue-cli-service electron:build --ia32 --mode pra",
     "electron:serve": "vue-cli-service electron:serve",
     "postinstall": "electron-builder install-app-deps",
     "postuninstall": "electron-builder install-app-deps"
@@ -24,6 +28,7 @@
     "babel-eslint": "^10.1.0",
     "electron": "^13.0.0",
     "electron-devtools-installer": "^3.1.0",
+    "electron-updater": "^4.3.9",
     "eslint": "^6.7.2",
     "eslint-plugin-vue": "^6.2.2",
     "vue-cli-plugin-electron-builder": "~2.1.1",

+ 4 - 13
src/background.js

@@ -3,6 +3,7 @@
 import { app, protocol, BrowserWindow, Menu, globalShortcut } 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'
 let mainWindow
 // Scheme must be registered before the app is ready
@@ -38,19 +39,7 @@ async function createWindow() {
     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.loadURL('http://p.ocs.360arrow.com/')
-	win.loadURL('http://p.iscm.360arrow.com/')
-	// 练习地址
-	// win.loadURL('https://t.ocs.360arrow.com/')
-	// win.loadURL('https://t.qpls.360arrow.com/')
-	// 生产地址
-	// win.loadURL('https://ocs.360arrow.com/')
-	// win.loadURL('https://iscm.360arrow.com/')
-	// 开发地址
-	// win.loadURL('http://localhost:8000/')
+	win.loadURL(process.env.VUE_APP_API_BASE_URL)
 	win.on('ready-to-show', function () {
 		win.show() // 初始化后再显示
 	  })
@@ -61,6 +50,8 @@ async function createWindow() {
   })
   // 设置菜单栏
   Menu.setApplicationMenu(null)
+  // 更新,第二个参数就是public里的url
+  updateHandle(win, process.env.VUE_APP_API_BASE_URL+'electron')
 }
 
 const gotTheLock = app.requestSingleInstanceLock()

+ 81 - 0
src/update.js

@@ -0,0 +1,81 @@
+import {
+    autoUpdater
+} from 'electron-updater'
+ 
+import {
+    ipcMain, dialog 
+} from 'electron'
+import http from 'http'
+let mainWindow = null;
+export function updateHandle(window, feedUrl) {
+    mainWindow = window;
+    let message = {
+        error: '检查更新出错',
+        checking: '正在检查更新……',
+        updateAva: '检测到新版本,正在下载……',
+        updateNotAva: '现在使用的就是最新版本,不用更新',
+    };
+    //设置更新包的地址
+    autoUpdater.setFeedURL(feedUrl);
+    //监听升级失败事件
+    autoUpdater.on('error', function (error) {
+        sendUpdateMessage({
+            cmd: 'error',
+            message: error
+        })
+    });
+    //监听开始检测更新事件
+    autoUpdater.on('checking-for-update', function (message) {
+        sendUpdateMessage({
+            cmd: 'checking-for-update',
+            message: message
+        })
+    });
+    //监听发现可用更新事件
+    autoUpdater.on('update-available', function (message) {
+        sendUpdateMessage({
+            cmd: 'update-available',
+            message: message
+        })
+    });
+    //监听没有可用更新事件
+    autoUpdater.on('update-not-available', function (message) {
+        sendUpdateMessage({
+            cmd: 'update-not-available',
+            message: message
+        })
+    });
+ 
+    // 更新下载进度事件
+    autoUpdater.on('download-progress', function (progressObj) {
+        sendUpdateMessage({
+            cmd: 'download-progress',
+            message: progressObj
+        })
+    });
+    //监听下载完成事件
+    autoUpdater.on('update-downloaded', function (event, releaseNotes, releaseName, releaseDate, updateUrl) {
+        sendUpdateMessage({
+            cmd: 'update-downloaded',
+            message: {
+                releaseNotes,
+                releaseName,
+                releaseDate,
+                updateUrl
+            }
+        })
+        //退出并安装更新包
+        autoUpdater.quitAndInstall();
+    });
+ 
+    //接收渲染进程消息,开始检查更新
+    ipcMain.on("checkForUpdate", (e, arg) => {
+        //执行自动更新检查
+        // sendUpdateMessage({cmd:'checkForUpdate',message:arg})
+        autoUpdater.checkForUpdates();
+    })
+}
+//给渲染进程发送消息
+function sendUpdateMessage(text) {
+    mainWindow.webContents.send('message', text)
+}

+ 11 - 3
vue.config.js

@@ -21,18 +21,26 @@ module.exports = {
   pluginOptions: {
       electronBuilder: {
           builderOptions: {
+			  appId: process.env.VUE_APP_ID,
               win: {
                   icon: './public/iscm.ico'
               },
               mac: {
                   icon: './public/iscm.png'
               },
-			  // productName: '箭冠运营中心系统',
-			  productName: 'iSCM-预发布环境',
-			  // productName: '箭冠系统本地开发版',
+			  productName: 'iSCM',
+			  publish: {
+				provider: 'generic',
+				url: process.env.VUE_APP_API_BASE_URL+'electron'
+			  },
+			  asar: false,
 			  nsis: {
 				  "oneClick": false, // 一键安装
 				  "allowToChangeInstallationDirectory": true, // 允许修改安装目录
+				  'allowElevation': true,
+				  'createDesktopShortcut': true,
+				  'createStartMenuShortcut': true,
+				  'shortcutName': process.env.VUE_APP_PRO_NAME
 			  },
           }
       }