泛微Ecology9实现流程界面隐藏按钮

1. 前言

在泛微Ecology9系统中,流程界面默认显示多个操作按钮。为满足特定业务需求,需要隐藏部分按钮。本文将介绍三种实现方法,分别针对"提交"、"保存"、"转发"三个按钮进行演示。

首先我先建了个平白无奇的测试流程,我们可以看到目前流程上方存在四个按钮:

经过我的调研,目前一共有三种方式来实现这个功能:1、代码块CSS样式实现、2、编写ecode代码实现:复写WeaReqTop组件:overwritePropsFnQueueMapSet 3、也是ecode实现:复写API请求入参和返参:rewriteApiDataQueueSet; 现在我分别用三种方式来隐藏 三个不同的流程按钮:提交、保存、转发来作为测试

2. 实现方案对比

方案一:CSS样式隐藏法(推荐用于简单场景)

实现思路:通过CSS选择器直接隐藏目标按钮元素

适用场景:简单的按钮隐藏需求,无需复杂逻辑判断

操作步骤

  1. 登录系统后台,进入流程引擎管理界面

  2. 定位目标流程,进入流程设计界面

  3. 在代码块区域添加CSS样式代码

  4. 保存配置并测试效果

javascript 复制代码
<style type="text/css">
  .ant-menu-item:has(.wea-right-menu-item span[title="提交"]) {
    display: none !important;
  }

  button[title="提交"] {
    display: none !important;
  }
</style>

保存之后,即可实现隐藏效果

方案二:ECode组件复写法(推荐用于复杂条件控制)

实现思路:复写WeaReqTop组件:overwritePropsFnQueueMapSet

通过复写WeaReqTop组件的属性,动态控制按钮显示

对于ecode腹泻我们可以先打印出参数查看,看看有啥参数可以修改达到目的:

核心代码

javascript 复制代码
ecodeSDK.overwritePropsFnQueueMapSet('WeaReqTop', {
    fn: (newProps) => {
        // 环境检查
        if (!ecodeSDK.checkLPath('/spa/workflow/static4form/index.html')) return;
        if (!WfForm) return;
        
        // 流程节点验证
        let baseInfo = WfForm.getBaseInfo();
        let workflowId = baseInfo.workflowid;
        let nodeId = baseInfo.nodeid;
        
        // 仅对特定流程生效(测试环境workflowId: 1537)这里需要换成你自己的流程id和节点id
        if (workflowId !== 1537 || nodeId !== 2622) return;
        
        // 按钮处理逻辑
        var buttons = newProps.buttons;
        console.log(buttons);
        
        // 隐藏保存按钮
        buttons = buttons.filter(button => button.props.title !== '保存');
        
        newProps.buttons = buttons;
    },
    order: 1,
    desc: '隐藏保存按钮'
});
方案三:ECode API复写法(推荐基于后端数据控制)

实现思路

复写API请求入参和返参:rewriteApiDataQueueSet,通过拦截API请求的入参和返参,间接控制按钮显示状态

核心代码

javascript 复制代码
ecodeSDK.rewriteApiDataQueueSet({
  fn: (url, params, data) => {
    var workflowids='87029,134021'
    var workflowArray = workflowids.split(',');  
    var workflowidsByDelete = '134021,131021,65523,43021';
    var workflowArrayByDelete = workflowidsByDelete.split(','); 
    var workflowid = params.workflowid+''
    if (workflowArray.includes(workflowid)){
      var value = '1'
    } // 判断流程是否是需要隐藏的流程
    if (workflowArrayByDelete.includes(workflowid)){
      var valueByDelete = '1'
    }
    var allow = window.location.hash.indexOf('#/main/workflow/req') >= 0 
    && (url.indexOf('/api/workflow/reqform/rightMenu') >= 0 ||url.indexOf('/api/workflow/reqform/loadForm') >=0 )
    && (params.workflowid=='4061' || params.workflowid=='4062' || value=='1')
    if (!allow) return data;
    if (data.rightMenus && data.rightMenus.length > 0 && valueByDelete!='1') {
      data.rightMenus = data.rightMenus.filter((item,index)=>{
        return item.menuName!='转发'
      })
    }

    return data;
  },
  desc: '拦截接口参数,同一个接口会在多个页面请求,需注意路径的判断'
});

目前上诉代码都是使用按钮名称汉字匹配,也可以改为ecId匹配,原理都是一样的;

方案选择建议

方案 适用场景 优点 缺点
CSS样式法 简单隐藏需求 实现简单、维护成本低 可能被绕过,灵活性差
组件复写法 复杂条件控制 灵活性高,可基于流程节点控制 实现复杂度中等
API复写法 基于数据条件控制 控制粒度细,稳定性好 需要了解API结构

注意事项

  1. 生产环境部署前务必充分测试

  2. 建议添加详细的注释说明业务逻辑

  3. 考虑系统升级对自定义代码的影响

  4. 推荐使用方案二或三实现条件性隐藏需求

总结

三种方案各有优势,可根据具体业务场景灵活选择。CSS方法适合简单场景,ECode方法适合需要条件判断的复杂场景。建议在开发过程中充分考虑代码的可维护性和系统的稳定性。

相关推荐
czhc11400756633 小时前
JAVA1027抽象类;抽象类继承
android·java·开发语言
练习时长一年3 小时前
jdk动态代理的实现原理
java·开发语言
三无少女指南3 小时前
关于JVM调优,我想聊聊数据和耐心
java·开发语言·jvm
好好研究3 小时前
手动创建maven项目
java·maven
從南走到北3 小时前
JAVA国际版任务悬赏发布接单系统源码支持IOS+Android+H5
android·java·ios·微信·微信小程序·小程序
4Forsee4 小时前
【Android】View 事件分发机制与源码解析
android·java·前端
刘一说4 小时前
Spring Boot 主程序入口与启动流程深度解析:从 `@SpringBootApplication` 到应用就绪
java·spring boot·后端
eguid_14 小时前
【从零开始开发远程桌面连接控制工具】01-项目概述与架构设计
java·远程连接·远程控制·远程桌面·vnc·teamviewer
一 乐4 小时前
车辆管理|校园车辆信息|基于SprinBoot+vue的校园车辆管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·车辆管理