Easy Process:基于Vue3的低代码流程设计器,如何快速构建企业级OA工作流?
2026/6/11 13:36:09 网站建设 项目流程

1. 为什么选择Vue3+低代码构建OA工作流

企业OA系统最让人头疼的就是流程设计。传统开发模式下,每次业务变更都需要前端改页面、后端改接口,开发周期长、维护成本高。而低代码流程设计器的出现,让业务人员也能参与流程配置,这正是Easy Process的核心价值。

我去年接手过一个政府部门的OA系统改造项目,他们原有的工作流引擎基于某商业软件,每次调整审批流程都要找原厂工程师,简单加个抄送节点报价2万起步。后来我们用Vue3+自研设计器重构后,现在办公室主任自己就能拖拽配置出差审批流程。

Vue3特别适合这类场景的三个原因:

  • 组合式API:流程节点的校验逻辑、属性配置可以封装成独立hook
  • 依赖注入:跨层级组件共享流程数据时不用再层层传递props
  • TypeScript支持:流程节点类型、配置项都能获得完善的类型提示

实测下来,基于Easy Process的设计器开发效率提升明显。上周我们给电商客户做的退货审批流程,从需求对接到上线只用了3天,其中2天是在和他们业务部门确认流程细节,真正开发时间不到8小时。

2. 快速上手Easy Process设计器

2.1 环境准备与项目初始化

先确保本地有Node 14+环境,推荐用pnpm管理依赖(实测安装速度比npm快60%):

# 克隆项目 git clone https://gitee.com/quxiou-code/easy-process.git cd easy-process # 安装依赖(国内用户建议加上淘宝镜像) pnpm install --registry=https://registry.npmmirror.com # 启动开发服务器 pnpm dev

启动后会看到仿钉钉的流程设计界面。这里有个小技巧:浏览器访问http://localhost:3000/?mock=1会自动加载测试数据,方便直接调试。

2.2 核心概念快速理解

设计器里有几个关键概念需要掌握:

  • 节点类型:发起人(start)、审批人(approver)、条件(condition)等
  • 节点配置:每个节点有自己的属性抽屉(比如审批人可设置多人会签)
  • 流程结构:通过childNode和conditionNodes实现分支逻辑

举个例子,假设我们要做个请假审批流程:

  1. 发起人节点设置"申请人信息"
  2. 条件节点判断"请假天数>3天?"
  3. 分支1:小于等于3天直接到部门经理审批
  4. 分支2:大于3天需要先总监审批再到经理

在Easy Process里实现这个逻辑,就是拖拽5个节点加连线,全程不用写业务代码。

3. 深度定制企业级流程

3.1 依赖注入的妙用

传统方案中,如果要在节点组件里获取流程数据,需要从顶层组件层层传递props。Easy Process通过Vue3的provide/inject实现了跨级数据获取:

// 在任意子组件中获取流程数据 import { inject } from 'vue' import { KEY_PROCESS_DATA } from './config/keys' const processData = inject(KEY_PROCESS_DATA)

我们在金融项目里用这个特性做了个骚操作:在审批节点注入风控系统的API,实时校验申请人征信分数,分数不足时自动跳转风控审批分支。

3.2 节点校验实战

流程提交前的校验是刚需。比如采购审批中,金额超过预算需要特殊处理。在Easy Process中实现校验只需要两步:

  1. 在节点组件注册校验器:
validator.register(props.tempNodeId, () => { if (processData.value.amount > 100000) { return { valid: false, message: "大额采购需附加说明" } } return { valid: true } })
  1. 提交时触发全局校验:
proxy.$refs.process.validate((valid, messages) => { if (valid) { submit() } else { alert(messages.join('\n')) } })

最近给物流客户做的方案中,我们通过校验器实现了"同一路线不能重复派单"的业务规则,比在后端做校验的体验更即时。

4. 与企业现有系统集成

4.1 单点登录对接

大多数企业已有统一认证系统。我们可以在初始化设计器时注入用户数据:

// 从企业SSO获取当前用户信息 const userData = await getSSOUserInfo() // 初始化流程数据时带入 const processData = ref({ ...templateData, currentUser: userData, departments: await getOrgTree() })

这样在审批人节点配置时,就可以直接显示企业组织架构树,而不是手动输入账号。

4.2 与BPM引擎对接

Easy Process生成的流程数据需要与后端BPM引擎配合。推荐的数据交互方式:

// 前端获取设计结果 const flowJSON = proxy.$refs.process.getResult() // 转换为Activiti/Camunda兼容格式 const convertParams = { ...flowJSON, // 业务系统需要的附加字段 bizType: 'leave_approval' } // 提交到后端 await saveProcessDefinition(convertParams)

在去年某制造业项目里,我们通过适配器模式实现了同时支持Flowable和钉钉宜搭两种后端引擎,前端代码完全不用修改。

5. 性能优化实践

当流程节点超过50个时,需要注意渲染性能。我们通过以下手段保证流畅度:

  1. 虚拟滚动:只渲染可视区域内的节点
  2. 节点分级加载:复杂流程先显示主干,点击展开详情
  3. Web Worker处理校验:将复杂校验逻辑放到worker线程

有个实际案例:某保险公司理赔流程有上百个条件分支,初始加载需要3秒。加入懒加载后,首屏时间降到800ms以内。关键代码:

// 动态加载节点组件 const NodeComponent = defineAsyncComponent(() => import(`./node/${nodeType}.vue`) )

6. 扩展自定义节点类型

假设要增加一个"邮件通知"节点:

  1. 在nodeType.js添加类型常量:
export const EMAIL_NODE = 'email'
  1. 配置节点元信息:
// nodeConfig.js nodeConfig[EMAIL_NODE] = { title: "邮件通知", icon: { name: "email", color: "#FFA500" }, defaultNode: { nodeName: "邮件通知", nodeType: EMAIL_NODE, config: { receivers: [], templateId: "" } } }
  1. 创建emailNode.vue和emailDrawer.vue

最近给高校做的OA里,我们扩展了"短信通知"、"会议室预订"等特色节点,这些都在标准版基础上二次开发的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询