/** * 实体定义 * * https://ithinkdt.feishu.cn/docx/FAWQdqk9QolfnnxgUZ8cc0Zznkd#HYGBddKL2on87GxnEXKcEtoLntd */ export interface Entity { id: string /** * 实体名称 * - 字符 长度64 * - 显示名称 */ entityName: string entityNameLocale: { [key: string]: string | undefined } /** * 表名 * - 字符 长度64 不可编辑 只能包含字母、数字、下划线,且不能以数字开头 * - 数据库中的表名 */ tableName: string /** * 数据表名,系统生成 */ modelName: string /** * 所属应用 */ appCode: string /** * 描述 * - 多行字符 长度255 */ remark?: string /** * 标题字段 * - 选择 长度64 默认第一个字段 * - 比如显示在模型被关联时的下拉框中 */ titleField: string /** * 标题模板 * - 字符 长度255 * - 功能和标题字段一样,如果设置优先使用这个,如:`{{id}} {{字段名}}` */ titleTemplate?: string /** * 逻辑删除 * - 布尔 不可编辑 默认非逻辑删除 * - 使用标记删除而不是物理删除,方便找回数据 */ logicDelete?: boolean /** * 包含系统字段 * - 布尔 不可编辑 默认包含 * - 创建人、创建时间、更新人、更新时间 */ baseFieldInclude?: boolean /** * 包含的字段 */ fields: EntityField[] /** * 定义的索引 */ indexes: EntityIndex[] /** * 具有的实体关系 */ relations: EntityRel[] /** * 设计信息 */ diagramInfo: { x: number y: number } } /** * 实体索引定义 */ export interface EntityIndex { /** * 索引名称 */ indexName: string /** * 字段 * - 从已创建的字段中选择一个或多个 */ columns: string[] /** * 是否唯一 */ unique?: boolean } /** * 实体字段类型 * * https://ithinkdt.feishu.cn/docx/FAWQdqk9QolfnnxgUZ8cc0Zznkd#ZPPedZrY4o8lIjxAbVLcSv2gn4g */ export declare enum EntityFieldType { ID = 'id', /** * 用来存储小段文本信息,比如:名称、邮箱、网址、身份证号等等 */ TEXT = 'text', /** * 用来存储大段的描述性的文本信息,长度限制为512个字符 */ TEXT_LONG = 'textarea', /** * 用来存储大片文本图片信息,长度不限,可以用来存储文章内容 */ TEXT_RICH = 'rich-text', /** * 用来存储整型数据,比如: 年龄、长度、距离等等 */ INTEGER = 'int', /** * 用来存储带小数点的数字,比如:经度、纬度等等 */ DECIMAL = 'float', /** * 用来存储密码文本 */ PASSWD = 'passwd', /** * 用来存储文件,一般用于用户上传。 */ ATTACHMENT = 'attachment', /** * 用来存储是与否 */ BOOLEAN = 'boolean', /** * 用来存储日期,包含年、月、日 */ DATE = 'date', /** * 用来存储时间,包含年、月、日、时、分、秒 */ DATETIME = 'datetime', /** * 用来存储时间,包含时、分、秒 */ TIME = 'time', /** * 用来存储固定的几个值,如状态 */ ENUM = 'enum', /** * 用来存储金额类型字段,单位为"分" */ MONEY = 'money', /** * 系统自动生成字段,根据预设规则生成流水号信息 */ SN = 'serial-number', /** * 可用来存储人员信息,与平台用户表关联 */ USER = 'user', /** * 用来存储数据所属部门信息,可用于权限设置 */ DEPT = 'department', /** * 关联字段 */ REL = 'relation', } /** * 实体字段定义 * * https://ithinkdt.feishu.cn/docx/FAWQdqk9QolfnnxgUZ8cc0Zznkd#Rny0dZKgZosvhOxGhukcGOLsnOg */ export interface EntityField { /** * 名称 * - 选择 长度64 * - 显示的名称 */ name: string nameLocale: { [key: string]: string | undefined } /** * 字段名 * - 字符 长度64 只能包含字母、数字、下划线,且不能以数字开头 * - 显示名称 */ key: string /** * 描述 * - 多行字符 长度255 */ remark?: string /** * 字段类型 * - 字典 长度16 不可编辑 */ type: EntityFieldType /** * 允许空值 * - 布尔 * - 数据库中是否允许空值 */ nullable?: boolean /** * 唯一 */ unique?: boolean /** * 默认值 * * https://ithinkdt.feishu.cn/docx/FAWQdqk9QolfnnxgUZ8cc0Zznkd#ZPPedZrY4o8lIjxAbVLcSv2gn4g * - 类型、长度由字段类型不同而不同 */ defaultValue?: string | number | boolean /** * 用户输入提示 */ comment?: string commentLocale: { [key: string]: string | undefined } /** * 主键 */ primaryField?: boolean /** * 自增 */ autoIncrement?: boolean /** * 数据库长度 */ length?: number /** * 最大长度 */ maxLength?: number /** * 最小长度 */ minLength?: number /** * 正则校验 */ regular?: string /** * 校验提示 */ validateMessage?: string validateMessageLocale: { [key: string]: string | undefined } /** * 格式(文本) */ format?: string /** * 最大值 */ maximum?: number /** * 最小值 */ minimum?: number /** * 小数类型 */ numberType?: 'number' | 'float' | 'dobule' /** * 精度 */ percision?: number /** * 小数位数 */ scale?: number /** * 允许的格式(附件) */ accept?: string /** * 附件大小限制(MB) */ maxsize?: number /** * 附件数量限制 */ max?: number /** * 是否图片附件 */ isImage?: boolean /** * 字典类型(枚举) */ dictType?: string /** * 多选(枚举) */ multiple?: boolean /** * 币种 */ currency?: string /** * 流水号规则 */ snRule?: string /** * 是否多选(人员、部门) */ multiSelect?: boolean /** * 默认值为系统时间 */ defaultValueSystem?: boolean /** * 流水号规则ID */ ruleId?: string /** * 是否关系字段 */ relationField?: boolean /** * 关联ID */ relationId?: string relationEntityModel?: string relationEntityName?: string relationEntityTable?: string renderTemplate?: string renderField?: string bindField?: string } /** * 关系类型 * * https://ithinkdt.feishu.cn/docx/FAWQdqk9QolfnnxgUZ8cc0Zznkd#Fv25dCDbpo1ZOIxRVDccYLKNnpg * * - 一对一:当前实体一条数据仅对应目标实体一条数据。比如【用户】与 【资料】之间的关系。关系字段将创建在当前模型上。 * - 一对多:当前实体一条数据对应目标实体多条数据,可以理解为拥有关系,比如【作者】拥有很多【文章】。关系字段将在目标实体中创建。 * - 多对一:当前实体多条数据对应目标实体一条数据,可以理解为属于关系,比如多篇【文章】属于同一个【作者】。关系字段将在当前实体中创建。 * - 多对多:当前实体一条数据可以对应多条目标实体数据,同时目标实体一条数据也可以对应多条当前实体数据。比如【文章】和【标签】之间的关系,一篇文章可以有多个标签、同时一个标签可以关联多篇文章。 */ export interface RelType { ONE_ONE: '1:1' ONE_MANY: '1:n' MANY_ONE: 'n:1' MANY_MANY: 'n:n' } export declare const RelType: RelType /** * 实体关联 * * https://ithinkdt.feishu.cn/docx/FAWQdqk9QolfnnxgUZ8cc0Zznkd#I7KxdbZ2voMvOFxuuTAcatRNnFf */ export interface EntityRelBase { /** * 关系 key */ relationKey: string /** * 关系类型 * - 不可编辑 */ relationMode: RelType[keyof RelType] /** * 描述 * - 长度255 */ remark?: string /** * 目标实体 */ targetEntityId: string targetEntity: string targetEntityName: string } export interface EntityRel1to1 extends EntityRelBase { relationMode: RelType['ONE_ONE'] /** * 外键字段 */ relationFieldKey: string /** * 外键字段名 */ relationFieldName: string /** * 目标键 */ targetFieldKey: string /** * 目标键名 */ targetFieldName: string /** * 允许空值 */ nullable: boolean /** * 级联删除 */ deleteCascade: boolean } export interface EntityRelNto1 extends EntityRelBase { relationMode: RelType['MANY_ONE'] /** * 外键字段 */ relationFieldKey: string /** * 外键字段名 */ relationFieldName: string /** * 目标键 */ targetFieldKey: string /** * 目标键名 */ targetFieldName: string /** * 允许空值 */ nullable: boolean } export interface EntityRel1toN extends EntityRelBase { relationMode: RelType['ONE_MANY'] /** * 外键字段 */ relationFieldKey: string /** * 外键字段名 */ relationFieldName: string /** * 目标键 */ targetFieldKey: string /** * 目标键名 */ targetFieldName: string /** * 级联删除 */ deleteCascade: boolean /** * 反向关系 */ inverseSide?: string } export interface EntityRelNtoN extends EntityRelBase { relationMode: RelType['MANY_MANY'] /** * 中间表实体名称 */ relationEntityName: string /** * 中间表名 */ relationTableName: string /** * 关联本身字段名 */ relationFieldName: string /** * 关联目标字段名 */ relationTargetFieldName: string /** * 可自定义属性 */ customAttribute: boolean /** * 允许空值 */ nullable: boolean /** * 级联删除 */ deleteCascade: boolean } export type EntityRel = EntityRel1to1 | EntityRel1toN | EntityRelNto1 export declare const patternMap: Record