UNPKG

amis-model-design

Version:

amis模型设计器

203 lines (202 loc) 7.47 kB
/** * 场景: * * 1. 获取字段新增列表 * 2. 获取关系新增列表 * 3. 根据字段信息生成配置面板 * 4. 根据关系信息生成配置面板 * 5. 根据字段信息,生成 amis 配置 * 6. 根据字段信息,生成页面配置面板 */ import { ApiBuilder } from '../schema-builder/ApiBuilder'; import { SharedContext } from '../schema-builder/SharedContext'; import { DataSourceItem, ModelItem, FieldItem, FormSchema, FieldType, RelationType, RelationShipItem, DatabaseDialectType, MayBeSchema } from '../type'; import { PluginEventListener } from './Event'; import { Manager } from './Manager'; import type { Strategy } from '../schema-builder/ApiStrategyInterface'; export interface BuildEditDatasourceFormContext { data?: any; } export interface BuildAddModelFormContext { datasource: DataSourceItem; data?: any; } export interface BuildModelFormContext { datasource: DataSourceItem; model: ModelItem; data?: any; } export interface BuildAddRelationFormContext { datasource: DataSourceItem; model: ModelItem; data: Record<string, any>; } export interface BuildModelFormFieldContext { datasource: DataSourceItem; model: ModelItem; field: FieldItem; fieldType: FieldType & { plugin: PluginInterface; }; data?: any; apiStrategy?: Strategy; apiStrategyOptions?: { apiPrefix?: string; /** * 是有生成 model 协议地址,如 model://dsKey.key */ useApiSchema?: boolean; }; } export interface BuildModelFormRelationContext { datasource: DataSourceItem; model: ModelItem; field: FieldItem; relation: RelationShipItem; data?: any; } export interface BuildFieldSchemaContext extends BuildModelFormFieldContext { /** * 给谁构建配置项 * - er 是指模型设计器中的默认配置 * - schema-builder 是指模型页面编辑器 * - amis-editor 是指页面设计器 * - embed 内嵌配置模式,通常只会修改部分属性 * - quick-edit 是字段查看模式的 * - nocode-form 是(零码)表单编辑器 */ settingFor?: 'er' | 'schema-builder' | 'amis-editor' | 'embed' | 'quick-edit' | 'scaffold' | 'nocode-form' | string; /** * 编辑字段的模式,是为了创建,还是为了更新 * 有些字段是只能更新不能创建的 */ mode?: 'create' | 'update' | 'filter' | 'simple-query' | 'view' | 'quick-edit' | string; /** * 展示字段的模式,是表格里面,还是表单里面的展示 */ viewType?: 'table' | 'form' | 'cards' | 'list' | string; relation?: RelationShipItem; relationType?: RelationType & { plugin: PluginInterface; }; /** 关系字段构建时的额外配置项目 */ relationBuildConfig?: { /** 构建Schema时,name字段的前缀,在页面设计器模式下,关系字段配置可能放在对象中 */ schemaNamePrefix?: string; }; sharedContext?: SharedContext; } export type BuildFieldSchemaContextOthers = Omit<Partial<BuildFieldSchemaContext>, 'model' | 'field'>; export interface PluginInterface extends PluginEventListener { readonly manager: Manager; /** * 构建数据库类型 */ registerDatabaseDialectType?: () => DatabaseDialectType | DatabaseDialectType[]; /** * 注册字段类型 */ registerFieldType?: () => FieldType | FieldType[]; /** * 注册关系类型 */ registerRelationType?: () => RelationType | RelationType[]; /** * 构建新增关系表单 */ buildAddRelationForm?: (schema: FormSchema, context: BuildAddRelationFormContext) => void; /** * 构建模型右侧面板表单 */ buildModelForm?: (schema: FormSchema, context: BuildModelFormContext) => void; /** * 构建模型字段右侧面板表单 */ buildModelFieldForm?: (schema: FormSchema, context: BuildModelFormFieldContext) => void | Promise<void>; /** * 构建模型关系右侧面板表单 */ buildModelRelationForm?: (schema: FormSchema, context: BuildModelFormRelationContext) => void | Promise<void>; /** * 构建模型新增表单 */ buildAddModelForm?: (schema: FormSchema, context: BuildAddModelFormContext) => void; /** * 构建数据源新增表单 */ buildEditDatasourceForm?: (schema: FormSchema, context: BuildEditDatasourceFormContext, options: any) => void; /** * 通过当前生成的 schema 猜测字段的配置 * @param schema * @param context * @returns */ guessFieldOptionsFromSchema?: (options: Record<string, any>, context: BuildFieldSchemaContext, schema: any) => any | Promise<any>; /** * 构建字段配置表单,生成配置面板 * @param schema * @param context * @returns */ buildFieldSettingForm?: (schema: FormSchema, context: BuildFieldSchemaContext, options?: any) => void | Promise<void>; /** * 基于字段+配置,构建 amis schema * @param schema * @param context * @param options * @param ab * @returns */ buildFieldSchema?: (schema: MayBeSchema, context: BuildFieldSchemaContext, options: { label?: string; quickEdit?: boolean; filterable?: boolean; [propName: string]: any; }, ab?: ApiBuilder, originSchema?: any) => void | Promise<void>; /** * 构建字段查看模式可配置的属性配置面板表单 */ buildFieldViewSettingForm?: (schema: FormSchema, context: BuildFieldSchemaContext) => void | Promise<void>; /** * 构建字段查看形态的 amis schema */ buildFieldViewSchema?: (schema: MayBeSchema, context: BuildFieldSchemaContext, options: { label?: string; quickEdit?: boolean; filterable?: boolean; [propName: string]: any; }, ab?: ApiBuilder) => void | Promise<void>; /** * 构建字段编辑模式可配置的属性配置面板表单 */ buildFieldEditSettingForm?: (schema: FormSchema, context: BuildFieldSchemaContext) => void | Promise<void>; /** * 构建字段编辑形态的 amis schema */ buildFieldEditSchema?: (schema: MayBeSchema, context: BuildFieldSchemaContext, options: { label?: string; isStatic?: boolean; [propName: string]: any; }, ab?: ApiBuilder) => void | Promise<void>; /** * 构建字段作为查询字段时可配置的属性配置面板表单 */ buildFieldFilterSettingForm?: (schema: FormSchema, context: BuildFieldSchemaContext) => void | Promise<void>; /** * 构建字段作为查询条件时用什么schema */ buildFieldFilterSchema?: (schema: MayBeSchema, context: BuildFieldSchemaContext, options: { label?: string; searchOp?: 'eq' | 'ne' | 'gt' | 'ge' | 'lt' | 'le' | 'like' | 'sw' | 'ew' | 'bt' | 'in'; [propName: string]: any; }, ab?: ApiBuilder) => void | Promise<void>; /** * 用来构建复杂查询条件中字段具体的配置。 * 配合前端 condition-builder 一起使用 * * 参考:http://aisuda.baidu-int.com/amis/zh-CN/components/form/condition-builder */ buildFieldConditionFieldConfig?: (schema: MayBeSchema, context: BuildModelFormFieldContext) => Promise<any>; buildFXVariables?: (vairables: Array<any>) => Promise<void>; dispose?: () => void; }