RightContent.js 3.0 KB

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