# workflow-vue3
**Repository Path**: ding-zhiwen/workflow-vue3
## Basic Information
- **Project Name**: workflow-vue3
- **Description**: 使用flowvue重构 +vue3 + ts + elementUI-plus 实现的前端工作流框架,内容非常简单。内涵汉 .net 工作流框架 Elsa 汉化版 #.net #Elsa #workflow #工作流
- **Primary Language**: JavaScript
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 14
- **Forks**: 1
- **Created**: 2025-01-05
- **Last Updated**: 2025-09-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Elsa, 工作流, workflow, Vue
## README
# Vue Flow 工作流设计器
一个基于 Vue 3 + TypeScript + Vue Flow 的现代化工作流设计器,支持拖拽创建、编辑和连接各种工作流节点,并可将设计结果导出为 Elsa 框架格式。
## ✨ 功能特性

### 🎯 核心功能
- **拖拽创建节点**:从左侧菜单拖拽节点到画布
- **节点连接**:支持节点之间的连线,带动画效果
- **节点编辑**:双击节点编辑属性(审批人、抄送人)
- **节点删除**:右键删除节点和连接线
- **工作流导入导出**:支持JSON格式的导入导出
- **Elsa格式转换**:双向转换Vue Flow ↔ Elsa格式
- **Elsa格式导出**:一键转换为Elsa工作流框架格式
# Workflow for Elsa 使用指南
## 📖 简介
`workflow_for_elsa` 是一个基于 Vue 3 的工作流设计器组件,专为 Elsa 工作流引擎设计。它提供了直观的拖拽界面,让您可以轻松创建、编辑和管理工作流程。
## 🚀 快速开始
### 安装
```bash
npm install workflow_for_elsa
```
### 基础使用
```vue
```
## 🎯 核心功能
### 1. 拖拽创建节点
- 从左侧节点库拖拽节点到画布
- 支持开始、审批、抄送、结束四种节点类型
- 自动计算节点位置
### 2. 节点连接
- 拖拽节点连接点创建连接线
- 支持动画效果
- 可自定义连接线样式
### 3. 节点编辑
- 双击节点编辑属性
- 审批节点:设置审批人
- 抄送节点:设置抄送人
### 4. 数据管理
- 支持导入/导出 JSON 格式
- 支持 Elsa 格式转换
- 实时数据变化监听
## 📋 详细使用
### 基础配置
```vue
```
### 只读模式
```vue
```
### 自定义配置
```vue
```
## 🎪 事件处理
### 数据变化事件
```vue
```
### 保存事件
```vue
```
## 🎨 样式自定义
### CSS 变量
```css
:root {
--workflow-primary-color: #1890ff;
--workflow-success-color: #52c41a;
--workflow-warning-color: #faad14;
--workflow-danger-color: #ff4d4f;
}
```
### 自定义样式
```css
/* 自定义节点样式 */
.vue-flow__node {
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
/* 自定义连接线样式 */
.vue-flow__edge-path {
stroke-width: 3;
stroke: #1890ff;
}
/* 自定义工具栏样式 */
.workflow-designer .toolbar {
background: #f5f5f5;
border-bottom: 1px solid #e0e0e0;
}
```
## 🔧 高级功能
### 自定义工具栏按钮
```vue
```
### 自定义人员列表
```vue
```
### 主题切换
```vue
切换主题: {{ theme }}
```
## 🔄 Elsa 集成
### 导入 Elsa 工作流
```vue
```
### 导出到 Elsa
```vue
```
## 📱 响应式设计
### 移动端适配
```vue
```
## 🐛 常见问题
### 1. 组件不显示
**问题**: 组件渲染为空白
**解决**:
- 确保已导入样式文件
- 检查所有依赖是否正确安装
- 确认Vue版本兼容性
### 2. 拖拽不工作
**问题**: 无法拖拽节点
**解决**:
- 检查 `allowDrag` 属性
- 确保不在只读模式
- 检查浏览器控制台错误
### 3. 样式不生效
**问题**: 自定义样式不显示
**解决**:
- 检查CSS选择器优先级
- 使用 `:deep()` 选择器
- 确认样式文件导入顺序
### 4. 事件不触发
**问题**: 事件监听器不工作
**解决**:
- 检查事件名称拼写
- 确认事件处理函数定义
- 检查Vue版本兼容性
## 📚 完整示例
### 完整的工作流应用
```vue
```
## 🔗 相关链接
- [NPM 包地址](https://www.npmjs.com/package/workflow_for_elsa)
- [GitHub 仓库](https://github.com/your-username/workflow_for_elsa)
- [API 参考文档](API_REFERENCE.md)
- [Elsa 工作流引擎](https://elsaworkflows.io/)
## 📞 技术支持
如有问题或建议,请通过以下方式联系:
- 发送邮件至 1145480106@qq.com
---
**祝您使用愉快!** 🎉
**你也可以直接拉取源码,在之上进行更改,源码说明 👇**
### 📦 节点类型
- **开始节点**:绿色圆形图标,表示工作流开始
- **审批节点**:蓝色方形图标,可设置审批人
- **抄送节点**:黄色方形图标,可设置抄送人
- **结束节点**:红色圆形图标,表示工作流结束
### 🎨 界面特性
- **左右布局**:左侧节点库,右侧设计画布
- **工具栏**:清空、导入、导出、保存等功能
- **人员选择**:支持下拉选择和树形选择两种方式
- **响应式设计**:适配不同屏幕尺寸
- **现代化UI**:基于Element Plus的美观界面
## 🚀 快速开始
### 环境要求
- Node.js >= 16.0.0
- npm >= 8.0.0
### 安装依赖
```bash
npm install
```
### 启动开发服务器
```bash
npm run dev
```
### 构建生产版本
```bash
npm run build
```
### 预览生产版本
```bash
npm run preview
```
## 📖 使用指南
### 基本操作
#### 1. 添加节点
- 从左侧菜单拖拽节点类型到画布
- 节点会自动添加到拖拽位置
- 支持实时预览拖拽效果
#### 2. 连接节点
- 从一个节点的连接点拖拽到另一个节点
- 支持平滑的连线动画
- 连接线宽度为3px,颜色为蓝色
#### 3. 编辑节点
- **审批节点**:双击编辑审批人
- **抄送节点**:双击编辑抄送人
- 支持人员选择弹窗,提供下拉和树形两种选择方式
#### 4. 删除操作
- **删除节点**:右键点击节点选择删除
- **删除连接线**:右键点击连接线选择删除
- 删除节点时会自动删除相关连线
#### 5. 工具栏操作
- **清空画布**:删除所有节点和连线
- **导出工作流**:保存为JSON文件
- **导入工作流**:从JSON文件加载
- **导入Elsa格式**:从Elsa工作流文件导入并转换为Vue Flow格式
- **保存为Elsa格式**:转换为Elsa工作流格式并打印到控制台
### 人员选择功能
#### 下拉选择模式
- 支持多选和搜索过滤
- 显示人员姓名、部门、职位信息
- 已选择人员以标签形式显示
#### 树形选择模式
- 按部门分组显示人员
- 支持部门和个人选择
- 更直观的层级结构
## 🏗️ 项目结构
```
src/
├── components/
│ └── VueFlow/
│ ├── FullWorkflowDesigner.vue # 主设计器组件
│ ├── PersonSelector.vue # 人员选择弹窗组件
│ ├── nodes/ # 节点组件目录
│ │ ├── StartNode.vue # 开始节点
│ │ ├── ApproveNode.vue # 审批节点
│ │ ├── SendNode.vue # 抄送节点
│ │ └── EndNode.vue # 结束节点
│ └── README.md # 组件说明文档
├── App.vue # 根组件
├── main.ts # 入口文件
└── style.css # 全局样式
```
## 🛠️ 技术栈
- **Vue 3** - 渐进式JavaScript框架
- **TypeScript** - 类型安全的JavaScript超集
- **Vue Flow** - 流程图和节点编辑器
- **Element Plus** - Vue 3 UI组件库
- **Vite** - 快速的前端构建工具
### 核心依赖
```json
{
"@vue-flow/core": "^1.46.3",
"@vue-flow/background": "^1.3.2",
"@vue-flow/controls": "^1.1.3",
"@vue-flow/minimap": "^1.5.4",
"element-plus": "^2.9.1",
"vue": "^3.5.13"
}
```
## 📋 API 文档
### 主要组件
#### FullWorkflowDesigner
主工作流设计器组件,提供完整的工作流设计功能。
**Props**: 无
**Events**:
- `@save-elsa`: 保存为Elsa格式时触发
#### PersonSelector
人员选择弹窗组件,支持下拉和树形两种选择方式。
**Props**:
- `modelValue: boolean` - 弹窗显示状态
- `title: string` - 弹窗标题
- `selectedPersonIds?: string[]` - 已选择的人员ID列表
**Events**:
- `@update:modelValue` - 更新弹窗显示状态
- `@confirm` - 确认选择时触发,参数为人员ID和人员信息
### 节点类型
#### StartNode
开始节点组件,表示工作流的起始点。
**Features**:
- 绿色圆形图标
- 底部连接点
- 不可编辑属性
#### ApproveNode
审批节点组件,用于设置审批流程。
**Features**:
- 蓝色方形图标
- 顶部和底部连接点
- 可编辑审批人属性
- 支持人员选择弹窗
#### SendNode
抄送节点组件,用于设置抄送通知。
**Features**:
- 黄色方形图标
- 顶部和底部连接点
- 可编辑抄送人属性
- 支持人员选择弹窗
#### EndNode
结束节点组件,表示工作流的结束点。
**Features**:
- 红色圆形图标
- 顶部连接点
- 不可编辑属性
## 🔧 自定义开发
### 添加新节点类型
1. 在 `nodes/` 目录下创建新的节点组件
2. 在 `FullWorkflowDesigner.vue` 中注册新节点类型
3. 在 `nodeTypes` 数组中添加节点配置
示例:
```typescript
// 在 customNodeTypes 中添加
const customNodeTypes: any = {
// ... 现有节点
custom: CustomNode
}
// 在 nodeTypes 中添加
const nodeTypes = [
// ... 现有类型
{ type: 'custom', label: '自定义', icon: 'CustomIcon' }
]
```
### 自定义节点属性
每个节点组件都可以通过 `props.data` 接收自定义数据:
```typescript
const props = defineProps<{
data?: {
label?: string
customProperty?: any
}
}>()
```
### 样式定制
组件使用CSS变量和scoped样式,可以通过以下方式定制:
- 修改节点颜色:编辑各节点组件中的CSS变量
- 调整布局:修改 `FullWorkflowDesigner.vue` 中的样式
- 自定义主题:通过Element Plus主题系统
## 📊 Elsa格式转换
### 双向转换支持
本项目支持Vue Flow格式与Elsa格式之间的双向转换:
- **Vue Flow → Elsa**:将设计的工作流转换为Elsa格式
- **Elsa → Vue Flow**:将Elsa工作流导入并转换为Vue Flow格式
### 导出到Elsa格式
#### 数据结构
导出的Elsa格式包含以下主要部分:
```typescript
{
id: string, // 工作流ID
name: string, // 工作流名称
description: string, // 工作流描述
version: number, // 版本号
activities: Activity[], // 活动列表
connections: Connection[], // 连接列表
variables: any[], // 变量列表
customAttributes: any[], // 自定义属性
persistenceBehavior: { // 持久化行为配置
// ... 持久化相关配置
}
}
```
#### 活动类型映射
| Vue Flow节点类型 | Elsa活动类型 | 说明 |
|----------------|-------------|------|
| start | Start | 工作流开始 |
| approve | Approval | 审批活动 |
| send | SendEmail | 邮件发送活动 |
| end | Finish | 工作流结束 |
### 从Elsa格式导入
#### 支持的Elsa活动类型
- **Start** → 开始节点
- **Approval** → 审批节点(自动提取审批人信息)
- **SendEmail** → 抄送节点(自动提取收件人信息)
- **Finish** → 结束节点
#### 自动属性映射
- **审批人信息**:从`Approver`属性自动提取
- **收件人信息**:从`Recipients`属性自动提取
- **位置信息**:从`x`、`y`坐标自动映射
- **连接关系**:从`connections`数组自动重建
#### 导入流程
1. 点击工具栏的"导入Elsa格式"按钮
2. 选择Elsa工作流JSON文件
3. 系统自动解析并转换为Vue Flow格式
4. 在画布中显示转换后的工作流
#### 错误处理
- **格式验证**:检查Elsa格式的完整性
- **类型识别**:智能识别未知活动类型
- **属性提取**:安全提取节点属性
- **错误提示**:详细的错误信息和解决建议
## 📄 更新日志
### v1.0.0 (2024-01-XX)
- ✨ 初始版本发布
- 🎯 支持四种节点类型(开始、审批、抄送、结束)
- 🖱️ 拖拽创建和编辑节点
- 🔗 节点连接和连接线管理
- 👥 人员选择弹窗(下拉和树形选择)
- 💾 工作流导入导出功能
- 🔄 Elsa格式数据转换
- 🎨 现代化UI设计
- 📱 响应式布局支持
---
**享受使用 Vue Flow 工作流设计器!** 🎉