package cn.iocoder.yudao.module.qcreport.controller.admin.aiimport.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.List; /** * 组件积木清单的一项:前端注册表的**派生视图**,喂给大模型当「可用积木」。 *

* 由前端从活注册表生成(剥掉 icon / buildContent / validate 这些不可序列化的成员)后随请求上传。 * 后端刻意不硬编码这份清单:注册表在前端是唯一真相来源,后端抄一份就是第二个真相来源, * 前端加了组件、改了必填字段时后端副本会静默过期,大模型随即会编出注册表里根本不存在的 type。 *

* 积木清单只用于拼 prompt。后端**不据此做任何渲染或合法性推断**—— * 真正把关的是前端装配器查询活注册表;未注册的 type 在那里会被直接跳过,产不出任意 HTML。 */ @Schema(description = "管理后台 - 智能质检报告 AI 积木清单项") @Data public class QcReportComponentSpecVO { @Schema(description = "组件类型,如 ReportHeader / QualityTable", requiredMode = Schema.RequiredMode.REQUIRED, example = "QualityTable") private String type; @Schema(description = "组件显示名,供模型理解语义", example = "检验项目表格") private String label; @Schema(description = "组件分类,如 basic / data / result", example = "data") private String category; @Schema(description = "选型说明:这个组件用来放什么、不要用来放什么", example = "文档最顶部的抬头块:公司名称、报告标题、报告编号") private String hint; @Schema(description = "该组件允许填写的属性字段;未在此声明的 key 一律会被丢弃") private List fields; /** * 一个可填属性。只保留模型需要知道的部分,字段类型同样由前端注册表给出。 */ @Schema(description = "管理后台 - AI 积木清单的字段项") @Data public static class Field { @Schema(description = "属性 key,如 itemsPath / title", requiredMode = Schema.RequiredMode.REQUIRED, example = "itemsPath") private String key; @Schema(description = "字段显示名", example = "检验项数据源") private String label; @Schema(description = "字段类型,如 text / number / boolean / enum / dataPath", example = "dataPath") private String type; @Schema(description = "是否必填;必填未给时后端会在 warnings 里提示") private Boolean required; @Schema(description = "是否支持数据绑定", example = "true") private Boolean bindable; @Schema(description = "枚举可选值,仅在 type=enum 时有意义") private List enumOptions; } }