main.js
2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import {
isObject,
isArray
} from 'utils-lite'
import {
getFormated
} from '../../utils'
function getTooltip (args) {
const {
tooltipFormatter,
dataType,
digit
} = args
return {
show: true,
formatter (options) {
const {
seriesName,
value
} = options
if (tooltipFormatter) {
return tooltipFormatter.apply(null, arguments)
}
return [
`${seriesName}: `,
getFormated(value, dataType, digit)
].join('')
}
}
}
function getSeries (args) {
const {
dimension,
metrics,
seriesMap,
rows,
wave
} = args
let itemWave = wave
let len = isArray(seriesMap) ? seriesMap.length : 0
return rows.slice().map((item, index) => {
let data = []
let result = {
type: 'liquidFill'
}
let name = item[dimension]
let val = Number(item[metrics])
let itemMap = {}
if (isArray(seriesMap)) {
itemMap = !seriesMap[index] ? seriesMap[len - 1] : seriesMap[index]
} else if (isObject(seriesMap[name])) {
itemMap = seriesMap[name]
}
if (isArray(wave) && isArray(wave[0])) {
itemWave = isArray(wave[index]) ? wave[index] : wave[wave.length - 1]
}
// 根据传入的数据(rows)和额外配置(seriesMap)的数据组合data
data.push({ value: val })
if (itemWave && itemWave.length) {
data = data.concat(itemWave.map(val => ({ value: val })))
}
result = Object.assign(result, { data, name }, itemMap)
return result
})
}
export const liquidfill = (columns, rows, settings, extra) => {
const {
dimension = columns[0],
metrics = columns[1],
seriesMap = {},
dataType = 'percent',
digit = 2,
wave = []
} = settings
const {
tooltipVisible,
tooltipFormatter
} = extra
const tooltip = tooltipVisible && getTooltip({
tooltipFormatter,
dataType,
digit
})
const series = getSeries({
rows,
columns,
dimension,
metrics,
seriesMap,
wave
})
return {
tooltip,
series
}
}