| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- import { LegendOption, TooltipOption } from 'echarts/types/dist/shared'
- export const DESIGN_WIDTH = 1920
- export const DESIGN_HEIGHT = 1080
- export interface SummaryCardConfig<CardKey> {
- key: CardKey
- title: string
- icon: string
- accent: string
- glow: string
- }
- export interface CardStateItem {
- value: number
- loading: boolean
- }
- export interface ChartItem {
- name: string
- value: number
- }
- export type SeriesItem = {
- name: string
- data: number[]
- }
- export type ChartData = {
- xAxis: string[]
- series: SeriesItem[]
- }
- // export const FONT_FAMILY = 'YouSheBiaoTiHei, sans-serif'
- export const FONT_FAMILY = undefined
- export const CHART_RENDERER = 'svg'
- export const ANIMATION = {
- animationDuration: 500,
- animationEasing: 'cubicOut' as const
- }
- export const THEME = {
- text: {
- primary: '#24364f',
- regular: '#000',
- strong: '#1f5bb8',
- black: '#3c3c3c'
- },
- tooltip: {
- cssText: `
- background: linear-gradient(180deg, rgba(255,255,255,0.96) 0%, rgba(235,243,255,0.96) 100%);
- border: 1px solid rgba(255,255,255,0.95);
- border-radius: 8px;
- box-shadow: 0 8px 20px rgba(31, 91, 184, 0.16);
- overflow: hidden;
- backdrop-filter: blur(12px);
- -webkit-backdrop-filter: blur(12px);
- `
- },
- grid: {
- left: 16,
- right: 16,
- top: 16,
- bottom: 16,
- containLabel: true
- },
- split: 'rgba(31, 91, 184, 0.08)',
- color: {
- blue: {
- line: '#1f5bb8',
- light: '#8ec5ff',
- mid: '#5e9cff',
- strong: '#2d7cf8',
- glow: 'rgba(45, 124, 248, 0.34)',
- bg: 'rgba(31, 91, 184, 0.08)',
- shadow: 'rgba(31, 91, 184, 0.16)'
- },
- orange: {
- line: '#f08c2e',
- light: '#ffd8a8',
- mid: '#ffb454',
- strong: '#ff8b3d',
- glow: 'rgba(255, 139, 61, 0.34)',
- bg: 'rgba(240, 140, 46, 0.08)',
- shadow: 'rgba(240, 140, 46, 0.18)'
- },
- green: {
- line: '#2e9a5b',
- light: '#a8e0c8',
- mid: '#82c793',
- strong: '#2fb990',
- glow: 'rgba(46, 154, 91, 0.34)',
- bg: 'rgba(34, 197, 94, 0.08)',
- shadow: 'rgba(34, 197, 94, 0.18)'
- },
- red: {
- line: '#ff4d4f',
- light: '#fdd5d5',
- mid: '#ff9999',
- strong: '#ff6666',
- glow: 'rgba(255, 77, 79, 0.34)',
- bg: 'rgba(255, 77, 79, 0.08)',
- shadow: 'rgba(255, 77, 79, 0.18)'
- }
- }
- }
- export function createTooltip(extra: Partial<TooltipOption> = {}): any {
- return {
- textStyle: {
- color: THEME.text.black,
- fontSize: 14,
- fontFamily: FONT_FAMILY
- },
- extraCssText: THEME.tooltip.cssText,
- ...extra
- }
- }
- export function createLegend(extra: Partial<LegendOption> = {}, data: string[] = []): any {
- return {
- data,
- textStyle: {
- color: THEME.text.regular,
- fontSize: 13,
- fontFamily: FONT_FAMILY
- },
- ...extra
- }
- }
- export function formatDateLabel(value: string) {
- if (!value) return value
- const parts = value.split('-')
- if (parts.length === 3) {
- return `${parts[1]}-${parts[2]}`
- }
- return value
- }
- export function formatSeriesName(name: string) {
- return name.split('~~en**')[0] || name
- }
- export function formatMonthLabel(value: string) {
- if (!value) return value
- const [year, month] = value.split('-')
- if (!year || !month) return value
- return `${year.slice(-2)}年${month}月`
- }
- export function formatGasAxisValue(value: number) {
- if (value >= 100000000) {
- return `${(value / 100000000).toFixed(1)}亿`
- }
- if (value >= 10000) {
- return `${(value / 10000).toFixed(0)}万`
- }
- return `${value}`
- }
- export function formatGasLabelValue(value: number) {
- if (!value) return ''
- if (value >= 100000000) {
- return `${(value / 100000000).toFixed(2)}亿`
- }
- if (value >= 10000) {
- return `${(value / 10000).toFixed(1)}万`
- }
- return `${value}`
- }
|