index.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import React, {PureComponent} from "react";
  2. import {CategoryArticleWrapper, ArticleTop, MainWrapper} from './style';
  3. import {connect} from 'react-redux';
  4. import axios from "axios";
  5. import CatList from "../../components/List";
  6. import PagInation from '../../components/PagInation';
  7. class Category extends PureComponent {
  8. constructor(props) {
  9. super(props);
  10. this.state = {
  11. timg: '',
  12. id: props.match.params.id,
  13. finished: false,
  14. loading: true,
  15. page: 1,
  16. CategoryList: []
  17. };
  18. this.getList = this.getList.bind(this);
  19. }
  20. render() {
  21. const {category} = this.props;
  22. const {CategoryList, page, finished, loading, id} = this.state;
  23. return (
  24. <CategoryArticleWrapper>
  25. <div className='pattern-center-blank'/>
  26. <ArticleTop>
  27. <div className='pattern-attachment-img'>
  28. <img className='lazyload' src={this.state.timg} alt=""/>
  29. </div>
  30. <div className='pattern-header '>
  31. <h1>{this.setCategory(category)}</h1>
  32. </div>
  33. </ArticleTop>
  34. <MainWrapper>
  35. <header className="page-header">
  36. <h1 className="page-title">{`分类 “${this.setCategory(category)}” 下的文章`}</h1>
  37. </header>
  38. <CatList list={CategoryList}/>
  39. <PagInation page={page} id={id} finished={finished} loading={loading} getList={this.getList}/>
  40. </MainWrapper>
  41. </CategoryArticleWrapper>
  42. )
  43. }
  44. componentDidMount() {
  45. this.getList(1, this.state.id, true);
  46. this.getTimg();
  47. }
  48. getList(page, id, override) {
  49. this.setState({loading: true});
  50. axios.get('/posts/posts/v1/list', {
  51. params: {
  52. page: page,
  53. size: 10,
  54. categoryId: id
  55. }
  56. }).then((res) => {
  57. if (res.success === 1) {
  58. let current = res.pageInfo.page * res.pageInfo.size;
  59. let total = res.pageInfo.total;
  60. const data = res.models;
  61. const Img = this.props.ListImg;
  62. let arr = [];
  63. for (let i = 0; i < data.length; i++) {
  64. arr.push({
  65. id: data[i].id,
  66. title: data[i].title,
  67. thumbnail: data[i].thumbnail || Img[this.getrand(0, Img.length - 1)].img,
  68. comments: data[i].comments,
  69. status: data[i].status,
  70. summary: data[i].summary,
  71. views: data[i].views,
  72. createTime: data[i].createTime,
  73. syncStatus: data[i].syncStatus,
  74. author: data[i].author,
  75. categoryName: data[i].categoryName
  76. })
  77. }
  78. this.setState((prevState) => {
  79. return {
  80. CategoryList: override ? arr : [...prevState.CategoryList, ...arr],
  81. page: page + 1,
  82. loading: false
  83. }
  84. });
  85. if (current > total) {
  86. this.setState({
  87. finished: true
  88. })
  89. }
  90. }
  91. });
  92. }
  93. getTimg() {
  94. const list = this.props.topImg;
  95. const num = this.getrand(0, list.length - 1);
  96. this.setState({timg: list[num].img})
  97. }
  98. getrand(m, n) {
  99. return Math.floor(Math.random() * (n - m + 1)) + m;
  100. }
  101. setCategory(category) {
  102. const id = parseFloat(this.props.match.params.id);
  103. let Text = '';
  104. const list = category.toJS();
  105. list.forEach((item) => {
  106. if (!Text && item.id === id) {
  107. Text = item.name;
  108. }
  109. });
  110. return Text;
  111. }
  112. }
  113. const mapState = (state) => {
  114. return {
  115. category: state.getIn(['header', 'category']),
  116. topImg: state.getIn(['image', 'topImg']),
  117. ListImg: state.getIn(['image', 'ListImg']),
  118. }
  119. };
  120. export default connect(mapState)(Category)