123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 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
- className?: string
- }
- const SimplePieChart = ({ percentage = 80, fill = '#fdb022', stroke = '#f79009', size = 12, 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: 600,
- data: [
- { value: percentage, itemStyle: { color: fill } },
- { value: 100 - percentage, itemStyle: { color: '#fff' } },
- ],
- emphasis: {
- disabled: true,
- },
- labelLine: {
- show: false,
- },
- cursor: 'default',
- },
- ],
- }), [stroke, fill, percentage])
- 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)
|