in src/common/autoTimeScale.ts [37:93]
export default function (defs: Record<string, Types.ScaleOption>, data: ChartData, language?: keyof typeof LanguageMap): void {
const def = defs.x;
// 所有的时间刻度计算都走图表库自己内置的(迁移G2的算法)
if (
(def.type === 'time' || def.type === 'timeCat') &&
Array.isArray(data) &&
data[0] &&
Array.isArray(data[0].data)
) {
// 格式化另算
if (def.mask === 'auto') {
def.mask = getAutoMask(def, data[0].data, language);
} else {
// 业务自定义国际化处理
// 初始化的mask
const sourceMaskMap = getText('timeMask', 'zh-cn', null, true);
// 当前语言下的mask
const currentMaskMap = getText('timeMask', language, null);
// 用户自定义mask
const customMask = def.mask;
// 获取自定义mask在初始化mask Map下的索引地址
const customMaskIndex = findIndexOfSubStringIn2DArray(customMask, sourceMaskMap);
// 得到当前语言下的mask
const currentMask = customMaskIndex ? currentMaskMap[customMaskIndex[0]][customMaskIndex[1]] || customMask : customMask;
def.mask = currentMask;
}
// 覆盖G2内置算法
// 默认的tickCount为7,导致时间永远无法获取全量数据
// 这里通过修改tickCount的值为当前X轴的数量,使保底能得到全量数据
if (!def.tickMethod && def.type === 'time') {
def.tickMethod = (cfg: Types.ScaleOption) => {
const { values } = cfg;
return timePretty({
...cfg,
...def,
// 补充优化逻辑,针对当前画布尺寸适配标签个数
tickCount: def.tickCount || values?.length || 7,
});
}
} else if (!def.tickMethod && def.type === 'timeCat') {
def.tickMethod = (cfg: Types.ScaleOption) => {
const { values } = cfg;
return timeCat({
...cfg,
...def,
tickCount: def.tickCount || values?.length || 7,
});
}
}
} else {
// 分类型默认显示最后一个
if(def.type === 'cat' || def.type==='timeCat') {
def.showLast = true;
}
}
}