mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 10:53:02 +00:00 
			
		
		
		
	 49feff082f
			
		
	
	
		49feff082f
		
			
		
	
	
	
	
		
			
			Signed-off-by: -LAN- <laipz8200@outlook.com> Co-authored-by: -LAN- <laipz8200@outlook.com>
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 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)
 |