import './index.less'; import type { FunctionalComponent } from 'vue'; import type { Component } from '/@/components/types'; import { defineComponent, unref, computed } from 'vue'; import { Layout, Tooltip, Badge } from 'ant-design-vue'; import { AppLogo } from '/@/components/Application'; import LayoutMenu from '../menu'; import LockAction from './actions/LockAction'; import LayoutTrigger from '../trigger/index.vue'; import NoticeAction from './notice/NoticeActionItem.vue'; import { LockOutlined, BugOutlined } from '@ant-design/icons-vue'; import { AppSearch } from '/@/components/Application'; import { useModal } from '/@/components/Modal'; 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 { useRouter } from 'vue-router'; import { errorStore } from '/@/store/modules/error'; import { PageEnum } from '/@/enums/pageEnum'; import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum'; import { AppLocalePicker } from '/@/components/Application'; import { useI18n } from '/@/hooks/web/useI18n'; import { propTypes } from '/@/utils/propTypes'; import { UserDropDown, LayoutBreadcrumb, FullScreen } from './components'; import { useAppInject } from '/@/hooks/web/useAppInject'; import { useDesign } from '../../../hooks/web/useDesign'; interface TooltipItemProps { title: string; } const TooltipItem: FunctionalComponent = (props, { slots }) => { return ( {{ title: () => props.title, default: () => slots.default?.(), }} ); }; export default defineComponent({ name: 'LayoutHeader', props: { fixed: propTypes.bool, }, setup(props) { const { t } = useI18n(); 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 { push } = useRouter(); const [register, { openModal }] = useModal(); const { getIsMobile } = useAppInject(); const headerClass = computed(() => { const theme = unref(getHeaderTheme); return theme ? `${prefixCls}__header--${theme}` : ''; }); const getSplitType = computed(() => { return unref(getSplit) ? MenuSplitTyeEnum.TOP : MenuSplitTyeEnum.NONE; }); const getMenuMode = computed(() => { return unref(getSplit) ? MenuModeEnum.HORIZONTAL : null; }); function handleToErrorList() { push(PageEnum.ERROR_LOG_PAGE).then(() => { errorStore.commitErrorListCountState(0); }); } function handleLockPage() { openModal(true); } function renderHeaderLeft() { return ( <> {unref(getShowContent) && (
{unref(getShowHeaderTrigger) && ( )} {unref(getShowBread) && !unref(getIsMobile) && ( )}
)} ); } function renderHeaderContent() { return (
{unref(getShowTopMenu) && !unref(getIsMobile) && (
{/*
*/}
)}
); } function renderActionDefault(Comp: Component | any, event: Fn) { return (
); } function renderAction() { return (
{!unref(getIsMobile) && } {unref(getUseErrorHandle) && !unref(getIsMobile) && ( {() => ( {() => renderActionDefault(BugOutlined, handleToErrorList)} )} )} {unref(getUseLockPage) && !unref(getIsMobile) && ( {() => renderActionDefault(LockOutlined, handleLockPage)} )} {unref(getShowNotice) && !unref(getIsMobile) && ( {() => } )} {unref(getShowFullScreen) && !unref(getIsMobile) && } {unref(getShowLocale) && ( )}
); } function renderHeaderDefault() { return ( <> {unref(getShowHeaderLogo) && ( )} {renderHeaderLeft()} {renderHeaderContent()} {renderAction()} ); } return () => { return ( {() => renderHeaderDefault()} ); }; }, });