Quellcode durchsuchen

feat: 检测版本更新

chenlei vor 2 Jahren
Ursprung
Commit
528ef42ad4
8 geänderte Dateien mit 298 neuen und 147 gelöschten Zeilen
  1. 1 0
      components.d.ts
  2. 1 0
      package.json
  3. 133 138
      pnpm-lock.yaml
  4. 60 0
      src/App.vue
  5. 17 2
      src/background.ts
  6. 3 0
      src/main.ts
  7. 76 0
      src/utils/update.js
  8. 7 7
      vue.config.js

+ 1 - 0
components.d.ts

@@ -17,6 +17,7 @@ declare module 'vue' {
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
     ElImage: typeof import('element-plus/es')['ElImage']
     ElInput: typeof import('element-plus/es')['ElInput']
+    ElProgress: typeof import('element-plus/es')['ElProgress']
     RouterLink: typeof import('vue-router')['RouterLink']
     RouterView: typeof import('vue-router')['RouterView']
     ScreenSavers: typeof import('./src/components/screen-savers/index.vue')['default']

+ 1 - 0
package.json

@@ -39,6 +39,7 @@
     "cross-env": "^7.0.3",
     "electron": "^13.0.0",
     "electron-devtools-installer": "^3.1.0",
+    "electron-updater": "^6.1.1",
     "eslint": "^7.32.0",
     "eslint-config-prettier": "^8.3.0",
     "eslint-plugin-prettier": "^4.0.0",

+ 133 - 138
pnpm-lock.yaml

@@ -79,6 +79,9 @@ devDependencies:
   electron-devtools-installer:
     specifier: ^3.1.0
     version: 3.1.0
+  electron-updater:
+    specifier: ^6.1.1
+    version: registry.npmmirror.com/electron-updater@6.1.1
   eslint:
     specifier: ^7.32.0
     version: 7.32.0
@@ -190,7 +193,7 @@ packages:
       '@babel/types': 7.22.5
       '@nicolo-ribaudo/semver-v6': 6.3.3
       convert-source-map: 1.9.0
-      debug: 4.3.4
+      debug: registry.npmmirror.com/debug@4.3.4
       gensync: 1.0.0-beta.2
       json5: 2.2.3
     transitivePeerDependencies:
@@ -232,7 +235,7 @@ packages:
       '@babel/helper-validator-option': 7.22.5
       '@nicolo-ribaudo/semver-v6': 6.3.3
       browserslist: 4.21.9
-      lru-cache: 5.1.1
+      lru-cache: registry.npmmirror.com/lru-cache@5.1.1
     dev: true
 
   /@babel/helper-create-class-features-plugin@7.22.6(@babel/core@7.22.8):
@@ -1446,12 +1449,12 @@ packages:
     resolution: {integrity: sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==}
     engines: {node: '>=8.6'}
     dependencies:
-      debug: 4.3.4
+      debug: registry.npmmirror.com/debug@4.3.4
       env-paths: 2.2.1
-      fs-extra: 8.1.0
+      fs-extra: registry.npmmirror.com/fs-extra@8.1.0
       got: registry.npmmirror.com/got@9.6.0
       progress: 2.0.3
-      semver: 6.3.1
+      semver: registry.npmmirror.com/semver@6.3.1
       sumchecker: 3.0.1
     optionalDependencies:
       global-agent: registry.npmmirror.com/global-agent@3.0.0
@@ -1478,12 +1481,12 @@ packages:
     engines: {node: ^10.12.0 || >=12.0.0}
     dependencies:
       ajv: 6.12.6
-      debug: 4.3.4
+      debug: registry.npmmirror.com/debug@4.3.4
       espree: 7.3.1
       globals: 13.20.0
       ignore: 4.0.6
       import-fresh: 3.3.0
-      js-yaml: 3.14.1
+      js-yaml: registry.npmmirror.com/js-yaml@3.14.1
       minimatch: 3.1.2
       strip-json-comments: 3.1.1
     transitivePeerDependencies:
@@ -1541,7 +1544,7 @@ packages:
     engines: {node: '>=10.10.0'}
     dependencies:
       '@humanwhocodes/object-schema': 1.2.1
-      debug: 4.3.4
+      debug: registry.npmmirror.com/debug@4.3.4
       minimatch: 3.1.2
     transitivePeerDependencies:
       - supports-color
@@ -1958,7 +1961,7 @@ packages:
       debug: 4.3.4
       globby: 11.1.0
       is-glob: 4.0.3
-      semver: 7.5.4
+      semver: registry.npmmirror.com/semver@7.5.4
       tsutils: 3.21.0(typescript@4.5.5)
       typescript: 4.5.5
     transitivePeerDependencies:
@@ -2041,7 +2044,7 @@ packages:
       babel-plugin-dynamic-import-node: 2.3.3
       core-js: 3.8.3
       core-js-compat: 3.31.1
-      semver: 7.5.4
+      semver: registry.npmmirror.com/semver@7.5.4
       vue: 3.3.4
     transitivePeerDependencies:
       - supports-color
@@ -2385,7 +2388,7 @@ packages:
       ora: 3.4.0
       read-pkg: 5.2.0
       request: 2.88.2
-      semver: 6.3.1
+      semver: registry.npmmirror.com/semver@6.3.1
       strip-ansi: 6.0.1
     dev: true
 
@@ -2402,7 +2405,7 @@ packages:
       open: 8.4.2
       ora: 5.4.1
       read-pkg: 5.2.0
-      semver: 7.5.4
+      semver: registry.npmmirror.com/semver@7.5.4
       strip-ansi: 6.0.1
     transitivePeerDependencies:
       - encoding
@@ -2447,7 +2450,7 @@ packages:
     dependencies:
       consolidate: 0.15.1(lodash@4.17.21)
       hash-sum: 1.0.2
-      lru-cache: 4.1.5
+      lru-cache: registry.npmmirror.com/lru-cache@4.1.5
       merge-source-map: 1.1.0
       postcss: 7.0.39
       postcss-selector-parser: 6.0.13
@@ -2999,7 +3002,7 @@ packages:
       async-exit-hook: 2.0.1
       bluebird-lst: 1.0.9
       builder-util: 22.14.13
-      builder-util-runtime: 8.9.2
+      builder-util-runtime: registry.npmmirror.com/builder-util-runtime@8.9.2
       chromium-pickle-js: 0.2.0
       debug: registry.npmmirror.com/debug@4.3.4
       ejs: 3.1.9
@@ -3011,7 +3014,7 @@ packages:
       is-ci: registry.npmmirror.com/is-ci@3.0.1
       isbinaryfile: 4.0.10
       js-yaml: registry.npmmirror.com/js-yaml@4.1.0
-      lazy-val: 1.0.5
+      lazy-val: registry.npmmirror.com/lazy-val@1.0.5
       minimatch: registry.npmmirror.com/minimatch@3.1.2
       read-config-file: 6.2.0
       sanitize-filename: 1.6.3
@@ -3029,12 +3032,6 @@ packages:
     resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
     dev: true
 
-  /argparse@1.0.10:
-    resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
-    dependencies:
-      sprintf-js: 1.0.3
-    dev: true
-
   /array-flatten@1.1.1:
     resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
     dev: true
@@ -3308,16 +3305,6 @@ packages:
     resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
     dev: true
 
-  /builder-util-runtime@8.9.2:
-    resolution: {integrity: sha512-rhuKm5vh7E0aAmT6i8aoSfEjxzdYEFX7zDApK+eNgOhjofnWb74d9SRJv0H/8nsgOkos0TZ4zxW0P8J4N7xQ2A==}
-    engines: {node: '>=12.0.0'}
-    dependencies:
-      debug: registry.npmmirror.com/debug@4.3.4
-      sax: 1.2.4
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /builder-util@22.14.13:
     resolution: {integrity: sha512-oePC/qrrUuerhmH5iaCJzPRAKlSBylrhzuAJmRQClTyWnZUv6jbaHh+VoHMbEiE661wrj2S2aV7/bQh12cj1OA==}
     dependencies:
@@ -3326,7 +3313,7 @@ packages:
       '@types/fs-extra': 9.0.13
       app-builder-bin: 3.7.1
       bluebird-lst: 1.0.9
-      builder-util-runtime: 8.9.2
+      builder-util-runtime: registry.npmmirror.com/builder-util-runtime@8.9.2
       chalk: registry.npmmirror.com/chalk@4.1.2
       cross-spawn: registry.npmmirror.com/cross-spawn@7.0.3
       debug: registry.npmmirror.com/debug@4.3.4
@@ -3975,7 +3962,7 @@ packages:
       postcss-modules-scope: 3.0.0(postcss@8.4.25)
       postcss-modules-values: 4.0.0(postcss@8.4.25)
       postcss-value-parser: 4.2.0
-      semver: 7.5.4
+      semver: registry.npmmirror.com/semver@7.5.4
       webpack: 5.88.1
     dev: true
 
@@ -4110,17 +4097,6 @@ packages:
       assert-plus: registry.npmmirror.com/assert-plus@1.0.0
     dev: true
 
-  /debug@2.6.9:
-    resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms@2.0.0
-    dev: true
-
   /debug@4.3.4:
     resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
     engines: {node: '>=6.0'}
@@ -4205,7 +4181,7 @@ packages:
     dependencies:
       app-builder-lib: 22.14.13
       builder-util: 22.14.13
-      builder-util-runtime: 8.9.2
+      builder-util-runtime: registry.npmmirror.com/builder-util-runtime@8.9.2
       fs-extra: registry.npmmirror.com/fs-extra@10.1.0
       iconv-lite: 0.6.3
       js-yaml: registry.npmmirror.com/js-yaml@4.1.0
@@ -4318,12 +4294,12 @@ packages:
       '@types/yargs': 17.0.24
       app-builder-lib: 22.14.13
       builder-util: 22.14.13
-      builder-util-runtime: 8.9.2
+      builder-util-runtime: registry.npmmirror.com/builder-util-runtime@8.9.2
       chalk: 4.1.2
       dmg-builder: 22.14.13
-      fs-extra: 10.1.0
+      fs-extra: registry.npmmirror.com/fs-extra@10.1.0
       is-ci: 3.0.1
-      lazy-val: 1.0.5
+      lazy-val: registry.npmmirror.com/lazy-val@1.0.5
       read-config-file: 6.2.0
       update-notifier: 5.1.0
       yargs: 17.7.2
@@ -4360,10 +4336,10 @@ packages:
     dependencies:
       '@types/fs-extra': 9.0.13
       builder-util: 22.14.13
-      builder-util-runtime: 8.9.2
+      builder-util-runtime: registry.npmmirror.com/builder-util-runtime@8.9.2
       chalk: registry.npmmirror.com/chalk@4.1.2
       fs-extra: registry.npmmirror.com/fs-extra@10.1.0
-      lazy-val: 1.0.5
+      lazy-val: registry.npmmirror.com/lazy-val@1.0.5
       mime: 2.6.0
     transitivePeerDependencies:
       - supports-color
@@ -4793,7 +4769,7 @@ packages:
     hasBin: true
     dependencies:
       concat-stream: 1.6.2
-      debug: 2.6.9
+      debug: registry.npmmirror.com/debug@2.6.9
       mkdirp: 0.5.6
       yauzl: 2.10.0
     transitivePeerDependencies:
@@ -4945,32 +4921,14 @@ packages:
       readable-stream: registry.npmmirror.com/readable-stream@2.3.8
     dev: true
 
-  /fs-extra@10.1.0:
-    resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
-    engines: {node: '>=12'}
-    dependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
-      jsonfile: registry.npmmirror.com/jsonfile@6.1.0
-      universalify: registry.npmmirror.com/universalify@2.0.0
-    dev: true
-
-  /fs-extra@8.1.0:
-    resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
-    engines: {node: '>=6 <7 || >=8'}
-    dependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
-      jsonfile: registry.npmmirror.com/jsonfile@4.0.0
-      universalify: registry.npmmirror.com/universalify@0.1.2
-    dev: true
-
   /fs-extra@9.1.0:
     resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
     engines: {node: '>=10'}
     dependencies:
       at-least-node: 1.0.0
-      graceful-fs: 4.2.11
-      jsonfile: 6.1.0
-      universalify: 2.0.0
+      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
+      jsonfile: registry.npmmirror.com/jsonfile@6.1.0
+      universalify: registry.npmmirror.com/universalify@2.0.0
     dev: true
 
   /fs-minipass@2.1.0:
@@ -5081,10 +5039,6 @@ packages:
       slash: 3.0.0
     dev: true
 
-  /graceful-fs@4.2.11:
-    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-    dev: true
-
   /graceful-readlink@1.0.1:
     resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==}
     dev: true
