Appearance
数据协议规则文档 
基础概念 
页面结构的 JSON 格式,称为 FormJSON,用于描述创建页面的整体结构,包含样式。
数据结构的 JSON 格式,称为 SchemaJSON,是 FormJSON 的简版,用于描述数据库以及字段的相关格式,验证规则,关联关系,个性化配置等信息。
总体流程:
用户前端拖拉拽创建数据表单形成 FormJSON->调用 Schema 服务->转成 SchemaJSON->调用表结构服务->生成实际的数据库表
FormJSON 结构 
结构示例 
json
{
  "list": [
    {
      "name": "标题",
      "type": "title",
      "icon": "icon-input",
      "options": {
        "width": "",
        "defaultValue": "",
        "required": false,
        "requiredMessage": "",
        "dataType": "",
        "dataTypeCheck": false,
        "dataTypeMessage": "",
        "pattern": "",
        "patternCheck": false,
        "patternMessage": "",
        "validatorCheck": false,
        "validator": "",
        "placeholder": "",
        "customClass": "",
        "disabled": false,
        "labelWidth": 100,
        "isLabelWidth": false,
        "hidden": false,
        "dataBind": true,
        "showPassword": false,
        "clearable": false,
        "maxlength": "",
        "showWordLimit": false,
        "customProps": {},
        "tip": "",
        "alignRight": false,
        "remoteFunc": "func_m4ix31rj",
        "remoteOption": "option_m4ix31rj",
        "tableColumn": false,
        "subform": false,
        "isDynamicValue": false,
        "dynamicValueType": "datasource"
      },
      "events": {
        "onChange": "",
        "onFocus": "",
        "onBlur": ""
      },
      "key": "m4ix31rj",
      "model": "title_m4ix31rj",
      "rules": []
    }
  ],
  "config": {
    "labelWidth": 100,
    "labelPosition": "right",
    "size": "small",
    "customClass": "",
    "ui": "element",
    "layout": "horizontal",
    "width": "100%",
    "hideLabel": false,
    "hideErrorMessage": false,
    "platform": "pc",
    "eventScript": []
  }
}FormJSON 包含两大块,
1、组件列表,list 。
list 中包含 0 到多个组件属性的描述。
2、表单属性 config。
config 中包含表单属性的描述。
组件属性 
| 属性 | 类型 | 描述 | 
|---|---|---|
| name | String | 标题 | 
| type | String | 组件的类型 | 
| icon | String | 组件相关的图标 | 
| options | Object | 该组件的具体配置选项 | 
| events | Object | 对于该组件事件的处理规则 | 
| key | String | 唯一标识 | 
| model | String | 组件类型_key | 
| rules | Object | 验证规则,用于规定该组件输入数据的校验条件 | 
组件 options 属性 
| 属性 | 类型 | 描述 | 
|---|---|---|
| width | String | 组件的宽度 | 
| defaultValue | String | 默认值 | 
| required | Boolean | 是否必填 | 
| requiredMessage | String | 当组件为必填时,自定义出错提示 | 
| dataType | String | 数据类型,url、email 等 | 
| dataTypeMessage | String | 数据类型校验失败后的提示 | 
| pattern | String | 用于输入验证的正则表达式模式 | 
| patternMessage | String | 正则校验出错时的提示 | 
| validatorCheck | Boolean | 是否自定义校验规则 | 
| validator | String | 自定义校验规则 | 
| placeholder | String | 占位符 | 
| customClass | String | 自定义类 | 
| disabled | Boolean | 是否显示 | 
| labelWidth | int | 标签宽度 | 
| isLabelWidth | Boolean | 是否显示标签 | 
| hidden | Boolean | 是否隐藏 | 
| dataBind | Boolean | 是否绑定数据 | 
| showPassword | Boolean | 是否为密码框 | 
| clearable | Boolean | 是否显示清楚按钮 | 
| maxlength | int | 最大长度 | 
| showWordLimit | Boolean | |
| customProps | Object | |
| tip | String | 提示说明文字 | 
| alignRight | Boolean | |
| remoteFunc | String | |
| remoteOption | String | |
| tableColumn | Boolean | |
| subform | Boolean | |
| isDynamicValue | Boolean | |
| dynamicValueType | String | 
表单属性 
| 属性 | 类型 | 描述 | 
|---|---|---|
| labelWidth | int | 标签宽度 | 
| labelPosition | string | 标签对齐方式 left right top | 
| size | string | 组件尺寸 large default small | 
| customClass | 自定义样式的 key | |
| ui | ||
| layout | ||
| width | ||
| hideLabel | ||
| hideErrorMessage | ||
| platform | ||
| eventScript | 
SchemaJSON 结构 
结构示例 
json
{
  "bsonType": "object",
  "persistField": true,
  "properties": {
    "id": {
      "bsonType": "bigint",
      "description": "主键ID",
      "idType": 3,
      "isRequired": true,
      "key": "7y37biq3",
      "name": "id",
      "persistField": true,
      "primaryKey": true,
      "title": "主键ID",
      "type": "number"
    },
    "input_usmzqxkg": {
      "bsonType": "string",
      "defaultValue": "",
      "description": "单行文本",
      "errorMessage": {
        "required": ""
      },
      "isRequired": false,
      "key": "usmzqxkg",
      "name": "input_usmzqxkg",
      "persistField": true,
      "title": "单行文本",
      "type": "string"
    },
    "create_user": {
      "bsonType": "bigint",
      "description": "创建人",
      "enum": {
        "collection": "blade_user",
        "field": "id as value, real_name as text"
      },
      "forceDefaultValue": {
        "$env": "uid",
        "update": false
      },
      "foreignKey": "blade_user.id",
      "key": "56jzmrh5",
      "name": "create_user",
      "persistField": true,
      "title": "创建人",
      "type": "number"
    },
    "create_dept": {
      "bsonType": "bigint",
      "description": "创建部门",
      "enum": {
        "collection": "blade_user",
        "field": "id as value, real_name as text"
      },
      "forceDefaultValue": {
        "$env": "did",
        "update": false
      },
      "foreignKey": "blade_dept.id",
      "key": "0sgbkln8",
      "name": "create_dept",
      "persistField": true,
      "title": "创建部门",
      "type": "number"
    },
    "create_time": {
      "bsonType": "date",
      "description": "创建时间",
      "forceDefaultValue": {
        "$env": "now",
        "update": false
      },
      "format": "date",
      "key": "pxjduric",
      "name": "create_time",
      "persistField": true,
      "title": "创建时间",
      "type": "string"
    },
    "update_user": {
      "bsonType": "bigint",
      "description": "更新人",
      "enum": {
        "collection": "blade_user",
        "field": "id as value, real_name as text"
      },
      "forceDefaultValue": {
        "$env": "uid"
      },
      "foreignKey": "blade_user.id",
      "key": "fpjyd6kb",
      "name": "update_user",
      "persistField": true,
      "title": "更新人",
      "type": "number"
    },
    "update_time": {
      "bsonType": "date",
      "description": "修改时间",
      "forceDefaultValue": {
        "$env": "now",
        "update": true
      },
      "format": "date",
      "key": "t11huk7x",
      "name": "update_time",
      "persistField": true,
      "title": "修改时间",
      "type": "string"
    },
    "is_deleted": {
      "bsonType": "int",
      "defaultValue": 0,
      "description": "删除状态",
      "forceDefaultValue": 0,
      "key": "jnfrlvv8",
      "name": "is_deleted",
      "persistField": true,
      "systemKey": true,
      "title": "删除状态",
      "type": "integer"
    },
    "tenant_id": {
      "bsonType": "string",
      "description": "租户Id",
      "forceDefaultValue": {
        "$env": "tid",
        "update": false
      },
      "key": "qjguwboi",
      "name": "tenant_id",
      "persistField": true,
      "systemKey": true,
      "title": "租户Id",
      "type": "string"
    }
  },
  "type": "object"
}BsonType 与 Type 
| BsonType 类型 | type(JsonType 用于字段验证) | 描述 | 
|---|---|---|
| bool | boolean | 布尔值 | 
| string | string | 字符串 | 
| password | string | 密码 | 
| int | integer | 整数 | 
| double | number | 小数 | 
| object | object | 对象 | 
| file | object | 文件对象 | 
| array | array | 数组 | 
| timestamp | integer | 时间戳 | 
| date | date | 日期 | 
| time | string | 时间 | 
| objectId | string | Mongodb 主键类型 | 
| bigint | number | 长整数 | 
结构框架 
| 属性 | 类型 | 描述 | 
|---|---|---|
| bsonType | String | 默认为 object | 
| persistField | Boolean | 是否持久化 | 
| properties | Object | 具体配置项 | 
| type | String | 默认为 object | 
| required | 
Properties 中的字段结构 
| 属性 | 类型 | 描述 | 
|---|---|---|
| key1 | String | 前端组件唯一标识 | 
| title | String | 字段中文名 | 
| name | String | 字段英文名 | 
| bsonType | String | 数据类型 | 
| arrayType | String | 当bsonType是array时,array中的bsonType | 
| type | String | Json Scheam类型,用于数据格式验证 | 
| primaryKey | Boolean | 是否是数据库主键 | 
| titleKey | Boolean | 是否是标题字段(标题组件,会自动设置titleKey为true) | 
| systemKey | Boolean | 是否是系统生成字段,如ID,创建人,更新人等字段为true | 
| uniqueKey | Boolean | 唯一不能重复 | 
| historyKey | Boolean | 记录修改历史字段 | 
| encryptedKey | Boolean | 加密字段 | 
| encryptionAlgorithm | String | 加密算法 | 
| immutableKey | Boolean | 新增后不可变字段 | 
| persistField | Boolean | 是否持久化,为true时,应对数据库中某张表的一列 | 
| showType | String | 显示类型,当是时间组件的时候,存放 | 
| defaultValue | String | 默认值 | 
| forceDefaultValue | String | 强制默认值,不可通过DB命令的代码修改,常用于存放用户id、时间、客户端ip等固定值 | 
| description | String | 描述 | 
| isRequired | Boolean | 是否必须,默认为false | 
| trim | String | 去除空白字符,支持 none|both|start|end,默认none,仅bsonType="string"时有效 | 
| pattern | String | 正则表达式,如设置为手机号的正则表达式后,不符合该正则表达式则校验失败,无法入库 | 
| format | String | 数据格式,不符合格式的数据无法入库。目前只支持'url'和'email',未来会扩展其他格式 | 
| mutiple | Boolean | 是否多选,如果是关联其他表,并且是多选,则会生成和关联表关联的第三方中间表 | 
| validator | String | 自定义JS方法验证 | 
| enum | Object 或 Array | |
| 静态基础类型数据 | Array | "enum": [0,1,2] | 
| 静态字典类型数据 | Array | 例如: "enum": [{ "text": "待同步", "value": "Stay" }, { "text": "同步中", "value": "Have" }, { "text": "已同步", "value": "Already" }] | 
| 表关联关系 | Object | 示例 "enum": { "collection": "su_code_data_sources", "field": "id as value, name as text" } | 
| enumType | String | 字段值枚举类型,可选值tree。设为tree时,代表enum里的数据为树形结构。此时schema2code可生成多级级联选择组件 | 
| junctionTableName | String | 当enum类型是表关联关系时,foreignKey指向关联表的关联字段 | 
| parentKey | String | 如果表结构是树类型时,parentKey指向父子级存储的key | 
| parentSelf | Boolean | parent是自己,自关联 | 
| errorMessage | Object | 自定义错误对象 | 
| required | String | {title}不能为空 | 
| minLength | String | {title}不能小于 {minLength} 个字符 | 
| format | String | 格式不正确提示 | 
| pattern | String | 正则不匹配提示 | 
| fileMediaType | String | 文件类型,bsonType="file" 时有效,可选值 all|image|video 默认值为all,表示所有文件,image表示图片类型文件,video表示视频类型文件 | 
| fileExtName | String | 文件扩展名过滤,bsonType="file" 时有效,多个文件扩展名用 "," 分割,例如: jpg,png | 
| maximum | Number | 如果bsonType为数字时,可接受的最大值 | 
| exclusiveMaximum | Boolean | 是否排除 maximum也就是小于最大值,还是小于等于最大值 | 
| minimum | Number | 如果bsonType为数字时,可接受的最小值 | 
| exclusiveMinimum | Boolean | 是否排除 minimum | 
| minLength | Integer | 限制字符串或数组的最小长度 | 
| maxLength | Integer | 限制字符串或数组的最大长度 | 
| component | Object | 组件对象(用于存储自定义的组件参数,用于个性化业务逻辑) | 
| name | String | 组件名称 | 
| props | JSONObject | 组件的配置字段 | 
| precision | Integer | 精度(小数点后的位数),当bsonTyep是double的时候有效 | 
FormJSON->SchemaJSON映射 
基础属性映射关系:
| FormJSON属性 | SchemaJSON属性 | 描述 | 
|---|---|---|
| name | title | 组件名称 | 
| model | name | 通过FromJSON中组件的model属性,可以在ScheemaJSON中找到同名对象,该对象描述记录了这个组件的SchemaJSON | 
| type | bsonType | 见"type与bsontype映射关系" | 
| key | key | 关键组 | 
| options.defaultValue | defaultValue | 默认值 | 
| options.min | minimum | 最小数值 | 
| options.max | maximum | 最大数值 | 
| options.precision | ++bsonType++ | 已计数器为例,当FormJSON中options.precision等于0时,SchemaJSON 中bsonType为int,options.precision大于0时,SchemaJSON 中bsonType为double | 
| options.rules | errorMessage | 当 FormJSON中rules属性中required值为true时,message值映射到 SchemaJSON properties.[key].errorMessage对象中的required | 
| options.rules.required | isRequired | rules中的required | 
| options.value | parentKey | 当FormJSON,type是tree组件的时,取options.value放入 | 
| options.remoteInnerDataSource+"."+options.props.value | foreignKey | 当设置为动态数据源时,foreignKey的设置公式 | 
| options.pattern | pattern | 正则 | 
| format | ||
| options.validator | validator | |
| options.multiple | multiple | |
FormJSON type与SchemaJSON bsonType/type映射关系
| FormJSON type | SchemaJSON bsonType | SchemaJSON type | 描述 | 
|---|---|---|---|
| input | string | string | 单行文本框 | 
| input | password | string | 密码框。FormJSON中showPassword为true时 | 
| title | string | string | 标题 | 
| textarea | string | string | 多行文本 | 
| number | int/double | number | 计数器 | 
| radio | string | string | 单选框组 | 
| checkbox | array(arrayType: string) | array | 多选框组 | 
| select | string | string | 下拉选择框 | 
| time | time | string | 时间选择器 | 
| date | date | string | 日期选择器 | 
| rate | int | integer | 评分 | 
| color | string | string | 颜色选择器 | 
| switch | int | integer | 开关 | 
| slider | int | integer | 滑块 | 
| text | string | string | 文字 | 
| html | string | string | HTML | 
| link | string | string | 文字链接 | 
| cascader | array | array | 级联选择器 | 
| treeselect | string | string | 树选择 | 
| steps | int | integer | 步骤条 | 
| transfer | array | array | 穿梭框 | 
| fileupload | array(arrayType: file) | array | 文件 | 
| imgupload | array(arrayType: file) | array | 图片 | 
| table | array(arrayType: object) | 无 | 子表单 | 
| subform | array(arrayType: object) | 无 | 子表单+ | 
| group | object | ||
| button | 无 | 无 | 按钮 | 
| segmented | 无 | 无 | 分段器 | 
SchemaJSON->数据库映射 
| SchemaJSON属性 | 数据库属性 | 描述 | 
|---|---|---|
| properties.[key] | COLUMN_NAME | |
| properties.[key].bsonType | DATA_TYPE 见SchemaJSON bsonType 与数据库字段类型映射关系 | |
| properties.[key].defaultValue | COLUMN_DEFAULT | |
| properties.[key].description | COLUMN_COMMENT | |
| properties.[key].errorMessage | 无 | |
| properties.[key].isRequired | 无 | 没有跟数据库IS_NULLABLE关联 | 
| properties.[key].key | 无 | |
| properties.[key].name | 同properties.[key] | |
| properties.[key].persistField | 无 | false 代表无需生成数据库字段 | 
| properties.[key].title | 无 | |
| properties.[key].type | 无 | 
SchemaJSON bsonType 与数据库字段类型映射关系(常规)
| SchemaJSON bsonType | 数据库字段类型及默认值 | 
|---|---|
| string | varchar(255) | 
| int | int | 
| array | varchar(255) | 
| date | timestamp | 
| time | time | 
SchemaJSON bsonType 与数据库字段类型映射关系(特殊)
| FormJSON type | SchemaJSON bsonType | 数据库字段类型 | 
|---|---|---|
| transfer | array | json | 
| fileupload | array(arrayType: file) | json | 
| imgupload | array(arrayType: file) | json | 
| table | array | json | 
| subform | array | json | 
| input | string | maxlength>5000时,数据库字段类型为text,超出text类型最大范围无效; maxlength<=5000时,数据库字段类型为varchar(maxlength) | 
