| import { Chart } from 'chart.js/auto' |
|
|
| export function useChartConfig() { |
| |
| Chart.defaults.font.family = |
| "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif" |
| Chart.defaults.color = '#6b7280' |
| Chart.defaults.plugins.tooltip.backgroundColor = 'rgba(0, 0, 0, 0.8)' |
| Chart.defaults.plugins.tooltip.padding = 12 |
| Chart.defaults.plugins.tooltip.cornerRadius = 8 |
| Chart.defaults.plugins.tooltip.titleFont.size = 14 |
| Chart.defaults.plugins.tooltip.bodyFont.size = 12 |
|
|
| |
| const getGradient = (ctx, color, opacity = 0.2) => { |
| const gradient = ctx.createLinearGradient(0, 0, 0, 300) |
| gradient.addColorStop( |
| 0, |
| `${color}${Math.round(opacity * 255) |
| .toString(16) |
| .padStart(2, '0')}` |
| ) |
| gradient.addColorStop(1, `${color}00`) |
| return gradient |
| } |
|
|
| |
| const commonOptions = { |
| responsive: true, |
| maintainAspectRatio: false, |
| plugins: { |
| legend: { |
| display: true, |
| position: 'top', |
| labels: { |
| usePointStyle: true, |
| padding: 20, |
| font: { |
| size: 12, |
| weight: '500' |
| } |
| } |
| }, |
| tooltip: { |
| mode: 'index', |
| intersect: false, |
| callbacks: { |
| label: function (context) { |
| let label = context.dataset.label || '' |
| if (label) { |
| label += ': ' |
| } |
| if (context.parsed.y !== null) { |
| label += new Intl.NumberFormat('zh-CN').format(context.parsed.y) |
| } |
| return label |
| } |
| } |
| } |
| }, |
| scales: { |
| x: { |
| grid: { |
| display: false |
| }, |
| ticks: { |
| font: { |
| size: 11 |
| } |
| } |
| }, |
| y: { |
| grid: { |
| color: 'rgba(0, 0, 0, 0.05)', |
| drawBorder: false |
| }, |
| ticks: { |
| font: { |
| size: 11 |
| }, |
| callback: function (value) { |
| if (value >= 1000000) { |
| return (value / 1000000).toFixed(1) + 'M' |
| } else if (value >= 1000) { |
| return (value / 1000).toFixed(1) + 'K' |
| } |
| return value |
| } |
| } |
| } |
| } |
| } |
|
|
| |
| const colorSchemes = { |
| primary: ['#667eea', '#764ba2', '#f093fb', '#4facfe', '#00f2fe'], |
| success: ['#10b981', '#059669', '#34d399', '#6ee7b7', '#a7f3d0'], |
| warning: ['#f59e0b', '#d97706', '#fbbf24', '#fcd34d', '#fde68a'], |
| danger: ['#ef4444', '#dc2626', '#f87171', '#fca5a5', '#fecaca'] |
| } |
|
|
| return { |
| getGradient, |
| commonOptions, |
| colorSchemes |
| } |
| } |
|
|