AvatarDropdown.jsx 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { Avatar, Icon, Menu, Spin } from 'antd';
  2. import { FormattedMessage } from 'umi-plugin-react/locale';
  3. import React from 'react';
  4. import { connect } from 'dva';
  5. import { router } from 'umi';
  6. import HeaderDropdown from '../HeaderDropdown';
  7. import styles from './index.less';
  8. class AvatarDropdown extends React.Component {
  9. onMenuClick = (event) => {
  10. const { key } = event;
  11. if (key === 'logout') {
  12. const { dispatch } = this.props;
  13. if (dispatch) {
  14. dispatch({
  15. type: 'login/logout',
  16. });
  17. }
  18. return;
  19. }
  20. router.push(`/account/${key}`);
  21. };
  22. render() {
  23. const {
  24. currentUser = {
  25. avatar: '',
  26. name: '',
  27. },
  28. menu,
  29. } = this.props;
  30. const menuHeaderDropdown = (
  31. <Menu className={styles.menu} selectedKeys={[]} onClick={this.onMenuClick}>
  32. {menu && (
  33. <Menu.Item key="center">
  34. <Icon type="user" />
  35. <FormattedMessage id="menu.account.center" defaultMessage="account center" />
  36. </Menu.Item>
  37. )}
  38. {menu && (
  39. <Menu.Item key="settings">
  40. <Icon type="setting" />
  41. <FormattedMessage id="menu.account.settings" defaultMessage="account settings" />
  42. </Menu.Item>
  43. )}
  44. {menu && <Menu.Divider />}
  45. <Menu.Item key="logout">
  46. <Icon type="logout" />
  47. <FormattedMessage id="menu.account.logout" defaultMessage="logout" />
  48. </Menu.Item>
  49. </Menu>
  50. );
  51. return currentUser && currentUser.name ? (
  52. <HeaderDropdown overlay={menuHeaderDropdown}>
  53. <span className={`${styles.action} ${styles.account}`}>
  54. <Avatar size="small" className={styles.avatar} src={currentUser.avatar} alt="avatar" />
  55. <span className={styles.name}>{currentUser.name}</span>
  56. </span>
  57. </HeaderDropdown>
  58. ) : (
  59. <Spin
  60. size="small"
  61. style={{
  62. marginLeft: 8,
  63. marginRight: 8,
  64. }}
  65. />
  66. );
  67. }
  68. }
  69. export default connect(({ user }) => ({
  70. currentUser: user.currentUser,
  71. }))(AvatarDropdown);