|
|
@@ -0,0 +1,40 @@
|
|
|
+// web-admin/src/utils/check-app-update.ts
|
|
|
+import { startAppUpdateChecker } from './app-update'
|
|
|
+
|
|
|
+/** 生产环境检查 dist/version.json,发现新 buildId 后强制刷新。 */
|
|
|
+export function startAppUpdateCheck(): () => void {
|
|
|
+ return startAppUpdateChecker({
|
|
|
+ isProd: import.meta.env.PROD,
|
|
|
+ localBuildId: __APP_BUILD_ID__,
|
|
|
+ localVersion: __APP_VERSION__,
|
|
|
+ baseUrl: import.meta.env.BASE_URL,
|
|
|
+ now: () => Date.now(),
|
|
|
+ fetchRemote: async (url) => {
|
|
|
+ const res = await fetch(url, { cache: 'no-store' })
|
|
|
+ if (!res.ok) throw new Error(String(res.status))
|
|
|
+ return res.json()
|
|
|
+ },
|
|
|
+ onReload: () => {
|
|
|
+ location.reload()
|
|
|
+ },
|
|
|
+ alertUpdate: async (message) => {
|
|
|
+ await ElMessageBox.alert(message, '发现新版本', {
|
|
|
+ confirmButtonText: '立即刷新',
|
|
|
+ showClose: false,
|
|
|
+ closeOnClickModal: false,
|
|
|
+ closeOnPressEscape: false,
|
|
|
+ showCancelButton: false,
|
|
|
+ dangerouslyUseHTMLString: true
|
|
|
+ })
|
|
|
+ },
|
|
|
+ setInterval: (fn, ms) => window.setInterval(fn, ms),
|
|
|
+ clearInterval: (id) => window.clearInterval(id),
|
|
|
+ subscribeVisible: (handler) => {
|
|
|
+ const listener = () => {
|
|
|
+ if (document.visibilityState === 'visible') handler()
|
|
|
+ }
|
|
|
+ document.addEventListener('visibilitychange', listener)
|
|
|
+ return () => document.removeEventListener('visibilitychange', listener)
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|