columnChart.tsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import React, { memo } from 'react'
  2. import { DualAxes } from '@ant-design/charts'
  3. import { DualAxesConfig } from '@ant-design/charts/es/dualAxes'
  4. import { SafeColumnCharType, SafeLineChartType } from '@/pages/Safe/Content/Info/Summary'
  5. import { dayjsFormat } from '@/utils/util'
  6. // import { SafeColumnCharType, SafeLineChartType } from '.'
  7. interface iColumnChartProps {
  8. columnData: SafeColumnCharType[]
  9. lineData: SafeLineChartType[]
  10. }
  11. const ColumnChart: React.FC<{ data: iColumnChartProps }> = props => {
  12. const config: DualAxesConfig = {
  13. data: [ props.data.columnData, props.data.lineData ],
  14. xField: 'month',
  15. yField: [ 'count', 'percentage' ],
  16. xAxis: {
  17. label: {
  18. formatter: (val) => dayjsFormat(val, 'YYYY年M月')
  19. }
  20. },
  21. slider: {},
  22. yAxis: {
  23. percentage: {
  24. label: {
  25. formatter: (val) => `${val} %`
  26. }
  27. }
  28. },
  29. tooltip: {
  30. formatter: datum => {
  31. const obj = { name: '', value: '' }
  32. if (Object.prototype.hasOwnProperty.call(datum, 'percentage')) {
  33. obj.name = '整改占总数比例'
  34. obj.value = datum.percentage + '%'
  35. } else if (datum.name && datum.name === 'rectifyed') {
  36. obj.name = '完成整改'
  37. obj.value = datum.count
  38. } else {
  39. obj.name = '提交巡检'
  40. obj.value = datum.count
  41. }
  42. return obj
  43. }
  44. },
  45. geometryOptions: [
  46. {
  47. geometry: 'column',
  48. isGroup: true,
  49. seriesField: 'name',
  50. columnWidthRatio: 0.4,
  51. color: ({ name }) => {
  52. if (name === 'rectifyed') {
  53. return '#D8CAAF'
  54. }
  55. return '#B5C4B1'
  56. },
  57. label: {}
  58. },
  59. {
  60. geometry: 'line',
  61. color: '#A06666',
  62. isStack: true
  63. // smooth: true
  64. }
  65. ],
  66. legend: {
  67. custom: true,
  68. position: 'top',
  69. items: [
  70. {
  71. value: 'submit',
  72. name: '提交巡检',
  73. marker: { symbol: 'square', style: { fill: '#B5C4B1', r: 5 } }
  74. },
  75. {
  76. value: 'rectifyed',
  77. name: '完成整改',
  78. marker: { symbol: 'square', style: { fill: '#D8CAAF', r: 5 } }
  79. },
  80. {
  81. value: 'bill',
  82. name: '整改占总数比例',
  83. marker: { symbol: 'square', style: { fill: '#A06666', r: 5 } }
  84. }
  85. ]
  86. }
  87. }
  88. return <DualAxes {...config} />
  89. }
  90. export default memo(ColumnChart)