MachineryStatus.jsx 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import React, { useEffect, useMemo, useRef } from 'react';
  2. import * as echarts from 'echarts/core';
  3. import BasicChart from './BasicChart';
  4. import deepCopy from '@/utils/deepCopy';
  5. import { hex2Rgb } from '@/utils/color';
  6. const colorList = ['#FB9900', '#23E8AE', '#E63404', '#51D4FF', '#B8B2A9', '#C579FF'].map((x) => {
  7. const rgb = hex2Rgb(x);
  8. return new echarts.graphic.LinearGradient(0, 0, 0, 1, [
  9. {
  10. offset: 0,
  11. color: x, // 0% 处的颜色
  12. },
  13. {
  14. offset: 0.2,
  15. color: x, // 20% 处的颜色
  16. },
  17. {
  18. offset: 1,
  19. color: `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, 0)`, // 100% 处的颜色
  20. },
  21. ]);
  22. });
  23. const defaultOpt = {
  24. tooltip: {},
  25. grid: {
  26. top: 20,
  27. right: 10,
  28. bottom: 10,
  29. left: 10,
  30. containLabel: true,
  31. },
  32. xAxis: {
  33. type: 'category',
  34. splitLine: {
  35. show: false,
  36. },
  37. axisTick: {
  38. show: false,
  39. },
  40. axisLabel: {
  41. color: '#fff',
  42. },
  43. },
  44. yAxis: {
  45. type: 'value',
  46. splitLine: {
  47. lineStyle: {
  48. color: ['rgba(255, 255, 255, 0.1)'],
  49. type: 'dashed',
  50. },
  51. },
  52. axisTick: {
  53. show: false,
  54. },
  55. axisLabel: {
  56. color: '#fff',
  57. },
  58. },
  59. series: [
  60. {
  61. type: 'bar',
  62. },
  63. ],
  64. };
  65. export default (props) => {
  66. const option = useMemo(() => deepCopy(defaultOpt), []);
  67. option.xAxis.data = props.source.map((x) => x.name);
  68. option.series[0].data = props.source.map((x, i) => ({
  69. value: x.value,
  70. itemStyle: {
  71. color: colorList[i % 6],
  72. },
  73. }));
  74. return <BasicChart title="农机状态统计" option={option} />;
  75. };