npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

process-vue3

v1.0.27

Published

process-vue3 版本

Downloads

609

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 优势

  1. 基于Vue3技术栈:利用Vue3的响应式系统和组件化设计,提供现代化的开发体验
  2. 轻量级架构:核心功能聚焦,易于集成和扩展
  3. 可视化设计:直观的拖拽式设计,降低开发门槛
  4. 自定义扩展性强:支持自定义节点、自定义属性、自定义字段
  5. 前后端分离:前端专注于流程设计,后端专注于流程执行
  6. AI能力集成:内置AI智能助手、智能节点推荐、自然语言生成流程
  7. 丰富的模板库:90个预置企业级流程模板,覆盖6大业务类别
  8. 高级校验系统:死循环检测、不可达节点检测、流程完整性检查
  9. 流程模拟运行:支持单步调试、断点、执行路径可视化
  10. 自动布局:内置Sugiyama分层布局算法,支持多种布局模式

4.2 process-vue3 不足

  1. BPMN标准支持持续完善中:已支持大部分常用BPMN节点类型,仍在持续扩展
  2. 缺乏后端执行引擎:主要聚焦于前端设计,需配合后端引擎使用

5. 未来发展方向

  1. 完善BPMN标准支持:逐步实现完整的BPMN 2.0标准支持
  2. 深化AI能力:引入大模型驱动的流程优化建议、智能补全、异常预警
  3. 前后端一体化:提供完整的流程设计-执行解决方案

快速开始

安装

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组件,并将其注册为自定义节点来添加新的节点类型。具体步骤如下:

  1. 创建自定义节点组件
  2. 在编辑器中注册自定义节点
  3. 配置节点的属性和行为

Q: 如何扩展节点属性?

A: 您可以通过自定义属性字段和属性配置面板来扩展节点属性。具体方法包括:

  1. 创建自定义属性字段组件
  2. 在属性配置中引用自定义字段
  3. 配置字段的验证规则和默认值

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: 您可以通过以下步骤与后端工作流引擎集成:

  1. 使用exportProcess()导出流程数据
  2. 将流程数据转换为后端引擎支持的格式
  3. 调用后端API保存流程
  4. 从后端加载流程数据,使用importProcess()导入

Q: 如何自定义节点的外观?

A: 您可以通过以下方式自定义节点外观:

  1. 在节点注册时配置attr属性
  2. 使用CSS样式自定义节点外观
  3. 在自定义节点组件中实现复杂的视觉效果
  4. 利用图形属性配置面板动态调整节点样式

开源支持

如果您喜欢这个项目,请在 Gitee 上给我们一个 Star ⭐️!

打赏&支持

协议

本项目使用 Apache-2.0 协议。详情请参阅 LICENSE 文件。

--- 神即道,道法自然,如来 ---