表单管理模块
概述
表单管理模块是低代码平台的核心,提供可视化表单设计、动态数据操作、权限控制等功能。分为两个子模块:
- form_manager:表单元数据管理(设计、发布)
- form_data_manager:表单数据动态操作(CRUD)
模块路径
| 子模块 | 路径 | API 前缀 |
|---|---|---|
| 表单元数据 | backend-fastapi/core/form_manager/ | /api/core/form |
| 表单数据 | backend-fastapi/core/form_data_manager/ | /api/core/form-data |
数据模型
FormMeta(表单元数据)
python
class FormMeta(BaseModel):
__tablename__ = "core_form_meta"
application_id: str # 所属应用 ID
name: str # 表单名称
code: str # 表单编码(唯一)
form_type: str # 表单类型
status: str # 状态
version: int # 版本号
db_config: str # 数据库连接配置
main_table: str # 主表名
main_table_schema: str # 主表 Schema
main_table_database: str # 主表数据库
form_config: dict # 表单配置(JSONB)
list_config: dict # 列表配置(JSONB)FormSubTable(子表关联)
python
class FormSubTable(BaseModel):
__tablename__ = "core_form_sub_table"
form_id: str # 表单 ID
table_name: str # 子表名
table_schema: str # 子表 Schema
table_database: str # 子表数据库
alias: str # 别名
foreign_key: str # 外键字段
related_field: str # 关联字段
relation_type: str # 关联类型表单类型 (form_type)
| 值 | 说明 |
|---|---|
normal | 普通表单 |
workflow | 流程表单 |
表单状态 (status)
| 值 | 说明 |
|---|---|
draft | 草稿 |
published | 已发布 |
服务层
FormService(表单元数据服务)
静态方法类,提供以下功能:
CRUD 操作
| 方法 | 说明 |
|---|---|
list(db, page, page_size, filters) | 获取表单列表(带应用名称) |
get(db, form_id) | 获取表单详情 |
get_by_code(db, code) | 根据编码获取 |
create(db, data) | 创建表单(含子表) |
update(db, form_id, data) | 更新表单(子表先删后建) |
delete(db, form_id) | 删除表单(物理删除) |
batch_delete(db, ids) | 批量删除 |
发布管理
| 方法 | 说明 |
|---|---|
publish(db, form_id, data) | 发布表单 |
unpublish(db, form_id) | 停用表单 |
copy(db, form_id) | 复制表单 |
导入导出
| 方法 | 说明 |
|---|---|
export_config(db, form_id) | 导出配置(JSON) |
import_config(db, data) | 导入配置(JSON) |
发布时自动创建
发布表单时自动创建以下资源:
- 菜单:
path=/form-render/{code},type=online_form - 权限:6 种操作权限
- 资源注册:字段元数据注册
| 权限编码 | 说明 |
|---|---|
form:{code}:view | 查看 |
form:{code}:add | 新增 |
form:{code}:edit | 编辑 |
form:{code}:delete | 删除 |
form:{code}:export | 导出 |
form:{code}:import | 导入 |
FormDataService(表单数据服务)
工厂模式,通过 create_service(db, form_code) 创建实例。
数据查询
| 方法 | 说明 |
|---|---|
list(db, page, page_size, filters, sort) | 分页查询(含数据权限) |
get(db, pk) | 获取详情(含子表) |
get_field_values(db, field, search) | 获取字段唯一值列表 |
数据写入
| 方法 | 说明 |
|---|---|
create(db, data) | 创建(主表+子表) |
update(db, pk, data) | 更新(子表差异更新) |
delete(db, pk) | 删除(子表+主表) |
batch_delete(db, pks) | 批量删除 |
导入导出
| 方法 | 说明 |
|---|---|
export_to_excel(db, filters, fields) | 导出 Excel |
get_import_template(db) | 获取导入模板 |
import_from_excel(db, file) | 从 Excel 导入 |
内部处理
| 方法 | 说明 |
|---|---|
_get_allowed_fields() | 获取字段白名单 |
_fill_system_fields_for_create() | 填充创建系统字段 |
_fill_system_fields_for_update() | 填充更新系统字段 |
_apply_data_scope_filter_safe() | 应用数据权限过滤 |
_fill_relation_display_names() | 填充关联字段显示名 |
_fill_virtual_fields() | 填充虚拟字段 |
apply_field_permissions() | 应用字段权限 |
DynamicSQLBuilder
动态 SQL 构建器,适配 PostgreSQL/MySQL:
| 方法 | 说明 |
|---|---|
build_select(table, fields, where, order, limit) | 构建 SELECT |
build_count(table, where) | 构建 COUNT |
build_insert(table, data) | 构建 INSERT |
build_update(table, data, where) | 构建 UPDATE |
build_delete(table, where) | 构建 DELETE |
WHERE 条件支持:eq、ne、gt、gte、lt、lte、like、in、range、null、not_null
API 接口
表单元数据 API
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /list | 获取表单列表 |
| GET | /form-types | 获取表单类型 |
| GET | /published/simple | 获取已发布表单(下拉用) |
| GET | /{id} | 获取表单详情 |
| GET | /code/{code} | 根据编码获取 |
| POST | / | 创建表单 |
| PUT | /{id} | 更新表单 |
| DELETE | /{id} | 删除表单 |
| DELETE | /batch/delete | 批量删除 |
| POST | /{id}/publish | 发布表单 |
| POST | /{id}/unpublish | 停用表单 |
| POST | /{id}/copy | 复制表单 |
| GET | /{id}/export | 导出配置 |
| POST | /import | 导入配置 |
表单数据 API
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /{code}/permissions | 获取操作权限 |
| GET | /{code}/field-permissions | 获取字段权限 |
| GET | /{code}/list | 获取数据列表 |
| GET | /{code}/field-values/{field} | 获取字段值列表 |
| GET | /{code}/detail/{pk} | 获取数据详情 |
| POST | /{code} | 创建数据 |
| PUT | /{code}/{pk} | 更新数据 |
| DELETE | /{code}/{pk} | 删除数据 |
| DELETE | /{code}/batch/delete | 批量删除 |
| POST | /{code}/export/task | 导出 Excel |
| GET | /{code}/import/template | 下载导入模板 |
| POST | /{code}/import/excel | 导入 Excel |
配置结构
form_config(表单配置)
json
{
"items": [...], // 表单项数组
"tableConfigs": [...], // 表配置(字段类型映射)
"labelWidth": 120, // 标签宽度
"labelPosition": "right", // 标签位置
"size": "default", // 尺寸
"formPadding": 20, // 表单内边距
"formMargin": 0, // 表单外边距
"itemSpacing": 16, // 项间距
"formWidth": "100%", // 表单宽度
"formMaxWidth": "none", // 最大宽度
"formBackground": "#fff", // 背景色
"formBorder": "none", // 边框
"formBorderRadius": 0, // 圆角
"formShadow": "none" // 阴影
}list_config(列表配置)
json
{
"columns": [...], // 列配置
"queryFields": [...], // 查询字段
"buttons": { // 按钮配置
"showAdd": true,
"showEdit": true,
"showDelete": true,
"showView": true,
"showExport": true,
"showImport": true,
"showBatchDelete": true
},
"listType": "table", // 列表类型(table/card)
"containerType": "drawer", // 容器类型
"table": {...}, // 表格配置
"card": {...}, // 卡片配置
"dialog": {...}, // 弹窗配置
"drawer": {...}, // 抽屉配置
"subTableButtons": [...], // 子表按钮
"customButtons": [...] // 自定义按钮
}权限控制
三级权限体系
- 操作权限:控制用户能执行哪些操作
- 数据权限:控制用户能看到哪些数据
- 字段权限:控制用户能看到哪些字段
数据权限类型
| scope_type | 说明 |
|---|---|
all | 全部数据 |
self | 仅本人创建的数据 |
dept | 本部门数据 |
dept_and_children | 本部门及子部门数据 |
custom | 自定义部门范围 |
字段权限级别
| 级别 | 说明 |
|---|---|
write | 可读写 |
read | 只读 |
hidden | 隐藏 |
masked | 脱敏 |
请求/响应示例
创建表单数据
请求:
json
POST /api/core/form-data/order
{
"order_no": "ORD001",
"customer_name": "张三",
"amount": 1000.00,
"items": [
{"product": "商品A", "qty": 2, "price": 300},
{"product": "商品B", "qty": 1, "price": 400}
]
}查询表单数据
请求:
GET /api/core/form-data/order/list?page=1&pageSize=20&filter_status=pending&sort=-sys_create_datetime响应:
json
{
"items": [...],
"total": 100
}与其他模块的关系
- 菜单模块:发布时创建
online_form类型菜单 - 权限模块:发布时创建 6 种操作权限
- 工作流模块:流程表单关联工作流定义
- 资源注册:发布时注册字段元数据(用于数据权限/字段权限配置)