page.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import React, { Component } from 'react';
  2. import './index.less';
  3. import { Icon } from 'antd';
  4. import Page from '@src/containers/Page';
  5. import { formatDate } from '@src/services/Tools';
  6. import Modal from '../../../components/Modal';
  7. export default class extends Page {
  8. constructor(props) {
  9. props.size = 10;
  10. super(props);
  11. }
  12. initState() {
  13. return {
  14. tab: 'question',
  15. module: 'exercise',
  16. timerange: 'today',
  17. filterMap: {},
  18. sortMap: {},
  19. list: [],
  20. selectList: [],
  21. allChecked: false,
  22. showDetail: false,
  23. };
  24. }
  25. initData() {}
  26. onFilter(value) {
  27. this.search(value, false);
  28. this.initData();
  29. }
  30. onChangePage(page) {
  31. this.search({ page }, false);
  32. this.initData();
  33. }
  34. renderView() {
  35. const { list = [] } = this.state;
  36. return (
  37. <div>
  38. <div className="top content t-8">
  39. 千行课堂 > 全部课程 > OG20综合刷题 > 课时3 > <span className="t-1">我的笔记</span>
  40. <div className="f-r">返回课程</div>
  41. </div>
  42. <div className="center content">
  43. <div className="t-1 t-s-20 m-b-2">OG20综合刷题——第3课时:XXXXXXX</div>
  44. {list.map(item => {
  45. return (
  46. <Article
  47. data={item}
  48. onClick={() => this.setState({ showDetail: true, article: item })}
  49. onUnCollect={() => this.collectArticle(item, false)}
  50. />
  51. );
  52. })}
  53. </div>
  54. {this.renderModal()}
  55. </div>
  56. );
  57. }
  58. renderModal() {
  59. const { article = {} } = this.state;
  60. return [
  61. <ArticleDetail
  62. show={this.state.showDetail}
  63. data={article}
  64. onClose={() => this.setState({ showDetail: false })}
  65. onPrev={() => this.prevArticle()}
  66. onNext={() => this.nextArticle()}
  67. />,
  68. ];
  69. }
  70. }
  71. class ArticleDetail extends Component {
  72. render() {
  73. const { show, data, onClose, onPrev, onNext } = this.props;
  74. return (
  75. <Modal
  76. className="article-detail-modal"
  77. body={false}
  78. show={show}
  79. width={720}
  80. maskClosable
  81. close={false}
  82. onClose={onClose}
  83. center
  84. >
  85. <Icon type="left" className="prev" onClick={() => onPrev && onPrev()} />
  86. <Icon type="right" className="next" onClick={() => onNext && onNext()} />
  87. <div className="t-1 t-s-20 m-b-5">{data.title}</div>
  88. <div className="t-2 t-s-18 detail" dangerouslySetInnerHTML={{ __html: data.content }} />
  89. </Modal>
  90. );
  91. }
  92. }
  93. class Article extends Component {
  94. render() {
  95. const { data, onClick, onUnCollect } = this.props;
  96. return (
  97. <div className="article-item p-t-2 b-b" onClick={() => onClick && onClick()}>
  98. <div className="t-1 t-s-14 f-w-b">
  99. {data.title}
  100. <div className="f-r t-3 t-s-12 f-w-d">
  101. <span>{formatDate(data.updateTime, 'YYYY-MM-DD HH:mm:ss')}</span>
  102. <span className="m-l-2">阅读 {data.viewNumber}</span>
  103. <span className="m-l-2" onClick={() => onUnCollect()}>
  104. 取消收藏
  105. </span>
  106. </div>
  107. </div>
  108. <div className="t-2 m-b-2 detail" dangerouslySetInnerHTML={{ __html: data.content }} />
  109. </div>
  110. );
  111. }
  112. }