@@ -5578,7 +5532,7 @@ packages:
     resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
     hasBin: true
     dependencies:
-      argparse: 1.0.10
+      argparse: registry.npmmirror.com/argparse@1.0.10
       esprima: 4.0.1
     dev: true
 
@@ -5622,14 +5576,6 @@ packages:
     hasBin: true
     dev: true
 
-  /jsonfile@6.1.0:
-    resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
-    dependencies:
-      universalify: registry.npmmirror.com/universalify@2.0.0
-    optionalDependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
-    dev: true
-
   /jsprim@1.4.2:
     resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==}
     engines: {node: '>=0.6.0'}
@@ -5674,10 +5620,6 @@ packages:
       shell-quote: 1.8.1
     dev: true
 
-  /lazy-val@1.0.5:
-    resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==}
-    dev: true
-
   /levn@0.4.1:
     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
     engines: {node: '>= 0.8.0'}
@@ -5785,19 +5727,6 @@ packages:
       tslib: registry.npmmirror.com/tslib@2.6.0
     dev: true
 
-  /lru-cache@4.1.5:
-    resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
-    dependencies:
-      pseudomap: registry.npmmirror.com/pseudomap@1.0.2
-      yallist: registry.npmmirror.com/yallist@2.1.2
-    dev: true
-
-  /lru-cache@5.1.1:
-    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
-    dependencies:
-      yallist: registry.npmmirror.com/yallist@3.1.1
-    dev: true
-
   /lru-cache@6.0.0:
     resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
     engines: {node: '>=10'}
