前言
做了好几年管理系统,每次给客户上 OA、CRM 或者 SaaS,总觉得重复造轮子的事情太多。表单、列表、审批流程、打印模板……这些东西几乎每个项目都要从头写一遍,但真正的业务逻辑却只占 20%。
-
于是我开始做一套可视化的低代码平台: 让产品经理甚至业务人员,拖拽几下就能把一个管理系统搭起来。写了大半年,核心框架和业务套件都跑通了,前端 Vue 3 + 后端 Spring Boot 3 + Flowable 7,表单设计器、列表设计器、流程设计器、打印设计器四大神器一个不少。
今天把这套平台的 Demo 项目 开源出来,后端和前端都能独立编译运行,改改配置就能起一个完整的多租户 SaaS 系统。
先看看到底有啥东西
四大可视化设计器 —— 零代码搭业务
这是整个平台的核心,业务人员不用写一行代码,拖拽 + 配置就能产出可运行的应用。
|
设计器 |
能力 |
|---|---|
|
表单设计器 |
40+ 组件(输入框、下拉、日期、子表、关联查询、签名、富文本、条码、文件上传……),拖拽出表单后一键生成运行态页面 |
|
列表设计器 |
配置列、排序、筛选、分页、自定义按钮、批量操作,自动绑定对应表单的数据 |
|
流程设计器 |
基于 Flowable 7 的 BPMN 可视化建模,支持网关、子流程、定时器、条件表达式、候选人配置 |
|
打印设计器 |
类 Word 的可视化打印模板编辑,支持套打、动态变量、条码/二维码、图片,所见即所得 |
全链路联动
-
四大设计器不是孤立的,它们是串起来的:
表单设计 ──→ 列表展示 ──→ 流程审批 ──→ 打印输出
│ │ │ │
└── 数据模型自动生成 ─────────┘ │
└── 字段作为流程变量 ─────────┘ │
└── 审批状态驱动列表显示 ─────┘ │
└── 流程完成触发打印模板渲染 ─────────────────┘
设计器产出的就是几段 JSON 配置,存数据库,改完即生效——不需要重新部署,不需要重启服务。这点对敏捷迭代来说太重要了。
多租户 SaaS 架构
-
从第一天就按 SaaS 来设计的,不只是个单体管理系统:
-
租户隔离:支持物理隔离(一个租户一个数据库)和逻辑隔离(共享数据库、字段区分)两种模式
-
套餐管理:给每个租户开不同的模块权限
-
组织架构:集团 → 公司 → 部门 → 岗位,四级树形
-
权限体系:租户管理员 → 用户 → 角色 → 菜单 → 数据权限(行级数据隔离)
-
实时推送:基于 SignalR 的站内信、审批通知
完整的业务套件
光有框架不行,得有东西能直接用。平台已经沉淀了一套商城 + 会员 + 支付的完整业务,全部是用自己的设计器搭出来的,算是对框架最好的验证。
|
模块 |
覆盖范围 |
|---|---|
|
系统管理 |
用户、角色、菜单、部门、岗位、字典、参数、通知、文件、数据源、代码生成 |
|
流程中心 |
模型设计、实例管理、待办/已办、抄送、委派、加签 |
|
商城商品 |
SPU/SKU、品牌、分类、属性、规格、评论 |
|
营销活动 |
秒杀、砍价、拼团、满减、优惠券、积分、抽奖、DIY 装修 |
|
交易订单 |
下单、发货、售后、物流、自提、分销佣金 |
|
会员中心 |
等级、标签、分组、积分、签到、余额 |
|
支付网关 |
微信/支付宝/钱包/Mock 多渠道、退款、对账 |
|
微信公众号 |
账号、菜单、自动回复、消息群发、粉丝管理 |
|
基础设施 |
定时任务(Cron/Groovy)、短信、邮件、LDAP、缓存监控 |
|
财务报表 |
资金报表、出入库统计、销售库存、利润排行 |
|
数据大屏 |
首页仪表盘、ECharts、待办、日程、快捷方式 |
技术栈
后端
|
组件 |
版本 |
用途 |
|---|---|---|
|
Spring Boot |
3.5 |
基础框架 |
|
JDK |
21 |
语言运行时 |
|
MyBatis Plus |
3.5 |
ORM + 代码生成 |
|
Flowable |
7.x |
BPM 流程引擎 |
|
Sa-Token |
1.37 |
认证鉴权 |
|
Redis + Redisson |
7.x |
缓存 + 分布式锁 |
|
Druid |
1.2 |
连接池 + 动态数据源 |
|
Knife4j |
4.x |
OpenAPI 3 接口文档 |
|
XXL-Job |
2.4 |
分布式任务调度 |
|
SignalR |
— |
实时 WebSocket 推送 |
|
Hutool |
5.8 |
工具库 |
|
前端 |
||
|
组件 |
版本 |
用途 |
|
:----------- |
:— |
:------ |
|
Vue |
3.4 |
前端框架 |
|
Element Plus |
2.7 |
UI 组件库 |
|
Vite |
5.x |
构建工具 |
|
TypeScript |
5.x |
类型安全 |
|
Pinia |
2.x |
状态管理 |
|
UnoCSS |
0.60 |
原子化 CSS |
|
wangeditor |
5.x |
富文本编辑器 |
|
@logicflow |
2.x |
流程设计器底层 |
开源策略 —— Demo 能跑,但核心源码保护
这次放出来的是 Demo 项目,既能独立编译运行完整系统,又不会泄露核心业务源码。具体做法:
demo/
├── README.md
├── manage_demo.sql # 完整数据库(496 张表 + 示例数据)
├── backend/ # 完整可编译 Maven 项目
│ ├── pom.xml # Spring Boot parent + 本地仓库引用
│ ├── start.sh / stop.sh # 启动脚本
│ ├── src/main/java/
│ │ └── cn/dyang/manage/server/
│ │ ├── ManageServerApplication.java 🔓 入口源码(开源)
│ │ └── controller/DefaultController.java 🔓
│ ├── src/main/resources/ # 配置文件
│ └── repo/ # 本地 Maven 仓库
│ └── cn/dyang/... # 38 个内部模块的 jar + pom(闭源)
└── frontend/ # 完整 manage-ui 前端项目
-
开源的:入口源码、配置、pom.xml 构建脚本、完整前端代码
-
闭源的:38 个内部业务模块(通过本地 Maven 仓库
repo/以 jar 形式引入),其中manage-module-form-biz还加了 ClassFinal 加密保护 -
能编译:直接
mvn clean package就能打包出可执行 jar -
能运行:配好 MySQL + Redis,加个
-javaagent参数就能启动
⚠️ 为什么用
-javaagent?因为 ClassFinal 加密的模块需要一个 premain agent 来解密加载,fat jar 内部的嵌套 jar 不能作为 agent,所以启动时要显式指到外部的 jar 文件。
快速上手
环境要求
|
组件 |
版本 |
|---|---|
|
JDK |
21+ |
|
Maven |
3.8+ |
|
MySQL |
8.0+ |
|
Redis |
6.0+ |
|
Node.js |
18+(前端构建) |
后端
# 1. Clone
git clone https://gitee.com/dongyang1234/i-paas-management-platform.git
cd manage-demo/backend
# 2. 建库导数据
mysql -u root -p -e "CREATE DATABASE manage_demo DEFAULT CHARACTER SET utf8mb4;"
mysql -u root -p manage_demo < ../manage_demo.sql
# 3. 改数据库配置(src/main/resources/application-local.yaml)
# 改成你本地的 MySQL / Redis 地址
# 4. 编译打包
mvn clean package -DskipTests
# 产物:target/manage-server-demo.jar + target/lib/
# 5. 启动(Windows)
java "-javaagent:./target/lib/manage-module-form-biz-2.3.0-jdk21-SNAPSHOT.jar" ^
"-Dspring.profiles.active=local" ^
"-cp" "target/manage-server-demo.jar;target/lib/*" ^
"cn.dyang.manage.server.ManageServerApplication"
# 或者直接用脚本
start.bat
-
启动成功后:
-
API:
http://localhost:48080/admin-api -
Knife4j:
http://localhost:48080/doc.html
前端
cd manage-demo/frontend
npm install
npm run dev # http://localhost:3000
-
默认管理员:
金店云/admin/123456
IDEA 里调试
1. 打开 demo/backend/ 目录(pom.xml 根目录)
2. Run → Edit Configurations → 新建 Application
3. Main class:cn.dyang.manage.server.ManageServerApplication
4. VM options 务必加上:
-javaagent:E:\你的路径\demo\backend\target\lib\manage-module-form-biz-2.3.0-jdk21-SNAPSHOT.jar
-Dspring.profiles.active=local
适用场景
|
场景 |
为什么选它 |
|---|---|
|
企业内部 OA / CRM / ERP 轻量版 |
四大设计器快速搭表单、列表、审批流,多部门数据隔离 |
|
SaaS 产品快速原型 |
多租户架构现成的,设计器改改配置就是一套新应用 |
|
数据采集 / 审批类应用 |
表单 + 流程联动,收集完直接走审批 |
|
复杂打印套打 |
珠宝、医药、物流这些行业单据套打特别常见,打印设计器就是为这个做的 |
|
想学 Spring Boot + Vue 全栈项目管理 |
完整的前后端分离项目,Maven 多模块,技术栈新,值得看看 |
一些心路历程
-
这套平台最早是我做另一个珠宝 ERP 项目时顺手搭的脚手架,后来越做越大,干脆抽出来单独成了平台。大半年时间,踩的坑不少:
-
Flowable 7 的迁移:从 6.x 跳到 7,API 变动挺大,BPMN 模型的序列化格式也有变化
-
ClassFinal 加密保护:一开始没考虑,后来发现直接放出去不行,才临时加的加密
-
动态数据源:多租户隔离时,物理隔离和逻辑隔离要自动切换,Druid 动态数据源 + 自定义切面搞定
-
前端设计器:表单设计器和打印设计器都是自研的,没找到现成好用的,花了最多时间
Demo 里闭源的那些模块(manage-module-*-biz)是平台的核心引擎部分。如果你想做类似的平台,这个 Demo 的目录结构、pom.xml 配置、启动脚本、设计器前端代码,应该都能当参考。
后续可能的计划: -
把闭源模块里安全级别低的逐步开源
-
做个 Docker Compose 一键启动
-
补一份架构设计文档
欢迎交流
Issues 和 PR 都欢迎。如果你也是做管理系统、低代码平台或者 SaaS 的,欢迎聊聊。
最后,Star 一下呗?🫡