App.vue 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <template>
  2. <div id="app">
  3. <router-view />
  4. <theme-picker />
  5. </div>
  6. </template>
  7. <script>
  8. import ThemePicker from "@/components/ThemePicker";
  9. import { refreshToken } from "@/api/login";
  10. import { getToken } from "@/utils/auth";
  11. export default {
  12. name: "App",
  13. components: { ThemePicker },
  14. data() {
  15. return {
  16. timer: null,
  17. };
  18. },
  19. methods: {
  20. async startTokenRefresh() {
  21. if (this.timer) {
  22. clearInterval(this.timer);
  23. }
  24. let outTime = 5 * 60 * 60 * 1000;
  25. this.timer = setInterval(async () => {
  26. try {
  27. if (!getToken()) return;
  28. const response = await refreshToken();
  29. console.log(object);
  30. } catch (error) {
  31. console.error("token刷新失败:", error);
  32. }
  33. }, outTime);
  34. },
  35. },
  36. mounted() {
  37. this.startTokenRefresh();
  38. },
  39. beforeDestroy() {
  40. if (this.timer) {
  41. clearInterval(this.timer);
  42. }
  43. },
  44. metaInfo() {
  45. return {
  46. title:
  47. this.$store.state.settings.dynamicTitle &&
  48. this.$store.state.settings.title,
  49. titleTemplate: (title) => {
  50. return title
  51. ? `${title} - ${process.env.VUE_APP_TITLE}`
  52. : process.env.VUE_APP_TITLE;
  53. },
  54. };
  55. },
  56. };
  57. </script>
  58. <style>
  59. #app .theme-picker {
  60. display: none;
  61. }
  62. </style>