介绍
在客户的一个需求中,有一个巡检对象的数据是以如:’喷淋情况,配电箱情况’这种格式存储,但是在功能列表需要将这个字段拆分成2个字段,并且这两个字段是属于多表头,最后给这两个字段进行赋值
实现逻辑
1、在表字段中增加备用字段 如‘DETAIL_BAK01,DETAIL_BAK02’类似字段,增加至需求要求的字段数量,目前是固定50个字段
2、配置这些备用字段所属的多表头字段如:morecolumn_1
3、在功能的数据加载事件中编写代码,进行数据的分割与存储,代码如下
const {
$func, // 功能对象
$grid, // 功能列表对象
store, // 功能列表store
} = EventOptions;
//获取去重后对象名称数组
const uniqueObjectNames = [...new Set(store.data.map(item => item.OBJECT_NAME))];
const objectname = uniqueObjectNames.join().split(",");
//获取去重后的巡检对象ID
const uniqueObjectIds = [...new Set(store.data.map(item => item.OBJECT_ID))];
const objectid =uniqueObjectIds.join().split(",");
//去重后的点位ID
const uniquePointId = [...new Set(store.data.map(item => item.TCDM_PATROL_POINT_ID))];
const pointId =uniquePointId.join().split(",");
//巡检任务ID
const taskId = $func.getParentFuncBean().TCDM_OPERATE_PATROL_TASK_ID;
// 获取所有列,包含多表头
const allColumns = $grid.getTableColumn().collectColumn;
//1. 创建列配置的深拷贝(避免修改原始数据)
const updatedColumns = JSON.parse(JSON.stringify(allColumns));
// 2. 循环更新匹配列的标题
updatedColumns.forEach((item)=>{
//先找到多表头列
if(item.field=='morecolumn_1'){
//找到多表头下的子列,进行循环
item.children.forEach(column => {
if (column.property && column.property.includes("DETAIL_BAK")) {
// 提取列名中的数字索引(如 "DETAIL_BAK01" -> 01)
const match = column.property.match(/DETAIL_BAK(\d+)/);
if (match) {
const index = parseInt(match[1]) - 1; // 转为0-based索引
// 确保索引在有效范围内
if (index >= 0 && index < objectname.length) {
//匹配好的显示
column.visible = true;
column.title = objectname[index];//更新列名称的标题
} else {
//未匹配的隐藏
column.visible = false;//隐藏列
}
}
}
});
}
});
//重新加载更新后的列
$grid.loadColumn(updatedColumns);
//更新每一个对象的数据
//根据点位ID,任务ID,对象ID 查询选件对象详情
JE.ajax({
url: '/je/common/load',
params: {
tableCode:"TCDM_OPERATE_PATROL_OBJECT_RECORD",
funcCode:"TCDM_OPERATE_PATROL_OBJECT_RECORD",
j_query:'[{"type":"=","code":"TASK_ID","value":"'+taskId+'","cn":"and"},'+
'{"type":"in","code":"OBJ_SITE_ID","value":"'+pointId+'","cn":"and"},'+
'{"type":"in","code":"TCDM_PATROL_INSPECT_OBJECT_ID","value":"'+objectid+'","cn":"and"}]'
},
headers: {pd: "demo"}
}).then((data)=>{
// 创建复合键的状态映射: {任务ID_点位ID_对象ID: 状态}
const statusMap = {};
//循环查询出的数据
data.data.rows.forEach(item => {
const key = `${item.TASK_ID}_${item.OBJ_SITE_ID}_${item.TCDM_PATROL_INSPECT_OBJECT_ID}`;
statusMap[key] = item.STATUS || '';
});
// 获取原有列表数据
const gridData = $grid.getData();
// 获取任务ID(确保与响应数据一致)
const gridTaskId = taskId;
// 更新表格数据
gridData.forEach(row => {
// 获取行中的点位ID
const rowPointId = row.TCDM_PATROL_POINT_ID;
//给每一个对象列进行赋值
objectid.forEach((objId, index) => {
const columnName = `DETAIL_BAK${String(index + 1).padStart(2, '0')}`;
// 检查列是否存在
if (row.hasOwnProperty(columnName)) {
// 构建复合键
const compositeKey = `${gridTaskId}_${rowPointId}_${objId}`;
// 赋值状态
row[columnName] = statusMap[compositeKey] || '';
}
});
//更新列表数据状态
$grid.store.commitRecord(row);
});
});
- 4、实现的效果
最后编辑: 呼丽华 文档更新时间: 2025-06-06 16:20 作者:呼丽华