MENU

[泛微ecode] 为Table表格增加筛选功能(流程待办筛选当前节点)

• 2024 年 08 月 05 日 • 阅读: 992 • 泛微OA

AI辅助制作标识

该文章由丸子引导AI辅助制作生成,如有改进意见,欢迎评论区留言。

引言

在许多企业级应用中,我们常常需要对流程待办事项进行筛选,以便用户能够更快速地找到需要处理的任务。本文将介绍如何为Table表格增加筛选功能,特别是针对流程待办筛选当前节点的实现方法。
image.png

代码实现

image.png

下面的代码示例展示了如何通过ecodeSDK.overwritePropsFnQueueMapSet方法,为Table表格增加筛选功能:

ecodeSDK.overwritePropsFnQueueMapSet('Table', {
  fn: (newProps) => {
    // 日志输出,检查组件定位是否成功
    console.log('!找到组件啦!!!!!!');
    
    // 检查当前路径是否正确
    if (!ecodeSDK.checkLPath('/wui/index.html#/main/workflow/listDoing?menuIds=1,13')) return;
    console.log("路径识别正确!", newProps);
    
    // 创建一个 Map 来存储 unique 的 currentnodeid 和 currentnodeidspan
    const uniqueNodes = new Map();
    
    // 遍历 newProps.datas 数组,获取 unique 的 currentnodeid 和 currentnodeidspan
    newProps.datas.forEach(data => {
      if (!uniqueNodes.has(data.currentnodeid)) {
        uniqueNodes.set(data.currentnodeid, data.currentnodeidspan);
      }
    });
    
    // 构建 filters 数组
    const filters = Array.from(uniqueNodes.entries()).map(([value, text]) => ({
      text,
      value
    }));
    
    // 遍历 newProps.columns 数组,找到 dataIndex 为 'currentnodeid' 的对象
    newProps.columns.forEach(column => {
      if (column.dataIndex === 'currentnodeid') {
        // 修改 title 为 '当前节点1'
        column.title = '当前节点1';
        
        // 设置动态 filters
        column.filters = filters;
        
        // 增加 onFilter 函数
        column.onFilter = (value, record) => record.currentnodeid === value;
      }
    });
    
    // 输出修改后的 columns 数组
    console.log("修改后的 columns:", newProps.columns);
  },
});

组件定位

首先,我们通过日志输出检查组件是否定位成功:

console.log('!找到组件啦!!!!!!');

路径检查

接着,我们验证当前路径是否正确:

if (!ecodeSDK.checkLPath('/wui/index.html#/main/workflow/listDoing?menuIds=1,13')) return;
console.log("路径识别正确!", newProps);

数据筛选

然后,我们创建一个Map来存储唯一的currentnodeid和currentnodeidspan,并构建filters数组:

const uniqueNodes = new Map();
newProps.datas.forEach(data => {
  if (!uniqueNodes.has(data.currentnodeid)) {
    uniqueNodes.set(data.currentnodeid, data.currentnodeidspan);
  }
});
const filters = Array.from(uniqueNodes.entries()).map(([value, text]) => ({
  text,
  value
}));

动态过滤器

最后,我们遍历newProps.columns数组,找到dataIndex为'currentnodeid'的对象,修改其title、设置动态filters并增加onFilter函数:

newProps.columns.forEach(column => {
  if (column.dataIndex === 'currentnodeid') {
    column.title = '当前节点1';
    column.filters = filters;
    column.onFilter = (value, record) => record.currentnodeid === value;
  }
});

实际应用

本地模式

上述代码示例为本地模式下的数据筛选功能。在本地测试时,可以通过模拟数据来验证筛选功能是否正常工作。

远程加载数据

在实际应用中,我们需要结合“远程加载数据”来实现更为复杂的筛选功能。具体实现方式将根据实际需求和环境进行调整。

提示:远程加载数据时,需注意网络延迟和数据同步问题,确保用户体验流畅。

结论

通过以上步骤,我们成功为Table表格增加了筛选功能,特别是针对流程待办筛选当前节点的实现。这种方法不仅提升了用户体验,也为后续的功能扩展提供了良好的基础。

成功实现了为Table表格增加筛选功能!

如有任何问题或改进建议,欢迎在评论区留言与我们交流。

代码折叠

请点击此处查看完整代码。

希望这篇文章能帮助你更好地理解和实现Table表格的筛选功能。如果有任何疑问,欢迎在评论区留言讨论!
返回文章列表 打赏
本页链接的二维码
打赏二维码
添加新评论

已有 4 条评论
  1. 熊熊 熊熊

    哇,这个思路很nice,学到了~,之前有客户跟我提,我都没想起来用这个方案~@(玫瑰)

  2. wintsa wintsa

    能不能对流程里面的明细表进行复写,试了几次没找到组件

    1. @wintsa不行哦,流程展示的表单是一个画布,不能直接重写明细,只能重写明细内的单个小组件

    2. wintsa wintsa

      @丸子这就有点难受了,公司想改内部的组件,以及添加某个列的筛选功能。。。我最后自己给他整个去除,添加了个新的table组件。。。。所有列重写组件,然后使用临时表来传值给原明细表的sql表单