76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
|
|
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],
|
||
|
|
}));
|
||
|
|
};
|