// components import { Dropdown, Menu } from 'ant-design-vue'; import { defineComponent, computed, unref } from 'vue'; // res import headerImg from '/@/assets/images/header.jpg'; import Icon from '/@/components/Icon/index'; import { userStore } from '/@/store/modules/user'; import { DOC_URL } from '/@/settings/siteSetting'; import { openWindow } from '/@/utils'; import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; import { FunctionalComponent } from 'vue'; import { useI18n } from '/@/hooks/web/useI18n'; type MenuEvent = 'loginOut' | 'doc'; interface MenuItemProps { icon: string; text: string; key: MenuEvent; } const prefixCls = 'user-dropdown'; const MenuItem: FunctionalComponent = (props) => { const { key, icon, text } = props; return ( {() => ( {text} )} ); }; export default defineComponent({ name: 'UserDropdown', setup() { const { t } = useI18n('layout.header'); const { getShowDoc } = useHeaderSetting(); const getUserInfo = computed(() => { const { realName = '', desc } = userStore.getUserInfoState || {}; return { realName, desc }; }); // login out function handleLoginOut() { userStore.confirmLoginOut(); } // open doc function openDoc() { openWindow(DOC_URL); } function handleMenuClick(e: { key: MenuEvent }) { switch (e.key) { case 'loginOut': handleLoginOut(); break; case 'doc': openDoc(); break; } } function renderSlotsDefault() { const { realName } = unref(getUserInfo); return (
{realName}
); } function renderSlotOverlay() { const showDoc = unref(getShowDoc); return ( {() => ( <> {showDoc && } {/* @ts-ignore */} {showDoc && } )} ); } return () => { return ( {{ default: () => renderSlotsDefault(), overlay: () => renderSlotOverlay(), }} ); }; }, });