index.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import React, {PureComponent} from "react";
  2. import {connect} from 'react-redux';
  3. import {LinksWrapper, LinksTop, MainWrapper} from './style';
  4. import axios from "axios";
  5. import {Spin, Anchor} from "antd";
  6. const {Link} = Anchor;
  7. const LinksList = (props) => {
  8. const {list, loading} = props;
  9. if (loading) {
  10. return (
  11. <div className="example">
  12. <Spin size="large"/>
  13. </div>
  14. )
  15. } else {
  16. return (
  17. <div className='links cell'>
  18. {list.length ? <div className='extra'>
  19. {list.map((item, index) => {
  20. return (
  21. <div className='item' key={index}>
  22. <h2 className='link-title' id={`${item.title}`}><span className='fake-title'>{item.title}</span></h2>
  23. <ul className='link-items fontSmooth'>
  24. {item.list.map((item2, index2) => {
  25. return (
  26. <li className='link-item post-list-show ' key={index2}>
  27. <a href={item2.href} target={'_blank'} rel="noopener noreferrer">
  28. <img src={item2.logo} alt=""/>
  29. <span className="sitename">{item2.name}</span>
  30. <div className="linkdes">{item2.description}</div>
  31. </a>
  32. </li>
  33. )
  34. })}
  35. </ul>
  36. </div>
  37. )
  38. })}
  39. </div> : <p>去找点新朋友玩吧...</p>}
  40. </div>
  41. )
  42. }
  43. };
  44. class Links extends PureComponent {
  45. constructor(props) {
  46. super(props);
  47. this.state = {
  48. timg: '',
  49. list: [],
  50. loading: true
  51. }
  52. }
  53. render() {
  54. const {list, loading} = this.state;
  55. return (
  56. <LinksWrapper>
  57. <div className='pattern-center-blank'/>
  58. <LinksTop>
  59. <div className='pattern-attachment-img'>
  60. <img className='lazyload' src={this.state.timg} alt=""/>
  61. </div>
  62. <div className='pattern-header '>
  63. <h1>友人帐</h1>
  64. </div>
  65. </LinksTop>
  66. <MainWrapper>
  67. <div className='flex-items'>
  68. <LinksList list={list} loading={loading}/>
  69. <div className='toc-box'>
  70. {list.length?<Anchor className='toc' affix showInkInFixed onClick={this.handleClick} offsetTop={100}>
  71. {list.map((item)=>{
  72. return(
  73. <Link key={item.title} href={`#${item.title}`} title={item.title}/>
  74. )
  75. })}
  76. </Anchor>:null}
  77. </div>
  78. </div>
  79. </MainWrapper>
  80. </LinksWrapper>
  81. )
  82. }
  83. componentDidMount() {
  84. this.getLinks();
  85. this.getTimg();
  86. }
  87. handleClick(e, link) {
  88. e.preventDefault();
  89. };
  90. getLinks() {
  91. this.setState({loading: true});
  92. axios.get('/link/link/v2/list').then((res) => {
  93. let {extra} = res;
  94. let arrar = [];
  95. for (let i in extra) {
  96. arrar.push({
  97. title: i,
  98. list: extra[i]
  99. });
  100. }
  101. if (res.success === 1) {
  102. this.setState({
  103. list: arrar,
  104. loading: false
  105. })
  106. }
  107. });
  108. }
  109. getTimg() {
  110. const list = this.props.topImg;
  111. const num = this.getrand(0, list.length - 1);
  112. this.setState({timg: list[num].img})
  113. }
  114. getrand(m, n) {
  115. return Math.floor(Math.random() * (n - m + 1)) + m;
  116. }
  117. }
  118. const mapState = (state) => {
  119. return {
  120. topImg: state.getIn(['image', 'topImg'])
  121. }
  122. };
  123. export default connect(mapState)(Links)