1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import type { CSSProperties } from 'react'
- import { memo, useMemo } from 'react'
- import ReactECharts from 'echarts-for-react'
- import type { EChartsOption } from 'echarts'
- import style from './index.module.css'
- import classNames from '@/utils/classnames'
- export type SimplePieChartProps = {
- percentage?: number
- fill?: string
- stroke?: string
- size?: number
- animationDuration?: number
- className?: string
- }
- const SimplePieChart = ({ percentage = 80, fill = '#fdb022', stroke = '#f79009', size = 12, animationDuration, className }: SimplePieChartProps) => {
- const option: EChartsOption = useMemo(() => ({
- series: [
- {
- type: 'pie',
- radius: ['83%', '100%'],
- animation: false,
- data: [
- { value: 100, itemStyle: { color: stroke } },
- ],
- emphasis: {
- disabled: true,
- },
- labelLine: {
- show: false,
- },
- cursor: 'default',
- },
- {
- type: 'pie',
- radius: '83%',
- animationDuration: animationDuration ?? 600,
- data: [
- { value: percentage, itemStyle: { color: fill } },
- { value: 100 - percentage, itemStyle: { color: '#fff' } },
- ],
- emphasis: {
- disabled: true,
- },
- labelLine: {
- show: false,
- },
- cursor: 'default',
- },
- ],
- }), [stroke, fill, percentage, animationDuration])
- return (
- <ReactECharts
- option={option}
- className={classNames(style.simplePieChart, className)}
- style={{
- '--simple-pie-chart-color': fill,
- 'width': size,
- 'height': size,
- } as CSSProperties}
- />
- )
- }
- export default memo(SimplePieChart)
|