AvatarDropdown.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-09-03 14:28:27
  4. * @LastEditTime: 2021-09-29 18:32:49
  5. * @LastEditors: Please set LastEditors
  6. * @Description: In User Settings Edit
  7. * @FilePath: /MedicalWisdomCheckSys/src/components/RightContent/AvatarDropdown.tsx
  8. */
  9. import React, { useCallback } from 'react';
  10. import { LogoutOutlined, SettingOutlined, UserOutlined } from '@ant-design/icons';
  11. import { Avatar, Menu, Spin } from 'antd';
  12. import { history, useModel } from 'umi';
  13. import HeaderDropdown from '../HeaderDropdown';
  14. import styles from './index.less';
  15. // import { outLogin } from '@/services/ant-design-pro/api';
  16. import type { MenuInfo } from 'rc-menu/lib/interface';
  17. import {loginOut} from '@/utils';
  18. export type GlobalHeaderRightProps = {
  19. menu?: boolean;
  20. };
  21. const AvatarDropdown: React.FC<GlobalHeaderRightProps> = ({ menu }) => {
  22. const { initialState, setInitialState } = useModel('@@initialState');
  23. const onMenuClick = useCallback(
  24. (event: MenuInfo) => {
  25. const { key } = event;
  26. if (key === 'logout') {
  27. setInitialState((s) => ({ ...s, currentUser: undefined }));
  28. localStorage.removeItem('userData');
  29. loginOut();
  30. return;
  31. }
  32. history.push(`/account/${key}`);
  33. },
  34. [setInitialState],
  35. );
  36. const loading = (
  37. <span className={`${styles.action} ${styles.account}`}>
  38. <Spin
  39. size="small"
  40. style={{
  41. marginLeft: 8,
  42. marginRight: 8,
  43. }}
  44. />
  45. </span>
  46. );
  47. if (!initialState) {
  48. return loading;
  49. }
  50. const { currentUser } = initialState;
  51. if (!currentUser || !currentUser.name) {
  52. return loading;
  53. }
  54. const menuHeaderDropdown = (
  55. <Menu className={styles.menu} selectedKeys={[]} onClick={onMenuClick}>
  56. {/* {menu && (
  57. <Menu.Item key="center">
  58. <UserOutlined />
  59. 个人中心
  60. </Menu.Item>
  61. )} */}
  62. {menu && (
  63. <Menu.Item key="settings">
  64. <SettingOutlined />
  65. 个人设置
  66. </Menu.Item>
  67. )}
  68. {menu && <Menu.Divider />}
  69. <Menu.Item key="logout">
  70. <LogoutOutlined />
  71. 退出登录
  72. </Menu.Item>
  73. </Menu>
  74. );
  75. return (
  76. <HeaderDropdown overlay={menuHeaderDropdown}>
  77. <span className={`${styles.action} ${styles.account}`}>
  78. <Avatar size="small" className={styles.avatar} src={currentUser.avatar} alt="avatar" />
  79. <span className={`${styles.name} anticon`}>{currentUser.name}</span>
  80. </span>
  81. </HeaderDropdown>
  82. );
  83. };
  84. export default AvatarDropdown;