index.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <template>
  2. <component :is="getThemeConfig.layout" />
  3. </template>
  4. <script lang="ts">
  5. import { computed, onBeforeMount, onUnmounted, getCurrentInstance, defineComponent, defineAsyncComponent } from 'vue';
  6. import { useStore } from '/@/store/index';
  7. import { Local } from '/@/utils/storage';
  8. export default defineComponent({
  9. name: 'layout',
  10. components: {
  11. defaults: defineAsyncComponent(() => import('/@/layout/main/defaults.vue')),
  12. classic: defineAsyncComponent(() => import('/@/layout/main/classic.vue')),
  13. transverse: defineAsyncComponent(() => import('/@/layout/main/transverse.vue')),
  14. columns: defineAsyncComponent(() => import('/@/layout/main/columns.vue')),
  15. },
  16. setup() {
  17. const { proxy } = <any>getCurrentInstance();
  18. const store = useStore();
  19. // 获取布局配置信息
  20. const getThemeConfig = computed(() => {
  21. return store.state.themeConfig.themeConfig;
  22. });
  23. // 窗口大小改变时(适配移动端)
  24. const onLayoutResize = () => {
  25. if (!Local.get('oldLayout')) Local.set('oldLayout', getThemeConfig.value.layout);
  26. const clientWidth = document.body.clientWidth;
  27. if (clientWidth < 1000) {
  28. getThemeConfig.value.isCollapse = false;
  29. proxy.mittBus.emit('layoutMobileResize', {
  30. layout: 'defaults',
  31. clientWidth,
  32. });
  33. } else {
  34. proxy.mittBus.emit('layoutMobileResize', {
  35. layout: Local.get('oldLayout') ? Local.get('oldLayout') : getThemeConfig.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. return {
  50. getThemeConfig,
  51. };
  52. },
  53. });
  54. </script>