Dynamic子表单
适用于订单明细、联系人、费用项目等一对多数据。父表单字段保存一个对象数组,children.column 定义每一行的字段;新增、编辑、删除和排序都会反映在该数组中。
复制示例时使用的结果展示组件和固定数据,见 示例辅助文件。
表格用法
内部组件为crud组件,大部分属性参考Crud文档
配置 type: 'dynamic' 和 children.column。点击表头加号新增一行,编辑名称与数量,再将鼠标移到序号处删除;结果区始终展示当前明细。rowAdd(done) 与 rowDel(row, done) 中调用 done 才会执行操作。
表单用法
内部组件为form组件,大部分属性参考Form文档
配置 children.type: 'form' 即可转为纵向表单,children.index: false 隐藏序号;适合每条记录字段较多的场景。仍通过同一个数组保存数据。
父子联动
切换父表单的大区后,子表的站点选项随之更新,并清空原大区下的站点值。下面使用本地字典保留已有明细与备注,无需重建整个父表单。
拖拽排序与继续编辑
在表格型子表中配置 children.rowSort: true 和稳定唯一的 children.rowKey。按住行序号区域,稍作停留后拖动,绑定数组会自动按新顺序更新。3.9.5 修复了拖拽后显示顺序与数组不一致的问题,排序后可直接继续编辑。
将“现场支持”拖到第一行,观察下方 ID 顺序和事件记录,再修改该行的名称或数量。无需手动 splice 或调用 refreshTable,事件中只记录排序结果即可。
children.sortableChange(oldIndex, newIndex, row, list) 接收以下参数:
| 参数 | 含义 |
|---|---|
oldIndex | 拖动前的数组位置,从 0 开始 |
newIndex | 拖动后的数组位置,从 0 开始 |
row | 本次移动的行对象 |
list | 排序后的数组,可用于读取新的 ID 顺序或保存到接口 |
绑定数据在事件后的更新周期完成同步,需要立即读取新顺序时使用事件的 list。不要在回调中再次对同一个数组执行相同的移动,否则可能重复排序。rowKey 应使用业务 ID,不要使用当前位置作为身份标识。
拖拽排序适用于显示行与数组顺序一致的普通表格。启用了列排序、过滤或展开导致显示行与源数据不一致时,本次拖动会被忽略。表单型布局 children.type: 'form' 不支持表格行拖拽。项目需要先加载 SortableJS,安装方式见 CRUD 拖拽排序。
