Workplace.js 7.58 KB
Newer Older
1 2 3 4
import React, { PureComponent } from 'react';
import moment from 'moment';
import { connect } from 'dva';
import { Link } from 'dva/router';
niko's avatar
niko committed
5
import { Row, Col, Card, List, Avatar } from 'antd';
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

import PageHeaderLayout from '../../layouts/PageHeaderLayout';
import EditableLinkGroup from '../../components/EditableLinkGroup';
import { Radar } from '../../components/Charts';

import styles from './Workplace.less';

const links = [
  {
    title: '操作一',
    href: '',
  },
  {
    title: '操作二',
    href: '',
  },
  {
    title: '操作三',
    href: '',
  },
  {
    title: '操作四',
    href: '',
  },
  {
    title: '操作五',
    href: '',
  },
  {
    title: '操作六',
    href: '',
  },
];

const members = [
  {
    id: 'members-1',
niko's avatar
niko committed
43
    title: '科学搬砖组',
44 45 46 47 48
    logo: 'https://gw.alipayobjects.com/zos/rmsportal/CRxBvUggxBYzWBTGmkxF.png',
    link: '',
  },
  {
    id: 'members-2',
niko's avatar
niko committed
49
    title: '程序员日常',
50 51 52 53 54
    logo: 'https://gw.alipayobjects.com/zos/rmsportal/RBytOnluTcyeyDazAbvs.png',
    link: '',
  },
  {
    id: 'members-3',
niko's avatar
niko committed
55
    title: '设计天团',
56 57 58 59 60
    logo: 'https://gw.alipayobjects.com/zos/rmsportal/HQVJYAXtWHEJvLxQjmPa.png',
    link: '',
  },
  {
    id: 'members-4',
niko's avatar
niko committed
61
    title: '中二少女团',
62 63 64 65 66
    logo: 'https://gw.alipayobjects.com/zos/rmsportal/HQVJYAXtWHEJvLxQjmPa.png',
    link: '',
  },
  {
    id: 'members-5',
niko's avatar
niko committed
67
    title: '骗你学计算机',
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
    logo: 'https://gw.alipayobjects.com/zos/rmsportal/RBytOnluTcyeyDazAbvs.png',
    link: '',
  },
];

@connect(state => ({
  project: state.project,
  activities: state.activities,
  chart: state.chart,
}))
export default class Workplace extends PureComponent {
  componentDidMount() {
    const { dispatch } = this.props;
    dispatch({
      type: 'project/fetchNotice',
    });
    dispatch({
      type: 'activities/fetchList',
    });
    dispatch({
      type: 'chart/fetch',
    });
  }

  componentWillUnmount() {
    const { dispatch } = this.props;
    dispatch({
      type: 'chart/clear',
    });
  }

