123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- import { computed } from 'vue'
- import { useAppStore } from '@/store/modules/app'
- import { Menu } from '@/components/Menu'
- import { TabMenu } from '@/components/TabMenu'
- import { TagsView } from '@/components/TagsView'
- import { Logo } from '@/components/Logo'
- import AppView from './AppView.vue'
- import ToolHeader from './ToolHeader.vue'
- import { ElScrollbar } from 'element-plus'
- import { useDesign } from '@/hooks/web/useDesign'
- const { getPrefixCls } = useDesign()
- const prefixCls = getPrefixCls('layout')
- const appStore = useAppStore()
- const pageLoading = computed(() => appStore.getPageLoading)
- // 标签页
- const tagsView = computed(() => appStore.getTagsView)
- // 菜单折叠
- const collapse = computed(() => appStore.getCollapse)
- // logo
- const logo = computed(() => appStore.logo)
- // 固定头部
- const fixedHeader = computed(() => appStore.getFixedHeader)
- // 是否是移动端
- const mobile = computed(() => appStore.getMobile)
- // 固定菜单
- const fixedMenu = computed(() => appStore.getFixedMenu)
- export const useRenderLayout = () => {
- const renderClassic = () => {
- return (
- <>
- <div
- class={[
- 'absolute top-0 left-0 h-full layout-border__right',
- { '!fixed z-3000': mobile.value }
- ]}
- >
- {logo.value ? (
- <Logo
- class={[
- 'bg-[var(--left-menu-bg-color)] relative',
- {
- '!pl-0': mobile.value && collapse.value,
- 'w-[var(--left-menu-min-width)]': appStore.getCollapse,
- 'w-[var(--left-menu-max-width)]': !appStore.getCollapse
- }
- ]}
- style="transition: all var(--transition-time-02);"
- ></Logo>
- ) : undefined}
- <Menu class={[{ '!h-[calc(100%-var(--logo-height))]': logo.value }]}></Menu>
- </div>
- <div
- class={[
- `${prefixCls}-content`,
- 'absolute top-0 h-[100%]',
- {
- 'w-[calc(100%-var(--left-menu-min-width))] left-[var(--left-menu-min-width)]':
- collapse.value && !mobile.value && !mobile.value,
- 'w-[calc(100%-var(--left-menu-max-width))] left-[var(--left-menu-max-width)]':
- !collapse.value && !mobile.value && !mobile.value,
- 'fixed !w-full !left-0': mobile.value
- }
- ]}
- style="transition: all var(--transition-time-02);"
- >
- <ElScrollbar
- v-loading={pageLoading.value}
- class={[
- `${prefixCls}-content-scrollbar`,
- {
- '!h-[calc(100%-var(--top-tool-height)-var(--tags-view-height))] mt-[calc(var(--top-tool-height)+var(--tags-view-height))]':
- fixedHeader.value
- }
- ]}
- >
- <div
- class={[
- {
- 'fixed top-0 left-0 z-10': fixedHeader.value,
- 'w-[calc(100%-var(--left-menu-min-width))] !left-[var(--left-menu-min-width)]':
- collapse.value && fixedHeader.value && !mobile.value,
- 'w-[calc(100%-var(--left-menu-max-width))] !left-[var(--left-menu-max-width)]':
- !collapse.value && fixedHeader.value && !mobile.value,
- '!w-full !left-0': mobile.value
- }
- ]}
- style="transition: all var(--transition-time-02);"
- >
- <ToolHeader
- class={[
- 'bg-[var(--top-header-bg-color)]',
- {
- 'layout-border__bottom': !tagsView.value
- }
- ]}
- ></ToolHeader>
- {tagsView.value ? (
- <TagsView class="layout-border__bottom layout-border__top"></TagsView>
- ) : undefined}
- </div>
- <AppView></AppView>
- </ElScrollbar>
- </div>
- </>
- )
- }
- const renderTopLeft = () => {
- return (
- <>
- <div class="flex items-center bg-[var(--top-header-bg-color)] relative layout-border__bottom dark:bg-[var(--el-bg-color)]">
- {logo.value ? <Logo class="custom-hover"></Logo> : undefined}
- <ToolHeader class="flex-1"></ToolHeader>
- </div>
- <div class="absolute top-[var(--logo-height)+1px] left-0 w-full h-[calc(100%-1px-var(--logo-height))] flex">
- <Menu class="!h-full relative layout-border__right"></Menu>
- <div
- class={[
- `${prefixCls}-content`,
- 'h-[100%]',
- {
- 'w-[calc(100%-var(--left-menu-min-width))] left-[var(--left-menu-min-width)]':
- collapse.value,
- 'w-[calc(100%-var(--left-menu-max-width))] left-[var(--left-menu-max-width)]':
- !collapse.value
- }
- ]}
- style="transition: all var(--transition-time-02);"
- >
- <ElScrollbar
- v-loading={pageLoading.value}
- class={[
- `${prefixCls}-content-scrollbar`,
- {
- '!h-[calc(100%-var(--tags-view-height))] mt-[calc(var(--tags-view-height))]':
- fixedHeader.value && tagsView.value
- }
- ]}
- >
- {tagsView.value ? (
- <TagsView
- class={[
- 'layout-border__bottom absolute',
- {
- '!fixed top-0 left-0 z-10': fixedHeader.value,
- 'w-[calc(100%-var(--left-menu-min-width))] !left-[var(--left-menu-min-width)] mt-[calc(var(--logo-height)+1px)]':
- collapse.value && fixedHeader.value,
- 'w-[calc(100%-var(--left-menu-max-width))] !left-[var(--left-menu-max-width)] mt-[calc(var(--logo-height)+1px)]':
- !collapse.value && fixedHeader.value
- }
- ]}
- style="transition: width var(--transition-time-02), left var(--transition-time-02);"
- ></TagsView>
- ) : undefined}
- <AppView></AppView>
- </ElScrollbar>
- </div>
- </div>
- </>
- )
- }
- const renderTop = () => {
- return (
- <>
- <div
- class={[
- 'flex items-center justify-between bg-[var(--top-header-bg-color)] relative',
- {
- 'layout-border__bottom': !tagsView.value
- }
- ]}
- >
- {logo.value ? <Logo class="custom-hover"></Logo> : undefined}
- <Menu class="flex-1 px-10px h-[var(--top-tool-height)]"></Menu>
- <ToolHeader></ToolHeader>
- </div>
- <div
- class={[
- `${prefixCls}-content`,
- 'w-full',
- {
- 'h-[calc(100%-var(--app-footer-height))]': !fixedHeader.value,
- 'h-[calc(100%-var(--tags-view-height)-var(--app-footer-height))]': fixedHeader.value
- }
- ]}
- >
- <ElScrollbar
- v-loading={pageLoading.value}
- class={[
- `${prefixCls}-content-scrollbar`,
- {
- 'mt-[var(--tags-view-height)] !pb-[calc(var(--tags-view-height)+var(--app-footer-height))]':
- fixedHeader.value,
- 'pb-[var(--app-footer-height)]': !fixedHeader.value
- }
- ]}
- >
- {tagsView.value ? (
- <TagsView
- class={[
- 'layout-border__bottom layout-border__top relative',
- {
- '!fixed w-full top-[calc(var(--top-tool-height)+1px)] left-0': fixedHeader.value
- }
- ]}
- style="transition: width var(--transition-time-02), left var(--transition-time-02);"
- ></TagsView>
- ) : undefined}
- <AppView></AppView>
- </ElScrollbar>
- </div>
- </>
- )
- }
- const renderCutMenu = () => {
- return (
- <>
- <div class="flex items-center bg-[var(--top-header-bg-color)] relative layout-border__bottom">
- {logo.value ? <Logo class="custom-hover !pr-15px"></Logo> : undefined}
- <ToolHeader class="flex-1"></ToolHeader>
- </div>
- <div class="absolute top-[var(--logo-height)] left-0 w-[calc(100%-2px)] h-[calc(100%-var(--logo-height))] flex">
- <TabMenu></TabMenu>
- <div
- class={[
- `${prefixCls}-content`,
- 'h-[100%]',
- {
- 'w-[calc(100%-var(--tab-menu-min-width))] left-[var(--tab-menu-min-width)]':
- collapse.value && !fixedMenu.value,
- 'w-[calc(100%-var(--tab-menu-max-width))] left-[var(--tab-menu-max-width)]':
- !collapse.value && !fixedMenu.value,
- 'w-[calc(100%-var(--tab-menu-min-width)-var(--left-menu-max-width))] ml-[var(--left-menu-max-width)]':
- collapse.value && fixedMenu.value,
- 'w-[calc(100%-var(--tab-menu-max-width)-var(--left-menu-max-width))] ml-[var(--left-menu-max-width)]':
- !collapse.value && fixedMenu.value
- }
- ]}
- style="transition: all var(--transition-time-02);"
- >
- <ElScrollbar
- v-loading={pageLoading.value}
- class={[
- `${prefixCls}-content-scrollbar`,
- {
- '!h-[calc(100%-var(--tags-view-height))] mt-[calc(var(--tags-view-height))]':
- fixedHeader.value && tagsView.value
- }
- ]}
- >
- {tagsView.value ? (
- <TagsView
- class={[
- 'relative layout-border__bottom layout-border__top',
- {
- '!fixed top-0 left-0 z-10': fixedHeader.value,
- 'w-[calc(100%-var(--tab-menu-min-width))] !left-[var(--tab-menu-min-width)] mt-[var(--logo-height)]':
- collapse.value && fixedHeader.value,
- 'w-[calc(100%-var(--tab-menu-max-width))] !left-[var(--tab-menu-max-width)] mt-[var(--logo-height)]':
- !collapse.value && fixedHeader.value,
- '!fixed top-0 !left-[var(--tab-menu-min-width)+var(--left-menu-max-width)] z-10':
- fixedHeader.value && fixedMenu.value,
- 'w-[calc(100%-var(--tab-menu-min-width)-var(--left-menu-max-width))] !left-[var(--tab-menu-min-width)+var(--left-menu-max-width)] mt-[var(--logo-height)]':
- collapse.value && fixedHeader.value && fixedMenu.value,
- 'w-[calc(100%-var(--tab-menu-max-width)-var(--left-menu-max-width))] !left-[var(--tab-menu-max-width)+var(--left-menu-max-width)] mt-[var(--logo-height)]':
- !collapse.value && fixedHeader.value && fixedMenu.value
- }
- ]}
- style="transition: width var(--transition-time-02), left var(--transition-time-02);"
- ></TagsView>
- ) : undefined}
- <AppView></AppView>
- </ElScrollbar>
- </div>
- </div>
- </>
- )
- }
- return {
- renderClassic,
- renderTopLeft,
- renderTop,
- renderCutMenu
- }
- }
|