vben
2020-12-13 27e50b47479af8eaeb4be020aeb0fcbdb4308295
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import './index.less';
 
import { defineComponent, unref, ref } from 'vue';
import { Layout } from 'ant-design-vue';
import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
 
import LayoutHeader from './header/LayoutHeader';
import LayoutContent from './content/index.vue';
import LayoutSideBar from './sider';
import LayoutMultipleHeader from './header/LayoutMultipleHeader';
 
import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
import { createLayoutContext } from './useLayoutContext';
 
import { registerGlobComp } from '/@/components/registerGlobComp';
import { createBreakpointListen } from '/@/hooks/event/useBreakpoint';
import { isMobile } from '/@/utils/is';
 
const LayoutFeatures = createAsyncComponent(() => import('/@/layouts/default/feature/index.vue'));
const LayoutFooter = createAsyncComponent(() => import('/@/layouts/default/footer/index.vue'));
 
export default defineComponent({
  name: 'DefaultLayout',
  setup() {
    const headerRef = ref<ComponentRef>(null);
    const isMobileRef = ref(false);
 
    createLayoutContext({ fullHeader: headerRef, isMobile: isMobileRef });
 
    createBreakpointListen(() => {
      isMobileRef.value = isMobile();
    });
 
    // ! Only register global components here
    // ! Can reduce the size of the first screen code
    // default layout It is loaded after login. So it won’t be packaged to the first screen
    registerGlobComp();
 
    const { getShowFullHeaderRef } = useHeaderSetting();
 
    const { getShowSidebar } = useMenuSetting();
 
    return () => {
      return (
        <Layout class="default-layout">
          {() => (
            <>
              <LayoutFeatures />
 
              {unref(getShowFullHeaderRef) && <LayoutHeader fixed={true} ref={headerRef} />}
 
              <Layout>
                {() => (
                  <>
                    {unref(getShowSidebar) && <LayoutSideBar />}
                    <Layout class="default-layout__main">
                      {() => (
                        <>
                          <LayoutMultipleHeader />
                          <LayoutContent />
                          <LayoutFooter />
                        </>
                      )}
                    </Layout>
                  </>
                )}
              </Layout>
            </>
          )}
        </Layout>
      );
    };
  },
});