index.vue 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <template>
  2. <Component :is="layouts[themeConfig.layout]" />
  3. <!-- <Defaults/>-->
  4. </template>
  5. <!--管理后台基础组件-->
  6. <script setup lang="ts" name="layout">
  7. import { onBeforeMount, onUnmounted, defineAsyncComponent } from 'vue';
  8. import { storeToRefs } from 'pinia';
  9. import { useThemeConfig } from '/@/stores/themeConfig';
  10. import { Local } from '/@/utils/storage';
  11. import mittBus from '/@/utils/mitt';
  12. // 引入组件
  13. const layouts: any = {
  14. //默认
  15. defaults: defineAsyncComponent(() => import('/@/layout/main/defaults.vue')),
  16. classic: defineAsyncComponent(() => import('/@/layout/main/classic.vue')),
  17. transverse: defineAsyncComponent(() => import('/@/layout/main/transverse.vue')),
  18. columns: defineAsyncComponent(() => import('/@/layout/main/columns.vue')),
  19. };
  20. // 定义变量内容
  21. const storesThemeConfig = useThemeConfig();
  22. const { themeConfig } = storeToRefs(storesThemeConfig);
  23. // 窗口大小改变时(适配移动端)
  24. const onLayoutResize = () => {
  25. if (!Local.get('oldLayout')) Local.set('oldLayout', themeConfig.value.layout);
  26. const clientWidth = document.body.clientWidth;
  27. if (clientWidth < 1000) {
  28. themeConfig.value.isCollapse = false;
  29. mittBus.emit('layoutMobileResize', {
  30. layout: 'defaults',
  31. clientWidth,
  32. });
  33. } else {
  34. mittBus.emit('layoutMobileResize', {
  35. layout: Local.get('oldLayout') ? Local.get('oldLayout') : themeConfig.value.layout,
  36. clientWidth,
  37. });
  38. }
  39. };
  40. // 页面加载前
  41. onBeforeMount(() => {
  42. onLayoutResize();
  43. window.addEventListener('resize', onLayoutResize);
  44. });
  45. // 页面卸载时
  46. onUnmounted(() => {
  47. window.removeEventListener('resize', onLayoutResize);
  48. });
  49. </script>