76 lines
1.9 KiB
TypeScript
Raw Normal View History

2025-07-10 10:28:06 +08:00
import type { FieldMapping, FieldTypeConfig, ColumnConfig, DynamicDeviceData } from './types';
// 字段名映射配置
export const fieldNameMapping: FieldMapping = {
SystemName: '系统名称',
ProjectId: '项目ID',
ProjectName: '项目名称',
IoTDataType: 'IoT数据类型',
DeviceType: '设备类型',
DeviceId: '设备ID',
Timestamps: '时间戳',
// 可以根据需要添加更多映射
};
// 字段类型配置
export const fieldTypeConfig: FieldTypeConfig = {
Timestamps: {
formatter: (value: string) => {
if (!value) return '';
try {
return new Date(value).toLocaleString();
} catch {
return value;
}
},
},
// 可以根据需要添加更多类型配置
};
// 动态生成表格列
export const generateDynamicColumns = (data: DynamicDeviceData[]): ColumnConfig[] => {
if (!data || data.length === 0) return [];
// 获取第一条数据的所有字段
const firstRow = data[0];
if (!firstRow) return [];
const fields = Object.keys(firstRow);
// 过滤掉不需要显示的字段
const excludeFields = ['id', 'key', '__typename'];
return fields
.filter(field => !excludeFields.includes(field))
.map(field => {
const columnConfig: any = {
field,
title: fieldNameMapping[field] || field,
minWidth: '150',
showOverflow: true,
};
// 应用字段类型配置
if (fieldTypeConfig[field]) {
Object.assign(columnConfig, fieldTypeConfig[field]);
}
return columnConfig;
});
};
// 获取所有可能的字段(用于预定义列)
export const getAllPossibleFields = () => {
return Object.keys(fieldNameMapping);
};
// 预定义列配置(可选)
export const getPredefinedColumns = () => {
return getAllPossibleFields().map(field => ({
field,
title: fieldNameMapping[field] || field,
minWidth: '150',
showOverflow: true,
...fieldTypeConfig[field],
}));
};