App.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <template>
  2. <el-config-provider :locale="currentLocale">
  3. <keep-alive :include="keepAliveComponents">
  4. <router-view />
  5. </keep-alive>
  6. <ReDialog />
  7. <ReDrawer />
  8. </el-config-provider>
  9. </template>
  10. <script lang="ts">
  11. import { defineComponent } from "vue";
  12. import { checkVersion } from "version-rocket";
  13. import { ElConfigProvider } from "element-plus";
  14. import { ReDialog } from "@/components/ReDialog";
  15. import { ReDrawer } from "@/components/ReDrawer";
  16. import en from "element-plus/es/locale/lang/en";
  17. import zhCn from "element-plus/es/locale/lang/zh-cn";
  18. import plusEn from "plus-pro-components/es/locale/lang/en";
  19. import plusZhCn from "plus-pro-components/es/locale/lang/zh-cn";
  20. import { useRouter } from 'vue-router'
  21. import { keepAliveOptions } from "./views/system/menu/utils/enums";
  22. export default defineComponent({
  23. name: "app",
  24. components: {
  25. [ElConfigProvider.name]: ElConfigProvider,
  26. ReDialog,
  27. ReDrawer
  28. },
  29. computed: {
  30. currentLocale() {
  31. return this.$storage.locale?.locale === "zh"
  32. ? { ...zhCn, ...plusZhCn }
  33. : { ...en, ...plusEn };
  34. },
  35. keepAliveComponents() {
  36. return this.$router.getRoutes()
  37. .filter(route => route.meta.keepAlive)
  38. .map(route => route.name);
  39. },
  40. },
  41. beforeCreate() {
  42. const { version, name: title } = __APP_INFO__.pkg;
  43. const { VITE_PUBLIC_PATH, MODE } = import.meta.env;
  44. // https://github.com/guMcrey/version-rocket/blob/main/README.zh-CN.md#api
  45. if (MODE === "production") {
  46. // 版本实时更新检测,只作用于线上环境
  47. checkVersion(
  48. // config
  49. {
  50. // 5分钟检测一次版本
  51. pollingTime: 300000,
  52. localPackageVersion: version,
  53. originVersionFileUrl: `${location.origin}${VITE_PUBLIC_PATH}version.json`
  54. },
  55. // options
  56. {
  57. title,
  58. description: "检测到新版本",
  59. buttonText: "立即更新"
  60. }
  61. );
  62. }
  63. }
  64. });
  65. </script>