blob: 182deee29c8f99dda80cf7daaf9f168a506ffee8 [file] [log] [blame]
import * as echarts from '../../echarts';
import List from '../../data/List';
import { defaultEmphasis } from '../../util/model';
import completeDimensions from '../../data/helper/completeDimensions';
var FunnelSeries = echarts.extendSeriesModel({
type: 'series.funnel',
init: function (option) {
FunnelSeries.superApply(this, 'init', arguments); // Enable legend selection for each data item
// Use a function instead of direct access because data reference may changed
this.legendDataProvider = function () {
return this.getRawData();
}; // Extend labelLine emphasis
this._defaultLabelLine(option);
},
getInitialData: function (option, ecModel) {
var dimensions = completeDimensions(['value'], option.data);
var list = new List(dimensions, this);
list.initData(option.data);
return list;
},
_defaultLabelLine: function (option) {
// Extend labelLine emphasis
defaultEmphasis(option.labelLine, ['show']);
var labelLineNormalOpt = option.labelLine.normal;
var labelLineEmphasisOpt = option.labelLine.emphasis; // Not show label line if `label.normal.show = false`
labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.normal.show;
labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.label.emphasis.show;
},
// Overwrite
getDataParams: function (dataIndex) {
var data = this.getData();
var params = FunnelSeries.superCall(this, 'getDataParams', dataIndex);
var sum = data.getSum('value'); // Percent is 0 if sum is 0
params.percent = !sum ? 0 : +(data.get('value', dataIndex) / sum * 100).toFixed(2);
params.$vars.push('percent');
return params;
},
defaultOption: {
zlevel: 0,
// 一级层叠
z: 2,
// 二级层叠
legendHoverLink: true,
left: 80,
top: 60,
right: 80,
bottom: 60,
// width: {totalWidth} - left - right,
// height: {totalHeight} - top - bottom,
// 默认取数据最小最大值
// min: 0,
// max: 100,
minSize: '0%',
maxSize: '100%',
sort: 'descending',
// 'ascending', 'descending'
gap: 0,
funnelAlign: 'center',
label: {
normal: {
show: true,
position: 'outer' // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调
},
emphasis: {
show: true
}
},
labelLine: {
normal: {
show: true,
length: 20,
lineStyle: {
// color: 各异,
width: 1,
type: 'solid'
}
},
emphasis: {}
},
itemStyle: {
normal: {
// color: 各异,
borderColor: '#fff',
borderWidth: 1
},
emphasis: {// color: 各异,
}
}
}
});
export default FunnelSeries;