index.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import React from 'react';
  2. import { Link } from 'react-router-dom';
  3. import { Dropdown } from 'antd';
  4. import Assets from '@src/components/Assets';
  5. import Button from '../Button';
  6. import './index.less';
  7. import { User } from '../../stores/user';
  8. import { formatDate } from '../../../../src/services/Tools';
  9. function Header(props) {
  10. const { tabs = [], active, user } = props;
  11. const { info = {} } = user;
  12. let inviteStatus = false;
  13. if (info.login) {
  14. const inviteDate = new Date(info.inviteLatestTime);
  15. inviteStatus = (inviteDate.getTime() - new Date().getTime) > 864000000;
  16. }
  17. return (
  18. <div id="header">
  19. <div className="body">
  20. <div className="left">
  21. <Assets name="logo" className="c-p" onClick={() => linkTo('/')} />
  22. </div>
  23. <div className="center">
  24. <div className="tabs">
  25. {tabs.map(item => {
  26. if (item.children && item.children.length > 0) {
  27. return <Dropdown
  28. trigger="hover"
  29. overlayClassName="header-user-overlay"
  30. overlay={
  31. <div className="list" >
  32. {item.children.map(row => {
  33. return <Link class="item" to={row.path}>
  34. <div className={`${active === row.key ? 'active' : ''}`}>{row.name}</div>
  35. </Link>;
  36. })}
  37. </div>
  38. }>
  39. <Link to={item.path}>
  40. <div className={`tab ${item.children.map(row => row.key).indexOf(active) >= 0 ? 'active' : ''}`}>{item.name}</div>
  41. </Link>
  42. </Dropdown>;
  43. }
  44. return (
  45. <Link to={item.path}>
  46. <div className={`tab ${active === item.key ? 'active' : ''}`}>{item.name}</div>
  47. </Link>
  48. );
  49. })}
  50. </div>
  51. </div>
  52. <div className="right">
  53. {user.login ? (
  54. <Dropdown
  55. trigger="hover"
  56. overlayClassName="header-user-overlay"
  57. overlay={
  58. <div className="list">
  59. <div className={`item ${info.previewNumber > 0 ? 'more-message' : ''}`} onClick={() => linkTo('/my/course')}>
  60. <div className="t-1">
  61. <Assets name={info.previewNumber > 0 ? 'course_more' : 'course'} svg />
  62. 课程
  63. </div>
  64. {info.previewNumber > 0 && <div className="t-s-12 nowrap" onClick={(e) => {
  65. e.stopPropagation();
  66. linkTo('/exercise?tab1=preview');
  67. }}>
  68. <span className="t-4">{info.previewNumber}</span> 份作业待完成
  69. </div>}
  70. </div>
  71. <div className={`item ${info.textbook ? 'more-message' : ''}`} onClick={() => linkTo('/my/tools?tab=textbook')}>
  72. <div className="t-1">
  73. <Assets name={info.textbook ? 'jijing_more' : 'jijing'} svg />
  74. 机经
  75. </div>
  76. {info.textbook && <div className="t-s-12 nowrap">最近更新:{formatDate(info.textbook, 'YYYY-MM-DD')}</div>}
  77. </div>
  78. <div className={`item ${inviteStatus ? 'more-message' : ''}`} onClick={() => User.needInvite()}>
  79. <div className="t-1">
  80. <Assets name={inviteStatus ? 'yaoqing_more' : 'yaoqing'} svg />
  81. 邀请好友
  82. </div>
  83. {inviteStatus && <div className="t-s-12 nowrap">第{info.inviteNumber}位好友加入</div>}
  84. </div>
  85. <div className={`item ${info.messageNumber > 0 ? 'more-message' : ''}`} onClick={() => linkTo('/my/message')}>
  86. <div className="t-1">
  87. <Assets name={info.messageNumber > 0 ? 'message_more' : 'message'} svg />
  88. 消息
  89. </div>
  90. {info.messageNumber > 0 && <div className="t-s-12 nowrap" onClick={(e) => {
  91. e.stopPropagation();
  92. if (info.messages[0].link) {
  93. linkTo(info.messages[0].link);
  94. } else {
  95. linkTo('/my/message');
  96. }
  97. }}>{`[${info.messages[0].title}]`}{info.messages[0].content.substr(0, 6)}...</div>}
  98. </div>
  99. <div className="item" onClick={() => User.logout()}>
  100. <div className="t-1">
  101. <Assets name="exit" svg />
  102. 退出
  103. </div>
  104. </div>
  105. </div>
  106. }
  107. >
  108. <Link to="/my/main" className="info">
  109. <Assets className="avatar" name="sun_blue" src={user.info.avatar} />
  110. <span className="t-2 f-s-12">{(user.info.nickname || '') || `qx${user.info.mobile}`}</span>
  111. </Link>
  112. </Dropdown>
  113. ) : (<Button onClick={() => {
  114. User.needLogin();
  115. }}>登录</Button>)}
  116. </div>
  117. </div>
  118. </div>
  119. );
  120. }
  121. Header.propTypes = {};
  122. export default Header;