package cn.iocoder.yudao.module.qcreport.controller.admin.aiimport.vo; import cn.iocoder.yudao.module.qcreport.dal.dataobject.version.ReportTemplateSchema; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.List; import java.util.Map; /** * AI 识别结果:一份**模板草稿**,不落库。 *
* 刻意不返回 {@link ReportTemplateSchema}:草稿只是「一串组件 + 各自的属性」这个更小的物化形态, * 由前端装配器配上活注册表才能编译成画布数据({@code grapes})。让后端产出完整 Schema * 就得在这里再实现一遍组件的 canvas 结构,等于把渲染引擎的职责抄进 AI 模块,还会让 * Schema 契约为了 AI 而膨胀——语义层是刻意收窄的子集,不该为这条路开口子。 *
* 因此草稿的消费者只有前端装配器:它逐项查注册表,未注册的 type 直接跳过。 * 即便模型编出清单外的组件,也永远变不成任意 HTML。 * *
* 与「整体失败抛异常」是两回事:这些情况不影响草稿可用,但必须让用户看见,
* 否则会以为文件里的内容都识别到了。
*/
@Schema(description = "识别过程中的软提示,需在界面上展示给用户")
private List
* 结构完全扁平:没有 children、没有嵌套。props 的 key 由前端积木清单定义,
* 因此这里用 {@code Map} 而不是强类型——合法 key 的权威在前端注册表,后端不该重复声明一遍。
*/
@Schema(description = "管理后台 - AI 草稿里的一个组件")
@Data
public static class DraftComponent {
@Schema(description = "组件类型,必须是积木清单里声明过的 type", example = "QualityTable")
private String type;
@Schema(description = "组件属性;清单里未声明的 key 已被后端丢弃")
private Map