@@ -6504,7 +6433,7 @@ packages:
       cosmiconfig: 7.1.0
       klona: 2.0.6
       postcss: 8.4.25
-      semver: 7.5.4
+      semver: registry.npmmirror.com/semver@7.5.4
       webpack: 5.88.1
     dev: true
 
@@ -6937,7 +6866,7 @@ packages:
       dotenv-expand: 5.1.0
       js-yaml: registry.npmmirror.com/js-yaml@4.1.0
       json5: registry.npmmirror.com/json5@2.2.3
-      lazy-val: 1.0.5
+      lazy-val: registry.npmmirror.com/lazy-val@1.0.5
     dev: true
 
   /read-pkg-up@7.0.1:
@@ -7180,10 +7109,6 @@ packages:
       chokidar: 3.5.3
     dev: true
 
-  /sax@1.2.4:
-    resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
-    dev: true
-
   /schema-utils@1.0.0:
     resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==}
     engines: {node: '>= 4'}
@@ -7244,11 +7169,6 @@ packages:
       semver: registry.npmmirror.com/semver@6.3.1
     dev: true
 
-  /semver@6.3.1:
-    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
-    hasBin: true
-    dev: true
-
   /semver@7.5.4:
     resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
     engines: {node: '>=10'}
@@ -7977,11 +7897,6 @@ packages:
       crypto-random-string: 2.0.0
     dev: true
 
