简体中文
阶段任务更换处理人范围控制
约 614 字大约 2 分钟
2026-05-08
在更换处理人范围选择前,控制可选人员范围。
功能描述
通过插件改写更换处理人时的选人范围,限制可选择的处理人员。
典型场景示例
场景 1:限制处理人范围
例如:只允许特定部门的人员成为处理人场景 2:排除特定人员
例如:排除已离职或已忙的人员场景 3:动态调整范围
例如:根据任务类型动态设置可选处理人
适用场景
- 需要精细控制处理人选择范围
- 需要根据业务规则过滤可选处理人
- 需要实现处理人的权限控制
适用页面
- 移动端阶段任务详情页-更换处理人弹层
- Web端数据详情页阶段推进器任务区域-更换处理人弹层
开发思路
功能增强通常可以拆成三步理解:
明确要增强的是哪一个环节
- 确定需要限制或扩大的处理人范围
选择合适的扩展事件/钩子
- 移动端:
flow.stage.task.change.handler.selelect.range.before - Web 端:
stage.task.render.after
- 移动端:
在插件中接入扩展点并验证行为
- 获取任务信息,根据业务逻辑确定可选人员范围
- 移动端返回
selectPersonRangeIds数组 - Web 端调用
api.getCustomSelectionRange()设置可选人员范围
开发流程
分析人员范围需求
- 确定需要限制或扩大的处理人范围
编写范围控制逻辑
// 移动端示例 module.exports = function (context, pluginService, pluginParam) { return { apply() { return [{ event: "flow.stage.task.change.handler.selelect.range.before", functional: async function (context, options) { let task = options && options.task; let taskId = options && options.taskId; // 设置可选人员范围 const selectPersonRangeIds = ['1049', '1001', '1002']; return Promise.resolve({ selectPersonRangeIds: selectPersonRangeIds }); } }]; } }; };// Web端示例 module.exports = class Plugin { apply() { return [{ event: 'stage.task.render.after', functional: this.stageTaskRenderAfter.bind(this), }]; } async stageTaskRenderAfter(api) { // 获取阶段数据 const stageData = await api.getStageData(); // 设置可选人员范围 api.getCustomSelectionRange(['1049', '1001', '1002', '1000', '1111', '1141', '-10000']); } };配置插件
- 在阶段推进器高级配置中选择对应插件
推荐入口
注意事项
- 人员ID有效性:确保返回的人员ID是有效的
- 空数组处理:返回空数组将不允许任何人被选择
- 权限配合:范围控制需与系统权限配合使用
- Web端API:Web端通过
getCustomSelectionRange(selectPersonRangeIds)方法设置人员范围
