App.vue 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <script setup lang="ts">
  2. import { computed, onMounted } from 'vue'
  3. import { useAppStore } from '@/store/modules/app'
  4. import { ConfigGlobal } from '@/components/ConfigGlobal'
  5. import { useDesign } from '@/hooks/web/useDesign'
  6. import { useUserStore } from '@/store/modules/user'
  7. import router from './router'
  8. import { loginApi, getRsaKey, getTestRoleApi, getAdminRoleApi, getRefreshToken } from '@/api/login'
  9. const { getPrefixCls } = useDesign()
  10. const prefixCls = getPrefixCls('app')
  11. const appStore = useAppStore()
  12. const userStore = useUserStore()
  13. const currentSize = computed(() => appStore.getCurrentSize)
  14. const greyMode = computed(() => appStore.getGreyMode)
  15. // Method to handle token check and refresh
  16. const checkTokenAndRefresh = () => {
  17. const token = userStore.getToken
  18. if (!token) {
  19. router.push('/login') // Redirect to login if token is not found
  20. } else {
  21. setInterval(function () {
  22. console.log('ssssssssss1111')
  23. if (userStore.getToken) {
  24. getRefreshToken(userStore.getToken)
  25. .then((res) => {
  26. userStore.setToken(res.data)
  27. })
  28. .catch(() => {
  29. localStorage.clear()
  30. window.location.href = '/'
  31. })
  32. }
  33. }, 480000)
  34. }
  35. }
  36. appStore.initTheme()
  37. onMounted(() => {
  38. checkTokenAndRefresh() // Check token and start token refresh
  39. })
  40. </script>
  41. <template>
  42. <ConfigGlobal :size="currentSize">
  43. <RouterView :class="greyMode ? `${prefixCls}-grey-mode` : ''" />
  44. </ConfigGlobal>
  45. </template>
  46. <style lang="less">
  47. @prefix-cls: ~'@{namespace}-app';
  48. .size {
  49. width: 100%;
  50. height: 100%;
  51. }
  52. html,
  53. body {
  54. padding: 0 !important;
  55. margin: 0;
  56. overflow: hidden;
  57. .size;
  58. #app {
  59. .size;
  60. }
  61. }
  62. .@{prefix-cls}-grey-mode {
  63. filter: grayscale(100%);
  64. }
  65. </style>