Usertrend.jsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import { onMount } from "solid-js";
  2. import { Chart } from '@antv/g2';
  3. // import DataSet from '@antv/data-set';
  4. import "../../../assets/style/IndividualActivities.css"
  5. import utils from "../../../utils/index"
  6. function DataFormmat(timeString) {
  7. if (!timeString || typeof timeString !== 'string') return "";
  8. const y = timeString[0] + timeString[1] + timeString[2] + timeString[3];
  9. const m = timeString[4] + timeString[5];
  10. const d = timeString[6] + timeString[7];
  11. return [y, m, d].join("-");
  12. }
  13. function Usertrend(prop) {
  14. let $canvas = undefined;
  15. function TrendChart(width, height, $canvas) {
  16. const data = (prop.list || []).map(v => {
  17. return {
  18. Data: DataFormmat(v.dt),
  19. sales: v.playCount
  20. }
  21. })
  22. const chart = new Chart({
  23. container: $canvas,
  24. autoFit: true,
  25. height: height - 20,
  26. width,
  27. padding: [
  28. 20,
  29. 60,
  30. 30,
  31. 70,
  32. ]
  33. });
  34. let max = 0, min = Infinity;
  35. (data || []).map(v => {
  36. if (v.sales > max) {
  37. max = v.sales;
  38. }
  39. if (v.sales < min) {
  40. min = v.sales;
  41. }
  42. })
  43. chart.data(data);
  44. chart.scale('Data', {
  45. range: [0, 1],
  46. tickCount: 10,
  47. type: 'timeCat',
  48. mask: "MM-DD"
  49. });
  50. chart.scale('sales', {
  51. nice: true,
  52. });
  53. // chart.annotation().dataMarker({
  54. // position: [maxText, max],
  55. // top: true,
  56. // text: {
  57. // content: '最高值:' + max,
  58. // style: {
  59. // fontSize: 13,
  60. // fill: "#fff",
  61. // }
  62. // },
  63. // line: {
  64. // length: 30,
  65. // },
  66. // });
  67. chart.axis('sales', {
  68. label: {
  69. formatter: n => {
  70. return utils.formatNumber(n, 2);
  71. },
  72. style: {
  73. fill: "#fff"
  74. },
  75. },
  76. grid: null
  77. });
  78. chart.axis('Data', {
  79. label: {
  80. style: {
  81. fill: "#ffffff00"
  82. },
  83. },
  84. grid: null
  85. });
  86. chart.tooltip(false);
  87. chart.line().shape('smooth').color('#3ae8ef').position('Data*sales');
  88. chart.area().shape('smooth').color('l(90) 0:#3ae8ef 1:rgba(0,0,0,0)').position('Data*sales');
  89. chart.render();
  90. }
  91. onMount(() => {
  92. TrendChart(prop.width, prop.height, $canvas)
  93. })
  94. return (
  95. <div class="livRang" style={{
  96. width: `${prop.width}px`
  97. }}>
  98. <div class="head">{prop.title}</div>
  99. <div ref={$canvas}></div>
  100. </div>
  101. );
  102. }
  103. export default Usertrend;