162 lines
4.4 KiB
Vue
162 lines
4.4 KiB
Vue
|
|
<template>
|
||
|
|
<Header :class="getHeaderClass">
|
||
|
|
<!-- left start -->
|
||
|
|
<div :class="`${prefixCls}-left`">
|
||
|
|
<!-- logo -->
|
||
|
|
<AppLogo v-if="getShowHeaderLogo" :class="`${prefixCls}-logo`" :theme="getHeaderTheme" />
|
||
|
|
|
||
|
|
<LayoutTrigger
|
||
|
|
v-if="getShowContent && getShowHeaderTrigger"
|
||
|
|
:theme="getHeaderTheme"
|
||
|
|
:sider="false"
|
||
|
|
/>
|
||
|
|
<LayoutBreadcrumb
|
||
|
|
v-if="getShowContent && getShowBread && !getIsMobile"
|
||
|
|
:theme="getHeaderTheme"
|
||
|
|
/>
|
||
|
|
</div>
|
||
|
|
<!-- left end -->
|
||
|
|
|
||
|
|
<!-- menu start -->
|
||
|
|
<div :class="`${prefixCls}-menu`" v-if="getShowTopMenu && !getIsMobile">
|
||
|
|
<LayoutMenu
|
||
|
|
:isHorizontal="true"
|
||
|
|
:theme="getHeaderTheme"
|
||
|
|
:splitType="getSplitType"
|
||
|
|
:menuMode="getMenuMode"
|
||
|
|
/>
|
||
|
|
</div>
|
||
|
|
<!-- menu-end -->
|
||
|
|
|
||
|
|
<!-- action -->
|
||
|
|
<div :class="`${prefixCls}-action`">
|
||
|
|
<AppSearch v-if="!getIsMobile" :class="`${prefixCls}-action__item`" />
|
||
|
|
|
||
|
|
<ErrorAction v-if="getUseErrorHandle && !getIsMobile" :class="`${prefixCls}-action__item`" />
|
||
|
|
|
||
|
|
<LockItem v-if="getUseLockPage && !getIsMobile" :class="`${prefixCls}-action__item`" />
|
||
|
|
|
||
|
|
<Notify v-if="getShowNotice && !getIsMobile" :class="`${prefixCls}-action__item`" />
|
||
|
|
|
||
|
|
<FullScreen v-if="getShowFullScreen && !getIsMobile" :class="`${prefixCls}-action__item`" />
|
||
|
|
|
||
|
|
<UserDropDown :theme="getHeaderTheme" />
|
||
|
|
|
||
|
|
<AppLocalePicker
|
||
|
|
v-if="getShowLocale"
|
||
|
|
:reload="true"
|
||
|
|
:showText="false"
|
||
|
|
:class="`${prefixCls}-action__item`"
|
||
|
|
/>
|
||
|
|
</div>
|
||
|
|
</Header>
|
||
|
|
</template>
|
||
|
|
<script lang="ts">
|
||
|
|
import { defineComponent, unref, computed } from 'vue';
|
||
|
|
|
||
|
|
import { propTypes } from '/@/utils/propTypes';
|
||
|
|
|
||
|
|
import { Layout } from 'ant-design-vue';
|
||
|
|
import { AppLogo } from '/@/components/Application';
|
||
|
|
import LayoutMenu from '../menu';
|
||
|
|
import LayoutTrigger from '../trigger/index.vue';
|
||
|
|
|
||
|
|
import { AppSearch } from '/@/components/Application';
|
||
|
|
|
||
|
|
import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
|
||
|
|
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
|
||
|
|
import { useRootSetting } from '/@/hooks/setting/useRootSetting';
|
||
|
|
import { useLocaleSetting } from '/@/hooks/setting/useLocaleSetting';
|
||
|
|
|
||
|
|
import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum';
|
||
|
|
import { AppLocalePicker } from '/@/components/Application';
|
||
|
|
|
||
|
|
import {
|
||
|
|
UserDropDown,
|
||
|
|
LayoutBreadcrumb,
|
||
|
|
FullScreen,
|
||
|
|
Notify,
|
||
|
|
LockItem,
|
||
|
|
ErrorAction,
|
||
|
|
} from './components';
|
||
|
|
import { useAppInject } from '/@/hooks/web/useAppInject';
|
||
|
|
import { useDesign } from '/@/hooks/web/useDesign';
|
||
|
|
|
||
|
|
export default defineComponent({
|
||
|
|
name: 'LayoutHeader',
|
||
|
|
components: {
|
||
|
|
Header: Layout.Header,
|
||
|
|
AppLogo,
|
||
|
|
LayoutTrigger,
|
||
|
|
LayoutBreadcrumb,
|
||
|
|
LayoutMenu,
|
||
|
|
UserDropDown,
|
||
|
|
AppLocalePicker,
|
||
|
|
FullScreen,
|
||
|
|
Notify,
|
||
|
|
LockItem,
|
||
|
|
AppSearch,
|
||
|
|
ErrorAction,
|
||
|
|
},
|
||
|
|
props: {
|
||
|
|
fixed: propTypes.bool,
|
||
|
|
},
|
||
|
|
setup(props) {
|
||
|
|
const { prefixCls } = useDesign('layout-header');
|
||
|
|
const { getShowTopMenu, getShowHeaderTrigger, getSplit } = useMenuSetting();
|
||
|
|
const { getShowLocale } = useLocaleSetting();
|
||
|
|
const { getUseErrorHandle } = useRootSetting();
|
||
|
|
|
||
|
|
const {
|
||
|
|
getHeaderTheme,
|
||
|
|
getUseLockPage,
|
||
|
|
getShowFullScreen,
|
||
|
|
getShowNotice,
|
||
|
|
getShowContent,
|
||
|
|
getShowBread,
|
||
|
|
getShowHeaderLogo,
|
||
|
|
} = useHeaderSetting();
|
||
|
|
|
||
|
|
const { getIsMobile } = useAppInject();
|
||
|
|
|
||
|
|
const getHeaderClass = computed(() => {
|
||
|
|
const theme = unref(getHeaderTheme);
|
||
|
|
return [
|
||
|
|
prefixCls,
|
||
|
|
{ [`${prefixCls}--fixed`]: props.fixed, [`${prefixCls}--${theme}`]: theme },
|
||
|
|
];
|
||
|
|
});
|
||
|
|
|
||
|
|
const getSplitType = computed(() => {
|
||
|
|
return unref(getSplit) ? MenuSplitTyeEnum.TOP : MenuSplitTyeEnum.NONE;
|
||
|
|
});
|
||
|
|
|
||
|
|
const getMenuMode = computed(() => {
|
||
|
|
return unref(getSplit) ? MenuModeEnum.HORIZONTAL : null;
|
||
|
|
});
|
||
|
|
|
||
|
|
return {
|
||
|
|
prefixCls,
|
||
|
|
getHeaderClass,
|
||
|
|
getShowHeaderLogo,
|
||
|
|
getHeaderTheme,
|
||
|
|
getShowHeaderTrigger,
|
||
|
|
getIsMobile,
|
||
|
|
getShowBread,
|
||
|
|
getShowContent,
|
||
|
|
getSplitType,
|
||
|
|
getMenuMode,
|
||
|
|
getShowTopMenu,
|
||
|
|
getShowLocale,
|
||
|
|
getShowFullScreen,
|
||
|
|
getShowNotice,
|
||
|
|
getUseLockPage,
|
||
|
|
getUseErrorHandle,
|
||
|
|
};
|
||
|
|
},
|
||
|
|
});
|
||
|
|
</script>
|
||
|
|
<style lang="less">
|
||
|
|
@import './index.less';
|
||
|
|
</style>
|