Appearance
操作手册 · 总览与最短路径
面向已经把系统部署起来的人:怎么在浏览器里设计一条流程、绑定表单、配好参与人,然后自己走一遍审批。 不讲引擎内部怎么执行(见设计原理),也不讲怎么把 jeeflow 接进自己的框架(见用户指南 10)。
本手册以 Spring Boot 4 一键部署包为例。其余 12 个语言栈用的是同一个前端镜像,界面完全一致,只有端口不同(见 §2.3)。 全部截图取自净装镜像,未做任何数据预置。
1. 你会得到什么
一条 curl 命令拉起四个容器:
| 容器 | 内容 | 本机端口 |
|---|---|---|
boot4j-nginx | vben5 管理后台(含流程设计器、发起页、审批页) | 21080 |
boot4j-api | mldong-boot4 + jeeflow 引擎 | 24000 |
boot4j-mysql | MySQL,已内置表结构与演示数据 | 24306 |
boot4j-redis | Redis | 27379 |
要求 Docker Compose v2(Docker 20.10+)。
2. 部署
2.1 一条命令
bash
curl -fsSL https://www.mldong.com/deploy/mldong-boot4-jeeflow/deploy.sh | bash脚本自己会 pull → up -d → 等 MySQL 健康 → 轮询登录接口,最后打印:
=== 🎉 部署完成 ===
前端: http://localhost:21080
API: http://localhost:24000
登录: superAdmin / 1234562.2 什么时候算真的起来了
MySQL 显示 healthy 不等于可用。 后端首启会跑一次数据初始化,可能比 MySQL 慢几十秒,中途还会重启一次。判据只有一个:
bash
curl -s -X POST http://localhost:24000/sys/login \
-H "Content-Type: application/json" \
-d '{"userName":"superAdmin","password":"123456"}' | head -c 40
# 看到 {"code":0,...} 才算就绪返回 99999999 或连不上就再等;持续失败看日志:docker logs boot4j-api。
2.3 各语言栈端口对照
把命令里的 mldong-boot4-jeeflow 换成下表目录名即可,界面与操作完全相同:
| 栈 | 部署目录 | 前端 | API | 项目名 |
|---|---|---|---|---|
| Spring Boot 4 | mldong-boot4-jeeflow | 21080 | 24000 | boot4j |
| Spring Boot 3 | mldong-boot3-jeeflow | 22180 | 25100 | boot3j |
| Spring Boot 2 | mldong-boot2-jeeflow | 22080 | 25000 | boot2j |
| GoFrame | mldong-goframe-jeeflow | 20080 | 23000 | goframe |
| Gin | mldong-gin-jeeflow | 31080 | 31000 | ginj |
| Hertz | mldong-hertz-jeeflow | 32080 | 32000 | hertzj |
| FastAPI | mldong-fastapi-jeeflow | 23180 | 26100 | fastapij |
| Flask | mldong-flask-jeeflow | 29080 | 29000 | flaskj |
| Django | mldong-django-jeeflow | 30080 | 30000 | djangoj |
| NestJS | mldong-nestjs-jeeflow | 27080 | 27000 | nestjsj |
| Laravel | mldong-laravel-jeeflow | 18082 | 18083 | laravelj |
| Salvo (Rust) | mldong-salvo-jeeflow | 28080 | 28100 | salvoj |
| ASP.NET Core | mldong-csharp-jeeflow | 33080 | 33000 | csharpj |
停止并清掉数据:docker compose -p <项目名> down -v(-v 会删卷,下次是全新演示数据)。
3. 净装就有的演示数据
手册后面直接用这些数据走查,不需要你先建任何东西。
3.1 九条已部署流程
登录后进 工作流程 → 流程设计 可看到(工作流程 → 流程定义 里是 28 行,因为同名流程有多个版本):
| 显示名称 | 唯一编码 | 流程分类 |
|---|---|---|
| 请假申请 | biz_leave | 假勤管理 |
| 报销申请 | biz_reimburse | 人事管理 |
| 岗位异动申请 | biz_transfer | 人事管理 |
| 采购申请 | biz_purchase | 业务管理 |
| 合同审批 | biz_contract | 业务管理 |
| 用印申请 | biz_seal | 业务管理 |
| 加班申请 | biz_overtime | 业务管理 |
| 出差申请 | biz_business_trip | 业务管理 |
| 资产领用申请 | biz_asset | 业务管理 |
3.2 账号与部门
密码统一 123456。superAdmin 是超级管理员,所有权限码直接放行;普通账号只能看到自己被授权的功能,第一次建议就用 superAdmin 走完手册。
| 用户名 | 姓名 | 部门 | 在示例流程里的位置 |
|---|---|---|---|
superAdmin | 超级管理员 | — | 设计流程、部署、启停 |
wuhao | 吴昊 | 研发部 | 发起人 |
lina | 李娜 | 研发部 | 部门经理(研发部负责人之一) |
admin | 蒙立东 | 研发部 | 部门经理(研发部负责人之一,任一同意即可) |
u0011 | 王强 | 总经理办 | 研发部分管领导、终审 |
u0010 | 黄红 | 财务部 | 财务审批 |
zhaomin | 赵敏 | 财务部 | 会签成员 |
zhengfang | 郑芳 | 财务部 | 会签成员 |
u0012 | 李青 | 人事部 | 人事审批 |
liuyang | 刘洋 | 人事部 | 人事审批 |
sunli | 孙丽 | 市场部 | 转办、加签目标 |
zhoulei | 周磊 | 行政部 | 行政审批 |
部门与负责人的对应关系直接决定"部门经理审批"这类节点派给谁,改流程前先在 系统设置 → 部门管理 里确认。
4. 30 分钟跑通一条请假流程
用现成的 请假申请:发起 → 部门经理 → 按天数决定是否再走分管领导 → 结束。规则是 f_days > 3 才进分管领导审批,所以天数填 5 能走完整条链,填 2 会在部门经理之后直接结束。
步骤 1 打开发起页
左侧 工作流程 → 发起申请。流程按分类分组,每张卡片一个流程。

