import './index.less'; import type { FunctionalComponent } from 'vue'; import type { Component } from '/@/components/types'; import { defineComponent, unref, computed, ref, // nextTick } from 'vue'; import { Layout, Tooltip, Badge } from 'ant-design-vue'; import { AppLogo } from '/@/components/Application'; import UserDropdown from './UserDropdown'; import LayoutMenu from '../menu'; import LayoutBreadcrumb from './LayoutBreadcrumb.vue'; import LockAction from '../lock/LockAction'; import LayoutTrigger from '../LayoutTrigger'; import NoticeAction from './notice/NoticeActionItem.vue'; import { RedoOutlined, FullscreenExitOutlined, FullscreenOutlined, LockOutlined, BugOutlined, } from '@ant-design/icons-vue'; import { useModal } from '/@/components/Modal'; import { useFullscreen } from '/@/hooks/web/useFullScreen'; import { useTabs } from '/@/hooks/web/useTabs'; // import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; 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'; 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) { // let logoEl: Element | null | undefined; // const logoWidthRef = ref(200); const logoRef = ref(null); const { refreshPage } = useTabs(); const { t } = useI18n(); const { getShowTopMenu, getShowHeaderTrigger, getSplit, getTopMenuAlign } = useMenuSetting(); const { getShowLocale } = useLocaleSetting(); const { getUseErrorHandle, getShowBreadCrumbIcon } = useRootSetting(); const { getHeaderTheme, getShowRedo, getUseLockPage, getShowFullScreen, getShowNotice, getShowContent, getShowBread, getShowHeaderLogo, } = useHeaderSetting(); const { push } = useRouter(); const [register, { openModal }] = useModal(); const { toggleFullscreen, isFullscreenRef } = useFullscreen(); // useWindowSizeFn( // () => { // nextTick(() => { // if (!unref(getShowTopMenu)) return; // let width = 0; // if (!logoEl) { // logoEl = unref(logoRef)?.$el; // } else { // width += logoEl.clientWidth; // } // logoWidthRef.value = width + 80; // }); // }, // 200, // { immediate: true } // ); const headerClass = computed(() => { const theme = unref(getHeaderTheme); return theme ? `layout-header__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 renderHeaderContent() { // const width = unref(logoWidthRef); return (
{unref(getShowHeaderLogo) && ( )} {unref(getShowContent) && (
{unref(getShowHeaderTrigger) && ( )} {unref(getShowBread) && }
)} {unref(getShowTopMenu) && ( //
)}
); } function renderActionDefault(Comp: Component | any, event: Fn) { return (
); } function renderAction() { return (
{unref(getUseErrorHandle) && ( {() => ( {() => renderActionDefault(BugOutlined, handleToErrorList)} )} )} {unref(getUseLockPage) && ( {() => renderActionDefault(LockOutlined, handleLockPage)} )} {unref(getShowNotice) && ( {() => } )} {unref(getShowRedo) && ( {() => renderActionDefault(RedoOutlined, refreshPage)} )} {unref(getShowFullScreen) && ( {() => { const Icon = !unref(isFullscreenRef) ? ( ) : ( ); return renderActionDefault(Icon, toggleFullscreen); }} )} {unref(getShowLocale) && ( )}
); } function renderHeaderDefault() { return ( <> {renderHeaderContent()} {renderAction()} ); } return () => { return ( {() => renderHeaderDefault()} ); }; }, });