index.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import React, {PureComponent} from "react";
  2. import {Link} from 'react-router-dom';
  3. import {connect} from "react-redux";
  4. import axios from "axios";
  5. import {Spin, Tag} from "antd";
  6. import {TagsWrapper, TagsTop, MainWrapper} from './style';
  7. const TagsList = (props) => {
  8. const {list, loading} = props;
  9. const color = ['#23b7e5', '#3a3f51', '#27c24c', '#1c2b36', '#fad733', '#7266ba', '#f05050'];
  10. if (loading) {
  11. return (
  12. <div className="example">
  13. <Spin size="large"/>
  14. </div>
  15. )
  16. } else {
  17. return (
  18. <div className='tags-list'>
  19. {list.length?list.map((item, index) => {
  20. return (
  21. <Tag color={color[getrand(0, color.length - 1)]} key={index}>
  22. <Link to={'/tags/' + item.id}>{item.name}({item.postsTotal})</Link>
  23. </Tag>
  24. )
  25. }):<p>你暂时还未添加标签...</p>}
  26. </div>
  27. )
  28. }
  29. };
  30. const getrand = (m, n) => {
  31. return Math.floor(Math.random() * (n - m + 1)) + m;
  32. };
  33. class Tags extends PureComponent {
  34. constructor(props) {
  35. super(props);
  36. this.state = {
  37. timg: '',
  38. list: [],
  39. loading: true
  40. }
  41. }
  42. render() {
  43. const {timg, list, loading} = this.state;
  44. return (
  45. <TagsWrapper>
  46. <div className='pattern-center-blank'/>
  47. <TagsTop>
  48. <div className='pattern-attachment-img'>
  49. <img className='lazyload' src={timg} alt=""/>
  50. </div>
  51. <div className='pattern-header '>
  52. <h1>标签墙</h1>
  53. </div>
  54. </TagsTop>
  55. <MainWrapper>
  56. <TagsList list={list} loading={loading}/>
  57. </MainWrapper>
  58. </TagsWrapper>
  59. )
  60. }
  61. componentDidMount() {
  62. this.getTags();
  63. this.getTimg();
  64. }
  65. getTags() {
  66. this.setState({loading: true});
  67. axios.get('/tags/tags-article-quantity/v1/list').then((res) => {
  68. if (res.success === 1) {
  69. this.setState({
  70. list: res.models,
  71. loading: false
  72. })
  73. }
  74. });
  75. }
  76. getTimg() {
  77. const list = this.props.topImg;
  78. const num = getrand(0, list.length - 1);
  79. this.setState({timg: list[num].img});
  80. }
  81. }
  82. const mapState = (state) => {
  83. return {
  84. topImg: state.getIn(['image', 'topImg'])
  85. }
  86. };
  87. export default connect(mapState)(Tags)