【解放双手】ingenious-flow-designer:零基础开发可视化流程引擎的终极方案
你是否还在为流程设计工具开发焦头烂额?花费数周搭建基础框架,却在节点拖拽、连线逻辑上反复碰壁?尝试集成第三方库时,又陷入UI组件冲突的泥潭?今天,我们将彻底解决这些痛点——ingenious-flow-designer(流程设计器)作为一款开源可视化流程设计开发利器,让你从零开始1小时内搭建企业级流程设计平台,彻底告别996的重复开发。
为什么选择 ingenious-flow-designer?
传统流程设计开发面临三大困境:
- 技术门槛高:需掌握Canvas/SVG绘图、拖拽算法、数据序列化等复杂技术
- 集成成本大:UI组件库适配、表单引擎对接、后端API集成耗时耗力
- 扩展性受限:自定义节点/边类型、业务规则嵌入困难重重
而ingenious-flow-designer通过三层架构彻底解决这些问题:
flowchart TD
A[核心层] -->|提供基础能力| A1(LogicFlow内核)
A --> A2(节点/边模型)
A --> A3(数据处理)
B[适配层] -->|连接核心与UI| B1(UI适配器)
B --> B2(表单引擎)
B --> B3(事件系统)
C[应用层] -->|面向开发者| C1(组件API)
C --> C2(配置选项)
C --> C3(示例工程)
A --> B
B --> C
核心功能速览
1. 开箱即用的可视化设计界面
提供完整的拖拽式设计面板,包含:
- 丰富的预置节点(开始、结束、任务、判断、子流程等)
- 智能连线系统(支持直角/曲线连接、自动吸附、交叉避让)
- 多视图控制(缩放、平移、居中、全屏)
2. 双UI框架无缝支持
完美适配主流UI组件库,一处集成,多处可用:
| 功能特性 | Element Plus支持 | Ant Design Vue支持 |
|---|---|---|
| 表单设计器 | ✅ 完全支持 | ✅ 完全支持 |
| 抽屉/弹窗 | ✅ 样式统一 | ✅ 样式统一 |
| 图标系统 | ✅ 自动适配 | ✅ 自动适配 |
| 主题定制 | ✅ 全量支持 | ✅ 全量支持 |
3. 强大的自定义扩展能力
通过简单配置即可扩展:
// 自定义请假审批节点示例
import { CustomModel, CustomView } from 'ingenious-flow-designer'
class LeaveApprovalModel extends CustomModel {
initNodeData(data) {
super.initNodeData(data)
this.properties.approvalType = 'manager' // 审批类型默认经理
this.properties.daysLimit = 3 // 默认3天内审批
}
}
class LeaveApprovalView extends CustomView {
getShape() {
// 自定义节点外观
return `
<rect width="120" height="60" fill="#f0f9ff" stroke="#1890ff" rx="4" />
<text x="60" y="35" text-anchor="middle">请假审批</text>
`
}
}
// 注册自定义节点
flowDesigner.registerNode({
type: 'custom:leave-approval',
model: LeaveApprovalModel,
view: LeaveApprovalView,
form: [
{ name: 'approvalType', label: '审批类型', component: 'Select' },
{ name: 'daysLimit', label: '最大天数', component: 'InputNumber' }
]
})
4. 灵活的状态管理与流程可视化
支持流程运行时状态展示,清晰呈现流程流转路径:
stateDiagram-v2
[*] --> 申请提交
申请提交 --> 部门经理审批 : 提交申请
部门经理审批 --> HR审批 : 审批通过
HR审批 --> 总经理审批 : 超过3天
HR审批 --> 流程结束 : 3天内
总经理审批 --> 流程结束 : 最终审批
部门经理审批 --> 申请驳回 : 审批拒绝
总经理审批 --> 申请驳回 : 审批拒绝
申请驳回 --> [*]
流程结束 --> [*]
快速开始:15分钟上手实战
环境准备
确保你的开发环境满足:
- Node.js 16.x+
- npm/yarn/pnpm包管理器
- Vue 3.2+ 项目环境
安装流程设计器
# 使用国内npm镜像安装
npm install ingenious-flow-designer --registry=https://registry.npmmirror.com
全局注册(Vue项目)
import { createApp } from 'vue'
import App from './App.vue'
import FlowDesigner from 'ingenious-flow-designer'
import 'ingenious-flow-designer/lib/style.css'
// 引入UI库样式 (根据项目使用的UI库选择)
import 'element-plus/dist/index.css'
// 或
// import 'ant-design-vue/dist/reset.css'
const app = createApp(App)
// 注册流程设计器,指定UI库
app.use(FlowDesigner, {
uiLibrary: 'element-plus' // 或 'antd'
})
app.mount('#app')
基础使用示例(编辑模式)
<template>
<div class="flow-container">
<IngeniousFlowDesigner
v-model:value="graphData"
:theme="themeConfig"
@on-save="handleSave"
/>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
// 流程图数据
const graphData = ref({
name: 'leave_process',
display_name: '请假流程',
nodes: [
{
id: 'start',
type: 'ingenious:start',
x: 100,
y: 100,
text: '开始'
},
{
id: 'approve',
type: 'ingenious:task',
x: 300,
y: 100,
text: '经理审批',
properties: {
assignee: 'manager',
form: 'leave_approval_form'
}
},
{
id: 'end',
type: 'ingenious:end',
x: 500,
y: 100,
text: '结束'
}
],
edges: [
{
sourceNodeId: 'start',
targetNodeId: 'approve',
type: 'ingenious:transition',
text: '提交'
},
{
sourceNodeId: 'approve',
targetNodeId: 'end',
type: 'ingenious:transition',
text: '通过'
}
]
})
// 主题配置
const themeConfig = ref({
primaryColor: '#1890ff',
backgroundColor: '#fafafa',
activeColor: '#52c41a'
})
// 保存流程图数据
const handleSave = (data) => {
console.log('保存流程图数据:', data)
// 调用API保存到后端
// axios.post('/api/process/save', data)
}
</script>
<style scoped>
.flow-container {
width: 100%;
height: 600px;
border: 1px solid #e8e8e8;
}
</style>
查看模式使用
如需在流程运行时展示流程进度,使用查看模式:
<template>
<IngeniousFlowDesigner
:value="runtimeData"
:viewer="true"
:highLight="highLightConfig"
/>
</template>
<script setup lang="ts">
import { ref } from 'vue'
// 运行时流程数据
const runtimeData = ref({
// 与编辑模式相同的nodes和edges结构
// ...
})
// 高亮配置 - 显示当前流程位置
const highLightConfig = ref({
history_node_names: ['start', 'approve'], // 已走过的节点
active_node_names: ['hr_approve'], // 当前节点
history_edge_names: ['start-approve'] // 已走过的边
})
</script>
核心技术架构解析
节点与边模型设计
ingenious-flow-designer采用面向对象的节点设计,每种节点类型包含模型(Model)和视图(View):
classDiagram
class BaseModel {
+id: string
+type: string
+x: number
+y: number
+text: string
+properties: object
+initNodeData(data)
+getProperties()
+setProperties(props)
}
class BaseView {
+model: BaseModel
+getShape()
+getText()
+updateStyle()
}
class StartModel {
+isRoot: boolean
}
class StartView {
+getShape()
}
BaseModel <|-- StartModel
BaseModel <|-- TaskModel
BaseModel <|-- EndModel
BaseModel <|-- DecisionModel
BaseView <|-- StartView
BaseView <|-- TaskView
BaseView <|-- EndView
BaseView <|-- DecisionView
UI适配器设计
为支持多UI库,设计器抽象了UI适配器接口:
// UI适配器接口定义
export interface UIAdapter {
// 创建表单组件
createFormItem(config: FormItemConfig): VNode
// 显示消息提示
message(config: MessageConfig): void
// 打开抽屉
openDrawer(config: DrawerConfig): void
// 打开弹窗
openModal(config: ModalConfig): void
// 获取图标
getIcon(iconName: string): VNode
}
// Element Plus适配器实现
export class ElementUIAdapter implements UIAdapter {
createFormItem(config) {
// 使用Element Plus组件创建表单
return h(ElFormItem, config)
}
// 其他方法实现...
}
// Ant Design适配器实现
export class AntdUIAdapter implements UIAdapter {
createFormItem(config) {
// 使用Ant Design组件创建表单
return h(aFormItem, config)
}
// 其他方法实现...
}
高级应用场景
1. 自定义业务节点开发
以"费用报销审批"节点为例,实现业务逻辑嵌入:
// 报销审批节点模型
class ReimbursementModel extends TaskModel {
initNodeData(data) {
super.initNodeData(data)
// 默认属性
this.properties = {
amountLimit: 1000,
approverRole: 'finance',
...this.properties
}
}
// 业务规则验证
validateAmount(amount) {
return amount <= this.properties.amountLimit
}
}
// 注册节点类型
flowDesigner.registerNode({
type: 'custom:reimbursement',
model: ReimbursementModel,
view: ReimbursementView,
form: [
{
name: 'amountLimit',
label: '审批限额',
component: 'InputNumber',
componentProps: {
min: 100,
max: 100000,
step: 100
}
},
{
name: 'approverRole',
label: '审批角色',
component: 'Select',
componentProps: {
options: [
{ label: '财务', value: 'finance' },
{ label: '部门经理', value: 'manager' },
{ label: '总经理', value: 'generalManager' }
]
}
}
]
})
2. 流程数据导出与代码生成
将设计的流程图导出为可执行代码:
// 导出为BPMN 2.0 XML
const exportToBpmn = () => {
const bpmnXML = flowDesigner.exportData('bpmn')
// 保存XML文件
saveFile(bpmnXML, 'process.bpmn', 'application/xml')
}
// 导出为Vue组件代码
const exportToVueComponent = () => {
const componentCode = flowDesigner.exportData('vue-component')
saveFile(componentCode, 'ProcessDesigner.vue', 'text/plain')
}
3. 流程版本管理集成
结合后端实现流程版本控制:
// 加载历史版本
const loadHistoryVersion = async (versionId) => {
const res = await axios.get(`/api/process/history/${versionId}`)
flowDesigner.setValue(res.data)
}
// 比较版本差异
const compareVersions = async (v1, v2) => {
const diff = await axios.post('/api/process/compare', { v1, v2 })
flowDesigner.showDiff(diff.data)
}
安装与配置指南
完整安装步骤
# 1. 创建Vue项目(如无现有项目)
npm create vite@latest flow-demo -- --template vue-ts
cd flow-demo
# 2. 安装UI库(选择一个)
# Element Plus
npm install element-plus --save
# 或 Ant Design Vue
npm install ant-design-vue --save
# 3. 安装流程设计器
npm install ingenious-flow-designer --registry=https://registry.npmmirror.com
# 4. 运行项目
npm run dev
全局配置选项
app.use(FlowDesigner, {
// 基础配置
uiLibrary: 'element-plus', // UI库类型
typePrefix: 'custom:', // 自定义类型前缀
// 主题配置
theme: {
primaryColor: '#1890ff',
backgroundColor: '#ffffff',
edgePrimaryColor: '#888888'
},
// 默认节点/边类型
defaultEdgeType: 'custom:transition',
// 表单配置
form: {
labelWidth: '120px'
}
})
常见问题与解决方案
Q1: 自定义节点不显示或无法拖拽?
A: 检查三点:
- 自定义节点是否正确注册:
flowDesigner.registerNode(...) - 拖拽面板配置是否包含该节点类型
- 节点模型是否继承自BaseModel并实现必要方法
Q2: 如何与后端API集成实现数据持久化?
A: 设计器提供完整的数据导入导出API:
// 保存到后端
const saveProcess = async () => {
const graphData = flowDesigner.getValue()
try {
await axios.post('/api/process/save', {
id: graphData.id,
name: graphData.name,
content: JSON.stringify(graphData)
})
ElMessage.success('保存成功')
} catch (e) {
ElMessage.error('保存失败')
}
}
// 从后端加载
const loadProcess = async (id) => {
const res = await axios.get(`/api/process/get/${id}`)
flowDesigner.setValue(JSON.parse(res.data.content))
}
Q3: 如何实现自定义连线规则?
A: 通过事件拦截实现自定义连线逻辑:
<IngeniousFlowDesigner
@beforeAddEdge="handleBeforeAddEdge"
/>
const handleBeforeAddEdge = (source, target) => {
// 禁止从结束节点发出连线
if (source.type.includes('end')) {
ElMessage.warning('结束节点不能发出连线')
return false
}
// 禁止连接到开始节点
if (target.type.includes('start')) {
ElMessage.warning('不能连接到开始节点')
return false
}
return true
}
结语:开启流程数字化之旅
ingenious-flow-designer作为一款开源可视化流程设计开发工具,彻底改变了传统流程引擎开发模式。通过其高度抽象的设计思想、灵活的扩展机制和完善的文档支持,让开发者能够聚焦业务逻辑而非技术实现。
无论是OA系统的审批流程、CRM的客户跟进流程,还是工业互联网的设备运维流程,ingenious-flow-designer都能为你提供坚实的技术支撑。立即加入开源社区,体验高效流程设计开发的乐趣!
项目地址:通过git工具获取最新代码
git clone https://gitcode.com/motion-code/flow-designer开源协议:Apache License 2.0,完全免费商用
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00