AI 生码 - PRD2CODE:PRD2Code Schema 协议与低代码样板代码映射转译规范
摘要
本文聚焦低代码平台模版配置面板参数元数据协议及 PRD2Code Schema 协议,明确协议结构、字段定义、预置设置器使用及相关约定,为低代码组件开发、模版配置提供标准化指导,适用于低代码平台开发者、组件封装者及模版配置人员。
一、术语与缩略语
明确核心术语,统一认知,避免歧义:
| 名称 | 描述 |
|---|---|
| 模版 | 低代码平台“样板间”,用于快速生成标准化页面/组件 |
| 编辑器 | 可视化操作平台,用于模版个性化配置、属性修改及结构调整 |
二、元数据定义协议
元数据定义协议是低代码模版配置的核心,用于规范模版描述格式、配置逻辑及扩展能力,核心分为两大模块:模版配置面板参数元数据协议、PRD2Code Schema 协议。
2.1 模版配置面板参数元数据协议
物料配置需产出符合《低代码引擎物料协议规范》的 JSON Schema,如需补充属性描述、定制编辑体验(如修改 Setter、调整展示顺序),可直接修改该 Schema。本协议用于定义模版配置面板参数,保障配置标准化、可复用。
2.1.1 协议结构
单个模版的描述为 JSON 结构,核心包含两个独立且职责清晰的模块:
- 基础信息:组件/模版的核心标识,用于平台展示、识别和引入。
- 能力配置/体验增强:优化搭建编辑体验,定制配置面板交互逻辑与控件样式。
2.1.2 基础信息字段定义
基础信息字段用于唯一标识模版,必填字段需严格填写,确保平台正常识别使用,具体说明如下:
| 字段 | 字段描述 | 字段类型 | 允许空 |
|---|---|---|---|
| componentName | 组件/模版唯一名称,用于代码引用和平台识别 | String | 否 |
| title | 组件/模版中文名称,用于平台界面展示 | String | 否 |
| description | 组件/模版功能描述,帮助使用者了解用途 | String | 是 |
| screenshot | 组件/模版快照图片 URL,用于平台可视化展示 | String | 否 |
| icon | 组件/模版小图标 URL,用于平台列表快速识别 | String (URL) | 是 |
| npm | npm 源引入描述对象,用于加载组件源码 | Object | 否 |
| npm.package | 源码组件库名称,对应 npm 包名 | String | 否 |
| npm.exportName | 源码组件导出名称,用于代码导入 | String | 否 |
| npm.subName | 子组件名称(组件存在子组件时) | String | 否 |
| npm.destructuring | 是否采用解构方式导入组件 | Bool | 否 |
| npm.main | 组件入口路径,用于加载组件源码 | String | 否 |
| npm.version | 源码组件版本号,保障版本一致性 | String | 否 |
| snippets | 组件库展示描述,用于平台组件面板配置 | Object[] | 否 |
| priority | 组件在同一分类中的排序优先级 | String | 否 |
2.1.3 编辑体验增强配置(configure)
用于定制模版配置面板编辑体验,包含 4 个核心配置维度,可灵活调整,具体说明如下:
| 字段 | 字段描述 | 字段类型 |
|---|---|---|
| props | 属性面板配置,定义面板字段、控件等 | Array |
| component | 组件能力配置,定义组件约束、行为等 | Object |
| supports | 通用扩展配置能力,定义样式、事件等扩展支持 | Object |
| advanced | 高级特性配置,控制组件在设计器中的个性化表现 | Object |
2.1.3.1 属性面板配置(props)
props 是 configure 的核心子配置,用于定义属性面板具体字段和控件,数组中每个对象对应一个配置项,核心字段说明:
| 字段 | 字段描述 | 字段类型 | 备注 |
|---|---|---|---|
| type | 指定配置项类型 | Enum | 可选:‘field’(单个字段)、‘group’(字段分组) |
| display | 指定配置项展示方式 | Enum | 可选:‘accordion’等,默认’inline’ |
| title | 分组标题 | String | 仅 type = 'group’时生效 |
| items | 分组下的属性列表 | Array | 仅 type = 'group’时生效 |
| name | 属性名,与组件 props 字段对应 | String | 仅 type = 'field’时生效 |
| defaultValue | 属性默认值 | Any | 仅 type = 'field’时生效,视字段类型而定 |
| condition | 控制当前 prop 是否展示 | Function | 参数:(target: IPublicModelSettingField) => boolean |
| setter | 定义属性编辑控件 | String|Object|Function | 仅 type = 'field’时生效,支持 JSExpression/JSFunction |
| extraProps | 扩展配置属性,不做流通要求 | Object | 用于扩展 setter 额外功能(如取值/赋值钩子) |
核心说明:需根据 type 选择合适的 setter,以下介绍设置器扩展属性及系统预置 setter 类型。
2.1.3.1.1 设置器扩展属性(setter)
setter 可通过配置 props 定制展示和交互效果,以 StringSetter 为例,配置示例如下:
示例:StringSetter配置
// StringSetter 配置(多语言支持+占位提示)
const PageMeta: IPublicComponentMetadata = {
"configure": {
"props": [
{
"name": "pageTitle",
"title": {
"label": {
"type": "i18n",
"zh_CN": "标题",
"en_US": "Title"
}
},
"setter": {
"componentName": "StringSetter",
"props": {
"placeholder": "请输入标题"
}
}
}
]
}
};
配置效果:
说明:setter 可配置属性因类型而异,需结合业务需求选择。
2.1.3.1.2 预置设置器列表
系统内置常用 setter,覆盖多数业务场景,可直接使用,无需重复开发,详情如下:
| 预置 Setter | 返回类型 | 用途 |
|---|---|---|
| ArraySetter | T[] | 配置数组类型属性(表格列、列表项等) |
| BoolSetter | boolean | 配置开关类属性(是否显示、启用等) |
| ColorSetter | string | 配置颜色类属性(字体色、背景色等) |
| DateMonthSetter | - | 配置仅需月份的日期属性 |
| DateRangeSetter | - | 配置时间区间(开始-结束时间) |
| DateSetter | - | 配置单个日期属性 |
| DateYearSetter | - | 配置仅需年份的日期属性 |
| JsonSetter | object | 配置复杂 JSON 对象属性 |
| NumberSetter | number | 配置数字类属性(大小、数量等) |
| ObjectSetter | Record<string, any> | 配置数组中的对象项(通常内嵌于 ArraySetter) |
| RadioGroupSetter | string | number | boolean | tab 形式单选项配置 |
| SelectSetter | string | number | boolean | 下拉形式单选项配置 |
| StringSetter | string | 配置短文本属性(标题、标签等,不可换行) |
| TextAreaSetter | string | 配置长文本属性(描述、备注等,可换行) |
| TimePicker | - | 配置时间属性(开始时间、结束时间等) |
2.1.3.2 组件能力配置(component)
用于定义组件的能力、约束和行为,部分信息可从组件视图实例直接获取,核心字段如下:
| 字段 | 用途 | 类型 |
|---|---|---|
| isContainer | 标识组件是否为容器组件(可包含子组件) | Boolean |
| descriptor | 组件树描述信息,用于识别组件结构 | String |
| disableBehaviors | 屏蔽设计器中选中组件时的操作项(默认:copy、hide、remove) | String[] |
配置示例
// 容器组件能力声明示例
{
configure: {
component: {
isContainer: true, // 标识为容器组件,可嵌套子组件
descriptor: 'container', // 组件树描述
disableBehaviors: ['copy', 'remove'] // 禁止复制、删除操作
},
},
}
2.1.3.3 通用扩展面板支持性配置(supports)
用于声明模版配置面板的通用扩展能力,适用于样式、事件等场景,配置示例如下:
// 通用扩展能力声明示例
{
"configure": {
"supports": {
"events": ["onClick", "onChange"], // 支持的交互事件
"loop": true, // 支持循环配置
"condition": true, // 支持条件显示/隐藏
"style": true // 支持自定义样式编辑
}
}
}
2.1.3.4 高级特性配置(advanced)
用于控制组件在设计器中的个性化表现,可实现自动初始化子组件、截获组件操作事件等高级功能,无需额外开发即可扩展组件能力。
说明:advanced 配置无固定字段,需结合具体业务场景灵活调整。
2.1.4 协议设计
协议统一规范,定义组件配置格式,确保组件正常渲染、配置及复用,是物料化开发的核心基础。
1. IPublicComponentMetadata(组件元数据接口)
定义组件核心元信息的配置格式,明确组件基础属性及必填要求,支撑组件在低代码平台的展示与识别。
| 属性名 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
componentName |
string |
是 | - | 组件唯一标识名称 |
title |
string |
否 | - | 组件展示标题 |
icon |
string |
否 | - | 组件展示图标 |
description |
string |
否 | - | 组件功能描述 |
screenshot |
string |
否 | - | 组件快照截图地址 |
npm |
IPublicNpmInfo |
否 | - | npm源引入配置对象 |
configure |
IPublicConfigure |
否 | - | 组件编辑体验配置 |
template_id |
string |
是 | - | 样板间唯一标识ID |
blocks |
TemplateBlock[] |
是 | - | 样板间变体配置集合 |
2. TemplateBlock(模版区块)
定义样板间变体的基础结构,用于区分不同变体的核心配置,支撑样板间变体切换功能。
| 属性名 | 类型 | 必填 | 描述 |
|---|---|---|---|
name |
string |
是 | 区块唯一名称 |
value |
string |
是 | 区块对应值 |
3. IPublicNpmInfo(NPM源配置接口)
规范组件 npm 源引入格式,确保组件可从 npm 仓库正常拉取、引入和使用。
| 属性名 | 类型 | 必填 | 描述 |
|---|---|---|---|
componentName |
string |
否 | 源码组件名称 |
package |
string |
是 | 源码组件库名称 |
version |
string |
否 | 源码组件版本号 |
isDestructuring |
boolean |
否 | 是否解构引入组件 |
exportName |
string |
否 | 源码组件导出名称 |
subName |
string |
否 | 子组件名称 |
main |
string |
否 | 组件入口文件路径 |
4. IPublicFieldConfig(属性面板配置接口)
定义组件属性面板的结构、属性及显示规则,支撑组件在低代码平台的可视化配置。
| 属性名 | 类型 | 必填 | 描述 |
|---|---|---|---|
type |
'field' | 'group' |
否 | 配置类型(单个字段/分组) |
name |
string |
否 | 属性名称 |
title |
string |
否 | 属性显示标题 |
setter |
IPublicSetterType |
否 | 属性设置器配置 |
items |
IPublicFieldConfig[] |
否 | 分组类型下的子配置项 |
5. IPublicConfigure(编辑体验配置接口)
优化组件在低代码平台的编辑操作体验,定义组件编辑相关核心能力。
| 属性名 | 类型 | 必填 | 描述 |
|---|---|---|---|
props |
IPublicFieldConfig[] |
否 | 属性面板配置项集合 |
component |
IPublicComponentConfigure |
否 | 组件核心操作能力配置 |
supports |
IPublicConfigureSupport |
否 | 通用扩展面板支持配置 |
6. IPublicConfigureSupport(通用扩展支持配置)
定义组件是否支持低代码平台的样式、循环、条件渲染等通用扩展功能。
| 属性名 | 类型 | 必填 | 描述 |
|---|---|---|---|
style |
boolean |
否 | 是否支持样式设置 |
loop |
boolean |
否 | 是否支持循环设置 |
condition |
boolean |
否 | 是否支持条件渲染设置 |
7. IPublicComponentConfigure(组件能力配置接口)
定义组件在低代码平台中的核心操作能力及组件树描述信息。
| 属性名 | 类型 | 必填 | 描述 |
|---|---|---|---|
descriptor |
string |
否 | 组件树结构描述 |
disableBehaviors |
string[] | string |
否 | 禁用操作(copy/move/remove) |
8. IPublicSetterType(设置器类型)
定义组件属性设置器的两种形式,支撑属性的可视化配置。
type IPublicSetterType = IPublicSetterConfig | string;
IPublicSetterConfig- 设置器详细配置对象string- 已注册的设置器名称
9. IPublicSetterConfig(设置器配置接口)
定义具体设置器的使用规则及参数传递方式,确保设置器正常生效。
| 属性名 | 类型 | 必填 | 描述 |
|---|---|---|---|
componentName |
string |
是 | 指定设置器组件名称 |
props |
Record<string, unknown> |
否 | 传递给设置器的参数 |
condition |
(target: any) => boolean |
否 | MixedSetter优先选中判断条件 |
2.2 PRD2Code Schema 协议
PRD2Code Schema 是基于低代码引擎的结构化 JSON 对象,核心用于将产品需求(PRD)转化为低代码平台可直接使用的结构化配置,支持快速生成页面/组件。其核心特点:
- 包含 componentsTree、props、children、fields 等核心字段,完整描述页面结构与属性;
- 可描述表格列、搜索条件、表单字段等业务配置;
- 遵循低代码引擎标准,配置可直接在引擎中运行。
2.2.1 协议示例
// PRD2Code Schema 核心示例
{
"version": "1.0.0", // 协议版本(兼容控制)
"componentsMap": [ // 组件映射:页面所需组件引入配置
{
"componentName": "ProForm",
"package": "react-pro-components",
"version": "1.0.0",
"destructuring": true,
"exportName": "ProForm"
}
],
"componentsTree": [ // 页面组件树:描述页面结构
{
"id": "demo-form-page", // 页面唯一标识
"componentName": "Page", // 固定为Page(页面容器)
"fileName": "DemoFormPage", // 页面文件名
"props": {},
"children": [ // 页面子组件:核心表单
{
"componentName": "ProForm.CardForm",
"props": {
"formProps": {
"initialValues": { "userName": "admin", "phone": "13800138000" },
"layout": "horizontal"
},
"pageHeaderProps": { "title": "用户表单", "tag": { "children": "编辑中", "color": "blue" } },
"fields": [ // 表单字段
[
{ "type": "title", "title": "基础信息" },
{
"columns": 1,
"fields": [
{
"type": "input",
"name": "userName",
"label": "用户名",
"required": true,
"rules": [{ "required": true, "message": "请输入用户名" }]
}
]
}
]
],
"onSubmit": { // 提交事件
"type": "JSFunction",
"value": "function() { message.success('提交成功:' + JSON.stringify(this.form.getFieldsValue())) }"
}
}
}
]
}
],
"meta": { // 页面元信息
"name": "用户表单示例",
"creator": "admin",
"gmt_create": "2026-04-17 10:00:00"
},
"router": { // 路由配置
"baseUrl": "/",
"routes": [{ "path": "user-form", "page": "demo-form-page" }]
},
"pages": [{ "id": "demo-form-page", "treeId": "demo-form-page" }]
}
2.2.2 协议约定
PRD2Code Schema 遵循低代码引擎核心规范,明确各接口/类型的字段约束与关联,保障配置规范、兼容可扩展,为低代码应用搭建及组件加载提供标准依据。
核心区别标注说明:
- 【接口(interface)】用于定义对象固定结构,含具体属性;
- 【类型别名(type)】用于描述联合、复合、数组等数据类型,无固定属性名。
1. IAppDescriptionSchema(应用描述核心接口)【接口(interface)】
应用描述核心接口,定义低代码应用完整结构。
| 属性名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| version | string | 是 | 应用协议版本号 |
| componentsMap | IComponentImportSchema[] | 是 | 应用所有组件映射关系 |
| componentsTree | IPageContainerSchema[] | 是 | 应用组件树,长度固定为 1 |
2. IComponentImportSchema(组件映射接口)【接口(interface)】
组件映射核心接口,定义组件引入相关配置。
| 属性名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| componentName | string | 否 | 源码组件名 |
| package | string | 是 | 源码组件库名 |
| version | string | 否 | 源码组件版本 |
| destructuring | boolean | 否 | 是否解构导入 |
| exportName | string | 否 | 组件导出名 |
| subName | string | 否 | 子组件名 |
| main | string | 否 | 组件入口路径 |
3. IPageContainerSchema(页面容器Schema)【接口(interface)】
页面容器 Schema,继承自 IComponentTreeNodeSchema,作为组件树顶层容器。
| 属性名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| componentName | ‘Page’ | 是 | 组件名,固定为’Page’ |
| (继承自IComponentTreeNodeSchema) | - | - | 继承节点所有属性 |
4. IComponentTreeNodeSchema(组件树节点描述)【接口(interface)】
组件树基础协议,描述单个组件树节点信息。
| 属性名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| id | string | 否 | 节点唯一标识 |
| componentName | string | 是 | 组件名,必填且首字母大写 |
| props | { children?: IComponentNodeData | IComponentNodeData[] } & IComponentPropsMap | 否 |
| children | IComponentNodeData | IComponentNodeData[] | 否 |
5. IComponentPropsMap(组件属性映射类型)【类型别名(type)】
定义组件属性映射规则。
| 类型 | 描述 |
|---|---|
| ICompositeObject<IComponentNodeData | IComponentNodeData[]> |
6. IComponentNodeData(节点数据联合类型)【类型别名(type)】
定义组件树节点数据源类型。
| 类型 | 描述 |
|---|---|
| IComponentTreeNodeSchema | string |
7. ICompositeValue(复合类型)【类型别名(type)】
包含所有可能的值类型,支撑复杂配置。
| 类型 | 描述 |
|---|---|
| IJSONValue | ICompositeValue[] |
8. ICompositeObject(复合对象类型)【接口(interface)】
泛型复合对象类型,用于复杂属性配置。
| 属性名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| [key: string] | ICompositeValue | T | 是 |
9. IJSONObject(JSON对象类型)【接口(interface)】
标准JSON键值对结构,支撑基础配置传递。
| 属性名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| [key: string] | IJSONValue | 是 | 键值对,值为任意JSON类型 |
10. IJSONValue(JSON值类型联合类型)【类型别名(type)】
定义所有可能的JSON值类型。
| 类型 | 描述 |
|---|---|
| boolean | string |
11. IJSONArray(JSON数组类型)【类型别名(type)】
标准JSON数组类型,作为IJSONValue的组成部分。
| 类型 | 描述 |
|---|---|
| IJSONValue[] | 数组元素均为IJSONValue类型 |
三、核心接口定义
3.1 接口列表
适配页面模板、Schema、代码生成、文件上传全场景业务,接口语义清晰、易维护。
| 接口说明 | 请求方法 | 接口路径 | 入参 | 返回值 | 备注 |
|---|---|---|---|---|---|
| 根据模板 ID 查询页面模板 | GET | /spc/template/{id} | 模板 ID | 模板基础信息+样板代码 | 路径传参 |
| 根据 Jira ID 查询 Schema | GET | /spc/template/schema/jira/{jiraId} | Jira ID | Schema 结构化数据 | 业务关联查询 |
| 根据 Schema ID 查询 Schema | GET | /spc/template/schema/{schemaId} | Schema ID | 完整 Schema 配置 | 详情查询 |
| 新增/更新 Schema | POST | /spc/template/schema | Schema 结构化数据 | 操作结果+ID | 传ID=更新,不传=新增 |
| 根据 Schema ID 删除 Schema | DELETE | /spc/template/schema/{id} | Schema ID | 操作结果 | 逻辑删除/物理删除 |
| Schema 列表分页搜索 | GET | /spc/template/schema/list | 分页参数/搜索关键词 | Schema 列表+分页信息 | 支持名称、Jira ID 筛选 |
| Schema 转前端代码 | POST | /spc/template/schema-to-codes | Schema 结构化数据 | 生成的代码实体 | 核心AI代码生成接口 |
| 根据 Schema ID 查询前端代码 | GET | /spc/template/code/{schemaId} | Schema ID | 代码内容+版本信息 | 一对一关联查询 |
| 图片上传至 CDN | POST | /spc/template/upload/cdn | form-data(文件) | 文件 CDN 地址 | 支持图片/附件上传 |
3.2 模板template id协议
模板 ID 采用 8 位数字分层编码,按「端类型+业务属性+模板类型+细分变种」四级定义,用于唯一标识、分类管理所有页面模板。
3.2.1 编码结构
[端类型(2位)][业务属性(2位)][模板类型(2位)][细分变种(2位)]
| 位数 | 名称 | 说明 |
|---|---|---|
| 1-2 | 端类型 | 设备端标识(PC/移动端) |
| 3-4 | 业务属性 | 通用/各业务线专属 |
| 5-6 | 模板类型 | 页面类型(表格/表单/详情/日志) |
| 7-8 | 细分变种 | 模板细分类型 + 版本序号 |
3.2.2 字段取值规范
1. 端类型(1-2位)
| 编码 | 类型 |
|---|---|
| 01 | PC 端 |
| 02 | 移动端(预留) |
| 03 | 小程序(预留) |
2. 业务属性(3-4位)
| 编码 | 类型 |
|---|---|
| 01 | 通用 |
| 02 | 业务线 A |
| 03 | 业务线 B |
| 04 | 业务线 C |
| 05 | 业务线 D |
3. 模板类型(5-6位)
| 编码 | 类型 |
|---|---|
| 01 | 表格查询页 |
| 02 | 表单页 |
| 03 | 详情页 |
| 04 | 日志页 |
4. 细分变种(7-8位)
- 固定规则:从
01开始自增编号 - 代表同类型下的不同页面形态(基础版、带 Tab 版、高级版等)
3.2.3 核心编码映射表
| 端类型 | 业务属性 | 模板类型 | 细分变种 | 模板ID | 模板名称 |
|---|---|---|---|---|---|
| 01 PC | 01 通用 | 01 表格查询页 | 01 基础表格 | 01010101 | 基础表格查询页 |
| 02 带Tab表格 | 01010102 | 带 Tab 表格查询页 | |||
| 03 高级表格 | 01010103 | 高级表格查询页 | |||
| 02 表单页 | 01 基础表单 | 01010201 | 基础表单页 | ||
| 02 高级表单 | 01010202 | 高级表单页 | |||
| 03 分步表单 | 01010203 | 分步表单页 | |||
| 03 详情页 | 01 基础详情 | 01010301 | 基础详情页 | ||
| 04 日志页 | 01 基础日志 | 01010401 | 基础日志页 |
3.2.4 设计优势
- 唯一性:8 位编码全局唯一,无冲突
- 可读性:层级清晰,一眼识别模板属性
- 扩展性:预留编码位,支持后续业务扩展
- 易管理:按规则自动生成,便于检索维护
四、核心表结构设计(MySQL)
4.1 核心表总览
| 表名 | 中文名称 | 核心作用 |
|---|---|---|
| spc_page_template | 页面模板表 | 存储页面模板基础配置信息 |
| spc_page_schema | 页面 Schema 表 | 存储 GUI 配置后的页面 Schema 结构化数据 |
| spc_page_code | 页面代码表 | 存储 AI 生成的标准化前端代码 |
| spc_operation_log | 操作日志表 | 记录全流程操作,生成日志 |
4.2 分表详细设计
1. spc_page_template(页面模板表)
存储系统内置/自定义的页面样板模板,是代码生成的基础骨架来源
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | bigint | 主键 | 自增 ID |
| template_name | varchar(255) | NOT NULL | 模板名称 |
| template_schema | text | NOT NULL | 模板默认 Schema 结构 |
| template_code | text | NOT NULL | 模板样板代码(带注释) |
| create_time | datetime | NOT NULL | 创建时间 |
| update_time | datetime | NOT NULL | 更新时间 |
2. spc_page_schema(页面 Schema 表)
存储用户在配置平台生成的页面 Schema 数据,关联模板与业务标识
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | bigint | 主键 | 自增 ID |
| template_id | bigint | 外键 | 关联模板 ID |
| jira_id | varchar(100) | - | 业务关联 Jira ID |
| page_name | varchar(255) | NOT NULL | 页面名称 |
| schema_json | text | NOT NULL | 页面 Schema 结构化数据 |
| operator_name | varchar(100) | NOT NULL | 操作人名称 |
| create_time | datetime | NOT NULL | 创建时间 |
| update_time | datetime | NOT NULL | 更新时间 |
3. spc_page_code(页面代码表)
存储 AI 根据 Schema 生成的前端源码,支持多版本管理
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | bigint | 主键 | 自增 ID |
| schema_id | bigint | 外键 | 关联 Schema ID |
| code_content | text | NOT NULL | 生成的前端源码 |
| version | varchar(50) | - | 代码版本号 |
| create_time | datetime | NOT NULL | 创建时间 |
4. spc_operation_log(操作日志表)
记录 Schema 保存、代码生成、导出等全链路操作日志,用于审计排查
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | bigint | 主键 | 自增 ID |
| schema_id | bigint | 外键 | 关联 Schema ID |
| operate_type | varchar(50) | NOT NULL | 操作类型(生成/保存/导出) |
| request_json | text | - | 请求参数数据 |
| response_json | text | - | 响应结果数据 |
| operate_status | tinyint | NOT NULL | 状态:0 失败;1 成功 |
| cost_time | double | - | 执行耗时(秒) |
| operator_name | varchar(100) | NOT NULL | 操作人名称 |
| create_time | datetime | NOT NULL | 日志生成时间 |
4.3 表关联关系
- 一对多:
spc_page_template.id→spc_page_schema.template_id(一个模板对应多个 Schema) - 一对多:
spc_page_schema.id→spc_page_code.schema_id(一个 Schema 生成多版代码) - 一对多:
spc_page_schema.id→spc_operation_log.schema_id(一个 Schema 对应多条操作日志)
5. 样板间代码协议(注释规范+转译规则)
5.1 样板间代码注释规范协议
5.1.1 规范目标
为实现代码块与 Schema 的精准映射,便于系统识别关联关系,核心要求如下:所有可映射到 Schema 的代码块,需添加含结构路径、绑定字段名、组件名等核心信息的特定格式注释,确保系统可识别、映射准确。
5.1.2 注释语法规范
根据代码块类型(单行/区块),采用对应简洁统一的注释格式,具体如下:
Case 1: 单行代码注释
// 单行注释:绑定单个表单字段
// @schema-mapping:<路径描述> | <绑定字段>
Case 2: 区块代码注释
// 区块注释
// @schema-block-begin:<路径描述> | <绑定字段>
// ... 代码块 ...
// @schema-block-end:<路径描述>
5.1.3 区块类型(block-type)规范
定义不同页面 UI 区块对应的 block-type,明确其用途及典型组件位置,助力系统识别映射,具体规范如下表:
| Block 类型(block-type) | 用途 | 对应Schema字段路径示例 | 常见组件 |
|---|---|---|---|
table-fields |
表格列配置 | props.columns |
Table, ProTable |
table-filters |
表格搜索/筛选项 | props.searchConfig.items |
ProTable, SearchBar |
form-fields |
表单字段 | props.fields, formProps.fields |
Form, ProForm |
header-info |
页头信息展示 | pageHeaderProps.form.fields |
PageHeader, CardHeader |
actions |
操作按钮区域 | props.actions, toolBarRender |
Button, Dropdown |
section |
页面结构分段(卡片、Panel等) | children[n], tabs[n].content等 |
Card, Panel, Section |
tabs |
多页签区域 | props.tabs.items |
Tabs, ProCard.Tabs |
modal-fields |
弹框内表单字段 | modalProps.fields或modal.content |
Modal, DrawerForm |
table-operations |
表格操作列 | props.columns[].render |
Table, ProTable |
custom-block |
自定义区块 | 按业务场景定义 | 自定义组件 |
5.1.4 注释字段说明
注释核心字段的含义及要求如下,确保信息准确可解析:
| 字段名 | 说明 |
|---|---|
| 路径描述 | 基于componentsTree的 Schema 路径(支持 dotPath,示例:children[0].props.fields[0][1].fields[0]) |
| 绑定字段 | 对应代码中props.name、props.label等核心字段名 |
5.1.5 注释示例
// 表格筛选项区块注释示例
// @schema-block-begin:componentsTree[0].props.searchConfig.items | createTime
{
label: '创建时间',
name: 'createTime',
type: 'rangePicker',
},
// @schema-block-end:componentsTree[0].props.searchConfig.items
5.2 样板间代码约束关系与转译规则协议
5.2.1 转译目标
保障代码转译准确规范、保留业务灵活性,实现:保留样板间核心布局与逻辑,移除 Schema 未提及冗余 UI 元素,允许用户补充默认值、初始值、函数体等个性化配置。
5.2.2 核心转译规则
规则1:映射关系识别
含 @schema- 前缀注释的代码段,即与 Schema 指定路径字段存在映射关系,系统将按注释关联匹配。
单行注释与区块注释示例,参考:“5.1.2 注释语法规范”
识别映射关系后,需根据 block-type 匹配页面区块,参考:“5.1.3 区块类型(block-type)规范”
规则2:结构一致性判断
核心依据 type(组件类型)、name(字段名)、label(标签名)三项字段,三者均与 Schema 一致,则认定结构一致。
规则3:未映射内容删除
为避免冗余,以下代码段直接删除,不参与转译:
- 无
@schema-前缀注释的代码段; name字段在对应 Schema 中不存在的代码段;type(组件类型)未在 Schema 当前节点出现的代码段;- 注释路径描述无效或与 Schema 实际路径不匹配的代码段。
规则4:属性值覆盖
结构与 Schema 一致但部分字段值不同时,按以下规则替换属性值,确保与 Schema 同步:
- 需替换属性(若存在,用 Schema 对应值覆盖内容):
label(标签)、required(必填项)、rules(校验规则)、initialValues(初始值)、onSubmit(提交事件); - 样板代码有某字段但 Schema 未提及的,保留样板原始值。
规则5:样板结构优先
转译优先保留样板间代码原有结构,不重组顺序、不调整分组,即使 Schema 字段顺序、嵌套位置与样板不同,仍保留样板结构,仅替换字段值。
规则6:业务逻辑保留
完整保留工程基础结构(import导入、export default导出、函数组件定义、页面layout及样式容器)。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)