import * as echarts from 'echarts' import React, { useEffect, useRef } from 'react' import { useTheme } from '@/hooks/use-theme' interface UsagePieProps { systemUsage: number processUsage: number title?: string } const defaultOption: echarts.EChartsOption = { tooltip: { trigger: 'item', formatter: '
{b}
{d}%
', borderRadius: 10, extraCssText: 'backdrop-filter: blur(10px);' }, series: [ { name: '系统占用', type: 'pie', radius: ['70%', '90%'], avoidLabelOverlap: false, label: { show: true, position: 'center', formatter: '系统占用', fontSize: 14 }, itemStyle: { borderWidth: 1, borderRadius: 10 }, labelLine: { show: false }, data: [ { value: 100, name: '系统总量' } ] } ] } const UsagePie: React.FC = ({ systemUsage, processUsage, title }) => { const chartRef = useRef(null) const chartInstance = useRef(null) const { theme } = useTheme() useEffect(() => { if (chartRef.current) { chartInstance.current = echarts.init(chartRef.current) const option = defaultOption chartInstance.current.setOption(option) const observer = new ResizeObserver(() => { chartInstance.current?.resize() }) observer.observe(chartRef.current) return () => { chartInstance.current?.dispose() observer.disconnect() } } }, []) useEffect(() => { if (chartInstance.current) { chartInstance.current.setOption({ series: [ { label: { formatter: title } } ] }) } }, [title]) useEffect(() => { if (chartInstance.current) { chartInstance.current.setOption({ darkMode: theme === 'dark', tooltip: { backgroundColor: theme === 'dark' ? 'rgba(0, 0, 0, 0.8)' : 'rgba(255, 255, 255, 0.8)', textStyle: { color: theme === 'dark' ? '#fff' : '#333' } }, color: theme === 'dark' ? ['#D33FF0', '#EF8664', '#E25180'] : ['#D33FF0', '#EA7D9B', '#FFC107'], series: [ { itemStyle: { borderColor: theme === 'dark' ? '#333' : '#F0A9A7' } } ] }) } }, [theme]) useEffect(() => { if (chartInstance.current) { chartInstance.current.setOption({ series: [ { data: [ { value: processUsage, name: 'QQ占用' }, { value: systemUsage - processUsage, name: '其他进程占用' }, { value: 100 - systemUsage, name: '剩余系统总量' } ] } ] }) } }, [systemUsage, processUsage]) return
} export default UsagePie