userSource.jsx 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import React, { Component, useState, useEffect } from 'react';
  2. import echarts from 'echarts/lib/echarts';
  3. import { Card } from 'antd';
  4. import EChart from '@/components/EchartsTest/EChart';
  5. import request from '@/utils/request';
  6. import apis from '@/services/apis';
  7. import moment from 'moment';
  8. import router from 'umi/router';
  9. const formatDate = (start, end) => {
  10. const startDate = moment(start).format('YYYY-MM-DDT00:00:00.000') + 'Z';
  11. const endDate = moment(end).format('YYYY-MM-DDT23:59:59.999') + 'Z';
  12. return { startDate, endDate };
  13. };
  14. const UserSource = props => {
  15. const { startDate = moment().subtract(7, 'day').format('YYYY-MM-DD'), endDate = moment().format('YYYY-MM-DD') } = props;
  16. const [xData, setxData] = useState([]);
  17. const [fromData, setFromData] = useState([]);
  18. const [registerData, setRegisterData] = useState([]);
  19. //柱图
  20. useEffect(() => {
  21. userResource(formatDate(startDate, endDate));
  22. }, []);
  23. function userResource(params) {
  24. request({
  25. ...apis.indexEcharts.selectPersonFrom,
  26. params,
  27. }).then(data => {
  28. setxData(data.tdWxDicts.map(x => x.sceneAlias));
  29. setFromData(data.tdWxDicts.map(x => x.fromData));
  30. setRegisterData(data.tdWxDicts.map(x => x.registerSum));
  31. // props.onSuccess(data)
  32. });
  33. }
  34. const subtitle = '最近7天';
  35. const baroptions = {
  36. title: {},
  37. xAxis: {
  38. type: 'category',
  39. data: xData,
  40. axisLabel: { rotate: 45 },
  41. },
  42. legend: {
  43. left: '20%',
  44. data: ['所有用户', '注册用户'],
  45. },
  46. tooltip: {},
  47. yAxis: {},
  48. series: [
  49. {
  50. type: 'bar',
  51. name: '所有用户',
  52. datasetIndex: 0,
  53. barWidth: 20,
  54. data: fromData,
  55. itemStyle: {
  56. normal: {
  57. barBorderRadius: [20, 20, 0, 0],
  58. color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
  59. {
  60. offset: 0,
  61. color: '#FFC4A8',
  62. },
  63. {
  64. offset: 1,
  65. color: '#FF7E49',
  66. },
  67. ]),
  68. shadowColor: 'rgba(0, 0, 0, 0.4)',
  69. },
  70. },
  71. },
  72. {
  73. type: 'bar',
  74. name: '注册用户',
  75. barWidth: 20,
  76. data: registerData,
  77. itemStyle: {
  78. normal: {
  79. barBorderRadius: [20, 20, 0, 0],
  80. color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
  81. {
  82. offset: 0,
  83. color: '#FE939D',
  84. },
  85. {
  86. offset: 1,
  87. color: '#F0293C',
  88. },
  89. ]),
  90. shadowColor: 'rgba(0, 0, 0, 0.4)',
  91. },
  92. },
  93. },
  94. ],
  95. // dataset: {
  96. // id: 'bar',
  97. // dimensions: ['fromName', 'userCount', 'registered'],
  98. // source: source,
  99. // },
  100. };
  101. const barstyle = {
  102. width: '100%',
  103. // height: '480px',
  104. // minWidth: '400px'
  105. };
  106. return (
  107. <>
  108. <Card title="用户来源" headStyle={{ textAlign: 'left' }}>
  109. {/* <p onClick={()=>router.push('/statistical/userSource')}><span style={{borderBottom:'1px solid #f02d40',cursor: 'pointer',color:'#333',fontSize:'0.12rem',fontWeight:'600'}}>用户来源</span> {!props.BuildSelectHide && <span style={{ fontSize: '0.09rem', color: '#888', marginLeft: '0.06rem' }}>最近七天</span>}</p> */}
  110. <EChart options={baroptions} style={barstyle} />
  111. </Card>
  112. </>
  113. );
  114. };
  115. export default UserSource;