-  /universalify@2.0.0:
-    resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
-    engines: {node: '>= 10.0.0'}
-    dev: true
-
   /unpipe@1.0.0:
     resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
     engines: {node: '>= 0.8'}
@@ -8132,14 +8047,14 @@ packages:
     peerDependencies:
       eslint: '>=6.0.0'
     dependencies:
-      debug: 4.3.4
+      debug: registry.npmmirror.com/debug@4.3.4
       eslint: 7.32.0
       eslint-scope: 7.2.0
       eslint-visitor-keys: 3.4.1
       espree: 9.6.0
       esquery: 1.5.0
       lodash: registry.npmmirror.com/lodash@4.17.21
-      semver: 7.5.4
+      semver: registry.npmmirror.com/semver@7.5.4
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -8305,7 +8220,7 @@ packages:
       connect-history-api-fallback: 2.0.0
       default-gateway: 6.0.3
       express: 4.18.2
-      graceful-fs: 4.2.11
+      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
       html-entities: 2.4.0
       http-proxy-middleware: 2.0.6(@types/express@4.17.17)(debug@4.3.4)
       ipaddr.js: 2.1.0
@@ -8422,7 +8337,7 @@ packages:
       eslint-scope: 5.1.1
       events: 3.3.0
       glob-to-regexp: 0.4.1
