App.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <router-view v-slot="{ Component }">
  3. <keep-alive :include="keepAliveIncludes">
  4. <component :is="Component" />
  5. </keep-alive>
  6. </router-view>
  7. <Login v-if="useUserInfoStore.loginShow" v-model:dialogVisible="useUserInfoStore.loginShow" />
  8. </template>
  9. <script setup lang="ts">
  10. import { useRoute, useRouter } from 'vue-router'
  11. import { onMounted, onUnmounted } from 'vue'
  12. import Login from '@/components/login/index.vue';
  13. import useUserInfo from "@/stores/modules/user";
  14. const useUserInfoStore = useUserInfo();
  15. import { listenerOnline } from '@/composables/online';
  16. listenerOnline();
  17. const router = useRouter()
  18. const route = useRoute()
  19. /* keep alive 的路由名称 */
  20. const keepAliveIncludes = router
  21. .getRoutes()
  22. .filter((router) => router.meta?.keepAlive)
  23. .map((router) => router.name as string)
  24. /* 监听企业过期事件 */
  25. const handleCompanyExpired = (event: CustomEvent) => {
  26. const { message } = event.detail
  27. console.log('企业过期事件触发:', message)
  28. // 如果当前不在过期页面,进行跳转
  29. if (route.path !== '/photography/expired') {
  30. console.log('跳转到过期页面')
  31. router.replace('/photography/expired')
  32. }
  33. }
  34. onMounted(() => {
  35. window.addEventListener('companyExpired', handleCompanyExpired as EventListener)
  36. })
  37. onUnmounted(() => {
  38. window.removeEventListener('companyExpired', handleCompanyExpired as EventListener)
  39. })
  40. </script>
  41. <style scoped>
  42. .logo {
  43. height: 6em;
  44. padding: 1.5em;
  45. will-change: filter;
  46. transition: filter 300ms;
  47. }
  48. .logo:hover {
  49. filter: drop-shadow(0 0 2em #646cffaa);
  50. }
  51. .logo.vue:hover {
  52. filter: drop-shadow(0 0 2em #42b883aa);
  53. }
  54. </style>