import './index.less'; import { defineComponent, unref, computed, ref } from 'vue'; import { Layout, Tooltip, Badge } from 'ant-design-vue'; import { AppLogo } from '/@/components/Application'; import UserDropdown from './UserDropdown'; import LayoutMenu from '/@/layouts/default/menu/LayoutMenu'; import LayoutBreadcrumb from './LayoutBreadcrumb'; import LockAction from './LockActionItem'; 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 { useRouter } from 'vue-router'; import { errorStore } from '/@/store/modules/error'; import { PageEnum } from '/@/enums/pageEnum'; import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum'; import { Component } from '/@/components/types'; export default defineComponent({ name: 'LayoutHeader', setup() { let logoEl: Element | null; const widthRef = ref(200); const { refreshPage } = useTabs(); const { getShowTopMenu, getShowHeaderTrigger, getSplit, getTopMenuAlign } = useMenuSetting(); const { getUseErrorHandle, getShowBreadCrumbIcon } = useRootSetting(); const { getTheme, getShowRedo, getUseLockPage, getShowFullScreen, getShowNotice, getShowContent, getShowBread, getShowHeaderLogo, } = useHeaderSetting(); const { push } = useRouter(); const [register, { openModal }] = useModal(); const { toggleFullscreen, isFullscreenRef } = useFullscreen(); useWindowSizeFn( () => { if (!unref(getShowTopMenu)) return; let width = 0; if (!logoEl) { logoEl = document.querySelector('.layout-header__logo'); } if (logoEl) { width += logoEl.clientWidth; } widthRef.value = width + 60; }, 200, { immediate: true } ); const headerClass = computed(() => { const theme = unref(getTheme); 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); }); } /** * @description: 锁定屏幕 */ function handleLockPage() { openModal(true); } function renderHeaderContent() { const width = unref(widthRef); return (