知与行后台管理端

AvatarDropdown.jsx 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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/router';
  6. import HeaderDropdown from '../HeaderDropdown';
  7. import styles from './index.less';
  8. import ShowPassword from './ShowPassword'
  9. class AvatarDropdown extends React.Component {
  10. constructor(props) {
  11. super()
  12. this.state = { visible: false }
  13. }
  14. onMenuClick = event => {
  15. const { key } = event;
  16. if (key === 'logout') {
  17. const { dispatch } = this.props;
  18. if (dispatch) {
  19. dispatch({
  20. type: 'login/logout',
  21. });
  22. }
  23. return;
  24. }
  25. if (key === 'updatePassword') {
  26. this.setState({ visible: true })
  27. return;
  28. }
  29. router.push(`/account/${key}`);
  30. };
  31. onCancel = (e) => {
  32. this.setState({ visible: false })
  33. }
  34. render() {
  35. const {
  36. currentUser = {
  37. avatar: '',
  38. userName: '',
  39. },
  40. menu,
  41. } = this.props;
  42. const menuHeaderDropdown = (
  43. <Menu className={styles.menu} selectedKeys={[]} onClick={this.onMenuClick}>
  44. {menu && (
  45. <Menu.Item key="center">
  46. <Icon type="user" />
  47. <FormattedMessage id="menu.account.center" defaultMessage="account center" />
  48. </Menu.Item>
  49. )}
  50. {menu && (
  51. <Menu.Item key="settings">
  52. <Icon type="setting" />
  53. <FormattedMessage id="menu.account.settings" defaultMessage="account settings" />
  54. </Menu.Item>
  55. )}
  56. {menu && <Menu.Divider />}
  57. <Menu.Item key="updatePassword">
  58. <Icon type="key" />
  59. <FormattedMessage id="menu.account.updatePassword" defaultMessage="updatePassword" />
  60. </Menu.Item>
  61. <Menu.Item key="logout">
  62. <Icon type="logout" />
  63. <FormattedMessage id="menu.account.logout" defaultMessage="logout" />
  64. </Menu.Item>
  65. </Menu>
  66. );
  67. return currentUser && currentUser.userName ? (
  68. <>
  69. <HeaderDropdown overlay={menuHeaderDropdown}>
  70. <span className={`${styles.action} ${styles.account}`}>
  71. <Avatar size="small" className={styles.avatar} src={currentUser.avatar} alt="avatar" />
  72. <span className={styles.name}>{currentUser.userName}</span>
  73. </span>
  74. </HeaderDropdown>
  75. {/* 修改密码 */}
  76. <ShowPassword visible={this.state.visible} onCancel={(e) => this.onCancel(e)} />
  77. </>
  78. ) : (
  79. <Spin
  80. size="small"
  81. style={{
  82. marginLeft: 8,
  83. marginRight: 8,
  84. }}
  85. />
  86. );
  87. }
  88. }
  89. export default connect(({ user }) => ({
  90. currentUser: user.currentUser,
  91. }))(AvatarDropdown);