RightContent.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import React, { PureComponent } from 'react';
  2. import { FormattedMessage } from 'umi/locale';
  3. import { Tag, Menu, Icon } from 'antd';
  4. import moment from 'moment';
  5. import groupBy from 'lodash/groupBy';
  6. import HeaderDropdown from '../HeaderDropdown';
  7. import SiteSelector from '../SiteSelector';
  8. import styles from './index.less';
  9. import { sldComLanguage } from '@/utils/utils';
  10. import { specialFlag } from '@/utils/sldconfig';
  11. export default class GlobalHeaderRight extends PureComponent {
  12. getNoticeData() {
  13. const { notices = [] } = this.props;
  14. if (notices.length === 0) {
  15. return {};
  16. }
  17. const newNotices = notices.map(notice => {
  18. const newNotice = { ...notice };
  19. if (newNotice.datetime) {
  20. newNotice.datetime = moment(notice.datetime).fromNow();
  21. }
  22. if (newNotice.id) {
  23. newNotice.key = newNotice.id;
  24. }
  25. if (newNotice.extra && newNotice.status) {
  26. const color = {
  27. todo: '',
  28. processing: 'blue',
  29. urgent: 'red',
  30. doing: 'gold',
  31. }[newNotice.status];
  32. newNotice.extra = (
  33. <Tag color={color} style={{ marginRight: 0 }}>
  34. {newNotice.extra}
  35. </Tag>
  36. );
  37. }
  38. return newNotice;
  39. });
  40. return groupBy(newNotices, 'type');
  41. }
  42. getUnreadData = noticeData => {
  43. const unreadMsg = {};
  44. Object.entries(noticeData).forEach(([key, value]) => {
  45. if (!unreadMsg[key]) {
  46. unreadMsg[key] = 0;
  47. }
  48. if (Array.isArray(value)) {
  49. unreadMsg[key] = value.filter(item => !item.read).length;
  50. }
  51. });
  52. return unreadMsg;
  53. };
  54. changeReadState = clickedItem => {
  55. const { id } = clickedItem;
  56. const { dispatch } = this.props;
  57. dispatch({
  58. type: 'global/changeNoticeReadState',
  59. payload: id,
  60. });
  61. };
  62. render() {
  63. const {
  64. onMenuClick,
  65. theme,
  66. } = this.props;
  67. const menu = (
  68. <Menu className={styles.menu} selectedKeys={[]} onClick={onMenuClick}>
  69. {specialFlag>-3&&
  70. <Menu.Item key="version">
  71. 当前版本:v4.1
  72. </Menu.Item>
  73. }
  74. <Menu.Item key="userinfo">
  75. <Icon type="setting"/>
  76. {sldComLanguage('修改密码')}
  77. </Menu.Item>
  78. <Menu.Item key="logout">
  79. <Icon type="logout"/>
  80. {sldComLanguage('退出登录')}
  81. </Menu.Item>
  82. </Menu>
  83. );
  84. const noticeData = this.getNoticeData();
  85. const unreadMsg = this.getUnreadData(noticeData);
  86. let className = styles.right;
  87. if (theme === 'dark') {
  88. className = `${styles.right} ${styles.dark}`;
  89. }
  90. return (
  91. <div className={className}>
  92. <SiteSelector></SiteSelector>
  93. <HeaderDropdown overlay={menu}>
  94. <span className={`${styles.action} ${styles.account}`}>
  95. <span className={styles.name} style={{color:'#fff'}}>
  96. {(localStorage.getItem('user_info') != '' && localStorage.getItem('user_info') != null) ? JSON.parse(localStorage.getItem('user_info')).user_name : 'admin'}
  97. </span>
  98. </span>
  99. </HeaderDropdown>
  100. {/*<SelectLang className={styles.action}/>*/}
  101. </div>
  102. );
  103. }
  104. }