  render() {
    const {
      project: { loading: projectLoading, notice },
      activities: { loading: activitiesLoading, list: activitiesList },
      chart: { radarData },
    } = this.props;

106 107 108
    const pageHeaderContent = (
      <div className={styles.pageHeaderContent}>
        <div className={styles.avatar}>
afc163's avatar
afc163 committed
109
          <Avatar size="large" src="https://gw.alipayobjects.com/zos/rmsportal/TmNVmrOsXeZwnvvZMNmo.png" />
110
        </div>
111
        <div className={styles.content}>
niko's avatar
niko committed
112
          <p className={styles.contentTitle}>早安曲丽丽祝你开心每一天</p>
113 114 115 116 117
          <p>交互专家 | 蚂蚁金服某某某事业群某某平台部某某技术部UED</p>
        </div>
      </div>
    );

118 119
    const pageHeaderExtra = (
      <div className={styles.pageHeaderExtra}>
120
        <div>
niko's avatar
niko committed
121
          <p>项目数</p>
122 123 124
          <p>56</p>
        </div>
        <div>
niko's avatar
niko committed
125
          <p>团队内排名</p>
126 127 128
          <p>8<span> / 24</span></p>
        </div>
        <div>
niko's avatar
niko committed
129
          <p>项目访问</p>
130 131 132 133 134 135 136
          <p>2,223</p>
        </div>
      </div>
    );

    return (
      <PageHeaderLayout
137 138
        content={pageHeaderContent}
        extraContent={pageHeaderExtra}
139 140
      >
        <Row gutter={24}>
141
          <Col xl={16} lg={24} md={24} sm={24} xs={24}>
142 143 144 145 146 147 148 149 150 151
            <Card
              className={styles.projectList}
              style={{ marginBottom: 24 }}
              title="进行中的项目"
              bordered={false}
              extra={<Link to="/">全部项目</Link>}
              loading={projectLoading}
              bodyStyle={{ padding: 0 }}
            >
              {
nikogu's avatar
nikogu committed
152
                notice.map(item => (
153
                  <Card.Grid className={styles.projectGrid} key={item.id}>
154
                    <Card bodyStyle={{ padding: 0 }} bordered={false}>
155
                      <Card.Meta
niko's avatar
niko committed
156
                        title={(
afc163's avatar
afc163 committed
157
                          <div className={styles.cardTitle}>
niko's avatar
niko committed
158 159
                            <Avatar size="small" src={item.logo} />
                            <Link to={item.href}>{item.title}</Link>
afc163's avatar
afc163 committed
160
                          </div>
niko's avatar
niko committed
161
                        )}
162 163 164 165
                        description={item.description}
                      />
                      <div className={styles.projectItemContent}>
                        <Link to={item.memberLink}>{item.member || ''}</Link>
afc163's avatar
afc163 committed
166 167 168 169 170
                        {item.updatedAt && (
                          <span className={styles.datetime} title={item.updatedAt}>
                            {moment(item.updatedAt).fromNow()}
                          </span>
                        )}
171 172 173 174 175 176 177 178 179
                      </div>
                    </Card>
                  </Card.Grid>
                ))
              }
            </Card>
            <Card
              bodyStyle={{ padding: 0 }}
              bordered={false}
nikogu's avatar
nikogu committed
180
              className={styles.activeCard}
181 182 183
              title="动态"
              loading={activitiesLoading}
            >
niko's avatar
niko committed
184
              <List loading={activitiesLoading} size="large">
185 186 187 188 189
                <div className={styles.activitiesList}>
                  {
                    activitiesList.map(item => (
                      <List.Item key={item.id}>
                        <List.Item.Meta
afc163's avatar
afc163 committed
190
                          avatar={<Avatar src={item.user.avatar} />}
afc163's avatar
afc163 committed
191
                          title={
afc163's avatar
afc163 committed
192 193 194 195 196 197 198
                            <span>
                              <a className={styles.username}>{item.user.name}</a>
                              &nbsp;
                              <span className={styles.operation}>
                                 <a>xx</a> 新建了项目 <a>xxxx</a>
                              </span>
                            </span>
afc163's avatar
afc163 committed
199
                          }
afc163's avatar
afc163 committed
200 201 202 203 204
                          description={
                            <span className={styles.datetime} title={item.updatedAt}>
                              {moment(item.updatedAt).fromNow()}
                            </span>
                          }
205 206 207 208 209 210 211 212
                        />
                      </List.Item>
                    ))
                  }
                </div>
              </List>
            </Card>
          </Col>
213
          <Col xl={8} lg={24} md={24} sm={24} xs={24}>
214 215 216 217 218 219 220 221 222
            <Card
              style={{ marginBottom: 24 }}
              title="快速开始 / 便捷导航"
              bordered={false}
              bodyStyle={{ padding: 0 }}
            >
              <EditableLinkGroup
                onAdd={() => {}}
                links={links}
偏右's avatar
偏右 committed
223
                linkElement={Link}
224 225 226 227 228
              />
            </Card>
            <Card
              style={{ marginBottom: 24 }}
              bordered={false}
afc163's avatar
afc163 committed
229
              title="XX 指数"
nikogu's avatar
nikogu committed
230
              loading={radarData.length === 0}
231 232
            >
              <div className={styles.chart}>
afc163's avatar
afc163 committed
233
                <Radar hasLegend height={286} data={radarData} />
234 235 236
              </div>
            </Card>
            <Card
afc163's avatar
afc163 committed
237
              bodyStyle={{ paddingTop: 12, paddingBottom: 12 }}
238 239 240 241 242 243 244 245 246
              bordered={false}
              title="团队"
            >
              <div className={styles.members}>
                <Row gutter={48}>
                  {
                    members.map(item => (
                      <Col span={12} key={`members-item-${item.id}`}>
                        <Link to={item.link}>
afc163's avatar
afc163 committed
247 248
                          <Avatar src={item.logo} size="small" />
                          <span className={styles.member}>{item.title}</span>
249 250 251 252 253 254 255 256 257 258 259 260 261
                        </Link>
                      </Col>
                    ))
                  }
                </Row>
              </div>
            </Card>
          </Col>
        </Row>
      </PageHeaderLayout>
    );
  }
}