新增审批人规则
新增审批人规则
wflow-pro 已经内置了10种预设的审批人规则选项提供给大家使用,但是业务需求往往难以捉摸,这时候取审批人规则不满足要求就需要自己进行扩展了。

扩展审批人规则选项需要前后端同时支持,下面逐一介绍如何实现。
前端
1、新增选项
首先需要找到审批节点的配置面板 ApprovalNodeConfig.vue
,为该选项添加单选框options 项
approvalTypes: [
{name: '指定人员', type: 'ASSIGN_USER'},
{name: '发起人自选', type: 'SELF_SELECT'},
{name: '发起人自己', type: 'SELF'},
{name: '部门主管', type: 'LEADER'},
{name: '多级部门主管', type: 'LEADER_TOP'},
{name: '指定部门的主管', type: 'ASSIGN_LEADER'},
{name: '系统角色', type: 'ROLE'},
{name: '表单内联系人', type: 'FORM_USER'},
{name: '表单内部门主管', type: 'FORM_DEPT'},
{name: '系统(自动拒绝)', type: 'REFUSE'}
]
2、添配置对象的字段属性
设置项有了,我们需要针对它进行配置数据的保存,此处我们需要在 DefaultNodeProps.js
里面的 APPROVAL_PROPS
对象新增一个自定义字段, 用来保存我们新增的这一项的设置数据。
3、添加配置数据设置项
当我们在配置面板选中该审批规则时,需要展示对应的设置项设置组件,例如(选中指定人员
时,需要提供给用户一个选人的按钮,然后点击弹出选人框选择人员,选中后人员又需要回显),这时候需要在 ApprovalNodeConfig.vue
中新增一个 v-else-if
用来提供该设置项操作组件。
<div v-if="nodeProps.assignedType === 'ASSIGN_USER'">
<el-button size="mini"
icon="el-icon-plus" type="primary"
@click="selectUser" round>
选择人员
</el-button>
<org-items v-model="nodeProps.assignedUser"/>
</div>
4、添加审批节点设置项回显
设置项需要在流程图节点上回显当前设置的内容信息,如下图

在 ApprovalNode.vue
组件内 computed
的 content
计算属性中 switch 添加一个 case 项,参加其他项设置,根据设置内容返回文字描述
5、添加设置项规则校验
当该新增的审批选项设置没有设置完整时,那么在用户发布流程时应当予以报错,防止提交错误数据
还是在 ApprovalNode.vue
组件内,methods
中添加一个函数 ,命名规则为 validate_xxx
,xxx为新增设置项 assignedType
字段的值,该设置项将会被自动调用。
// 入参 err 类型为 Array,用来返回错误信息
validate_XXXX(err){
if(this.config.props.xxxx 校验){
//校验成功
return true;
}else {
//校验失败,设置红色感叹号内错误信息
this.errorInfo = '请指定审批人员'
//添加错误信息到校验弹框内
err.push(`${this.config.name} 发生了xxx错误`)
return false
}
},
后端
1、新增设置项字段和选项枚举
由于我们在前端新增了一个审批选项设置的字段,后端对应实体类也需要添加这个字段,com.wflow.workflow.bean.process.props.ApprovalProps
中加上这个设置项字段的name 属性
然后在 com.wflow.workflow.bean.process.enums.ApprovalTypeEnum
把该字段类型枚举加上
2、添加取审批人规则解析
我们新增一个审批人人规则设置项,那么当选中该规则时,后端需要根据规则解析出匹配该规则的审批人,找到 com.wflow.workflow.service.impl.ProcessTaskServiceImpl.getApprovalUsers()
方法,在switch 内 加该项的枚举 case ,把解析出的审批人 add 进 userSet 集合内即可