index.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <Layout :class="prefixCls" v-bind="lockEvents">
  3. <LayoutFeatures />
  4. <LayoutHeader fixed v-if="getShowFullHeaderRef" />
  5. <Layout :class="[layoutClass]">
  6. <LayoutSideBar v-if="getShowSidebar || getIsMobile" />
  7. <Layout :class="`${prefixCls}-main`">
  8. <LayoutMultipleHeader />
  9. <LayoutContent />
  10. <LayoutFooter />
  11. </Layout>
  12. </Layout>
  13. </Layout>
  14. </template>
  15. <script lang="ts">
  16. import { defineComponent, computed, unref } from 'vue';
  17. import { Layout } from 'ant-design-vue';
  18. import { createAsyncComponent } from '@jeesite/core/utils/factory/createAsyncComponent';
  19. import LayoutHeader from './header/index.vue';
  20. import LayoutContent from './content/index.vue';
  21. import LayoutSideBar from './sider/index.vue';
  22. import LayoutMultipleHeader from './header/MultipleHeader.vue';
  23. import { useHeaderSetting } from '@jeesite/core/hooks/setting/useHeaderSetting';
  24. import { useMenuSetting } from '@jeesite/core/hooks/setting/useMenuSetting';
  25. import { useDesign } from '@jeesite/core/hooks/web/useDesign';
  26. import { useLockPage } from '@jeesite/core/hooks/web/useLockPage';
  27. import { useAppInject } from '@jeesite/core/hooks/web/useAppInject';
  28. import { switchSkin } from '@jeesite/core/api/sys/login';
  29. export default defineComponent({
  30. name: 'DefaultLayout',
  31. components: {
  32. LayoutFeatures: createAsyncComponent(() => import('@jeesite/core/layouts/default/feature/index.vue')),
  33. LayoutFooter: createAsyncComponent(() => import('@jeesite/core/layouts/default/footer/index.vue')),
  34. LayoutHeader,
  35. LayoutContent,
  36. LayoutSideBar,
  37. LayoutMultipleHeader,
  38. Layout,
  39. },
  40. setup() {
  41. const { prefixCls } = useDesign('default-layout');
  42. const { getIsMobile } = useAppInject();
  43. const { getShowFullHeaderRef } = useHeaderSetting();
  44. const { getShowSidebar, getIsMixSidebar, getShowMenu } = useMenuSetting();
  45. // switchSkin();
  46. // Create a lock screen monitor
  47. const lockEvents = useLockPage();
  48. const layoutClass = computed(() => {
  49. let cls: string[] = ['ant-layout'];
  50. if (unref(getIsMixSidebar) || unref(getShowMenu)) {
  51. cls.push('ant-layout-has-sider');
  52. }
  53. return cls;
  54. });
  55. return {
  56. getShowFullHeaderRef,
  57. getShowSidebar,
  58. prefixCls,
  59. getIsMobile,
  60. getIsMixSidebar,
  61. layoutClass,
  62. lockEvents,
  63. };
  64. },
  65. });
  66. </script>
  67. <style lang="less">
  68. @prefix-cls: ~'jeesite-default-layout';
  69. .ant-layout.@{prefix-cls} {
  70. display: flex;
  71. width: 100%;
  72. height: 100%;
  73. min-height: 0;
  74. flex-direction: column;
  75. background-color: @content-bg;
  76. overflow: hidden;
  77. > .ant-layout {
  78. min-height: 0;
  79. overflow: hidden;
  80. }
  81. // .ant-layout {
  82. // min-height: 100%;
  83. // background-color: @content-bg;
  84. // }
  85. &-main {
  86. display: flex;
  87. flex: 1 1 auto;
  88. min-height: 0;
  89. flex-direction: column;
  90. width: 100%;
  91. margin-left: 1px;
  92. overflow: hidden;
  93. }
  94. }
  95. </style>