App.vue 1.9 KB

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