一个人 + AI,22小时重构4万行代码后,配置驱动引擎骨架已搭好,现在在打磨PaaS的“最后一公里”
写在前面
先纠正一个说法:我做的不是ERP,不是MES。
我做的是一套 PaaS(Platform as a Service) ——别人可以在上面搭建自己业务系统的底层平台。
我用这套PaaS搭了一个工单管理模块,不代表它只能做工单。换一套配置,它就是进销存;再换一套,它就是设备管理系统;换个行业模板,它就是玻璃厂的生产追溯系统。
这篇文章不讲大道理,只讲现在做到哪了、PaaS底座怎么设计的、还差什么。
一、定位澄清:这不是ERP,这是PaaS
很多人看到“工单”、“入库”、“出库”就觉得是ERP。不是。
| 维度 | 传统ERP/MES | DKERP PaaS |
|---|---|---|
| 业务逻辑 | 写死在代码里 | 写在JSON配置里 |
| 界面 | 固定布局,千人一面 | 用户拖拽自定义,千人千面 |
| 新加模块 | 改代码、编译、发版,周期以周计 | 加配置、重启、生效,周期以秒计 |
| 新加字段 | 改数据库、改API、改前端 | 改一个JSON,三端自动同步 |
| 目标用户 | 终端工厂 | 集成商、服务商 |
| 交付什么 | 一个固定的软件 | 一个“能造软件的底座” |
本质区别: 传统软件卖的是“写好的功能”,我卖的是“能长出功能的土壤”。
服务商拿到这套底座,不需要懂C++,只需要会改JSON,就能在客户现场快速搭出一套完整的业务系统。
二、整体进度:发动机已装好,正在接线
| 模块 | 状态 | 说明 |
|---|---|---|
| 配置驱动引擎 | ✅ 完成 | JSON解析 → 控件创建 → 事件绑定,完整链路已通 |
| WidgetFactory | ✅ 完成 | 30行代码,20+种控件,字符串→原生控件 |
| EventExecutor | ✅ 完成 | 信号→配置→动作,支持事件链、条件判断 |
| DynamicFormEngine | ✅ 完成 | 动态表单创建、布局序列化、用户布局保存/恢复 |
| 表格核心控件 | ✅ 完成 | 分页、筛选、排序、列宽记忆、数据自动加载 |
| 列点击动作 | ✅ 完成 | 点击表格列可配置弹窗/调API/显示提示,支持变量插值 |
| 属性编辑器 | ✅ 完成 | 可视化配置控件ID、文本、尺寸、样式、事件绑定 |
| 事件绑定编辑器 | ✅ 完成 | JSON可视化编辑,支持事件链拖拽配置 |
| ControlHandle | ✅ 完成 | 编辑模式下控件拖拽移动、缩放 |
| 控件树面板 | ✅ 完成 | 可视化查看页面控件层级结构 |
| AI主题生成 | ✅ 完成 | DeepSeek生成QSS,一键换肤 |
| 业务组件配置 | 🔥 进行中 | 用PaaS底座搭工单、BOM、入库等具体页面 |
| 事件链逻辑关系 | 🔥 进行中 | 按钮→API→表格刷新、条件分支等链路梳理 |
| 表单控件完善 | 🔥 进行中 | 输入框、下拉框、日期选择器的属性配置完善 |
| 端到端集成测试 | ⏳ 待开始 | 完整业务流程跑一遍 |
| 服务商试点部署 | ⏳ 待开始 | 让合作方用这套PaaS搭自己的业务 |
一句话总结: 发动机装好了,车架搭完了,所有核心控件都有了,现在在接具体的线路和仪表盘。
三、PaaS底座的核心架构
3.1 四层解耦设计
┌─────────────────────────────────────────────────────────────┐
│ 第一层:配置文件层 │
│ current_config.json + event_triggers/*.json │
│ (业务逻辑、界面定义、事件绑定,全部在这里) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 第二层:引擎层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ConfigManager│ │EventExecutor│ │DynamicFormEngine │ │
│ │配置加载/解析 │ │事件链执行 │ │动态表单/布局序列化 │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │WidgetFactory│ │ HttpManager │ │FormValidator │ │
│ │控件工厂 │ │网络请求封装 │ │表单验证 │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 第三层:控件层 │
│ QPushButton、QTableWidget、QLineEdit、QComboBox... │
│ PaginatedTableWidget、FilterBar、ControlHandle... │
│ (100% Qt原生控件 + 轻量级包装,不改变原生行为) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 第四层:用户界面层 │
│ 正常模式:做业务(查询、录入、审核) │
│ 编辑模式:调界面(拖拽控件、调整布局、AI换主题) │
└─────────────────────────────────────────────────────────────┘
3.2 为什么这能叫PaaS?
传统开发模式:
客户提需求 → 我写代码 → 编译 → 发版 → 客户更新
周期:几天到几周,每个客户一个分支
PaaS模式:
服务商打开ConfigServer → 改JSON配置 → 客户端自动拉取 → 实时生效
周期:几分钟到几小时,一套代码覆盖所有客户
服务商不需要懂C++,不需要重新编译,不需要发版。配置即代码,配置即产品。
四、已完成的控件清单
4.1 基础控件(20+种)
| 控件类型 | Qt原生类 | PaaS中的名称 | 状态 |
|---|---|---|---|
| 按钮 | QPushButton | Button / DKButton | ✅ |
| 标签 | QLabel | Label | ✅ |
| 单行文本框 | QLineEdit | TextBox / LineEdit | ✅ |
| 多行文本框 | QTextEdit | TextArea / TextEdit | ✅ |
| 下拉框 | QComboBox | ComboBox / DKComboBox | ✅ |
| 复选框 | QCheckBox | CheckBox | ✅ |
| 单选框 | QRadioButton | RadioButton | ✅ |
| 分组框 | QGroupBox | GroupBox | ✅ |
| 标签页 | QTabWidget | TabWidget / DKTabWidget | ✅ |
| 整数输入框 | QSpinBox | SpinBox | ✅ |
| 小数输入框 | QDoubleSpinBox | DoubleSpinBox | ✅ |
| 日期选择器 | QDateEdit | DateEdit | ✅ |
| 日期时间选择器 | QDateTimeEdit | DateTimeEdit | ✅ |
| 时间选择器 | QTimeEdit | TimeEdit | ✅ |
| 滑动条 | QSlider | Slider | ✅ |
| 进度条 | QProgressBar | ProgressBar | ✅ |
| 容器 | QWidget | Container / DKContainer | ✅ |
4.2 复合控件(PaaS核心能力)
| 控件 | 说明 | 状态 |
|---|---|---|
| PaginatedTableWidget | 分页表格(服务端分页、筛选、排序、列宽记忆) | ✅ |
| FilterBar | 过滤栏,支持文本/下拉框/日期筛选 | ✅ |
| SubTableWidget | 子表格,支持主从关系、修改追踪、批量保存 | ✅ |
| ControlHandle | 编辑模式下的控件拖拽手柄 | ✅ |
| ControlPalette | 控件工具箱,拖拽添加控件 | ✅ |
| ControlPropertyEditor | 属性编辑器,可视化配置控件 | ✅ |
| EventBindingDialog | 事件绑定编辑器,JSON可视化编辑 | ✅ |
| DetailDialog | 详情弹窗,支持数据编辑和API调用 | ✅ |
| AIChatWidget | AI对话控件,主题生成、UI生成 | ✅ |
五、最硬的一块骨头:表格 + 列点击动作
这是PaaS底座中最复杂、也最有价值的控件,值得单独讲讲。
5.1 表格能力一览
PaginatedTableWidget现在支持:
| 功能 | 实现方式 | 状态 |
|---|---|---|
| 服务端分页 | 自动拼接page/pageSize参数 | ✅ |
| 表头点击筛选 | 弹窗输入筛选值,拼接到API请求 | ✅ |
| 筛选图标指示 | 已筛选的列显示🔍图标 | ✅ |
| 重置筛选 | 一键清除所有筛选条件 | ✅ |
| 列拖拽排序 | Qt原生支持,布局保存时自动记录顺序 | ✅ |
| 列宽调整 | 用户拖拽后自动保存,重启恢复 | ✅ |
| 数据自动加载 | 页面打开自动调API填表 | ✅ |
| 复选框选择 | 第一列复选框,支持多选 | ✅ |
| 获取选中行数据 | 供事件链使用 | ✅ |
| 双击行事件 | 可配置打开详情弹窗 | ✅ |
| 列点击动作 | 点击不同列执行不同动作 | ✅ |
5.2 列点击动作——PaaS能力的典型体现
业务场景:
- 点击“工单号”→ 弹详情弹窗,用户可以查看/修改
- 点击“状态”→ 只显示一个提示“当前状态:xxx”
- 点击“产品”→ 调用API,把产品信息填到另一个表格
传统做法: 在代码里if (columnName == "工单号")写死逻辑。
PaaS做法: JSON配置:
{
"column_actions": {
"gongdan_table": [
{
"columnName": "工单号",
"actionType": "show_dialog",
"title": "工单详情"
},
{
"columnName": "状态",
"actionType": "show_toast",
"message": "当前状态: ${value}"
},
{
"columnName": "产品",
"actionType": "call_api",
"apiCode": "get_product_detail",
"targetTable": "product_table"
}
]
}
}
变量插值支持:
${value}→ 当前单元格的值${column}→ 当前列名${rowData.xxx}→ 当前行数据的某字段
支持的动件类型:
| actionType | 说明 | 配置参数 |
|---|---|---|
show_dialog | 弹详情弹窗 | title |
call_api | 调用API,结果填到目标表格 | apiCode, targetTable |
show_toast | 显示提示消息 | message(支持变量) |
5.3 属性编辑器:让服务商能可视化配置
![属性编辑器示意]
服务商在客户端右键点击控件 → 打开属性编辑器,可以:
- 基本属性页:修改控件ID、文本、坐标、尺寸、样式表、启用状态
- 事件绑定页:打开事件绑定编辑器
- 数据绑定页(表格专用):配置API业务码、数据路径、字段映射
- 列点击动作页(表格专用):配置每列点击时的动作
不需要写一行C++代码。
六、事件系统:让PaaS真正“活”起来
配置驱动只是静态的,事件系统才是PaaS的“神经系统”。
6.1 事件链配置示例
{
"control_id": "query_btn",
"event_type": "clicked",
"actions": [
{"event_id": "call_api", "api_code": "gongdan_list"},
{"event_id": "set_table_data", "source": "${api_response.data.items}", "target": "gongdan_table"},
{"event_id": "show_toast", "message": "查询完成", "duration": 1500}
]
}
点击按钮 → 调API → 填表格 → 弹提示,一条配置完成。
6.2 支持的事件类型
| 控件 | 支持的事件 |
|---|---|
| QPushButton | clicked, pressed, released |
| QLineEdit | textChanged, returnPressed, editingFinished |
| QComboBox | currentIndexChanged, currentTextChanged |
| QTableWidget | cellClicked, cellDoubleClicked, cellChanged |
| 其他控件 | 持续扩展中 |
6.3 支持的动作类型
| event_id | 说明 |
|---|---|
call_api | 调用后端API |
set_table_data | 将API返回数据填入表格 |
show_toast | 显示提示消息 |
set_control_property | 动态设置控件属性 |
open_dialog | 打开弹窗 |
condition | 条件判断(if/else) |
chain | 事件链(多个动作按顺序执行) |
七、服务商的工作流(PaaS的最终价值)
7.1 部署一个业务系统的完整流程
步骤1:服务商打开ConfigServer配置界面
↓
步骤2:定义表格列(字段名、显示名、宽度)
↓
步骤3:配置API绑定(哪个API、数据路径是什么)
↓
步骤4:配置列点击动作(哪一列 → 弹窗/调API/显示提示)
↓
步骤5:配置按钮事件(哪个按钮 → 调哪个API → 刷哪个表)
↓
步骤6:导出JSON配置文件
↓
步骤7:发给终端客户
↓
步骤8:客户打开DKERP客户端,自动加载配置
↓
步骤9:如需调整界面,客户进入编辑模式拖拽布局
↓
步骤10:客户用AI生成自己喜欢的主题风格
全程零C++代码。
7.2 与传统开发模式的对比
| 维度 | 传统模式 | DKERP PaaS模式 |
|---|---|---|
| 新做一个业务模块 | 写代码、编译、发版 | 改JSON、重启 |
| 修改一个字段 | 改数据库、改API、改前端三处 | 改一个JSON |
| 调整界面布局 | 改UI代码、重新编译 | 编辑模式拖拽 |
| 改主题风格 | 重写样式表 | AI一句话生成 |
| 维护多个客户 | 每个客户一个代码分支 | 一套代码,配置隔离 |
| 新服务商上手 | 需要懂C++/Qt | 只需要懂业务+JSON |
八、还差什么:PaaS的“最后一公里”
核心引擎已经完成,控件已经齐全,但离“服务商开箱即用”还有一段距离:
8.1 短期(1-2周)
| 任务 | 优先级 | 预计时间 |
|---|---|---|
| 完善表单控件的属性配置 | P0 | 2-3天 |
| 用PaaS底座搭工单、BOM、入库等业务页面 | P0 | 3-5天 |
| 梳理按钮→API→表格刷新的完整事件链 | P0 | 2天 |
| 编写服务商使用文档(JSON配置规范) | P1 | 2天 |
8.2 中期(2-4周)
| 任务 | 优先级 | 预计时间 |
|---|---|---|
| ConfigServer可视化配置界面完善 | P1 | 3-5天 |
| 配置模板库积累(工单、进销存、设备管理等) | P1 | 持续 |
| 端到端集成测试 | P1 | 3天 |
| 服务商试点部署 | P1 | 1-2周 |
8.3 长期
| 方向 | 说明 |
|---|---|
| 配置模板市场 | 服务商可分享/售卖自己的配置模板 |
| AI配置助手 | 说需求,AI生成配置JSON |
| 更多行业模板 | 玻璃、五金、包装、电子等 |
| WebAssembly版本 | 浏览器也能跑 |
九、一个真实的使用场景
假设你是某行业的服务商,你的客户需要一套备品备件管理系统。
传统方式:
- 找开发团队报价(5-10万)
- 等2-4周开发
- 反复修改需求
- 上线后维护成本高
用DKERP PaaS:
- 打开ConfigServer
- 定义表格:备件编码、备件名称、规格型号、库存数量、安全库存、存放位置
- 配置API:
/api/spare_part/list - 配置列点击动作:点击“备件编码”→弹详情,点击“库存数量”→调库存明细
- 配置按钮:查询、导出、新增
- 导出JSON → 发给客户
- 客户打开客户端,系统就绪
1-2天搞定,不需要写一行代码。
这就是PaaS的价值——它不是帮你做一个业务系统,它是让你自己能做业务系统。
十、写在最后
22小时重构4万行代码,只是起点。
PaaS底座的主体完工,才是真正的里程碑。
我做的不是一个ERP,不是一个MES,是一个能让集成商、服务商自己搭建业务系统的底层平台。
代码不值钱,代码里沉淀的架构和配置驱动能力才值钱。
PaaS底座的核心能力已经全部完成:
- 配置驱动引擎 ✅
- 20+种原生控件 ✅
- 表格(分页/筛选/排序/列宽记忆)✅
- 列点击动作 ✅
- 事件绑定系统 ✅
- 属性编辑器 ✅
- 拖拽布局 ✅
- AI主题生成 ✅
现在在做的是:用这套PaaS底座,把具体的业务页面搭出来,梳理清楚事件链逻辑关系,写服务商使用文档。
等这些完成后,我会再写一篇,放个视频,让你看看不用写一行C++代码,怎么在10分钟内搭出一个完整的业务系统。
项目启动:2026-04-30
PaaS主体完工:2026-05-17
当前状态:业务组件配置 + 逻辑关系梳理
下一步:服务商试点部署
加个关注,后续更新不会停~
如果你也在做工业软件PaaS,或者你是行业服务商想了解这套底座能否帮你交付客户项目,欢迎交流。