UNPKG

@delon/form

Version:

Angular form generation based on JSON-Schema.

221 lines (220 loc) 6.25 kB
import type { NzSafeAny } from 'ng-zorro-antd/core/types'; import { SFUISchemaItem } from './ui'; export type SFSchemaDefinition = Record<string, SFSchema>; export interface SFSchemaEnum { [key: string]: NzSafeAny; /** 是否禁用状态 */ disabled?: boolean; /** 文本 */ label?: NzSafeAny; /** 文本 */ title?: NzSafeAny; /** 值 */ value?: NzSafeAny; /** * 主键,适用部分小部件数据键名,例如:`tree-select` */ key?: NzSafeAny; /** 是否选中 */ checked?: boolean; /** * 组名,适用部分允许组列表的小部件,例如:`select` * - 组对应的文本为 `label` * - `children` 为子项 */ group?: boolean; /** * Whether to hide item * * 是否隐藏项 */ hide?: boolean; isLeaf?: boolean; /** 组对应的子类 */ children?: SFSchemaEnum[]; } export type SFSchemaType = 'number' | 'integer' | 'string' | 'boolean' | 'object' | 'array'; export type SFSchemaEnumType = SFSchemaEnum | number | string | boolean; /** * JSON Schema Form 结构体 * * **注意:** 所有结构都以标准为基准,除了 `ui` 属性为非标准单纯只是为了更好的开发 */ export interface SFSchema { [key: string]: NzSafeAny; /** * 数据类型,支持 JavaScript 基础类型;注意项: * * - `integer` 表示整型,`number` 表示浮点型 * - JSON 中 `date` 等同 `string` 类型 * - 指定 `format` 标准参数可以自动适配渲染小部件 * - 指定 `widget` 参数强制渲染小部件 */ type?: SFSchemaType; /** * 枚举,静态数据源,例如:`radio`、`checkbox` 等 * * - `disabled` 属性表示:禁用状态 * - `label` 属性表示:文本 * - `value` 属性表示:返回值 * - 基础数据类型数组会自动转化成 `SFSchemaEnum` 数组格式 */ enum?: SFSchemaEnumType[]; /** * 最小值 */ minimum?: number; /** * 约束是否包括 `minimum` 值 */ exclusiveMinimum?: boolean; /** * 最大值 */ maximum?: number; /** * 约束是否包括 `maximum` 值 */ exclusiveMaximum?: boolean; /** * 倍数 */ multipleOf?: number; /** * 定义字符串的最大长度 */ maxLength?: number; /** * 定义字符串的最小长度 */ minLength?: number; /** * 验证输入字段正则表达式字符串 */ pattern?: string; /** * 数组元素类型描述,只支持数组对象,若需要基础类型数组可通过其他部件支持 * * ```json * items: { * type: 'object', * properties: { * name: { type: 'string' }, * age: { type: 'number' } * } * } * ``` * * 结果 * * ```json * [ * { "name": "cipchk1", "age": 18 }, * { "name": "cipchk2", "age": 16 } * ] * ``` */ items?: SFSchema; /** * 约束数组最小的元素个数 * - `type="array"` 时有效 */ minItems?: number; /** * 约束数组最大的元素个数 * - `type="array"` 时有效 */ maxItems?: number; /** * 约束数组每个元素都不相同 * - `type="array"` 时有效 */ uniqueItems?: boolean; /** * 数组额外元素的校验规则 */ additionalItems?: SFSchema; /** * 最大属性个数,必须是非负整数 */ maxProperties?: number; /** * 最小属性个数,必须是非负整数 */ minProperties?: number; /** * 必填项属性 */ required?: string[]; /** * 定义属性 */ properties?: Record<string, SFSchema>; /** * 条件验证 * - 必须包含 `properties` 节点 * - 键名必须是当前节点 `properties` 值之一 * - 利用 `enum` 属性表示条件值,支持 `$ANY$` 表示任意值 * - 不支持跨 Schema 节点 * - 当条件成功会执行 `then` 否则执行 `else` * - `if`和`then` 是必须同时出现,`else` 可选项 */ if?: SFSchema; /** * 条件成功时执行 * - 只支持 `required` 参数,用于表示显示 */ then?: SFSchema; /** * 条件失败时执行 * - 只支持 `required` 参数,用于表示显示 */ else?: SFSchema; /** **不建议** 使用,可用 `required` 替代 */ allOf?: SFSchema[]; /** **不建议** 使用,可用 `required` 和 `minProperties` 替代 */ anyOf?: SFSchema[]; /** 值必须是其中之一 */ oneOf?: SFSchema[]; /** * 数据格式,[文档](http://json-schema.org/latest/json-schema-validation.html#rfc.section.7.3) * - `date-time` 日期时间,渲染为 `date`,[RFC3339](https://tools.ietf.org/html/rfc3339#section-5.6) * - `date``full-date` 日期,渲染为 `date` * - `time``full-time` 时间,渲染为 `time` * - `email` Email格式,渲染为 `autocomplete` * - 非标准:`week`,渲染为 `nz-week-picker` * - 非标准:`month`,渲染为 `nz-month-picker` * - `ip` IP地址,渲染为 `input` * - `uri` URL地址,渲染为 `upload` * - `mobile` 手机号 * - `id-card` 身份证 * - `color` 颜色值 */ format?: string; /** * 属性描述,相当于 `label` 值,按以下规则展示: * - 当值为 `null``undefined` 时使用 `key` 替代 * - 当值为 `''` 空字符串表示不展示 `label` 部分,例如:`checkbox` 可能需要 */ title?: string | null; /** * 属性目的性解释 */ description?: string; /** * 默认值 */ default?: NzSafeAny; /** * 是否只读状态 */ readOnly?: boolean; /** 内部类型定义体 */ definitions?: SFSchemaDefinition; /** 引用定义体 */ $ref?: string; /** 针对开发者的注释,无任何意义,也不会被校验 */ $comment?: string; /** **唯一非标准:** 指定UI配置信息,优先级高于 `sf` 组件 `ui` 属性值 */ ui?: SFUISchemaItem | string; }