Browse Source

发布提醒

zhuliu 1 month ago
parent
commit
c73090fe79
3 changed files with 59 additions and 1 deletions
  1. 1 0
      package.json
  2. 11 0
      scripts/generate-version.js
  3. 47 1
      src/App.vue

+ 1 - 0
package.json

@@ -4,6 +4,7 @@
   "private": true,
   "scripts": {
     "build": "vue-cli-service build",
+    "build_version": "vue-cli-service build && node scripts/generate-version.js",
     "lint": "vue-cli-service lint",
     "dev": "vue-cli-service serve"
   },

+ 11 - 0
scripts/generate-version.js

@@ -0,0 +1,11 @@
+const fs = require('fs');
+const path = require('path');
+const { execSync } = require('child_process');
+const packageJson = require('../package.json');
+
+// 获取 Git 提交哈希(短格式)
+const gitHash = execSync('git rev-parse --short HEAD').toString().trim();
+
+// 生成版本号(格式:package.json版本 + Git哈希)
+const versionContent = `window._APP_VERSION = '${packageJson.version}-${gitHash}';`;
+fs.writeFileSync(path.join(__dirname, '../dist/version.js'), versionContent);

+ 47 - 1
src/App.vue

@@ -19,6 +19,7 @@ export default {
   created() {
   },
   mounted() {
+    this.checkVersion()
     //判断是否在系统更新期间
     var time = new Date(this.$c.updateTime).getTime()
     var time2 = new Date().getTime()
@@ -41,13 +42,58 @@ export default {
     }
   },
   methods: {
-    
+    async checkVersion() {
+      // 1. 加载当前版本号(从本地存储或全局变量)
+      const currentVersion = localStorage.getItem('_APP_VERSION')
+
+      // 2. 定期检查新版本(例如每 5 分钟)
+      setInterval(async () => {
+        try {
+          // 3. 从服务器获取最新版本号(可以是一个 API 或直接加载 version.js)
+          const response = await fetch('/version.js?' + Date.now()); // 加时间戳避免缓存
+          
+          const text = await response.text();
+          
+          // 4. 提取版本号(正则匹配)
+          const match = text.match(/window._APP_VERSION = '([^']+)'/);
+          const latestVersion = match?.[1];
+          // 5. 如果版本不同,提示用户刷新
+          if(latestVersion){
+            if(!currentVersion){
+              localStorage.setItem('_APP_VERSION',latestVersion)
+              currentVersion = latestVersion
+            }else if (latestVersion !== currentVersion) {
+              this.$confirm('新版本已发布, 是否立即刷新?', '更新提示', {
+                  confirmButtonText: '确定',
+                  cancelButtonText: '取消',
+                  showClose:false,
+                  closeOnClickModal:false,
+                  customClass:'update_reminder',
+                  type: 'warning'
+              }).then(() => {
+                localStorage.setItem('_APP_VERSION',latestVersion)
+                window.location.reload()
+              }).catch(() => {
+              });
+            }
+          }
+        } catch (error) {
+        }
+      }, 180000); // 5 分钟检查一次
+    },
   },
 
 }
 </script>
 
 <style lang="scss">
+.update_reminder{
+    top: 0;
+    position: fixed;
+    left: 0;
+    margin: auto;
+    right: 0;
+}
 //driver.js
 .driver-fix-stacking .header {
   position:relative;