process-vue3
v1.0.27
Published
process-vue3 版本
Downloads
609
Maintainers
Readme
《在混沌中寻找清醒,于深渊中仰望星空》
process-vue3
process-vue3 是一款基于 Vue3 和 draw2d_native 的流程编排工具,可以帮助开发者快速构建流程图编辑器,适用于工作流引擎、业务流程管理等场景。
大厂流程编排设计方案深度分析与对比
1. 主流大厂流程编排方案概述
1.1 阿里巴巴 CompileFlow
- 核心设计理念:编译执行的高性能流程编排引擎
- 技术架构:基于DAG(有向无环图)数据结构,将流程定义转换为优化的Java代码,动态编译为字节码直接执行
- 性能特点:原生Java级别的极致性能,无解释器开销
- 适用场景:高性能、高并发的业务流程场景
- 核心优势:编译执行、轻量级、易扩展
1.2 字节跳动 FlowGram
- 核心设计理念:AI时代的可视化工作流引擎
- 技术架构:面向AI Bot开发的可视化流程编排,支持多模态输入输出
- 性能特点:图形化设计、低代码开发、快速集成
- 适用场景:AI Bot开发、自动化流程、智能服务编排
- 核心优势:可视化设计、AI能力集成、易用性强
1.3 传统工作流引擎对比(Activiti/Flowable)
- 核心设计理念:基于BPMN 2.0标准的完整工作流解决方案
- 技术架构:重量级架构,包含流程引擎、任务引擎、历史引擎等多个组件
- 性能特点:功能全面但性能相对较低
- 适用场景:复杂业务流程、审批流、企业级BPM系统
- 核心优势:标准兼容、功能全面、成熟稳定
2. process-vue3 架构设计
2.1 核心架构
┌─────────────────────────────────────────────────────────┐
│ ProcessEditor │
├─────────────────┬─────────────────┬─────────────────────┤
│ Vue3 组件 │ draw2d_native │ 流程配置系统 │
│ (视图层) │ (渲染引擎) │ (业务层) │
├─────────────────┼─────────────────┼─────────────────────┤
│ - 响应式状态 │ - 图形渲染 │ - 节点管理 │
│ - 组件通信 │ - 事件处理 │ - 属性配置 │
│ - 生命周期管理 │ - 画布操作 │ - 流程导入导出 │
└─────────────────┴─────────────────┴─────────────────────┘
│ │ │
└────────────────┼─────────────────┘
▼
┌───────────────────┐
│ 核心设计器 │
│ ProcessDesigner │
└───────────────────┘
│
▼
┌───────────────────┐
│ 生命周期管理 │
│ LIFE_CYCLE_EVENTS│
└───────────────────┘2.2 技术栈
| 技术/框架 | 版本 | 用途 | | -------------- | ---- | -------------- | | Vue | 3.5+ | 前端框架 | | TypeScript | 5.8+ | 类型系统 | | Ant Design Vue | 4.2+ | UI组件库 | | Vite | 7.1+ | 构建工具 | | vue-i18n | 9.14+| 国际化 | | Pinia | 3.0+ | 状态管理 | | Less | 4.x | CSS预处理器 | | X6 / Draw2d | - | 流程图渲染引擎 |
2.3 核心功能模块
| 模块名 | 主要功能 | 文件位置 | | ------------ | ---------------------- | ---------------------------------- | | 流程编辑器 | 可视化流程设计界面 | packages/editor/process-editor.vue | | 核心设计器 | 流程业务逻辑处理 | packages/core/designer.js | | 画布渲染 | 流程图图形渲染 | packages/core/canvas.js | | 属性配置面板 | 节点和流程属性配置 | packages/propertyPane/ | | 复合字段组件 | 47个高级配置组件 | packages/propertyPane/compositeField/ | | 原子字段组件 | 表单字段组件集合 | packages/atomicField/ | | 公共组件 | 可拖拽抽屉、搜索面板等 | packages/components/ | | 自定义节点 | 支持扩展自定义节点类型 | packages/types/ | | 多语言支持 | 国际化处理 | packages/locales/ | | AI智能助手 | 自然语言生成流程 | example/src/components/AIAssistant.vue | | 模板库 | 90个预置流程模板 | example/src/data/flowTemplates.js | | 智能推荐 | 节点推荐引擎 | example/src/utils/recommendationEngine.js |
3. 功能特性对比
| 特性维度 | process-vue3 | CompileFlow | FlowGram | Activiti/Flowable | | ---------- | ---------------- | -------------- | ---------- | ----------------- | | 技术栈 | Vue3 + X6/Draw2d | Java | 未知 | Java | | 设计模式 | 可视化拖拽设计 | 代码/DSL定义 | 可视化设计 | 可视化设计 | | 执行方式 | 前端渲染 | 编译执行 | 解释执行 | 解释执行 | | BPMN支持 | 持续完善中 | 不支持 | 不支持 | 完全支持 | | 性能表现 | 前端渲染性能 | 极高 | 中高 | 中等 | | 扩展性 | 高(组件化设计) | 高 | 中 | 高 | | 易用性 | 高 | 中(需编程) | 高 | 中(配置复杂) | | AI能力集成 | 中(已集成AI助手、智能推荐、模板库) | 无 | 强 | 无 | | 适用场景 | 前端流程设计 | 后端高并发流程 | AI Bot开发 | 企业级BPM系统 |
4. 优势与不足分析
4.1 process-vue3 优势
- 基于Vue3技术栈:利用Vue3的响应式系统和组件化设计,提供现代化的开发体验
- 轻量级架构:核心功能聚焦,易于集成和扩展
- 可视化设计:直观的拖拽式设计,降低开发门槛
- 自定义扩展性强:支持自定义节点、自定义属性、自定义字段
- 前后端分离:前端专注于流程设计,后端专注于流程执行
- AI能力集成:内置AI智能助手、智能节点推荐、自然语言生成流程
- 丰富的模板库:90个预置企业级流程模板,覆盖6大业务类别
- 高级校验系统:死循环检测、不可达节点检测、流程完整性检查
- 流程模拟运行:支持单步调试、断点、执行路径可视化
- 自动布局:内置Sugiyama分层布局算法,支持多种布局模式
4.2 process-vue3 不足
- BPMN标准支持持续完善中:已支持大部分常用BPMN节点类型,仍在持续扩展
- 缺乏后端执行引擎:主要聚焦于前端设计,需配合后端引擎使用
5. 未来发展方向
- 完善BPMN标准支持:逐步实现完整的BPMN 2.0标准支持
- 深化AI能力:引入大模型驱动的流程优化建议、智能补全、异常预警
- 前后端一体化:提供完整的流程设计-执行解决方案
快速开始
安装
yarn install使用
yarn add process-vue3在 main.ts 中引入:
import { createApp } from 'vue';
import App from './App.vue';
import ProcessEditor from 'process-vue3';
import 'process-vue3/lib/assets/main.css';
const app = createApp(App);
app.use(ProcessEditor);
app.mount('#app');在 App.vue 中使用:
<template>
<ProcessEditor
ref="editor"
class="process-vue3"
:processData="processData"
:tabConfig="null"
:customNodes="customNodes"
:customFields="customFields"
:staticDataSource="staticDataSource"
/>
</template>核心功能
1. 可视化流程设计
- 拖拽式节点添加和连接
- 直观的流程画布操作
- 支持节点复制、粘贴、删除
- 支持画布缩放和平移
- 小地图导航
- 网格显示和对齐辅助线
- 坐标显示
2. BPMN节点支持
| 节点类型 | 描述 | | -------- | -------------------- | | 开始事件 | 流程的起始点 | | 结束事件 | 流程的结束点 | | 中间事件 | 流程中的中间触发事件 | | 边界事件 | 附着在活动上的事件 | | 用户任务 | 需要人工处理的任务 | | 服务任务 | 自动执行的服务调用 | | 脚本任务 | 执行脚本逻辑 | | 业务规则任务 | DMN决策表引用 | | 网关节点 | 流程分支和合并 | | 子流程 | 嵌套的子流程 | | 数据对象 | 流程中的数据存储 |
3. AI 智能助手
- 自然语言生成流程:输入文字描述,自动生成 BPMN 流程(支持中英文)
- 智能节点推荐:根据当前节点类型和画布上下文,推荐下一个可能添加的节点
- AI浮动按钮:画布右下角的 AI 入口,带脉冲动画和推荐徽标
- 打字机效果:逐字输出回复,提升交互体验
- 流程预览:生成流程后可预览和一键应用
4. 模板库
- 90个预置模板:覆盖人事、财务、行政、业务、技术、合规 6 大类别
- 分类筛选:按业务类别快速定位模板
- 关键词搜索:支持按模板名称和描述搜索
- 一键应用:选择模板后自动加载到画布
- 模板预览:应用前可预览模板结构和节点
5. 流程模拟
- 可视化执行路径:模拟运行时高亮显示执行路径
- 单步调试:逐步执行流程节点
- 断点功能:在指定节点设置断点暂停执行
- 模拟报告:生成模拟执行结果报告
6. 自动布局
- Sugiyama分层算法:自动优化节点布局
- 三种布局模式:层级布局、水平布局、网格布局
- 一键整理:快速整理混乱的流程图
7. 高级校验
- 死循环检测:DFS 环检测算法
- 不可达节点检测:发现无法到达的结束节点
- 网关分支检查:排他网关分支条件完整性
- 孤立节点检测:发现没有连入或连出的节点
- 重复名称检测:同一流程中的同名节点警告
- 自定义校验规则:支持扩展业务级校验
8. 版本管理
- 自动保存:流程编辑时自动保存版本
- 历史记录:最多保存 50 个版本
- 版本对比:可视化对比不同版本的差异
- 版本回滚:一键恢复到历史版本
- 导入导出:支持版本的导入和导出
9. 自定义扩展
- 自定义节点:支持添加自定义业务节点
- 自定义属性:支持扩展节点属性配置
- 自定义字段:支持自定义表单字段类型(6大分类、20+字段类型)
- 自定义工具栏:支持动态配置工具栏按钮
- 自定义上下文菜单:支持画布右键菜单扩展
- 节点属性预设:7种预定义属性模板(标准审批、会签、或签等)
10. 流程管理
- 流程导入:支持从JSON数据导入流程
- 流程导出:支持将流程导出为JSON数据
- BPMN XML导入导出:支持BPMN 2.0 XML格式
- 流程验证:基础校验 + 高级校验
- 全局搜索:按节点名称或类型搜索,自动定位
11. 画布设置
- 背景类型:网格、点阵、线条、空白
- 网格配置:大小、颜色、对齐
- 缩放控制:放大、缩小、适应画布
12. 多语言支持
- 内置中英文支持
- 支持自定义语言扩展
- 动态语言切换
示例
在线演示
在线演示地址 - 展示process-vue3的核心功能和使用方式
示例分类
process-vue3提供了丰富的示例,涵盖了不同的使用场景和功能点:
| 示例编号 | 示例名称 | 主要功能 | 文件路径 | | -------- | -------------- | ------------------------------------------------ | ------------------------------ | | 0 | 基础流程设计器 | 完整的流程设计器功能,支持自定义节点、属性配置等 | example/src/views/demos/d0.vue | | 1 | 自定义节点示例 | 展示如何创建和使用自定义HTML节点 | example/src/views/demos/d1.vue | | 2 | 数据可视化节点 | 集成DataV组件的自定义节点示例 | example/src/views/demos/d2.vue | | 3 | 复杂流程示例 | 展示复杂业务流程的设计和配置 | example/src/views/demos/d3.vue | | 4 | 多语言支持示例 | 演示流程编辑器的多语言切换功能 | example/src/views/demos/d4.vue | | 5 | 高级属性配置 | 展示复杂节点属性的配置方式 | example/src/views/demos/d5.vue | | 6 | 流程导入导出 | 演示流程数据的导入和导出功能 | example/src/views/demos/d6.vue | | 7 | 生命周期钩子 | 展示如何使用生命周期钩子扩展功能 | example/src/views/demos/d7.vue | | 8 | 自定义工具栏 | 演示如何自定义流程编辑器的工具栏 | example/src/views/demos/d8.vue |
示例效果展示
流程属性配置

