# Bpmn-Project
**Repository Path**: tjs/bpmn-project
## Basic Information
- **Project Name**: Bpmn-Project
- **Description**: 流程引擎。包含基于最新版本的 Vue3 + TypeScript + ElementPlus + BPMN.js 的流程设计器,支持 Flowable 工作流引擎。如果觉得这个项目不错,麻烦点个star🌟。
- **Primary Language**: JavaScript
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 16
- **Created**: 2025-05-07
- **Last Updated**: 2025-06-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# BPMN 流程设计器
基于 Vue3 + TypeScript + ElementPlus + BPMN.js 的流程设计器,支持 Flowable 工作流引擎。

## 功能特性
- 🎨 支持自定义主题和样式
- 🎨 流程设计器汉化,校验结果汉化
- 🔧 完整的工具栏功能
- 导入/导出 BPMN 文件
- 放大/缩小/重置视图
- 撤销/重做操作
- 流程模拟器
- 小地图导航
- 快捷键提示
- 📝 强大的属性面板
- 基础信息配置
- 网关配置
- 连线配置
- 服务任务配置
- 事件配置
- 监听器配置
- 代办人配置
- 支持多种代办人类型:用户、角色、用户组、岗位、表达式
- 可配置代办人值,支持ID或表达式
- 🎯 支持 Flowable 工作流引擎
- 扩展支持 assigneeType 和 assigneeValue 属性
- 可灵活配置任务处理人
- 🌐 网格背景和参考线
- 🎮 流程模拟功能
- 🔍 小地图导航功能
- ⌨️ 快捷键支持
- 🔄 自动布局功能
- ✨ 平滑的动画效果
## Flowable 扩展属性说明
### 用户任务扩展属性
在用户任务节点中,我们扩展了以下属性来支持更灵活的任务处理人配置:
1. `assigneeType` (代办人类型)
- 类型:String
- 可选值:
- user: 用户
- role: 角色
- group: 用户组
- position: 岗位
- expression: 表达式
- 用途:指定任务处理人的类型
2. `assigneeValue` (代办人值)
- 类型:String
- 值说明:
- 当 assigneeType 为 user/role/group/position 时:填写对应的 ID
- 当 assigneeType 为 expression 时:填写表达式,如 ${user.id}
- 用途:指定具体的任务处理人
### 使用示例
```xml
```
### Java 后端获取扩展属性
在 Flowable 引擎中获取自定义的 assigneeType 和 assigneeValue 属性,有以下几种方式:
1. 通过 TaskService 获取
```java
@Autowired
private TaskService taskService;
public void handleTask(String taskId) {
// 获取任务定义
Task task = taskService.createTaskQuery()
.taskId(taskId)
.singleResult();
// 获取任务定义的扩展属性
String assigneeType = (String) taskService.getVariable(taskId, "flowable_assigneeType");
String assigneeValue = (String) taskService.getVariable(taskId, "flowable_assigneeValue");
}
```
2. 通过 RepositoryService 获取
```java
@Autowired
private RepositoryService repositoryService;
public void getTaskConfig(String processDefinitionId, String taskDefinitionKey) {
// 获取流程定义
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
// 获取用户任务节点
UserTask userTask = (UserTask) bpmnModel.getMainProcess()
.getFlowElement(taskDefinitionKey);
// 获取扩展属性
String assigneeType = userTask.getAttributeValue(
"http://flowable.org/bpmn", "assigneeType");
String assigneeValue = userTask.getAttributeValue(
"http://flowable.org/bpmn", "assigneeValue");
}
```
3. 通过 TaskListener 监听器获取
```java
@Component
public class CustomTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
// 获取扩展属性
String assigneeType = delegateTask.getVariable("flowable_assigneeType").toString();
String assigneeValue = delegateTask.getVariable("flowable_assigneeValue").toString();
// 根据不同类型处理任务分配
switch (assigneeType) {
case "user":
delegateTask.setAssignee(assigneeValue);
break;
case "role":
// 处理角色分配逻辑
break;
case "group":
delegateTask.addCandidateGroup(assigneeValue);
break;
case "position":
// 处理岗位分配逻辑
break;
case "expression":
// 处理表达式分配逻辑
break;
}
}
}
```
4. 在流程部署时配置监听器
```xml
```
### 最佳实践建议
1. 建议在流程部署时就配置好 TaskListener,可以统一处理任务分配逻辑
2. 可以将分配逻辑封装到专门的服务类中,便于维护和复用
3. 对于动态表达式,建议使用 SpEL 表达式或 Flowable 表达式
4. 注意处理异常情况,如找不到对应的用户、角色等
5. 可以结合数据库缓存用户、角色等信息,提高性能
### 注意事项
1. 自定义属性的命名空间必须是 `http://flowable.org/bpmn`
2. 属性值建议做好验证,避免非法值
3. 表达式需要确保在运行时能够正确解析
4. 建议对任务分配结果进行日志记录,便于问题排查
## 技术栈
- Vue 3.x
- TypeScript 5.x
- Element Plus
- BPMN.js
- Vite
## 快速开始
### 安装依赖
```bash
pnpm install
```
### 开发环境运行
```bash
pnpm dev
```
### 生产环境打包
```bash
pnpm build
```
## 项目结构
```
src/
├── views/
│ └── ProcessDesign/ # 流程设计器主目录
│ ├── components/ # 组件目录
│ │ ├── PropertyPanel.vue # 属性面板
│ │ ├── ToolBar.vue # 工具栏
│ │ └── ...
│ ├── hooks/ # 钩子函数目录
│ │ ├── useBasicForm.ts # 基础表单逻辑
│ │ ├── useGatewayConfig.ts # 网关配置逻辑
│ │ └─�� ...
│ ├── types/ # 类型定义目录
│ │ ├── bpmn.ts # BPMN相关类型
│ │ ├── flowable.ts # Flowable相关类型
│ │ └── index.ts # 通用类型
│ └── config/ # 配置文件目录
│ └── flowable.json # Flowable配置
└── ...
```
## 使用说明
1. 工具栏功能:
- 导入/导出:支持 BPMN、XML、SVG 格式
- 视图控制:放大、缩小、重置视图
- 编辑操作:撤销、重做、删除
- 流程模拟:支持流程模拟运行
- 小地图:快速导航和预览
2. 属性面板:
- 基础信息:ID、名称、描述
- 网关配置:默认流转路径
- 连线配置:条件表达式
- 服务配置:实现类型、异步执行
- 事件配置:消息、信号、定时器
- 监听器配置:执行监听器
3. 快捷键支持:
- Ctrl + Z:撤销
- Ctrl + Y:重做
- Ctrl + -:缩小
- Ctrl + =:放大
- Delete:删除
## 注意事项
1. 确保 Node.js 版本 >= 16
2. 推荐使用 pnpm 包管理器
3. 开发时请遵循项目的代码规范
4. 提交代码前请进行代码格式化
## 贡献指南
1. Fork 本仓库
2. 创建特性分支
3. 提交代码
4. 创建 Pull Request
## ✨ 特别鸣谢
- MiyueFE: [MiyueFE](https://gitee.com/MiyueSC)
## 诚挚推荐
强烈推荐贺波老师的《深入Flowable流程引擎:核心原理与高阶实战》,Flowable 创始人 Tijs Rademakers 亲笔作序,该书对系统学习和深入掌握
Flowable
极有帮助,书中涵盖很多大型流程中心平台所涉及的技术架构和场景案例。[推荐购买链接](https://item.jd.com/14804836.html)


## 许可证
[Apache-2.0](LICENSE)