-      graceful-fs: 4.2.11
+      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
       json-parse-even-better-errors: 2.3.1
       loader-runner: 4.3.0
       mime-types: registry.npmmirror.com/mime-types@2.1.35
@@ -9958,7 +9873,7 @@ packages:
     name: argparse
     version: 1.0.10
     dependencies:
-      sprintf-js: registry.npmmirror.com/sprintf-js@1.0.3
+      sprintf-js: 1.0.3
     dev: true
 
   registry.npmmirror.com/argparse@2.0.1:
@@ -10400,6 +10315,30 @@ packages:
       ieee754: registry.npmmirror.com/ieee754@1.2.1
     dev: true
 
+  registry.npmmirror.com/builder-util-runtime@8.9.2:
+    resolution: {integrity: sha512-rhuKm5vh7E0aAmT6i8aoSfEjxzdYEFX7zDApK+eNgOhjofnWb74d9SRJv0H/8nsgOkos0TZ4zxW0P8J4N7xQ2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/builder-util-runtime/-/builder-util-runtime-8.9.2.tgz}
+    name: builder-util-runtime
+    version: 8.9.2
+    engines: {node: '>=12.0.0'}
+    dependencies:
+      debug: registry.npmmirror.com/debug@4.3.4
+      sax: registry.npmmirror.com/sax@1.2.4
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  registry.npmmirror.com/builder-util-runtime@9.2.1:
+    resolution: {integrity: sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz}
+    name: builder-util-runtime
+    version: 9.2.1
+    engines: {node: '>=12.0.0'}
+    dependencies:
+      debug: registry.npmmirror.com/debug@4.3.4
+      sax: registry.npmmirror.com/sax@1.2.4
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   registry.npmmirror.com/builtin-modules@1.1.1:
     resolution: {integrity: sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/builtin-modules/-/builtin-modules-1.1.1.tgz}
     name: builtin-modules
@@ -11543,6 +11482,23 @@ packages:
     version: 1.4.457
     dev: true
 
