import React, { useCallback } from 'react'; import { LogoutOutlined, UserOutlined } from '@ant-design/icons'; import { Avatar, Menu, Spin } from 'antd'; import { history, useModel, useAccess, Access } from 'umi'; import HeaderDropdown from '../HeaderDropdown'; import styles from './index.less'; export type GlobalHeaderRightProps = { menu?: boolean; }; const AvatarDropdown: React.FC<GlobalHeaderRightProps> = ({ menu }) => { const access = useAccess(); const { initialState, setInitialState } = useModel('@@initialState'); const onMenuClick = useCallback( (event: { key: React.Key; keyPath: React.Key[]; item: React.ReactInstance; domEvent: React.MouseEvent<HTMLElement>; }) => { const { key } = event; if (key === 'logout' && initialState) { setInitialState({ ...initialState, currentUser: undefined }); localStorage.removeItem("Authorization"); localStorage.removeItem('antd-pro-authority'); history.push(`/user/login`); return; } history.push(`/account/${key}`); }, [initialState, setInitialState], ); const loading = ( <span className={`${styles.action} ${styles.account}`}> <Spin size="small" style={{ marginLeft: 8, marginRight: 8, }} /> </span> ); if (!initialState) { return loading; } const { currentUser } = initialState; if (!currentUser || !currentUser.name) { return loading; } const menuHeaderDropdown = ( <Menu className={styles.menu} selectedKeys={[]} onClick={onMenuClick}> { access.insideAccess('IrTymGAHvrl') && (<Menu.Item key="center"> <UserOutlined /> 个人中心 </Menu.Item>) } <Menu.Divider /> <Menu.Item key="logout"> <LogoutOutlined /> 退出登录 </Menu.Item> </Menu> ); return ( <HeaderDropdown overlay={menuHeaderDropdown}> <span className={`${styles.action} ${styles.account}`}> <Avatar size="small" className={styles.avatar} src={currentUser?.avatarUrl} alt="avatar" /> <span className={`${styles.name} anticon`}>{currentUser.name}</span> </span> </HeaderDropdown> ); }; export default AvatarDropdown;