因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。
1、因为仿钉钉设计器里抄送人是一个服务任务,所以要根据这个服务任务进行处理
2、前端就是一个抄送,选择人
3、这里用了jeecg的选择人组件
javascript
<el-form-item prop="users" label="指定人员" v-if="activeData.assigneeType === 'user'">
<div style="width:100%">
<j-select-user-by-dept
:zIndex="3000"
v-model:value="activeData.users"
:multi="true"
:placeholder="`请选择${type}人`"
@getSelectResult="handleSelectUsers">
</j-select-user-by-dept>
</div>
</el-form-item>
4、后端对这个处理如下:
java
public class CcNode extends AssigneeNode {
// 表单属性
private List<FormProperty> formProperties = new ArrayList<>();
// 操作权限
private Map<String, Boolean> operations = new LinkedHashMap<>();
@Override
public List<FlowElement> convert() {
ArrayList<FlowElement> elements = new ArrayList<>();
// 服务节点
ServiceTask serviceTask = new ServiceTask();
serviceTask.setId(this.getId());
serviceTask.setName(this.getName());
// serviceTask.setAsynchronous(true);
serviceTask.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_CLASS);
serviceTask.setImplementation("org.jeecg.modules.flowable.ServiceTask.ccDelegate");
//增加扩展属性 add by nbacheng
Map<String, List<ExtensionElement>> extensionElements = new HashMap<String, List<ExtensionElement>>();
ExtensionElement extensionElementTotal = new ExtensionElement();
extensionElementTotal.setName("flowable:properties");
ExtensionElement extensionElement = new ExtensionElement();
extensionElement.setName("flowable:property");
ExtensionAttribute extensionAttributeName = new ExtensionAttribute();
extensionAttributeName.setName("name");
extensionAttributeName.setValue("ccUserList");
extensionElement.addAttribute(extensionAttributeName);
ExtensionAttribute extensionAttributeValue = new ExtensionAttribute();
extensionAttributeValue.setName("value");
extensionAttributeValue.setValue(StringUtils.join(this.getUsers(), ","));
extensionElement.addAttribute(extensionAttributeValue);
extensionElementTotal.addChildElement(extensionElement);
extensionElements.put("ccUserList", CollUtil.newArrayList(extensionElementTotal));
serviceTask.setExtensionElements(extensionElements);
elements.add(serviceTask);
// 下一个节点的连线
Node child = this.getChild();
SequenceFlow sequenceFlow = this.buildSequence(child);
elements.add(sequenceFlow);
// 下一个节点
if (Objects.nonNull(child)) {
child.setBranchId(this.getBranchId());
List<FlowElement> flowElements = child.convert();
elements.addAll(flowElements);
}
return elements;
}
}
4、实际的效果图与xml