+  registry.npmmirror.com/electron-updater@6.1.1:
+    resolution: {integrity: sha512-IBT3zJ4yO5UZMF2gOTC9HrlmG4OYSRtOiHKzNAShJvfuicdx6UaXoa6AvhcTxdx6zf/rJyFMRBISS9jhVwTfow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/electron-updater/-/electron-updater-6.1.1.tgz}
+    name: electron-updater
+    version: 6.1.1
+    dependencies:
+      builder-util-runtime: registry.npmmirror.com/builder-util-runtime@9.2.1
+      fs-extra: registry.npmmirror.com/fs-extra@10.1.0
+      js-yaml: registry.npmmirror.com/js-yaml@4.1.0
+      lazy-val: registry.npmmirror.com/lazy-val@1.0.5
+      lodash.escaperegexp: registry.npmmirror.com/lodash.escaperegexp@4.1.2
+      lodash.isequal: registry.npmmirror.com/lodash.isequal@4.5.0
+      semver: registry.npmmirror.com/semver@7.5.4
+      typed-emitter: registry.npmmirror.com/typed-emitter@2.1.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   registry.npmmirror.com/element-plus@2.3.8(vue@3.3.4):
     resolution: {integrity: sha512-yHQR0/tG2LvPkpGUt7Te/hPmP2XW/BytBNUbx+EFO54VnGCOE3upmQcVffNp1PLgwg9sthYDXontUWpnpmLPJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/element-plus/-/element-plus-2.3.8.tgz}
     id: registry.npmmirror.com/element-plus/2.3.8
@@ -11717,14 +11673,6 @@ packages:
       estraverse: registry.npmmirror.com/estraverse@4.3.0
     dev: true
 
-  registry.npmmirror.com/esprima@4.0.1:
-    resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz}
-    name: esprima
-    version: 4.0.1
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
-
   registry.npmmirror.com/esrecurse@4.3.0:
     resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz}
     name: esrecurse
@@ -12173,6 +12121,17 @@ packages:
       universalify: registry.npmmirror.com/universalify@2.0.0
     dev: true
 
+  registry.npmmirror.com/fs-extra@8.1.0:
+    resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz}
+    name: fs-extra
+    version: 8.1.0
+    engines: {node: '>=6 <7 || >=8'}
+    dependencies:
+      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
+      jsonfile: registry.npmmirror.com/jsonfile@4.0.0
+      universalify: registry.npmmirror.com/universalify@0.1.2
+    dev: true
+
   registry.npmmirror.com/fs-extra@9.1.0:
     resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz}
     name: fs-extra
@@ -13118,7 +13077,7 @@ packages:
     hasBin: true
     dependencies:
       argparse: registry.npmmirror.com/argparse@1.0.10
-      esprima: registry.npmmirror.com/esprima@4.0.1
+      esprima: 4.0.1
     dev: true
 
   registry.npmmirror.com/js-yaml@4.1.0:
@@ -13309,6 +13268,12 @@ packages:
       shell-quote: registry.npmmirror.com/shell-quote@1.8.1
     dev: true
 
+  registry.npmmirror.com/lazy-val@1.0.5:
+    resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lazy-val/-/lazy-val-1.0.5.tgz}
+    name: lazy-val
+    version: 1.0.5
+    dev: true
+
   registry.npmmirror.com/lines-and-columns@1.2.4:
     resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz}
     name: lines-and-columns
@@ -13410,6 +13375,18 @@ packages:
       webpack: registry.npmmirror.com/webpack@5.88.1
     dev: true
 
+  registry.npmmirror.com/lodash.escaperegexp@4.1.2:
+    resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz}
+    name: lodash.escaperegexp
+    version: 4.1.2
+    dev: true
+
+  registry.npmmirror.com/lodash.isequal@4.5.0:
+    resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz}
+    name: lodash.isequal
+    version: 4.5.0
+    dev: true
+
   registry.npmmirror.com/lodash@4.17.21:
     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz}
     name: lodash
