index.tsx 2.4 KB
Newer Older
V
vben 已提交
1 2
import './index.less';

V
vben 已提交
3 4 5
import { defineComponent, unref, ref } from 'vue';
import { Layout } from 'ant-design-vue';
import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
陈文彬 已提交
6

V
vben 已提交
7
import LayoutHeader from './header/LayoutHeader';
V
vben 已提交
8
import LayoutContent from './content/index.vue';
V
vben 已提交
9 10
import LayoutSideBar from './sider';
import LayoutMultipleHeader from './header/LayoutMultipleHeader';
陈文彬 已提交
11

V
vben 已提交
12 13 14
import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
import { createLayoutContext } from './useLayoutContext';
陈文彬 已提交
15

V
vben 已提交
16
import { registerGlobComp } from '/@/components/registerGlobComp';
V
vben 已提交
17 18
import { createBreakpointListen } from '/@/hooks/event/useBreakpoint';
import { isMobile } from '/@/utils/is';
V
vben 已提交
19 20 21 22

const LayoutFeatures = createAsyncComponent(() => import('/@/layouts/default/feature/index.vue'));
const LayoutFooter = createAsyncComponent(() => import('/@/layouts/default/footer/index.vue'));

陈文彬 已提交
23 24 25
export default defineComponent({
  name: 'DefaultLayout',
  setup() {
V
vben 已提交
26
    const headerRef = ref<ComponentRef>(null);
V
vben 已提交
27 28 29
    const isMobileRef = ref(false);

    createLayoutContext({ fullHeader: headerRef, isMobile: isMobileRef });
V
vben 已提交
30

V
vben 已提交
31 32 33
    createBreakpointListen(() => {
      isMobileRef.value = isMobile();
    });
V
vben 已提交
34

V
vben 已提交
35 36 37
    // ! 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
V
vben 已提交
38 39
    registerGlobComp();

V
vben 已提交
40
    const { getShowFullHeaderRef } = useHeaderSetting();
V
vben 已提交
41

V
vben 已提交
42
    const { getShowSidebar } = useMenuSetting();
43 44

    return () => {
陈文彬 已提交
45
      return (
V
vben 已提交
46
        <Layout class="default-layout">
陈文彬 已提交
47 48
          {() => (
            <>
V
vben 已提交
49
              <LayoutFeatures />
V
vben 已提交
50

V
vben 已提交
51
              {unref(getShowFullHeaderRef) && <LayoutHeader fixed={true} ref={headerRef} />}
V
vben 已提交
52

陈文彬 已提交
53 54 55
              <Layout>
                {() => (
                  <>
V
vben 已提交
56
                    {unref(getShowSidebar) && <LayoutSideBar />}
V
vben 已提交
57
                    <Layout class="default-layout__main">
陈文彬 已提交
58 59
                      {() => (
                        <>
V
vben 已提交
60 61
                          <LayoutMultipleHeader />
                          <LayoutContent />
V
vben 已提交
62
                          <LayoutFooter />
陈文彬 已提交
63 64 65 66 67 68 69 70 71 72 73 74 75
                        </>
                      )}
                    </Layout>
                  </>
                )}
              </Layout>
            </>
          )}
        </Layout>
      );
    };
  },
});