feat:完成数据文件上传解析及测试

This commit is contained in:
2026-10-09 06:42:28 -07:00
parent bb6a9405db
commit 4a6ec6d28c
11 changed files with 393 additions and 38 deletions
+4 -2
View File
@@ -15,10 +15,12 @@ class AddAction(ActionModel):
node: ScreenNode = Field(
description="新组件。id、type、layout 必填,其余只写需要覆盖物料默认配置的字段;"
"后端按 type 找到物料,用默认配置补全:对象逐层覆盖,数组整体替换,null 明确覆盖。"
"id 不能与现有组件重复,同一批里先 delete 的 ID 可以再用;type 用 list_components 返回的 type"
"id 不能与现有组件重复,同一批里先 delete 的 ID 可以再用;type 用 list_components 返回的 type。"
'任何字段值都可以写成 {"$query": "SELECT ..."},后端替换成上传数据的查询结果(对象数组,键是结果的列名)'
)
sample_data: bool = Field(
default=False,
description="true 表示组件显示的不是真实业务数据(物料示例数据,或自己编写的数据)。不写时按物料设置;"
"只有展示的数据全部来自大屏上已有的组件时写 false,例如更换类型时迁移了原组件的数据",
"只有展示的数据全部来自大屏上已有的组件或上传的数据文件时写 false,例如更换类型时迁移了原组件的数据;"
"node 里用了 $query 时不写也会设为 false",
)
+4 -1
View File
@@ -21,7 +21,10 @@ class UpdateAction(BaseAction):
path: list[PathSegment] = Field(
description='字段路径第一段之后的各段,字符串为对象键,整数为数组下标;name 没有后续路径,传空列表。例如字段 props.option.title.text 写成 section=props、path=["option", "title", "text"]'
)
value: JsonValue = Field(description="替换该字段的值,必须符合字段定义的类型和取值")
value: JsonValue = Field(
description="替换该字段的值,必须符合字段定义的类型和取值;"
'可以写成 {"$query": "SELECT ..."},后端替换成上传数据的查询结果(对象数组,键是结果的列名)'
)
@model_validator(mode="after")
def path_matches_section(self) -> Self: