upgrade.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import axios from "axios";
  2. import * as process from "process";
  3. import {Local, Session} from '/@/utils/storage';
  4. import {ElNotification} from "element-plus";
  5. import fs from "fs";
  6. // 是否显示升级提示信息框
  7. const IS_SHOW_UPGRADE_SESSION_KEY = 'isShowUpgrade';
  8. const VERSION_KEY = 'DVADMIN3_VERSION'
  9. const VERSION_FILE_NAME = 'version-build'
  10. export function showUpgrade () {
  11. const isShowUpgrade = Session.get(IS_SHOW_UPGRADE_SESSION_KEY) ?? false
  12. if (isShowUpgrade) {
  13. Session.remove(IS_SHOW_UPGRADE_SESSION_KEY)
  14. ElNotification({
  15. title: '新版本升级',
  16. message: "检测到系统新版本,正在更新中!不用担心,更新很快的哦!",
  17. type: 'success',
  18. duration: 5000,
  19. });
  20. }
  21. }
  22. // 生产环境前端版本校验,
  23. export async function checkVersion(){
  24. if (process.env.NODE_ENV === 'development') {
  25. // 开发环境无需校验前端版本
  26. return
  27. }
  28. // 获取线上版本号 t为时间戳,防止缓存
  29. await axios.get(`${import.meta.env.VITE_PUBLIC_PATH}${VERSION_FILE_NAME}?t=${new Date().getTime()}`).then(res => {
  30. const {status, data} = res || {}
  31. if (status === 200) {
  32. // 获取当前版本号
  33. const localVersion = Local.get(VERSION_KEY)
  34. // 将当前版本号持久缓存至本地
  35. Local.set(VERSION_KEY, data)
  36. // 当用户本地存在版本号并且和线上版本号不一致时,进行页面刷新操作
  37. if (localVersion && localVersion !== data) {
  38. // 本地缓存版本号和线上版本号不一致,弹出升级提示框
  39. // 此处无法直接使用消息框进行提醒,因为 window.location.reload()会导致消息框消失,将在loading页面判断是否需要显示升级提示框
  40. Session.set(IS_SHOW_UPGRADE_SESSION_KEY, true)
  41. window.location.reload()
  42. }
  43. }
  44. })
  45. }
  46. export function generateVersionFile (){
  47. // 生成版本文件到public目录下version文件中
  48. const version = `${process.env.npm_package_version}.${new Date().getTime()}`;
  49. fs.writeFileSync(`public/${VERSION_FILE_NAME}`, version);
  50. }