@@ -14926,6 +14903,16 @@ packages:
       aproba: registry.npmmirror.com/aproba@1.2.0
     dev: true
 
+  registry.npmmirror.com/rxjs@7.8.1:
+    resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz}
+    name: rxjs
+    version: 7.8.1
+    requiresBuild: true
+    dependencies:
+      tslib: registry.npmmirror.com/tslib@2.6.0
+    dev: true
+    optional: true
+
   registry.npmmirror.com/safe-buffer@5.1.2:
     resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz}
     name: safe-buffer
@@ -14952,6 +14939,12 @@ packages:
     version: 2.1.2
     dev: true
 
+  registry.npmmirror.com/sax@1.2.4:
+    resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz}
+    name: sax
+    version: 1.2.4
+    dev: true
+
   registry.npmmirror.com/schema-utils@1.0.0:
     resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz}
     name: schema-utils
@@ -15292,12 +15285,6 @@ packages:
       extend-shallow: registry.npmmirror.com/extend-shallow@3.0.2
     dev: true
 
-  registry.npmmirror.com/sprintf-js@1.0.3:
-    resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz}
-    name: sprintf-js
-    version: 1.0.3
-    dev: true
-
   registry.npmmirror.com/sshpk@1.17.0:
     resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz}
     name: sshpk
@@ -15865,6 +15852,14 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  registry.npmmirror.com/typed-emitter@2.1.0:
+    resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/typed-emitter/-/typed-emitter-2.1.0.tgz}
+    name: typed-emitter
+    version: 2.1.0
+    optionalDependencies:
+      rxjs: registry.npmmirror.com/rxjs@7.8.1
+    dev: true
+
   registry.npmmirror.com/typedarray@0.0.6:
     resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz}
     name: typedarray

+ 60 - 0
src/App.vue

@@ -18,6 +18,27 @@
       :list="screenList"
       @onClick="closeScreen"
     />
+
+    <el-dialog
+      title="正在更新新版本,请稍候..."
+      v-model="versionDialog"
+      width="60%"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      :show-close="false"
+      center
+    >
+      <div style="height: 20vh; line-height: 20vh; text-align: center">
+        <el-progress
+          status="success"
+          :text-inside="true"
+          :stroke-width="20"
+          :percentage="percentage"
+          :width="200"
+          :show-text="true"
+        />
+      </div>
+    </el-dialog>
   </el-config-provider>
 </template>
 
@@ -29,9 +50,12 @@ import { getScreenConfigApi } from "./api";
 import { GetScreenConfigApiResponse } from "./api/types";
 import { useStore } from "vuex";
 import { isOnlineFn } from "./utils";
+import { ipcRenderer } from "electron";
 
 const DEFAULT_TIME = 60 * 10;
 const store = useStore();
+const percentage = ref(0);
+const versionDialog = ref(false);
 const showScreenSavers = ref(false);
 const showScreenTime = ref(DEFAULT_TIME);
 const autoPlay = ref(false);
@@ -48,6 +72,42 @@ onMounted(() => {
       showScreenSavers.value = true;
     }
   }, 1000);
