in src/rule/runRule.ts [11:122]
export function runInitRule(chartObj: any, config: any, data: any) {
const { chartName } = chartObj;
// 1.图表分类,读取该图表所有规则
// 部分子类有与父类不同的规则,需要合并
const chartRule = classifyChart(chartName, data, config);
if (!chartRule) {
// console.log(chartName, '没有规则映射');
return {};
}
chartObj.chartRule = chartRule;
// chartObj.errorInfo = '';
let showEmptyChart = false;
// loading状态,与空状态调用同样的规则
if (chartObj?.props?.loading) {
showEmptyChart = true;
}
// 数据结构检查
// else if (!checkData(chartRule.dataStructure, data)) {
// chartObj.errorInfo = getText('error', chartObj.props?.language || chartObj.context.language, chartObj.context.locale);
// showEmptyChart = true;
// }
// error状态
else if (chartObj.props?.errorInfo) {
showEmptyChart = true;
} else {
// 2.计算数据量
const dataSize = calcDataSize(chartRule.dataStructure, data);
chartObj.dataSize = dataSize;
// 3.空数据处理
if (isEmptyData(dataSize)) {
chartObj.isEmpty = true;
showEmptyChart = true;
} else {
chartObj.isEmpty = false;
}
}
// loading、error、空数据状态,进行相同操作
if (showEmptyChart) {
const { data: emptyReplaceData, config: emptyReplaceConfig } = processEmptyData(
chartRule.emptyData,
chartRule.dataStructure,
chartName,
);
// if (!emptyReplaceData && !emptyReplaceConfig) {
// console.log(chartName, '没有空数据处理');
// }
const newConfig = merge({}, config, emptyReplaceConfig);
// 双y轴配置项特殊处理
if (Array.isArray(config?.yAxis) && emptyReplaceConfig?.yAxis) {
newConfig.yAxis = emptyReplaceConfig?.yAxis;
}
// error状态的颜色特殊处理
if (chartObj?.props?.errorInfo && emptyReplaceConfig?.colors) {
newConfig.colors = themes['widgets-color-layout-background'];
}
return {
data: emptyReplaceData,
config: newConfig,
};
}
// 4.大数据处理
if (
isBigDataInit(
chartRule?.name,
chartRule?.bigData?.judgements,
chartObj.dataSize,
chartObj.size[0],
chartObj.size[1],
chartRule.mainAxis,
)
) {
chartObj.isBigData = true;
if (chartRule?.bigData?.process) {
const { data: bigReplaceData, config: bigDataConfig } = chartRule?.bigData?.process?.(chartObj, data);
return {
data: bigReplaceData,
config: merge({}, config, bigDataConfig),
};
}
} else {
chartObj.isBigData = false;
}
// 5.极端数据处理
if (chartRule.extremeData) {
const extremeProcess = chartRule.extremeData;
const {
isExtreme,
config: extremeReplaceConfig,
data: extremeReplaceData,
} = extremeProcess?.(chartObj, config, data);
if (isExtreme) {
chartObj.isExtreme = true;
return {
data: extremeReplaceData,
config: merge({}, config, extremeReplaceConfig),
};
} else {
chartObj.isExtreme = false;
}
}
return {};
}