Articles.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. import React, { Component, Fragment } from 'react';
  2. import moment from 'moment';
  3. import { connect } from 'dva';
  4. import { Form, Card, Select, List, Tag, Icon, Avatar, Row, Col, Button } from 'antd';
  5. import StandardFormRow from '../../components/StandardFormRow';
  6. import TagSelect from '../../components/TagSelect';
  7. import styles from './Articles.less';
  8. const { Option } = Select;
  9. const FormItem = Form.Item;
  10. const pageSize = 5;
  11. @Form.create()
  12. @connect(({ list, loading }) => ({
  13. list,
  14. loading: loading.models.list,
  15. }))
  16. export default class SearchList extends Component {
  17. componentDidMount() {
  18. this.fetchMore();
  19. }
  20. setOwner = () => {
  21. const { form } = this.props;
  22. form.setFieldsValue({
  23. owner: ['wzj'],
  24. });
  25. }
  26. fetchMore = () => {
  27. this.props.dispatch({
  28. type: 'list/appendFetch',
  29. payload: {
  30. count: pageSize,
  31. },
  32. });
  33. }
  34. render() {
  35. const { form, list: { list }, loading } = this.props;
  36. const { getFieldDecorator } = form;
  37. const owners = [
  38. {
  39. id: 'wzj',
  40. name: '我自己',
  41. },
  42. {
  43. id: 'wjh',
  44. name: '吴家豪',
  45. },
  46. {
  47. id: 'zxx',
  48. name: '周星星',
  49. },
  50. {
  51. id: 'zly',
  52. name: '赵丽颖',
  53. },
  54. {
  55. id: 'ym',
  56. name: '姚明',
  57. },
  58. ];
  59. const IconText = ({ type, text }) => (
  60. <span>
  61. <Icon type={type} style={{ marginRight: 8 }} />
  62. {text}
  63. </span>
  64. );
  65. const ListContent = ({ data: { content, updatedAt, avatar, owner, href } }) => (
  66. <div className={styles.listContent}>
  67. <div className={styles.description}>{content}</div>
  68. <div className={styles.extra}>
  69. <Avatar src={avatar} size="small" /><a href={href}>{owner}</a> 发布在 <a href={href}>{href}</a>
  70. <em>{moment(updatedAt).format('YYYY-MM-DD HH:mm')}</em>
  71. </div>
  72. </div>
  73. );
  74. const formItemLayout = {
  75. wrapperCol: {
  76. xs: { span: 24 },
  77. sm: { span: 24 },
  78. md: { span: 12 },
  79. },
  80. };
  81. const loadMore = list.length > 0 ? (
  82. <div style={{ textAlign: 'center', marginTop: 16 }}>
  83. <Button onClick={this.fetchMore} style={{ paddingLeft: 48, paddingRight: 48 }}>
  84. {loading ? <span><Icon type="loading" /> 加载中...</span> : '加载更多'}
  85. </Button>
  86. </div>
  87. ) : null;
  88. return (
  89. <Fragment>
  90. <Card bordered={false}>
  91. <Form layout="inline">
  92. <StandardFormRow title="所属类目" block style={{ paddingBottom: 11 }}>
  93. <FormItem>
  94. {getFieldDecorator('category')(
  95. <TagSelect onChange={this.handleFormSubmit} expandable>
  96. <TagSelect.Option value="cat1">类目一</TagSelect.Option>
  97. <TagSelect.Option value="cat2">类目二</TagSelect.Option>
  98. <TagSelect.Option value="cat3">类目三</TagSelect.Option>
  99. <TagSelect.Option value="cat4">类目四</TagSelect.Option>
  100. <TagSelect.Option value="cat5">类目五</TagSelect.Option>
  101. <TagSelect.Option value="cat6">类目六</TagSelect.Option>
  102. <TagSelect.Option value="cat7">类目七</TagSelect.Option>
  103. <TagSelect.Option value="cat8">类目八</TagSelect.Option>
  104. <TagSelect.Option value="cat9">类目九</TagSelect.Option>
  105. <TagSelect.Option value="cat10">类目十</TagSelect.Option>
  106. <TagSelect.Option value="cat11">类目十一</TagSelect.Option>
  107. <TagSelect.Option value="cat12">类目十二</TagSelect.Option>
  108. </TagSelect>
  109. )}
  110. </FormItem>
  111. </StandardFormRow>
  112. <StandardFormRow
  113. title="owner"
  114. grid
  115. >
  116. <Row>
  117. <Col lg={16} md={24} sm={24} xs={24}>
  118. <FormItem>
  119. {getFieldDecorator('owner', {
  120. initialValue: ['wjh', 'zxx'],
  121. })(
  122. <Select
  123. mode="multiple"
  124. style={{ maxWidth: 286, width: '100%' }}
  125. placeholder="选择 owner"
  126. >
  127. {
  128. owners.map(owner =>
  129. <Option key={owner.id} value={owner.id}>{owner.name}</Option>
  130. )
  131. }
  132. </Select>
  133. )}
  134. <a className={styles.selfTrigger} onClick={this.setOwner}>只看自己的</a>
  135. </FormItem>
  136. </Col>
  137. </Row>
  138. </StandardFormRow>
  139. <StandardFormRow
  140. title="其它选项"
  141. grid
  142. last
  143. >
  144. <Row gutter={16}>
  145. <Col xl={8} lg={10} md={12} sm={24} xs={24}>
  146. <FormItem
  147. {...formItemLayout}
  148. label="活跃用户"
  149. >
  150. {getFieldDecorator('user', {})(
  151. <Select
  152. onChange={this.handleFormSubmit}
  153. placeholder="不限"
  154. style={{ maxWidth: 200, width: '100%' }}
  155. >
  156. <Option value="lisa">李三</Option>
  157. </Select>
  158. )}
  159. </FormItem>
  160. </Col>
  161. <Col xl={8} lg={10} md={12} sm={24} xs={24}>
  162. <FormItem
  163. {...formItemLayout}
  164. label="好评度"
  165. >
  166. {getFieldDecorator('rate', {})(
  167. <Select
  168. onChange={this.handleFormSubmit}
  169. placeholder="不限"
  170. style={{ maxWidth: 200, width: '100%' }}
  171. >
  172. <Option value="good">优秀</Option>
  173. </Select>
  174. )}
  175. </FormItem>
  176. </Col>
  177. </Row>
  178. </StandardFormRow>
  179. </Form>
  180. </Card>
  181. <Card
  182. style={{ marginTop: 24 }}
  183. bordered={false}
  184. bodyStyle={{ padding: '8px 32px 32px 32px' }}
  185. >
  186. <List
  187. size="large"
  188. loading={list.length === 0 ? loading : false}
  189. rowKey="id"
  190. itemLayout="vertical"
  191. loadMore={loadMore}
  192. dataSource={list}
  193. renderItem={item => (
  194. <List.Item
  195. key={item.id}
  196. actions={[
  197. <IconText type="star-o" text={item.star} />,
  198. <IconText type="like-o" text={item.like} />,
  199. <IconText type="message" text={item.message} />,
  200. ]}
  201. extra={<div className={styles.listItemExtra} />}
  202. >
  203. <List.Item.Meta
  204. title={(
  205. <a className={styles.listItemMetaTitle} href={item.href}>{item.title}</a>
  206. )}
  207. description={
  208. <span>
  209. <Tag>Ant Design</Tag>
  210. <Tag>设计语言</Tag>
  211. <Tag>蚂蚁金服</Tag>
  212. </span>
  213. }
  214. />
  215. <ListContent data={item} />
  216. </List.Item>
  217. )}
  218. />
  219. </Card>
  220. </Fragment>
  221. );
  222. }
  223. }