amis-model-design
Version:
amis模型设计器
203 lines (202 loc) • 7.47 kB
TypeScript
/**
* 场景:
*
* 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;
}