ColumnChart.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import React from 'react';
  2. import { BaseChart } from './BaseChart';
  3. import type { ChartsConfig } from '../lib/u-charts-original';
  4. /**
  5. * ColumnChart 组件的 Props 接口
  6. * 使用原始 u-charts.js + Canvas 2D API
  7. */
  8. export interface ColumnChartProps {
  9. /** Canvas 元素的 ID,必须唯一 */
  10. canvasId: string;
  11. /** 图表宽度(像素) */
  12. width?: number;
  13. /** 图表高度(像素) */
  14. height?: number;
  15. /** X 轴分类数据 */
  16. categories: string[];
  17. /** 系列数据 */
  18. series: ChartsConfig['series'];
  19. /** 额外的图表配置 */
  20. config?: Partial<ChartsConfig>;
  21. }
  22. /**
  23. * ColumnChart 柱状图组件
  24. *
  25. * 使用原始 u-charts.js + Canvas 2D API
  26. */
  27. export const ColumnChart: React.FC<ColumnChartProps> = (props) => {
  28. const {
  29. canvasId,
  30. width,
  31. height,
  32. categories,
  33. series,
  34. config = {},
  35. } = props;
  36. /**
  37. * 合并默认配置
  38. */
  39. const mergedConfig: Partial<ChartsConfig> = {
  40. animation: true,
  41. background: '#FFFFFF',
  42. color: ['#3b82f6', '#10b981', '#f59e0b', '#8b5cf6', '#ef4444'],
  43. padding: [15, 15, 0, 5],
  44. enableScroll: false,
  45. legend: {},
  46. xAxis: {
  47. disableGrid: true,
  48. ...config.xAxis,
  49. },
  50. yAxis: {
  51. data: [{ min: 0 }],
  52. ...config.yAxis,
  53. },
  54. extra: {
  55. column: {
  56. type: 'group',
  57. width: 30,
  58. activeBgColor: '#000000',
  59. activeBgOpacity: 0.08,
  60. ...config.extra?.column,
  61. }
  62. },
  63. ...config,
  64. };
  65. return (
  66. <BaseChart
  67. canvasId={canvasId}
  68. width={width}
  69. height={height}
  70. type="column"
  71. categories={categories}
  72. series={series}
  73. config={mergedConfig}
  74. />
  75. );
  76. };
  77. export default ColumnChart;