@qn-pandora/pandora-visualization
Version:
Pandora 通用可视化库
162 lines (161 loc) • 6.51 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.updateSeriesDataByBound = exports.getBoundSeries = void 0;
var lodash_1 = require("lodash");
var services_1 = require("../../../services");
var outlier_1 = require("../../../constants/outlier");
var type_1 = require("../../../constants/language/other/type");
var BOUND_AREA_COLOR = '#e1f4d8';
var BOUND_CONFIG = {
symbol: 'none',
lineStyle: {
opacity: 0
},
itemStyle: {
color: BOUND_AREA_COLOR
}
};
function getLowerBoundSery(lower, lowerType, chartSeries) {
var sery = chartSeries.find(function (sery) { return sery.metricName === lower; });
if (lowerType === outlier_1.BoundType.Field && sery) {
sery = __assign({ type: 'line', stack: 'bound', stackStrategy: 'all', data: sery.data }, BOUND_CONFIG);
}
else {
var data_1 = [];
if (chartSeries.length > 0) {
chartSeries[0].data.forEach(function () {
data_1.push({
value: lodash_1.isNumber(lower) ? lodash_1.toNumber(lower) : 0,
metric: services_1.formatString(type_1.OtherLocale.outlier.lower),
metricName: services_1.formatString(type_1.OtherLocale.outlier.lower)
});
});
}
sery = __assign({ type: 'line', stack: 'bound', stackStrategy: 'all', data: data_1 }, BOUND_CONFIG);
}
return sery;
}
// 获取上界的值,负数参与堆叠,所有情况下,都是上界减去下界
function getBoundValue(upperValue, lowerValue) {
return upperValue - lowerValue;
}
function getUpperBoundSery(upper, upperType, chartSeries, lowerSery) {
var upperSery = chartSeries.find(function (sery) { return sery.metricName === upper; });
if (upperSery && upperType === outlier_1.BoundType.Field) {
var data = lowerSery
? upperSery.data.map(function (item, index) {
var value = getBoundValue(item.value, lowerSery.data[index].value);
return __assign(__assign({}, item), { value: value,
// 因为value为stack转换后的值,故将originValue记录下来
originValue: item.value });
})
: upperSery.data;
upperSery = __assign({ type: 'line', data: data, stack: 'bound', stackStrategy: 'all', areaStyle: { color: BOUND_AREA_COLOR, origin: 'start' } }, BOUND_CONFIG);
}
else {
var length_1 = chartSeries.length > 0 ? chartSeries[0].data.length : 0;
var data = length_1 > 0
? new Array(length_1).fill({
value: lodash_1.isNumber(upper) ? lodash_1.toNumber(upper) : 0,
metric: services_1.formatString(type_1.OtherLocale.outlier.uppe),
metricName: services_1.formatString(type_1.OtherLocale.outlier.uppe)
})
: [];
var seryData = lowerSery
? data.map(function (item, index) {
var value = getBoundValue(item.value, lowerSery.data[index].value);
return __assign(__assign({}, item), { value: value,
// 因为value为stack转换后的值,故将originValue记录下来
originValue: item.value });
})
: data;
upperSery = __assign({ type: 'line', data: seryData, stack: 'bound', stackStrategy: 'all', areaStyle: { color: BOUND_AREA_COLOR, origin: 'start' } }, BOUND_CONFIG);
}
return upperSery;
}
// 获取上下界的series
function getBoundSeries(lower, lowerType, upper, upperType, chartSeries) {
var lowerSery = getLowerBoundSery(lower, lowerType, chartSeries);
var upperSery = getUpperBoundSery(upper, upperType, chartSeries, lowerSery);
// 当不存在上界但是却有下界时,下界加上区域标识
if (!upperSery && lowerSery) {
lowerSery.areaStyle = { color: BOUND_AREA_COLOR, origin: 'end' };
}
return {
lowerSery: lowerSery,
upperSery: upperSery
};
}
exports.getBoundSeries = getBoundSeries;
function updateSeriesDataByBound(themeOption, showingSeries, lowerSery, upperSery) {
var barData = [];
var errorColor = lodash_1.get(themeOption, ['line', 'outlier', 'errorColor']);
// 处理点标红
showingSeries.forEach(function (sery) {
sery.data.forEach(function (data, index) {
var value = data.value;
var lowerValue = lodash_1.get(lowerSery, ['data', index, 'value']) || -Infinity;
var upperValue = lodash_1.get(upperSery, ['data', index, 'originValue']) ||
lodash_1.get(upperSery, ['data', index, 'value']) ||
Infinity;
var hasError = value < lowerValue || value > upperValue;
data.symbolSize = 0;
if (hasError) {
data.symbolSize = 8;
data.itemStyle = {
color: errorColor
};
data.emphasis = {
itemStyle: { color: errorColor }
};
}
});
});
//处理bar
if (showingSeries.length > 0) {
showingSeries[0].data.forEach(function (data, index) {
var sizes = [data.symbolSize];
for (var i = 1; i < showingSeries.length; i++) {
sizes.push(showingSeries[i].data[index].symbolSize || 0);
}
var hasError = false;
for (var i = 0; i < sizes.length; i++) {
hasError = sizes[i] > 0;
if (hasError) {
break;
}
}
barData.push(hasError ? 1 : 0);
});
}
return {
type: 'bar',
silent: true,
yAxisIndex: 1,
data: barData,
barCategoryGap: -0.1,
tooltip: { show: false },
itemStyle: {
color: errorColor,
opacity: 0.3
},
emphasis: {
itemStyle: {
color: errorColor,
opacity: 0.3
}
}
};
}
exports.updateSeriesDataByBound = updateSeriesDataByBound;