+
+  ipcRenderer.on("message", (event, arg) => {
+    if (arg.cmd == "error") {
+      console.log(
+        "------------监听升级失败事件--------" + JSON.stringify(arg.message)
+      );
+      versionDialog.value = false;
+    } else if (arg.cmd == "checking-for-update") {
+      console.log(
+        "------------监听开始检测更新事件--------" + JSON.stringify(arg.message)
+      );
+    } else if (arg.cmd == "update-available") {
+      console.log(
+        "------------监听发现可用更新事件--------" + JSON.stringify(arg.message)
+      );
+      versionDialog.value = true;
+    } else if (arg.cmd == "update-not-available") {
+      console.log(
+        "------------监听没有可用更新事件--------" + JSON.stringify(arg.message)
+      );
+    } else if (arg.cmd == "download-progress") {
+      console.log(
+        "------------更新下载进度事件--------" + JSON.stringify(arg.message)
+      );
+      percentage.value = Math.round(parseFloat(arg.message.percent));
+    } else if (arg.cmd == "update-downloaded") {
+      console.log(
+        "------------监听下载完成事件--------" + JSON.stringify(arg.message)
+      );
+      versionDialog.value = false;
+    }
+  });
+
+  setTimeout(() => {
+    ipcRenderer.send("checkForUpdate");
+  }, 2000);
 });
 
 const getOnline = async () => {

+ 17 - 2
src/background.ts

@@ -4,8 +4,18 @@ import { app, protocol, BrowserWindow, globalShortcut } from "electron";
 import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
 import installExtension, { VUEJS_DEVTOOLS } from "electron-devtools-installer";
 import path from "path";
+// @ts-ignore
+import { updateHandle } from "./utils/update";
+
 const isDevelopment = process.env.NODE_ENV !== "production";
 
+// 本地开发测试版本更新
+// Object.defineProperty(app, "isPackaged", {
+//   get() {
+//     return true;
+//   },
+// });
+
 // Scheme must be registered before the app is ready
 protocol.registerSchemesAsPrivileged([
   { scheme: "app", privileges: { secure: true, standard: true } },
@@ -14,8 +24,8 @@ protocol.registerSchemesAsPrivileged([
 async function createWindow() {
   // Create the browser window.
   const win = new BrowserWindow({
-    width: 800,
-    height: 600,
+    width: 1920,
+    height: 1080,
     fullscreen: true,
     frame: isDevelopment,
     webPreferences: {
@@ -43,6 +53,11 @@ async function createWindow() {
   globalShortcut.register("CommandOrControl+Shift+i", () => {
     win.webContents.openDevTools();
   });
+
+  updateHandle(
+    win,
+    "https://houseoss.4dkankan.com/project/electron-packages/js-wlg-app/"
+  );
 }
 
 app.commandLine.appendSwitch("disable-site-isolation-trials");

+ 3 - 0
src/main.ts

@@ -3,6 +3,7 @@ import App from "./App.vue";
 import router from "./router";
 import store from "./store";
 import svgIconPlugin from "@/components/svg-icon/plugin";
+import config from "../package.json";
 
 const app = createApp(App);
 
@@ -11,3 +12,5 @@ app.use(router);
 app.use(svgIconPlugin);
 
 app.mount("#app");
+
+console.log("当前版本号:", config.version);

+ 76 - 0
src/utils/update.js

@@ -0,0 +1,76 @@
+import { autoUpdater } from "electron-updater";
+import { ipcMain } from "electron";
+
+let mainWindow = null;
+
+export function updateHandle(window, feedUrl) {
+  mainWindow = window;
+
+  //设置更新包的地址
+  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);
+}

+ 7 - 7
vue.config.js

@@ -16,6 +16,7 @@ module.exports = defineConfig({
   transpileDependencies: true,
   pluginOptions: {
     electronBuilder: {
+      nodeIntegration: true,
       customFileProtocol: "./",
       builderOptions: {
         productName: "云上博物",
@@ -25,6 +26,12 @@ module.exports = defineConfig({
           allowToChangeInstallationDirectory: true,
         },
         win: { target: "nsis", icon: "./public/imgs/icon.png" },
+        publish: [
+          {
+            provider: "generic",
+            url: "https://houseoss.4dkankan.com/project/electron-packages/js-wlg-app/",
+          },
+        ],
       },
     },
   },
@@ -65,13 +72,6 @@ module.exports = defineConfig({
 
       webpackConfig.optimization.splitChunks({
         cacheGroups: {
-          limitJson: {
-            test: /[\\/]limit\.json$/,
-            name: "limit",
-            chunks: "all",
-            priority: 1,
-            enforce: true,
-          },
           common: {
             name: "chunk-common",
             chunks: "initial",