Monitor.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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';
  5. import { Pie, WaterWave, Gauge, TagCloud } from 'components/Charts';
  6. import NumberInfo from 'components/NumberInfo';
  7. import CountDown from 'components/CountDown';
  8. import ActiveChart from 'components/ActiveChart';
  9. import Authorized from '../../utils/Authorized';
  10. import styles from './Monitor.less';
  11. const { Secured } = Authorized;
  12. const targetTime = new Date().getTime() + 3900000;
  13. // use permission as a parameter
  14. const havePermissionAsync = new Promise((resolve) => {
  15. // Call resolve on behalf of passed
  16. setTimeout(() => resolve(), 1000);
  17. });
  18. @Secured(havePermissionAsync)
  19. @connect(({ monitor, loading }) => ({
  20. monitor,
  21. loading: loading.models.monitor,
  22. }))
  23. export default class Monitor extends PureComponent {
  24. componentDidMount() {
  25. this.props.dispatch({
  26. type: 'monitor/fetchTags',
  27. });
  28. }
  29. render() {
  30. const { monitor, loading } = this.props;
  31. const { tags } = monitor;
  32. return (
  33. <Fragment>
  34. <Row gutter={24}>
  35. <Col xl={18} lg={24} md={24} sm={24} xs={24} style={{ marginBottom: 24 }}>
  36. <Card title="活动实时交易情况" bordered={false}>
  37. <Row>
  38. <Col md={6} sm={12} xs={24}>
  39. <NumberInfo
  40. subTitle="今日交易总额"
  41. suffix="元"
  42. total={numeral(124543233).format('0,0')}
  43. />
  44. </Col>
  45. <Col md={6} sm={12} xs={24}>
  46. <NumberInfo subTitle="销售目标完成率" total="92%" />
  47. </Col>
  48. <Col md={6} sm={12} xs={24}>
  49. <NumberInfo subTitle="活动剩余时间" total={<CountDown target={targetTime} />} />
  50. </Col>
  51. <Col md={6} sm={12} xs={24}>
  52. <NumberInfo
  53. subTitle="每秒交易总额"
  54. suffix="元"
  55. total={numeral(234).format('0,0')}
  56. />
  57. </Col>
  58. </Row>
  59. <div className={styles.mapChart}>
  60. <Tooltip title="等待后期实现">
  61. <img
  62. src="https://gw.alipayobjects.com/zos/rmsportal/HBWnDEUXCnGnGrRfrpKa.png"
  63. alt="map"
  64. />
  65. </Tooltip>
  66. </div>
  67. </Card>
  68. </Col>
  69. <Col xl={6} lg={24} md={24} sm={24} xs={24}>
  70. <Card title="活动情况预测" style={{ marginBottom: 24 }} bordered={false}>
  71. <ActiveChart />
  72. </Card>
  73. <Card
  74. title="券核效率"
  75. style={{ marginBottom: 24 }}
  76. bodyStyle={{ textAlign: 'center' }}
  77. bordered={false}
  78. >
  79. <Gauge
  80. format={(val) => {
  81. switch (parseInt(val, 10)) {
  82. case 20:
  83. return '差';
  84. case 40:
  85. return '中';
  86. case 60:
  87. return '良';
  88. case 80:
  89. return '优';
  90. default:
  91. return '';
  92. }
  93. }}
  94. title="跳出率"
  95. height={180}
  96. percent={87}
  97. />
  98. </Card>
  99. </Col>
  100. </Row>
  101. <Row gutter={24}>
  102. <Col xl={12} lg={24} sm={24} xs={24}>
  103. <Card title="各品类占比" bordered={false} className={styles.pieCard}>
  104. <Row style={{ padding: '16px 0' }}>
  105. <Col span={8}>
  106. <Pie
  107. animate={false}
  108. percent={28}
  109. subTitle="中式快餐"
  110. total="28%"
  111. height={128}
  112. lineWidth={2}
  113. />
  114. </Col>
  115. <Col span={8}>
  116. <Pie
  117. animate={false}
  118. color="#5DDECF"
  119. percent={22}
  120. subTitle="西餐"
  121. total="22%"
  122. height={128}
  123. lineWidth={2}
  124. />
  125. </Col>
  126. <Col span={8}>
  127. <Pie
  128. animate={false}
  129. color="#2FC25B"
  130. percent={32}
  131. subTitle="火锅"
  132. total="32%"
  133. height={128}
  134. lineWidth={2}
  135. />
  136. </Col>
  137. </Row>
  138. </Card>
  139. </Col>
  140. <Col xl={6} lg={12} sm={24} xs={24}>
  141. <Card
  142. title="热门搜索"
  143. loading={loading}
  144. bordered={false}
  145. bodyStyle={{ overflow: 'hidden' }}
  146. >
  147. <TagCloud data={tags} height={161} />
  148. </Card>
  149. </Col>
  150. <Col xl={6} lg={12} sm={24} xs={24}>
  151. <Card
  152. title="资源剩余"
  153. bodyStyle={{ textAlign: 'center', fontSize: 0 }}
  154. bordered={false}
  155. >
  156. <WaterWave height={161} title="补贴资金剩余" percent={34} />
  157. </Card>
  158. </Col>
  159. </Row>
  160. </Fragment>
  161. );
  162. }
  163. }