UNPKG

@qn-pandora/pandora-visualization

Version:

Pandora 通用可视化库

157 lines (156 loc) 6.14 kB
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); }; import { get, isNumber, toNumber } from 'lodash'; import { formatString } from '../../../services'; import { BoundType } from '../../../constants/outlier'; import { OtherLocale } from '../../../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 === 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: isNumber(lower) ? toNumber(lower) : 0, metric: formatString(OtherLocale.outlier.lower), metricName: formatString(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 === 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: isNumber(upper) ? toNumber(upper) : 0, metric: formatString(OtherLocale.outlier.uppe), metricName: formatString(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 export 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 }; } export function updateSeriesDataByBound(themeOption, showingSeries, lowerSery, upperSery) { var barData = []; var errorColor = get(themeOption, ['line', 'outlier', 'errorColor']); // 处理点标红 showingSeries.forEach(function (sery) { sery.data.forEach(function (data, index) { var value = data.value; var lowerValue = get(lowerSery, ['data', index, 'value']) || -Infinity; var upperValue = get(upperSery, ['data', index, 'originValue']) || 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 } } }; }