Monitor.js 5.35 KB
Newer Older
陈帅's avatar
陈帅 committed
1
import React, { PureComponent, Fragment } from 'react';
2
import { connect } from 'dva';
3
import { Row, Col, Card, Tooltip } from 'antd';
4
import numeral from 'numeral';
niko's avatar
niko committed
5 6 7 8
import { Pie, WaterWave, Gauge, TagCloud } from 'components/Charts';
import NumberInfo from 'components/NumberInfo';
import CountDown from 'components/CountDown';
import ActiveChart from 'components/ActiveChart';
陈帅's avatar
陈帅 committed
9
import Authorized from '../../utils/Authorized';
10 11
import styles from './Monitor.less';

陈帅's avatar
陈帅 committed
12 13
const { Secured } = Authorized;

14 15
const targetTime = new Date().getTime() + 3900000;

jim's avatar
jim committed
16 17 18 19 20 21
// use permission as a parameter
const havePermissionAsync = new Promise((resolve) => {
  // Call resolve on behalf of passed
  setTimeout(() => resolve(), 1000);
});
@Secured(havePermissionAsync)
Andreas Cederström's avatar
Andreas Cederström committed
22 23 24
@connect(({ monitor, loading }) => ({
  monitor,
  loading: loading.models.monitor,
25 26 27 28 29 30
}))
export default class Monitor extends PureComponent {
  componentDidMount() {
    this.props.dispatch({
      type: 'monitor/fetchTags',
    });
nikogu's avatar
nikogu committed
31
  }
nikogu's avatar
nikogu committed
32

33
  render() {
Andreas Cederström's avatar
Andreas Cederström committed
34
    const { monitor, loading } = this.props;
35 36 37
    const { tags } = monitor;

    return (
陈帅's avatar
陈帅 committed
38
      <Fragment>
39
        <Row gutter={24}>
niko's avatar
niko committed
40
          <Col xl={18} lg={24} md={24} sm={24} xs={24} style={{ marginBottom: 24 }}>
41
            <Card title="活动实时交易情况" bordered={false}>
42
              <Row>
niko's avatar
niko committed
43
                <Col md={6} sm={12} xs={24}>
44 45
                  <NumberInfo
                    subTitle="今日交易总额"
niko's avatar
niko committed
46
                    suffix=""
47 48 49
                    total={numeral(124543233).format('0,0')}
                  />
                </Col>
niko's avatar
niko committed
50
                <Col md={6} sm={12} xs={24}>
niko's avatar
niko committed
51
                  <NumberInfo subTitle="销售目标完成率" total="92%" />
52
                </Col>
niko's avatar
niko committed
53
                <Col md={6} sm={12} xs={24}>
niko's avatar
niko committed
54
                  <NumberInfo subTitle="活动剩余时间" total={<CountDown target={targetTime} />} />
55
                </Col>
niko's avatar
niko committed
56
                <Col md={6} sm={12} xs={24}>
57 58
                  <NumberInfo
                    subTitle="每秒交易总额"
niko's avatar
niko committed
59
                    suffix=""
60 61 62 63 64
                    total={numeral(234).format('0,0')}
                  />
                </Col>
              </Row>
              <div className={styles.mapChart}>
65
                <Tooltip title="等待后期实现">
niko's avatar
niko committed
66 67 68 69
                  <img
                    src="https://gw.alipayobjects.com/zos/rmsportal/HBWnDEUXCnGnGrRfrpKa.png"
                    alt="map"
                  />
70
                </Tooltip>
71 72 73
              </div>
            </Card>
          </Col>
niko's avatar
niko committed
74
          <Col xl={6} lg={24} md={24} sm={24} xs={24}>
75
            <Card title="活动情况预测" style={{ marginBottom: 24 }} bordered={false}>
nikogu's avatar
nikogu committed
76
              <ActiveChart />
77
            </Card>
78 79 80 81 82 83
            <Card
              title="券核效率"
              style={{ marginBottom: 24 }}
              bodyStyle={{ textAlign: 'center' }}
              bordered={false}
            >
84
              <Gauge
niko's avatar
niko committed
85
                format={(val) => {
niko's avatar
niko committed
86
                  switch (parseInt(val, 10)) {
niko's avatar
niko committed
87 88 89 90 91
                    case 20:
                      return '';
                    case 40:
                      return '';
                    case 60:
niko's avatar
niko committed
92
                      return '';
niko's avatar
niko committed
93 94 95 96 97 98
                    case 80:
                      return '';
                    default:
                      return '';
                  }
                }}
niko's avatar
niko committed
99
                title="跳出率"
niko's avatar
niko committed
100
                height={180}
101 102 103 104 105 106
                percent={87}
              />
            </Card>
          </Col>
        </Row>
        <Row gutter={24}>
afc163's avatar
afc163 committed
107
          <Col xl={12} lg={24} sm={24} xs={24}>
niko's avatar
niko committed
108
            <Card title="各品类占比" bordered={false} className={styles.pieCard}>
afc163's avatar
afc163 committed
109
              <Row style={{ padding: '16px 0' }}>
110 111
                <Col span={8}>
                  <Pie
nikogu's avatar
nikogu committed
112
                    animate={false}
113 114 115
                    percent={28}
                    subTitle="中式快餐"
                    total="28%"
偏右's avatar
偏右 committed
116
                    height={128}
afc163's avatar
afc163 committed
117
                    lineWidth={2}
118 119 120 121
                  />
                </Col>
                <Col span={8}>
                  <Pie
nikogu's avatar
nikogu committed
122
                    animate={false}
niko's avatar
niko committed
123
                    color="#5DDECF"
124 125 126
                    percent={22}
                    subTitle="西餐"
                    total="22%"
偏右's avatar
偏右 committed
127
                    height={128}
afc163's avatar
afc163 committed
128
                    lineWidth={2}
129 130 131 132
                  />
                </Col>
                <Col span={8}>
                  <Pie
nikogu's avatar
nikogu committed
133
                    animate={false}
niko's avatar
niko committed
134
                    color="#2FC25B"
135 136 137
                    percent={32}
                    subTitle="火锅"
                    total="32%"
偏右's avatar
偏右 committed
138
                    height={128}
afc163's avatar
afc163 committed
139
                    lineWidth={2}
140 141 142 143 144
                  />
                </Col>
              </Row>
            </Card>
          </Col>
145
          <Col xl={6} lg={12} sm={24} xs={24}>
niko's avatar
niko committed
146 147 148 149 150 151 152
            <Card
              title="热门搜索"
              loading={loading}
              bordered={false}
              bodyStyle={{ overflow: 'hidden' }}
            >
              <TagCloud data={tags} height={161} />
153 154
            </Card>
          </Col>
155
          <Col xl={6} lg={12} sm={24} xs={24}>
niko's avatar
niko committed
156 157 158 159 160 161
            <Card
              title="资源剩余"
              bodyStyle={{ textAlign: 'center', fontSize: 0 }}
              bordered={false}
            >
              <WaterWave height={161} title="补贴资金剩余" percent={34} />
162 163 164
            </Card>
          </Col>
        </Row>
陈帅's avatar
陈帅 committed
165
      </Fragment>
166 167 168
    );
  }
}