Skip to main content

表单设计器

通过拖拽方式编排表单界面:布局容器、字段排布、属性配置与预览。

概述​

表单设计器是表单配置的核心界面,用于把实体对象的字段拖拽编排成最终的录入/展示界面。设计器采用「左侧组件库 + 中间画布 + 右侧属性面板」的三栏结构:从左侧拖入组件到中间画布,选中组件后在右侧抽屉中配置其属性,最后保存布局。

设计器的配置结果保存在表单的 Layout 属性中(一组嵌套的 WidgetItem),每次点击保存会整体写回。

配置项​

设计器界面的功能区域与操作如下:

区域/操作说明
组件搜索左侧组件库顶部输入框,按组件名称关键字过滤
组件库分类布局组件、表单字段、图表组件、UI 组件、其他组件等可折叠分组
画布中间区域,根容器,所有组件最终都拖拽到这里
预览模式/编辑模式标题栏左侧开关,切换预览模式可直接查看最终渲染效果
弹窗预览以弹窗方式预览表单(使用表单全局的渲染宽度)
表单设置打开表单全局属性抽屉,详见 表单全局属性
保存布局保存当前画布布局到表单 Layout
组件工具栏选中组件后在组件右上角浮动显示,支持上移、下移、复制组件、移除此组件、属性设置
拆分列 / 删除列布局列上的操作,用于调整多列容器的列数
快速打开属性设置

单击组件选中,或在组件上双击可直接打开右侧属性设置抽屉。

界面布局​

设计器从上到下、从左到右分为以下部分:

  • 左侧组件库:以折叠分组展示可拖拽的组件,已被单例限制使用的组件会置灰。
  • 中间画布:表单根容器,顶部以 <Form> 包裹全部子组件,表单的布局方向(LayoutType)在此生效。
  • 右侧属性面板:抽屉形式,标题为当前选中组件的类型名称;抽屉右上角提供上移、下移、复制、删除操作。
  • 标题栏:展示表单名称、最近修改时间与「跳转到对象设置」入口。

拖拽规则​

设计器采用树形布局模型,不同容器接受的组件类型不同:

容器可接受的直接子组件
根容器(画布)基础容器(Row)
布局列(Column)基础容器(Row)、任意普通组件

因此实际搭建顺序为:先在画布放入基础容器(自动带一列),再把字段、页签、UI 组件等拖入布局列中。

  • 拖拽时画布会显示插入位置指示线,落点以最后一次指针位置为准。
  • 组件在布局内按 id 唯一标识;复制会生成新的 id。
  • 布局列(Column)是结构性容器,本身不可拖动、不可删除,只能配置属性,可通过「拆分列 / 删除列」调整所在行。

布局容器组件​

布局容器用于组织表单结构,均从左侧「布局组件」分类拖入。

基础容器​

多列布局的基础容器,支持动态列数与列宽调整。

配置项说明
列间距行组件中多个列之间的间距,默认 5
单元格宽度拖拽滑块调整各列宽度(以 24 栅格为基准)
自适应列数开启后按设备宽度自动适应列数,关闭后所有设备使用固定列数

在画布中把鼠标移到基础容器上,会出现列分隔线,拖动即可调整列宽;在布局列上使用「拆分列」可增加列数。

布局列​

基础容器中的单列容器,用于承载具体组件。

配置项说明
子元素间距子元素在单元格中的纵向间距,默认 5
布局方式vertical(垂直)/ horizontal(水平)
对齐方式default / start(左对齐)/ end(右对齐)/ center(居中)

Tab 容器​

多页签布局,每个页签是一个布局列,页签内可继续放置组件。

配置项说明
配置页签排序、重命名、设置默认激活页签、删除页签、添加页签
页面部件数据源接口选择数据源接口,可动态提供页签配置与标题

Step 容器​

多阶段布局,每个步骤是一个布局列,常用于分步录入表单。

配置项说明
展示类型default / navigation(导航)/ inline(内联)/ panel(面板)/ dot(点状)
标签放置位置horizontal(水平)/ vertical(垂直)
大小default / small(小号)
方向horizontal(水平)/ vertical(垂直)
编辑步骤排序、设置图标与标题、设置副标题与描述、删除步骤、添加步骤

分段控制器​

分段切换布局,每个分段是一个布局列。

配置项说明
大小large(大)/ middle(中)/ small(小号)
形状default / round(圆角)
对齐方式left(左对齐)/ center(居中)/ right(右对齐)/ block(拉伸)
配置分段排序、设置图标与标题、设置默认激活分段、删除分段、添加分段
页面部件数据源接口选择数据源接口,可动态提供分段配置与标题

组件操作​

选中组件后,组件右上角出现浮动工具栏:

操作说明
上移 / 下移在同一容器内调整组件顺序
复制组件复制当前组件及其子组件到同级
移除此组件从布局中移除当前组件
属性设置打开右侧属性面板
拆分列仅布局列可用,在其所在行中拆出一列
删除列仅布局列可用,删除该列(列内元素一并删除)

