介绍

在客户的一个需求中,有一个巡检对象的数据是以如:’喷淋情况,配电箱情况’这种格式存储,但是在功能列表需要将这个字段拆分成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   作者:呼丽华