21 小时以前 9bad721754fe8bbe2e5f459d0706e0fefac569f3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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;
 
/**
 * 组件积木清单的一项:前端注册表的**派生视图**,喂给大模型当「可用积木」。
 * <p>
 * 由前端从活注册表生成(剥掉 icon / buildContent / validate 这些不可序列化的成员)后随请求上传。
 * <b>后端刻意不硬编码这份清单</b>:注册表在前端是唯一真相来源,后端抄一份就是第二个真相来源,
 * 前端加了组件、改了必填字段时后端副本会静默过期,大模型随即会编出注册表里根本不存在的 type。
 * <p>
 * 积木清单只用于拼 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<Field> 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<Object> enumOptions;
 
    }
 
}