| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- import React, { PureComponent } from 'react';
- import moment from 'moment';
- import { connect } from 'dva';
- import { routerRedux } from 'dva/router';
- import { Row, Col, Form, Card, Select, Spin } from 'antd';
- import PageHeaderLayout from '../../layouts/PageHeaderLayout';
- import StandardFormRow from '../../components/StandardFormRow';
- import TagSelect from '../../components/TagSelect';
- import AvatarList from '../../components/AvatarList';
- import SearchInput from '../../components/SearchInput';
- import styles from './CoverCardList.less';
- const Option = Select.Option;
- const FormItem = Form.Item;
- const TagOption = TagSelect.Option;
- const TagExpand = TagSelect.Expand;
- /* eslint react/no-array-index-key: 0 */
- @Form.create()
- @connect(state => ({
- list: state.list,
- }))
- export default class CoverCardList extends PureComponent {
- componentDidMount() {
- this.props.dispatch({
- type: 'list/fetch',
- payload: {
- count: 8,
- },
- });
- }
- handleFormSubmit = () => {
- const { form, dispatch } = this.props;
- // setTimeout 用于保证获取表单值是在所有表单字段更新完毕的时候
- setTimeout(() => {
- form.validateFields((err) => {
- if (!err) {
- // eslint-disable-next-line
- dispatch({
- type: 'list/fetch',
- payload: {
- count: 8,
- },
- });
- }
- });
- }, 0);
- }
- handleTabChange = (key) => {
- const { dispatch } = this.props;
- switch (key) {
- case 'doc':
- dispatch(routerRedux.push('/list/search'));
- break;
- case 'app':
- dispatch(routerRedux.push('/list/filter-card-list'));
- break;
- case 'project':
- dispatch(routerRedux.push('/list/cover-card-list'));
- break;
- default:
- break;
- }
- }
- render() {
- const { list: { list = [], loading }, form } = this.props;
- const { getFieldDecorator } = form;
- const cardList = list ? (
- <Row gutter={16} style={{ marginTop: 16 }}>
- {
- list.map(item => (
- <Col lg={6} md={8} sm={12} xs={24} style={{ marginBottom: 16 }} key={item.id}>
- <Card
- cover={<img alt={item.title} src={item.cover} />}
- >
- <Card.Meta
- title={item.title}
- description={item.subDescription}
- />
- <div className={styles.cardItemContent}>
- <span>{moment(item.updatedAt).fromNow()}</span>
- <div className={styles.avatarList}>
- <AvatarList size="small">
- {
- item.members.map((member, i) => (
- <AvatarList.Item
- key={`${item.id}-avatar-${i}`}
- src={member.avatar}
- tips={member.name}
- />
- ))
- }
- </AvatarList>
- </div>
- </div>
- </Card>
- </Col>
- ))
- }
- </Row>
- ) : null;
- const tabList = [
- {
- key: 'doc',
- tab: '文章',
- },
- {
- key: 'app',
- tab: '应用',
- },
- {
- key: 'project',
- tab: '项目',
- default: true,
- },
- ];
- const pageHeaderContent = (
- <div style={{ textAlign: 'center' }}>
- <SearchInput onSearch={this.handleFormSubmit} />
- </div>
- );
- const formItemLayout = {
- wrapperCol: {
- xs: { span: 24 },
- sm: { span: 16 },
- },
- };
- return (
- <PageHeaderLayout
- title="带封面的卡片列表"
- content={pageHeaderContent}
- tabList={tabList}
- onTabChange={this.handleTabChange}
- >
- <div className={styles.coverCardList}>
- <Card
- bordered={false}
- noHovering
- >
- <Form
- layout="inline"
- >
- <StandardFormRow title="所属类目" block>
- <FormItem>
- {getFieldDecorator('category')(
- <TagSelect onChange={this.handleFormSubmit}>
- <TagOption value="cat1">类目一</TagOption>
- <TagOption value="cat2">类目二</TagOption>
- <TagOption value="cat3">类目三</TagOption>
- <TagOption value="cat4">类目四</TagOption>
- <TagExpand>
- <TagOption value="cat5">类目五</TagOption>
- <TagOption value="cat6">类目六</TagOption>
- </TagExpand>
- </TagSelect>
- )}
- </FormItem>
- </StandardFormRow>
- <StandardFormRow
- title="其它选项"
- grid
- last
- >
- <Row gutter={16}>
- <Col lg={8} md={10} sm={10} xs={24}>
- <FormItem
- {...formItemLayout}
- label="作者"
- >
- {getFieldDecorator('author', {})(
- <Select
- onChange={this.handleFormSubmit}
- placeholder="不限"
- style={{ maxWidth: 200, width: '100%' }}
- >
- <Option value="lisa">王昭君</Option>
- </Select>
- )}
- </FormItem>
- </Col>
- <Col lg={8} md={10} sm={10} xs={24}>
- <FormItem
- {...formItemLayout}
- label="好评度"
- >
- {getFieldDecorator('rate', {})(
- <Select
- onChange={this.handleFormSubmit}
- placeholder="不限"
- style={{ maxWidth: 200, width: '100%' }}
- >
- <Option value="good">优秀</Option>
- <Option value="normal">普通</Option>
- </Select>
- )}
- </FormItem>
- </Col>
- </Row>
- </StandardFormRow>
- </Form>
- </Card>
- {
- loading && (list.length > 0) && <Spin>
- {cardList}
- </Spin>
- }
- {
- loading && (list.length < 1) && <div style={{ marginTop: 16 }}><Spin /></div>
- }
- {
- !loading && cardList
- }
- </div>
- </PageHeaderLayout>
- );
- }
- }
|