预览与保存​

  • 预览模式:标题栏左侧开关,打开后画布以最终渲染效果展示(Switch 切换「预览模式 / 编辑模式」)。
  • 弹窗预览:以弹窗形式预览表单,弹窗宽度由表单全局的「渲染宽度」决定,详见 表单全局属性。
  • 保存布局:点击后需二次确认(「是否保存当前布局?」),确认后把画布布局整体写入表单并提示「操作成功」。

下一步​

组件属性明细​

以下内容面向技术实现与 AI 检索,逐个说明设计器布局树与容器组件属性的存储格式。

WidgetItem 结构​

设计器布局 Layout 是一组嵌套的 WidgetItem:

属性名类型含义
idstring布局内唯一标识,拖拽/复制时重新生成
uidstring组件类型固定标识,用于判断组件是否已被使用
dragTypestring拖拽分类
originalTypestring真实分类
widgetTypestring组件类型(如 Row、Column、Tab、FormItem)
widgetTypeNamestring组件名称
childrenWidgetItem[]子组件
metaRecord<string,string>组件属性,值统一存为字符串
meta 均为字符串

所有组件属性(含布尔值)都以字符串形式存储在 meta 中,例如 FixedColumns: "true"、IsHide: "true"。

根容器接受规则​

export const CONTAINER_ACCEPT_RULES = {
root: [WidgetType.Row], // 画布只接受基础容器
column: [WidgetType.Row, WidgetType.Widget], // 布局列接受容器与普通组件
};

容器组件 meta 属性​

组件meta 属性名类型含义取值/存储值
基础容器 RowColumnSpacestring(int)列间距默认 "5"
基础容器 RowColumnsWidthstring列宽分割点逗号分隔,如 "12" 表示两列各 12
基础容器 RowFixedColumnsstring(bool)强制固定列数展示"true"(所有设备固定列宽)/ "false"(默认,按设备宽度自适应)
布局列 ColumnItemSpacestring(int)子元素间距默认 "5"
布局列 ColumnLayoutTypestring布局方式"vertical" / "horizontal",默认 "vertical"
布局列 ColumnAlignstring对齐方式"default" / "start" / "end" / "center"
Tab 容器 TabDefaultActiveTabstring默认激活页签子页签的 id
Tab 容器 TabMetaInterfaceIdstring(GUID)页面部件数据源接口接口 id
Tab 子页签Titlestring页签标题文本
Step 容器 StepDisplayTypestring展示类型"default" / "navigation" / "inline" / "panel" / "dot"
Step 容器 StepLabelPlacementstring标签放置位置"horizontal" / "vertical"
Step 容器 StepSizestring大小"default" / "small"
Step 容器 StepOrientationstring方向"horizontal" / "vertical"
Step 子步骤Iconstring步骤图标图标标识串
Step 子步骤Titlestring步骤标题文本
Step 子步骤SubTitlestring步骤副标题文本
Step 子步骤Descriptionstring步骤描述文本
分段 SegmentedSizestring大小"large" / "middle" / "small"
分段 SegmentedShapestring形状"default" / "round"
分段 SegmentedAlignmentstring对齐方式"left" / "center" / "right" / "block"
分段 SegmentedDefaultActiveSegmentstring默认激活分段子分段的 id
分段 SegmentedMetaInterfaceIdstring(GUID)页面部件数据源接口接口 id
分段子项Iconstring分段图标图标标识串
分段子项Titlestring分段标题文本
通用WidgetTypeNamestring组件名称只读展示

存储示例​

一个「基础容器(2 列)+ 页签」的布局片段:

[
{
"id": "row-1",
"uid": "5a0f3c1e-9b8d-4f6a-9c2e-7d1b4a8e6f3d",
"widgetType": "Row",
"widgetTypeName": "基础容器",
"meta": { "ColumnSpace": "5", "ColumnsWidth": "12" },
"children": [
{
"id": "col-1",
"uid": "7b9a905e-83d4-452b-83c8-694a3e0935e3",
"widgetType": "Column",
"meta": { "ItemSpace": "5", "LayoutType": "vertical", "Align": "default" },
"children": []
},
{
"id": "col-2",
"uid": "7b9a905e-83d4-452b-83c8-694a3e0935e3",
"widgetType": "Column",
"meta": { "ItemSpace": "5", "LayoutType": "vertical", "Align": "default" },
"children": [
{
"id": "tab-1",
"uid": "f8c226b6-7b98-45a8-8c71-abeb21e2941a",
"widgetType": "Tab",
"meta": { "DefaultActiveTab": "tab-item-1" },
"children": [
{ "id": "tab-item-1", "widgetType": "Column", "meta": { "Title": "基本信息" }, "children": [] }
]
}
]
}
]
}
]

画布渲染参数​

设计器画布以统一的 <Form> 包裹,表单实例参数如下:

参数取值说明
layoutLayoutType === 1 ? 'horizontal' : 'vertical'由 表单全局属性 的 LayoutType 决定
size'middle'表单控件尺寸
titleTitle ?? Name标题,Title 为空时回退为 Name