步骤 2 填表提交
点 请假申请 卡片,右侧滑出"启动流程"抽屉,里面就是这个流程绑定的表单(请假类型、请假天数、请假事由)。填完点 确认。

怎么算成功:抽屉自动关闭并提示成功;我发起的 里出现一条进行中的实例。
发起的瞬间,第一个节点"发起申请"由引擎自动办结(参与人就是发起人自己),所以你不会在我的待办里看到它。
步骤 3 换部门经理账号办理
退登(右上角头像 → 退出登录),用 lina / 123456 登录,进 工作流程 → 我的待办。

点该行的 办理,弹窗里填审批意见(必填),可传附件,然后点 同意。

弹窗底部能看到哪些按钮,由节点属性里勾选的操作按钮决定,常见的是 同意 / 拒绝 / 退回上一步 / 退回发起人 / 跳转:
| 按钮 | 效果 |
|---|---|
| 同意 | 流转到下一节点 |
| 拒绝 | 实例置为已拒绝,流程结束 |
| 退回上一步 | 退回上一个审批节点 |
| 退回发起人 | 实例仍在进行中,给发起人建一条新待办,改完重新提交 |
| 跳转 | 选一个可达节点直接跳过去 |
| 加签 | 仅会签节点:临时追加处理人 |
勾选 指定下一节点处理人 后可以从候选人里指定下一步由谁办;勾选 是否抄送 可以顺带抄送给人。
步骤 4 换分管领导账号终审
因为天数是 5,流程会走到 分管领导审批。退登,用 u0011 / 123456 登录,同样在我的待办里 办理 → 同意。
步骤 5 回看结果
用 wuhao 登录,进 我发起的,找到那条实例点 详情。三个页签:
- 详情:表单数据与基本信息
- 流程图:钉钉设计器的只读视图,走过的节点标绿并显示实际处理人
- 审批记录:时间轴,每个节点的办理人、提交类型、意见、附件

这张图同时说明了三件事:部门经理节点为什么是李娜和蒙立东两个人(研发部负责人配了两位,任一同意即通过)、条件分支按天数怎么分流、以及流程已经走完(结束节点也标绿)。
跑通判据:我发起的 里该实例状态变为已完成,我的待办 里不再有任何一条来自这个实例。
5. 卡住了看这里
| 现象 | 原因 | 处理 |
|---|---|---|
| 提交后没有任何人收到待办 | 该节点的参与人解析结果为空 | 见参与者解析:用"部门经理"类处理类时,发起人所在部门必须在部门管理里配了负责人 |
| 待办里有任务,点办理后表单区是空的 | 节点没绑定任务表单 | 设计器里选中该节点 → 表单配置 → 任务表单,选一个再重新部署 |
| 部署按钮点不动(灰色) | 设计稿已是已部署状态,或改完没保存 | 回第 4 章:先在设计器里点保存,列表"是否部署"变否之后才能部署 |
| 改了流程但发起的还是老样子 | 只保存没部署,或旧实例仍按发起时的版本走 | 部署会生成新版本;已在途的实例不受新版本影响 |
| 提示"您没有资源wf:xxx访问权限" | 当前账号没有该 action 的权限码 | 用 superAdmin,或在系统设置 → 角色管理里给角色勾上对应工作流权限 |
| 参与人处理类下拉是空的 | 该栈没注册对应处理类 | 净装镜像有 7 个内置处理类;若为空,多半是前端镜像落后于后端,属部署问题不是配置问题 |
| 登录页打不开但 API 正常 | 前端容器还没起完,或端口被占 | docker ps 看 boot4j-nginx 状态;换端口需改 compose |
6. 章节
| # | 章节 | 解决什么 |
|---|---|---|
| 01 | 部署细节与多账号测试 | 换端口、接自己的库、数据重置、一个人怎么切角色测 |
| 02 | 部门、用户与角色 | 参与人取人的数据前提:部门负责人、分管领导、工作流角色 |
| 03 | 表单 | 发起时填什么、审批时看什么、字段权限 |
| 04 | 画流程与发布 | 新建设计稿、节点属性、流程属性、保存与部署 |
| 05 | 参与人:任务派给谁 | 7 个内置处理类的用法、会签、候选、委托 |
| 06 | 发起与办理 | 发起页与办理弹窗每个开关、五种退回方式 |
| 07 | 验证一条流程跑对了没有 | 三处回看、状态码、接口自检、跨章排错总表 |
| 08 | 让审批结果落到业务表 | 后置拦截器、关联业务表、持久化模式 |
| A | 页面与入口清单 | 菜单、路由、权限码 |
| B | 下拉选项与状态值对照 | 界面中文选项 ↔ 引擎取值 |