节点属性配置

自定义节点/属性

图形属性配置

扩展场景
1. 自定义节点开发
process-vue3支持灵活的自定义节点扩展,您可以根据业务需求创建各种类型的节点:
HTML自定义节点示例
<template>
<div class="custom-html-node">
<h3>{{ title }}</h3>
<div class="content">{{ content }}</div>
</div>
</template>
<script setup>
const props = defineProps({
userData: {
type: Object,
default: () => ({}),
},
figure: {
type: Object,
default: null,
},
});
const title = computed(() => props.userData?.title || '自定义节点');
const content = computed(() => props.userData?.content || '这是一个HTML自定义节点');
</script>
<style scoped>
.custom-html-node {
padding: 10px;
border: 2px solid #409eff;
border-radius: 8px;
background-color: #fff;
min-width: 150px;
min-height: 80px;
}
.custom-html-node h3 {
margin: 0 0 5px 0;
color: #409eff;
font-size: 14px;
}
</style>注册自定义节点
const customNodes = computed(() => [
{
type: 'HtmlTask',
bpmnType: 'CustomHtmlTask',
text: 'HTML自定义节点',
component: CustomHtmlNode,
attr: {
width: 200,
height: 80,
resizable: true,
},
},
]);2. 自定义属性字段
process-vue3支持扩展自定义属性字段,以满足特定的业务需求:
const customFields = computed(() => ({
SWITCH: {
component: FieldSwitch,
props: {},
events: {},
},
COLOR_PICKER: {
component: ColorPicker,
props: {
showText: true,
},
events: {
change: (value) => console.log('Color changed:', value),
},
},
}));3. 生命周期钩子扩展
process-vue3提供了丰富的生命周期钩子,可以在流程设计的各个阶段进行扩展:
// 注册生命周期钩子
const registerHooks = () => {
// 初始化后钩子
editor.value.designer.on(
'afterInit',
() => {
console.log('流程编辑器初始化完成');
},
{ blockAble: true }
);
// 节点添加前钩子
editor.value.designer.on(
'beforeAddNode',
({ emitter, event }) => {
// 可以在这里进行节点添加前的验证和处理
return true; // 返回false可以阻止节点添加
},
{ blockAble: true }
);
// 节点删除前钩子
editor.value.designer.on(
'beforeRemoveNode',
({ event: { figure } }) => {
if (figure.bpmnType === 'StartEvent') {
message.warning('开始节点不允许删除');
return false; // 阻止删除开始节点
}
return true;
},
{ blockAble: true }
);
// 节点选择钩子
editor.value.designer.on('selectedNode', ({ figure }) => {
console.log('选中节点:', figure.id);
});
};4. 自定义工具栏
您可以根据业务需求自定义流程编辑器的工具栏:
const toolbarButtons = {
getDefaultButtons() {
return [
{
key: 'save',
text: '保存',
icon: 'save',
onClick: () => saveProcess(),
},
{
key: 'export',
text: '导出',
icon: 'export',
onClick: () => exportProcess(),
},
{
key: 'import',
text: '导入',
icon: 'import',
onClick: () => importProcess(),
},
{
key: 'zoomIn',
text: '放大',
icon: 'zoom-in',
onClick: () => zoomIn(),
},
{
key: 'zoomOut',
text: '缩小',
icon: 'zoom-out',
onClick: () => zoomOut(),
},
];
},
};5. 多语言扩展
process-vue3支持多语言扩展,您可以添加自定义语言包:
// 自定义语言包
const customLang = {
'process.common.StartEvent': '开始事件',
'process.common.EndEvent': '结束事件',
'process.common.UserTask': '用户任务',
'process.common.ServiceTask': '服务任务',
// 更多自定义翻译...
};
// 注册自定义语言
app.config.globalProperties.$getLangText = (key, defaultText) => {
return customLang[key] || defaultText || key;
};6. 流程验证扩展
您可以扩展流程验证功能,确保设计的流程符合业务规则:
const validateProcess = () => {
const processData = editor.value.exportProcess();
const errors = [];
// 检查是否有开始节点
const hasStartNode = processData.figures.some((node) => node.bpmnType === 'StartEvent');
if (!hasStartNode) {
errors.push('流程必须包含开始节点');
}
// 检查是否有结束节点
const hasEndNode = processData.figures.some((node) => node.bpmnType === 'EndEvent');
if (!hasEndNode) {
errors.push('流程必须包含结束节点');
}
// 检查每个节点是否都有连接
processData.figures.forEach((node) => {
if (node.bpmnType !== 'StartEvent' && node.bpmnType !== 'EndEvent') {
const hasIncoming = processData.lines.some((line) => line.target === node.id);
const hasOutgoing = processData.lines.some((line) => line.source === node.id);
if (!hasIncoming) {
errors.push(`节点 ${node.config.name} 没有入连接`);
}
if (!hasOutgoing) {
errors.push(`节点 ${node.config.name} 没有出连接`);
}
}
});
return errors;
};7. 与后端集成
process-vue3可以轻松与后端服务集成,实现流程的持久化和执行:
// 保存流程到后端
const saveProcess = async () => {
const processData = editor.value.exportProcess();
try {
const response = await axios.post('/api/process/save', {
processData,
processName: '自定义流程',
processDesc: '这是一个使用process-vue3设计的流程',
});
message.success('流程保存成功');
return response.data;
} catch (error) {
message.error('流程保存失败: ' + error.message);
throw error;
}
};
// 从后端加载流程
const loadProcess = async (processId) => {
try {
const response = await axios.get(`/api/process/${processId}`);
editor.value.importProcess(response.data.processData);
message.success('流程加载成功');
} catch (error) {
message.error('流程加载失败: ' + error.message);
throw error;
}
};最佳实践
1. 节点设计原则
- 单一职责:每个节点只负责一个特定的业务功能
- 可复用性:设计通用的节点类型,便于在不同流程中复用
- 可配置性:提供丰富的配置选项,适应不同的业务场景
- 可视化友好:节点的外观应直观反映其功能和状态
2. 流程设计建议
- 清晰的流程结构:使用网关合理组织流程分支和合并
- 完整的生命周期:确保流程有明确的开始和结束节点
- 适当的节点粒度:节点的粒度应适中,既不过于细化也不过于粗糙
- 良好的命名规范:为节点和流程提供清晰、有意义的名称
3. 性能优化
- 合理使用自定义节点:避免过度复杂的自定义节点,影响渲染性能
- 优化流程规模:对于大型流程,考虑分页或分层设计
- 减少不必要的计算:在自定义节点中避免频繁的重计算
- 合理使用缓存:对于不经常变化的数据,使用缓存提高性能
4. 扩展性设计
- 使用生命周期钩子:通过生命周期钩子扩展功能,避免修改核心代码
- 模块化设计:将自定义功能封装为独立的模块,便于维护和升级
- 遵循开放封闭原则:对扩展开放,对修改封闭
- 提供清晰的扩展文档:为其他开发者提供详细的扩展指南
常见问题解答
Q: 如何添加自定义节点?
A: 您可以通过创建Vue组件,并将其注册为自定义节点来添加新的节点类型。具体步骤如下:
- 创建自定义节点组件
- 在编辑器中注册自定义节点
- 配置节点的属性和行为
Q: 如何扩展节点属性?
A: 您可以通过自定义属性字段和属性配置面板来扩展节点属性。具体方法包括:
- 创建自定义属性字段组件
- 在属性配置中引用自定义字段
- 配置字段的验证规则和默认值
Q: 如何实现流程的导入导出?
A: process-vue3提供了内置的导入导出功能,您可以直接调用编辑器的方法:
// 导出流程
const processData = editor.value.exportProcess();
// 导入流程
editor.value.importProcess(processData);Q: 如何实现多语言支持?
A: 您可以通过注册自定义翻译函数来实现多语言支持:
app.config.globalProperties.$getLangText = (key, defaultText) => {
return langMap[key] || defaultText || key;
};Q: 如何与后端工作流引擎集成?
A: 您可以通过以下步骤与后端工作流引擎集成:
- 使用exportProcess()导出流程数据
- 将流程数据转换为后端引擎支持的格式
- 调用后端API保存流程
- 从后端加载流程数据,使用importProcess()导入
Q: 如何自定义节点的外观?
A: 您可以通过以下方式自定义节点外观:
- 在节点注册时配置attr属性
- 使用CSS样式自定义节点外观
- 在自定义节点组件中实现复杂的视觉效果
- 利用图形属性配置面板动态调整节点样式
开源支持
如果您喜欢这个项目,请在 Gitee 上给我们一个 Star ⭐️!
打赏&支持
协议
本项目使用 Apache-2.0 协议。详情请参阅 LICENSE 文件。
