You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
2.1 KiB
TypeScript

export const displacementMetricOptions = [
// 位移专属看板本轮只保留一个业务指标,避免前端继续暴露无效的多指标切换入口。
{ field: 'vibrationDisplacement', label: '位移', unit: 'um', color: '#5b8ff9' }
] as const;
export const displacementMetricMap = Object.fromEntries(displacementMetricOptions.map((item) => [item.field, item]));
export const displacementHeatmapColors = ['#0f766e', '#0ea5a4', '#38bdf8', '#fde68a', '#fb923c', '#ef4444'];
export const getDisplacementMetricOption = (field?: string) => displacementMetricMap[field || ''] || displacementMetricOptions[0];
export const toNumber = (value: number | string | undefined, fallback = 0) => {
const numberValue = Number(value);
return Number.isFinite(numberValue) ? numberValue : fallback;
};
export const formatMetricValue = (value: number | string | undefined, digits = 2) => {
if (value === null || value === undefined || value === '') {
return '--';
}
return toNumber(value).toFixed(digits);
};
export const formatPercentValue = (value: number | string | undefined, digits = 1) => `${(toNumber(value) * 100).toFixed(digits)}%`;
export const buildCategoryDataZoom = (length: number, axis: 'x' | 'y' = 'y') => {
if (length <= 8) {
return [];
}
const start = Math.max(0, 100 - Math.round((8 / length) * 100));
if (axis === 'x') {
return [
{ type: 'inside', xAxisIndex: 0, filterMode: 'none' },
{ type: 'slider', xAxisIndex: 0, filterMode: 'none', start, end: 100, height: 14, bottom: 4 }
];
}
return [
{ type: 'inside', yAxisIndex: 0, filterMode: 'none' },
{ type: 'slider', yAxisIndex: 0, filterMode: 'none', start, end: 100, width: 12, right: 4 }
];
};
export const formatDateTime = (date: Date) => {
const p = (n: number) => n.toString().padStart(2, '0');
return `${date.getFullYear()}-${p(date.getMonth() + 1)}-${p(date.getDate())} ${p(date.getHours())}:${p(date.getMinutes())}:${p(date.getSeconds())}`;
};
export const createDefaultTimeRange = () => {
const end = new Date();
const start = new Date(end.getTime() - 24 * 3600 * 1000);
return [formatDateTime(start), formatDateTime(end)];
};