Prechádzať zdrojové kódy

Merge branch 'next' of https://gitee.com/zuohuaijun/Admin.NET into next

zuohuaijun 3 rokov pred
rodič
commit
46da54c3de

+ 1 - 0
.gitignore

@@ -32,3 +32,4 @@ bin-release/
 dist/
 node_modules/
 /Web/package-lock.json
+.DS_Store

+ 17 - 10
Web/src/App.vue

@@ -4,7 +4,7 @@
 		<LockScreen v-if="themeConfig.isLockScreen" />
 		<Setings ref="setingsRef" v-show="themeConfig.lockScreenTime > 1" />
 		<CloseFull v-if="!themeConfig.isLockScreen" />
-		<Upgrade v-if="getVersion" />
+        <Upgrade v-if="needUpdate" />
 	</el-config-provider>
 </template>
 
@@ -19,6 +19,7 @@ import other from '/@/utils/other';
 import { Local, Session } from '/@/utils/storage';
 import mittBus from '/@/utils/mitt';
 import setIntroduction from '/@/utils/setIconfont';
+import checkUpdate from "/@/utils/auto-update";
 
 // 引入组件
 const LockScreen = defineAsyncComponent(() => import('/@/layout/lockScreen/index.vue'));
@@ -33,16 +34,22 @@ const route = useRoute();
 const stores = useTagsViewRoutes();
 const storesThemeConfig = useThemeConfig();
 const { themeConfig } = storeToRefs(storesThemeConfig);
+const needUpdate = ref(false);
+
+// // 获取版本号
+// const getVersion = computed(() => {
+// 	let isVersion = false;
+// 	if (route.path !== '/login') {
+// 		// @ts-ignore
+// 		if ((Local.get('version') && Local.get('version') !== __VERSION__) || !Local.get('version')) isVersion = true;
+// 	}
+// 	return isVersion;
+// });
+
+checkUpdate(() => {
+  needUpdate.value = true;
+}, 60000);
 
-// 获取版本号
-const getVersion = computed(() => {
-	let isVersion = false;
-	if (route.path !== '/login') {
-		// @ts-ignore
-		if ((Local.get('version') && Local.get('version') !== __VERSION__) || !Local.get('version')) isVersion = true;
-	}
-	return isVersion;
-});
 // 获取全局组件大小
 const getGlobalComponentSize = computed(() => {
 	return other.globalComponentSize();

+ 3 - 3
Web/src/layout/upgrade/index.vue

@@ -21,7 +21,7 @@
 						CHANGELOG.md
 					</el-link>
 				</div>
-				<div class="upgrade-content-desc mt5">{{ $t('message.upgrade.desc') }}</div>
+        <!-- <div class="upgrade-content-desc mt5">{{ $t("message.upgrade.desc") }}</div> -->
 			</div>
 			<div class="upgrade-btn">
 				<el-button round size="default" type="info" text @click="onCancel">{{ $t('message.upgrade.btnOne') }}</el-button>
@@ -63,9 +63,9 @@ const onUpgrade = () => {
 	state.isLoading = true;
 	state.btnTxt = t('message.upgrade.btnTwoLoading');
 	setTimeout(() => {
-		Local.clear();
+		// Local.clear();
 		window.location.reload();
-		Local.set('version', state.version);
+		// Local.set('version', state.version);
 	}, 2000);
 };
 // 延迟显示,防止刷新时界面显示太快

+ 59 - 0
Web/src/utils/auto-update.ts

@@ -0,0 +1,59 @@
+/**
+ *通过监听当前页面的JS的SRC来判断当前网页是否有更新
+ *使用方法   main.js   import checkUpdate from "/@/utils/auto-update";
+ */
+
+let lastSrcs: any[] | null; //上次js地址集合
+const scriptReg = /(?<=<script.*src=["']).*?(?=["'])/gm;
+
+/**
+ * 获取最新的js集合
+ * @returns
+ */
+async function extractNewScripts() {
+	const html = await fetch('/?_t=' + Date.now()).then((res) => res.text());
+	scriptReg.lastIndex = 0;
+	const result = html.match(scriptReg);
+	return result;
+}
+/**
+ * 判断是否有更新
+ * @returns
+ */
+async function checkUpdate() {
+	const newScripts = await extractNewScripts();
+	if (!lastSrcs) {
+		lastSrcs = newScripts;
+		return false;
+	}
+	if (newScripts == null) return false;
+	let result = false;
+	if (lastSrcs.length !== newScripts.length) {
+		result = true;
+	}
+	for (let i = 0; i < lastSrcs.length; i++) {
+		if (lastSrcs[i] !== newScripts[i]) {
+			result = true;
+			break;
+		}
+	}
+	lastSrcs = newScripts;
+	return result;
+}
+
+/**
+ * 定时器定时检测是否更新,有更新则执行回调函数
+ * @param callbackFn
+ * @param interval
+ */
+function checkUpdateInterval(callbackFn: any, interval: number = 60000) {
+	setTimeout(async () => {
+		const willUpdate = await checkUpdate();
+		if (willUpdate) {
+			callbackFn();
+		}
+		checkUpdateInterval(callbackFn, interval);
+	}, interval);
+}
+
+export default checkUpdateInterval;