低代码数据渲染
浏览器访问某个低代码页面
以http://172.16.0.80:9004/#/kform/form/1111949130042703872为例,通过route找到对应的组件进行渲染。
我们知道,系统的所有菜单都保存在 mai2pro.sys_router表中,页面加载会获取路由,就是从接口中获取对应的路由配置。
跟一下代码可知,最终渲染低代码页面的vue组件是FormView.vue
JSON结构分析
-
根对象:
list: 包含主要的表单组件列表attribute: 表单的基本属性dataEvent: 数据事件定义logic: 业务逻辑定义loadDataVersion: 数据加载版本
-
主要组件:
- 一个卡片组件 (
type: "card"),包含一个动态表格(type: "batch") - 动态表格中包含多个输入框、选择框等子组件
- 一个卡片组件 (
渲染流程
-
KFormBuild 组件:
-
作为根组件加载JSON配置
-
解析
list数组,为每个子组件创建对应的Vue组件实例
-
-
BuildBlocks 组件:
-
根据
type字段决定渲染哪种类型的组件 -
例如:
"type": "card"会渲染为卡片组件,"type": "batch"会渲染为动态表格
-
-
KFormItem 组件:
-
处理表单项的布局、标签、验证等
-
根据
model字段绑定数据
-
getSaveInfo 方法调用链,以页面容器为例
-
KPageContainer.getSaveInfo():
-
KFormBuild.getSaveInfo():
- 遍历所有子组件(通过
this.$refs.buildBlocks) - 调用每个子组件的
getSaveInfo()方法 - 收集所有子组件的保存信息
- 遍历所有子组件(通过
-
BuildBlocks.getSaveInfo():
- 如果当前组件是
pageContainer类型,调用其 getSaveInfo() 方法 - 否则返回
undefined
- 如果当前组件是
-
数据收集:
- 收集所有表单项的值(通过
this.getFormData()) - 处理动态组件数据
- 合并参数数据源
- 处理数据事件
- 收集所有表单项的值(通过
-
最终返回:
具体到 test.json
- 最外层是一个卡片组件,包含一个动态表格
- 动态表格中有多个输入框和选择框
- 当调用 getSaveInfo() 时,会收集所有这些表单项的值
- 同时会处理
dataEvent中定义的数据事件
关键点
-
数据绑定:
- 每个表单项通过
model字段与数据模型绑定 - 例如:
"model": "input_QAAzIK48lN8PY30YaqzR"
- 每个表单项通过
-
验证规则:
- 在
rules中定义表单项的验证规则 - 例如:必填项验证、自定义验证等
- 在
-
数据源:
- 可以通过
dataSourceInfo配置数据源 - 支持静态数据或动态加载
- 可以通过
-
事件处理:
- 在
dataEvent中定义数据事件 - 例如:保存事件、删除事件等
- 在
-
业务逻辑:
- 在
logic中定义业务逻辑 - 支持条件判断、循环等复杂逻辑
- 在
这样,通过JSON配置就能动态生成复杂的表单界面,并通过 getSaveInfo 方法收集表单数据。