本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文介绍自定义组件依赖的平台API。
ComponentApi
通用的API接口。
获取方式
通过代码模块导入获取。
示例:
import api from './api';
if(api.isPreview()) {
//
} else {
//
}
通过脚手架创建的自定义组件项目,自带 src/api 目录。
isPreview
判断当前运行环境。
定义:
interface ComponentApi
isPreview: () => boolean;
}
返回值:boolean,true表示是运行时(搭建的应用在实际运行),false表示是设计时(平台用户正在搭建应用,组件渲染是为了预览效果)。
getTopNavItems
获取一级导航菜单。
定义:
interface ComponentApi
getTopNavItems: () => NavItem[];
}
返回值:一级导航项列表。
NavItem定义参见NavItem。
getCurrentNavItem
获取当前页面对应的导航项。
定义:
interface ComponentApi
getCurrentNavItem: () => NavItem;
}
返回值:当前导航项对象。
NavItem定义参见NavItem。
getNavPathTo
根据导航项获取从一级导航到此导航路径上的所有导航项。
定义:
interface ComponentApi
getNavPathTo: (navItem: NavItem) => NavItem[];
}
参数:
字段 | 类型 | 含义 | 备注 |
navItem | NavItem | 当前导航项 |
返回值:一级导航到当前导航的导航项列表。
NavItem定义参见NavItem。
onNavChange
设计时注册监听导航菜单更新的回调函数。
定义:
interface ComponentApi
onNavChange: (fn: () => void) => void;
}
参数:
字段 | 类型 | 含义 | 备注 |
fn | Function | 导航菜单更新回调函数 |
返回值:无。
offNavChange
设计时移除监听导航菜单更新的回调函数。
定义:
interface ComponentApi
offNavChange: (fn: () => void) => void;
}
参数:
字段 | 类型 | 含义 | 备注 |
fn | Function | 需要移除监听的回调函数 |
返回值:无。
openPage
打开指定页面。
定义:
interface ComponentApi
openPage: (
page?: Page,
params?: {
contextData?: EntityObject;
closeCallback?: (params?: any) => void;
},
) => void;
}
参数:
字段 | 类型 | 含义 | 备注 |
page | Page | 页面对象 | |
params | Object | 额外参数 | 额外参数包括页面上下文对象和当前页面关闭后的回调函数。 |
返回值:无。
EntityObject定义请参见EntityObject。
closePage
关闭当前页面。
定义:
interface ComponentApi
closePage: (options?: { callbackParams?: any }) => void;
}
参数:
字段 | 类型 | 含义 | 备注 |
callbackParams | any | 关闭后的回调参数 |
返回值:无。
uploadFile
文件上传API。
定义:
interface ComponentApi
uploadFile: (
file: File,
option?: {
onProgress: (progress: number) => void;
type: FILE_VALUE_TYPE;
},
) => Promise<FileValue>;
}
参数:
字段 | 类型 | 含义 | 备注 |
file | File | 上传的原始文件 | |
option | Object | 额外参数; | onProgress:上传进度回到; type:上传文件类型; |
返回值:上传的文件对象。
FileValue定义请参见FileValue。
createFileValue
通过文件信息创建文件对象。
定义:
interface ComponentApi
createFileValue: (options: { url: string; name: string; type: FILE_VALUE_TYPE }) => FileValue;
}
参数:
字段 | 类型 | 含义 | 备注 |
options | Object | 文件信息 |
|
返回值:文件对象。
FileValue定义请参见FileValue。
hasPermission
判断当前用户是否有权限访问页面。
定义:
interface ComponentApi
hasPermission: (page: Page) => boolean;
}
参数:
字段 | 类型 | 含义 | 备注 |
page | Page | 页面对象 |
返回值:boolean类型,true为有权限,false为没有权限。
onSchemaChange
设计时注册监听页面搭建变更的回调函数。
定义:
interface ComponentApi
onSchemaChange: (fn: () => void) => void;
}
参数:
字段 | 类型 | 含义 | 备注 |
fn | Function | 回调函数 |
返回值:无。
offSchemaChange
设计时移除监听页面搭建变更的回调函数。
定义:
interface ComponentApi
offSchemaChange: (fn: () => void) => void;
}
参数:
字段 | 类型 | 含义 | 备注 |
fn | Function | 回调函数 |
返回值:无。
getSelected
设计时获取当前选中的组件节点对象。
定义:
interface ComponentApi
getSelected: () => Node;
}
返回值:组件节点对象。
Node定义请参见Node。
select
设计时选中某个组件节点。
定义:
interface ComponentApi
select: (node: Node | undefined) => void;
}
参数:
字段 | 类型 | 含义 | 备注 |
node | Node | 组件节点对象 |
返回值:无。
Node定义请参见Node。
getNodeById
设计时根据组件节点ID获取组件节点对象。
定义:
interface ComponentApi
getNodeById: (id: string) => Node | undefined;
}
参数:
字段 | 类型 | 含义 | 备注 |
id | string | 组件节点ID |
返回值:无。
Node定义请参见Node。
getNodeId
设计时根据React节点对象获取组件节点ID。
定义:
interface ComponentApi
getNodeId: (reactNode: any) => string | undefined;
}
参数:
字段 | 类型 | 含义 | 备注 |
reactNode | any | React节点对象 |
返回值:string,组件节点ID。
isFileValue
判断属性值是否为文件类型。
定义:
interface ComponentApi
isFileValue: (value: any) => value is FileValue;
}
参数:
字段 | 类型 | 含义 | 备注 |
value | any | 属性值 |
返回值:boolean,true为是;false为否。
FileValue定义请参见FileValue。
isEnumValue
判断属性值是否为枚举类型。
定义:
interface ComponentApi
isEnumValue: (value: any) => value is EnumValue;
}
参数:
字段 | 类型 | 含义 | 备注 |
value | any | 属性值 |
返回值:boolean,true为是;false为否。
EnumValue定义请参见EnumValue。
isValue
判断属性值是否为VALUE类型;
定义:
interface ComponentApi
isValue: (value: any) => value is VALUE;
}
参数:
字段 | 类型 | 含义 | 备注 |
value | any | 属性值 |
返回值:boolean,true为是;false为否。
VALUE定义请VALUE。
isAttrMeta
判断属性值是否为字段。
定义:
interface ComponentApi
isAttrMeta: (value: any) => value is AttrMeta;
}
参数:
字段 | 类型 | 含义 | 备注 |
value | any | 属性值 |
返回值:boolean,true为是;false为否。
AttrMeta定义请参见AttrMeta。
isTemplateMeta
判断属性值是否为模板字符串。
定义:
interface ComponentApi
isTemplateMeta: (value: any) => value is TemplateMeta;
}
参数:
字段 | 类型 | 含义 | 备注 |
value | any | 属性值 |
返回值:boolean,true为是;false为否。
TemplateMeta定义请参见TemplateMeta。
isContextDataMeta
判断属性值是否使用了上下文数据。
定义:
interface ComponentApi
isContextDataMeta: (value: any) => value is contextDataMeta;
}
参数:
字段 | 类型 | 含义 | 备注 |
value | any | 属性值 |
返回值:boolean,true为是;false为否。
contextDataMeta定义请参见contextDataMeta。
convertDataSourceMeta
将数据源模型数据转换为数据源属性对象。
定义:
interface ComponentApi
convertDataSourceMeta: (schemaData: DataSourceSchemaData) => DataSourceMeta | undefined;
}
参数:
字段 | 类型 | 含义 | 备注 |
schemaData | DataSourceSchemaData | 数据源模型数据 |
返回值:DataSourceMeta,数据源属性对象。
DataSourceMeta定义请参见DataSourceMeta。
convertActionMeta
将事件模型数据转换为事件属性对象。
定义:
interface ComponentApi
convertActionMeta: (schemaData: PageEventSchemaData) => ActionMeta;
}
参数:
字段 | 类型 | 含义 | 备注 |
schemaData | PageEventSchemaData | 事件模型数据 |
返回值:ActionMeta,事件属性对象。
ActionMeta定义请参见ActionMeta。
convertAttrMeta
将字段模型数据转换为字段对象。
定义:
interface ComponentApi
convertAttrMeta: ((schemaData: EntityAttrSchemaData) => AttrMeta | undefined) &
((attrId: string, entityId: string) => AttrMeta | undefined);
}
参数:
字段 | 类型 | 含义 | 备注 |
schemaData | EntityAttrSchemaData | 实体字段模型数据 |
返回值:AttrMeta,字段对象。
AttrMeta定义请参见AttrMeta。
convertMultiAttrMeta
将字段模型数组转换为字段数组;允许包装字段。
定义:
interface ComponentApi
convertMultiAttrMeta: <PackKey extends string, Config>(
propValue: PackMultiAttrSchemaDataWith<PackKey, Config> | MultiAttrSchemaDataWith<Config>,
) => MultiAttrMetaWith<Config> | PackMultiAttrMetaWith<PackKey, Config>;
}
参数:
字段 | 类型 | 含义 | 备注 |
propValue | PackMultiAttrSchemaDataWith<PackKey, Config> | MultiAttrSchemaDataWith<Config> | 实体模型数据数组或者带包装字段的实体模型数据数组 |
返回值:MultiAttrMetaWith<Config> | PackMultiAttrMetaWith<PackKey, Config>,包装后的字段数组;
MultiAttrMetaWith定义请参见MultiAttrMetaWith;
PackMultiAttrMetaWith定义请参见PackMultiAttrMetaWith;
convertValue
将静态模型数据转换为值对象。
定义:
interface ComponentApi
convertValue: (propValue: StaticValueSchemaData) => VALUE;
}
参数:
字段 | 类型 | 含义 | 备注 |
propValue | StaticValueSchemaData | 静态模型数据 |
返回值:VALUE,值对象。
VALUE定义请参见VALUE。
convertTemplate
将模板字符串模型数据转换为模板对象。
定义:
interface ComponentApi
convertTemplate: (propValue: TemplateSchemaData) => TemplateMeta;
}
参数:
字段 | 类型 | 含义 | 备注 |
propValue | TemplateSchemaData | 模板字符串模型数据 |
返回值:TemplateMeta,模板对象。
TemplateMeta定义请参见TemplateMeta。
convertAssociationMeta
将关联ID转换为关联对象。
定义:
interface ComponentApi
convertAssociationMeta: (associationId: string) => AssociationMeta;
}
参数:
字段 | 类型 | 含义 | 备注 |
associationId | string | 关联ID |
返回值:AssociationMeta,关联对象。
AssociationMeta定义请参见AssociationMeta。
convertSize
将尺寸模型数据转换为大小对象。
定义:
interface ComponentApi
convertSize: (propValue: SizeSchemaData) => Size;
}
参数:
字段 | 类型 | 含义 | 备注 |
propValue | SizeSchemaData | 尺寸模型数据 |
返回值:Size,样式大小对象。
Size定义请参见Size。
convertFileValue
将文件模型数据转换为文件对象。
定义:
interface ComponentApi
convertFileValue: (propValue: ResourceFileSchemaData) => FileValue;
}
参数:
字段 | 类型 | 含义 | 备注 |
propValue | ResourceFileSchemaData | 文件模型数据 |
返回值:FileValue,属性文件对象。
FileValue定义请参见FileValue。
convertIcon
将图标模型数据转换为图标对象。
定义:
interface ComponentApi
convertIcon: (propValue: IconSchemaData) => IconMeta;
}
参数:
字段 | 类型 | 含义 | 备注 |
propValue | IconSchemaData | 图标模型数据 |
返回值:IconMeta,属性图标对象。
IconMeta定义请参见IconMeta。
createMobiComponent
将React组件转换为魔笔组件。内部组件使用,用于接收数据上下文,注入PageContext API,实现数据驱动。
定义:
interface ComponentApi
createMobiComponent<T extends IReactComponent>(name: string, component: T): T;
}
参数:
字段 | 类型 | 含义 | 备注 |
name | string | 组件名称 | |
component | IReactComponent | React组件 |
返回值:IReactComponent,React组件;参见IReactComponent。
getEnumsById
根据枚举类型ID获取枚举列表。
定义:
interface ComponentApi
getEnumsById: (enumTypeId: string) => EnumValue[];
}
参数:
字段 | 类型 | 含义 | 备注 |
enumTypeId | string | 枚举类型ID |
返回值:EnumValue[],枚举列表。
EnumValue定义请参见EnumValue。
isChildrenEmpty
判断当前组件是否没有子元素。
定义:
interface ComponentApi
isChildrenEmpty: (props: { children?: React.ReactNode | undefined }) => boolean;
}
参数:
字段 | 类型 | 含义 | 备注 |
props | { children?: React.ReactNode | undefined } | 组件Props参数 |
返回值:boolean,true为没有,false为有。
isEqual
对比两个值是否一样。
定义:
interface ComponentApi
isEqual: (left: VALUE | AttrMeta, right: VALUE | AttrMeta) => boolean;
}
参数:
字段 | 类型 | 含义 | 备注 |
left | VALUE | AttrMeta | 对象1 | |
right | VALUE | AttrMeta | 对象2 |
返回值:boolean,true为一样;false为不一样。
VALUE定义请参见VALUE。
AttrMeta定义请参见AttrMeta。
formatForDesignTips
给展示的数据添加统一占位符。
定义:
interface ComponentApi
formatForDesignTips: (value: any) => string;
}
参数:
字段 | 类型 | 含义 | 备注 |
value | any | 展示数据 |
返回值:string,包装后的内容。
formatValue
格式化值,主要目的是把时间对象、枚举对象和文件对象, 转化为使用的字符串、数字、布尔;
定义:
interface ComponentApi
formatValue: (value: VALUE, label?: boolean) => string | number | boolean;
}
参数:
字段 | 类型 | 含义 | 备注 |
value | VALUE | 格式化内容 | |
label | boolean | 是否格式化为标签。 |
返回值:string | number | boolean,格式化后的内容;
VALUE定义请参见VALUE。
formatDate
格式化 DATETIME 类型的数据,方便不同的组件的展示形式保持一致。
格式为 YYYY-MM-DD HH:mm:ss。
定义:
interface ComponentApi
formatDate: (date: Date) => string;
}
参数:
字段 | 类型 | 含义 | 备注 |
date | Date | 日期数据 | 平台DATETIME类型的数据 |
返回值: string 日期格式化后的字符串。
PageContext
组件上下文,提供和数据上下文相关的能力和接口。
获取方式
由平台向组件的 Props 内注入,通过 Props pageContext 参数获取。
示例:
import { PropsWithPageContext } from "@mobi/material-api";
import React from "react";
interface Props {}
const ComponentA = (props: PropsWithPageContext<Props>) => {
// 通过props获取pageContext
props.pageContext;
return <div>Component A</div>;
}
PageContext 只能通过组件 Props 参数获取,组件必须是直接暴露给平台的组件。
如果是组件内部定义的其它组件并不会注入 PageContext API。
通过 createMobiComponent 创建的组件经过平台包装是会注入PageContext API的。
PropsWithPageContext
这个类型是为了方便组件在 Props 中添加 PageContext 字段而定义的。不是强制使用的。
定义如下:
type PropsWithPageContext<P = {}> = P & {
pageContext?: PageContext;
};
下面代码中定义PropsA和PropsB的方式效果一样:
import React from 'react';
import { PageContext, PropsWithPageContext } from './api';
interface PropsA {}
const ComponentA = (props: PropsWithPageContext<PropsA>) => {
return <div>component a</div>;
};
interface PropsB {
pageContext?: PageContext;
}
const ComponentB = (props: PropsB) => {
return <div>component b</div>;
};
changeChildContextData
改变子组件的上下文数据;调用此方法的场景有2个:
数据容器修改自己children的数据上下文。
1.1 一种是不传递data,把数据容器加载数据产生的数据上下文向下传递, 比如Data数据容器。
1.2 另一种是传递data,把数据容器加载的数据,进行拆分,作为新的数据上下文向下传递,比如List Gallery。
传递数据上下文给内部定义的组件(组件内部定义了子组件,并通过createMobiComponent包装为平台组件)。
请参考7. 数据加载了解数据容器和数据上下文相关内容。
定义:
interface PageContext
changeChildContextData: (
child: any,
data?: EntityObject | EntityObject[],
) => React.ReactElement | React.ReactElement[];
}
参数:
字段 | 类型 | 含义 | 备注 |
child | any | 子元素 | |
data | EntityObject | EntityObject[] | 单个实体对象或多个实体数组; | 参见EntityObject。 |
返回值:React.ReactElement | React.ReactElement[],React组件元素。
getData
获取当前数据容器加载的实体对象数据(非数据容器组件,则获取最近一层数据容器加载的数据)。
定义:
interface PageContext
getData: <T extends EntityObject | Array<EntityObject>>() => T | undefined;
}
返回值:EntityObject | Array<EntityObject>,实体对象或实体对象数组。
EntityObject定义请参见EntityObject。
getParentData
获取上层数据容器组件加载的实体对象数据,对于非数据容器来说,和 getData 返回值一样。
定义:
interface PageContext
getParentData: <T extends EntityObject | Array<EntityObject>>() => T | undefined;
}
返回值:EntityObject | Array<EntityObject>,实体对象或实体数组。
EntityObject定义请参见EntityObject。
isReadonly
判断字段或者实体对象是否只读。
定义:
interface PageContext
isReadonly: (attrMeta?: AttrMeta | VALUE | contextDataMeta) => boolean;
}
参数:
字段 | 类型 | 含义 | 备注 |
attrMeta | AttrMeta | VALUE | contextDataMeta | 字段属性值 | 兼容静态数据、模板字符串场景,方便代码统一。 |
返回值:boolean,true为只读;false为可读写。
AttrMeta定义请参见AttrMeta。
VALUE定义请参见VALUE。
contextDataMeta请参见contextDataMeta。
getDataSource
获取数据源API接口。
定义:
interface PageContext
getDataSource: () => DataSource;
}
返回值:DataSource,数据源API接口。
DataSource定义请参见DataSource。
getAttrValue
获取字段数据的API接口。
定义:
interface PageContext
getAttrValue: <T extends VALUE>(
meta: AttrMeta | TemplateMeta | VALUE,
entityObject?: EntityObject,
) => AttrValue<T>;
}
参数:
字段 | 类型 | 含义 | 备注 |
meta | AttrMeta | TemplateMeta | VALUE | 字段属性值 | 兼容静态数据、模板字符串场景,方便代码统一读取数据。 |
返回值 AttrValue,字段数据的API接口。
AttrValue
封装对数据的读取和更新。
定义:
interface AttrValue<T extends VALUE> {
get: () => T | undefined;
set: (value: T) => void;
}
VALUE定义参见VALUE。
executeAction
执行事件。
定义:
interface PageContext {
executeAction: <
T extends void | VALUE | Array<VALUE> | object | object[] | EntityObject | EntityObject[]
>(
meta: ActionMeta,
options?: {
eventParams?: Array<VALUE | Array<VALUE> | object | object[] | EntityObject | EntityObject[]>;
},
) => Promise<T>;
}
参数:
字段 | 类型 | 含义 | 备注 |
T | - | 事件执行结果类型 | |
meta | ActionMeta | 要执行的事件信息 | |
options.eventParams | VALUE、object、EntityObject 的数组 | 组件传递的事件参数列表 | 不同的事件对参数的处理不同,具体请看不同事件对参数和返回值的处理。 |
返回值:Promise<T>, 不同的事件可能返回值可能不同。
不同事件对参数和返回值的处理
事件 | 对参数的处理 | 对返回值的处理 | 备注 |
内部跳转 | 缺省情况下,会将最近的数据上下文作为参数传递给下个页面。如果平台用户指定了某个数据上下文,则会传递对应的数据上下文到下个页面。 如果第一个参数是实体对象,则会代替数据上下文作为参数传递给下个页面。 如果第一个参数不是实体对象,则依然是传递数据上下文作为参数。 | 返回一个立即结束的空的Promise | |
外部链接 | 忽略 | 返回一个立即结束的空的Promise | |
关闭页面 | 忽略 | 返回一个立即结束的空的Promise | |
保存数据 | 缺省情况下,会将最近的数据上下文作为参数。 如果第一个参数是实体对象,则会代替数据上下文作为参数。 如果第一个参数不是实体对象,则依然是数据上下文作为参数。 | 返回一个立即结束的空的Promise | |
取消保存 | 忽略 | 返回一个立即结束的空的Promise | |
删除数据 | 缺省情况下,会将最近的数据上下文作为参数。 如果第一个参数是实体对象,则会代替数据上下文作为参数。 如果第一个参数不是实体对象,则依然是数据上下文作为参数。 | 返回一个立即结束的空的Promise | |
调用前端逻辑流 | 缺省情况下,会将数据上下文作为参数,传递给逻辑流。 有参数时,则会把这些参数放在数据上下文之前,传递给逻辑流。 | 如果逻辑流有返回值,则返回一个对应的Promise。 如果逻辑流没有返回值,则返回一个空的Promise。 等执行结束,Promise结束 | |
调用后端逻辑流 | 缺省情况下,会将数据上下文作为参数,传递给逻辑流。 有参数时,则会把这些参数放在数据上下文之前,传递给逻辑流。 | 如果逻辑流有返回值,则返回一个对应的Promise。 如果逻辑流没有返回值,则返回一个空的Promise。 等执行结束,Promise结束 | |
调用工作流 | 缺省情况下,会将最近的数据上下文作为参数。 如果第一个参数是实体对象,则会代替数据上下文作为参数。 如果第一个参数不是实体对象,则依然是数据上下文作为参数。 | 返回一个Promise。 等执行结束,Promise结束 | |
完成用户任务 | 缺省情况下,会将最近的数据上下文作为参数。 如果第一个参数是实体对象,则会代替数据上下文作为参数。 如果第一个参数不是实体对象,则依然是数据上下文作为参数。 | 无返回 | |
展示用户任务页面 | 缺省情况下,会将最近的数据上下文作为参数。 如果第一个参数是实体对象,则会代替数据上下文作为参数。 如果第一个参数不是实体对象,则依然是数据上下文作为参数。 | 无返回 |
getDataById
根据实体对象ID获取实体对象。
定义:
interface PageContext
getDataById: (dataId: string) => EntityObject;
}
参数:
字段 | 类型 | 含义 | 备注 |
dataId | string | 实体对象ID |
返回值:EntityObject,实体对象。
EntityObject定义请参见EntityObject。
getDataByDbId
根据数据库ID获取实体对象。
定义:
interface PageContext
getDataByDbId: (entityId: string, dbId: string) => EntityObject;
}
参数:
字段 | 类型 | 含义 | 备注 |
entityId | string | 实体ID | |
dbId | string | 数据库ID |
返回值:EntityObject,实体对象。
EntityObject定义请参见EntityObject。
getDataByContextData
根据数据上下文ID获取实体对象。
定义:
interface PageContext
getDataByContextData: (contextData: string) => EntityObject;
}
参数:
字段 | 类型 | 含义 | 备注 |
contextData | string | 数据上下文ID |
返回值:EntityObject,实体对象。
EntityObject定义请参见EntityObject。
createEntityObject
根据实体ID或实体定义创建实体对象。
定义:
interface PageContext
createEntityObject: (metaOrId: EntityMeta | string) => EntityObject;
}
参数:
字段 | 类型 | 含义 | 备注 |
metaOrId | EntityMeta | string | 实体ID或实体定义 |
返回值:EntityObject,实体对象。
EntityObject定义请参见EntityObject。
executeExpression
计算表达式或者模板字符串。
定义:
interface PageContext
executeExpression: (
expression: string | TemplateMeta,
options?: { currentObject?: EntityObject },
) => VALUE | Array<VALUE>;
}
参数:
字段 | 类型 | 含义 | 备注 |
expression | string | TemplateMeta | 表达式或模板字符串 | |
options | { currentObject?: EntityObject } | 表达式中currentObject的实体对象配置 |
返回值:VALUE,数据值对象或数组。
EntityObject定义请参见EntityObject。
VALUE定义请参见VALUE。
getCurrentWebPageType
获取组件所在页面的类型
定义:
interface PageContext
getCurrentWebPageType: () => 'PC_WEB' | 'H5_WEB';
}
返回值:PC_WEB,桌面Web页面;H5_WEB,移动端H5页面。
DataSource
数据源相关操作的API。
获取方式
通过PageContext的 getDataSource API获取。
processDataSource
加载数据源。
定义:
interface DataSource
processDataSource: (options?: {
onLoadingStart?: () => void;
onLoadingFinish?: () => void;
}) => void;
}
参数:
字段 | 类型 | 含义 | 备注 |
options | { onLoadingStart?: () => void; onLoadingFinish?: () => void; } | onLoadingStart: 开始加载时回调,可用于控制loading状态; onLoadingFinish: 加载完成时回调,可用于控制loading状态 |
configDataFilter
配置数据源的过滤、排序、分页参数。
定义:
configDataFilter: (params: RetrieveParams) => void;
RetrieveParams
数据过滤参数。
定义:
export interface Filter {
field: AttrMeta;
type:
| 'ISNULL'
| 'NOTNULL'
| 'EQ'
| 'NEQ'
| 'GT'
| 'GTE'
| 'LT'
| 'LTE'
| 'CONTAINS'
| 'NOTCONTAIN'
| 'STARTSWITH'
| 'ENDSWITH'
| 'BETWEEN';
values: Array<BOOLEAN | TEXT | CHAR | INTEGER | LONG | DECIMAL | DATETIME | EnumValue>;
}
// 多个字段条件的 与 或 组件
export interface FilterGroup {
type: 'AND' | 'OR';
filters: Filter[];
}
// 多个组合的组合,用于支持 与 中有 或, 或者 或 中有 与
export interface FilterParam {
type: 'AND' | 'OR';
groups: FilterGroup[];
}
export interface SortParam {
field: AttrMeta;
type: 'DESC' | 'ASC' | 'DEFAULT';
}
export interface RetrieveParams {
filter?: FilterParam;
sort?: SortParam[];
page?: {
// 请求页面,从1开始
number: number;
// 每页大小
size: number;
};
}
参数:
字段 | 类型 | 含义 | 备注 |
filter | FilterParam | 过滤配置 | |
FilterParam.type | 'AND' | 'OR' | 分组间组合条件 | AND:所有分组与关系 OR:所有分组或关系 |
FilterParam.groups | FilterGroup[] | 分组过滤配置 | |
FilterGroup.type | 'AND' | 'OR' | 分组内组件条件 | AND:与关系 OR:或关系 |
FilterGroup.filters | Filter[] | 分组内的过滤配置 | |
Filter.field | AttrMeta | 过滤字段 | |
Filter.type | 'ISNULL' | 'NOTNULL' | 'EQ' | 'NEQ' | 'GT' | 'GTE' | 'LT' | 'LTE' | 'CONTAINS' | 'NOTCONTAIN' | 'STARTSWITH' | 'ENDSWITH' | 'BETWEEN' | 字段过滤条件 | ISNULL:为空 NOTNULL:不为空 EQ:等于 NEQ:不等于 GT:大于 GTE:大于等于 LT:小于 LTE:小于等于 CONTAINS:包含 NOTCONTAIN:不包含 STARTSWITH:以什么开头 ENDSWITH:以什么结尾 BETWEEN:在区间内 |
Filter.values | any | 过滤条件参数 | |
sort | SortParam[] | 排序配置 | |
SortParam.field | AttrMeta | 排序的字段 | |
SortParam.type | 'DESC' | 'ASC' | 'DEFAULT' | 排序方式 | ASC:升序 DESC:倒序 DEFAULT:默认 |
page | object | 分页配置 | |
page.number | number | 请求第几页 | 从1开始 |
page.size | number | 每页大小 |
refreshData
刷新数据源。
定义:
interface DataSource
refreshData: (options?: {
reload?: boolean;
onLoadingStart?: () => void;
onLoadingFinish?: () => void;
}) => void;
}
参数:
字段 | 类型 | 含义 | 备注 |
refreshData | { reload?: boolean; onLoadingStart?: () => void; onLoadingFinish?: () => void; } | reload: 是否重新请求; onLoadingStart: 开始加载时回调,可用于控制loading状态; onLoadingFinish: 加载完成时回调,可用于控制loading状态 | reload为false时,未开启自定义逻辑流搜索、分页的逻辑流数据源不会重新执行逻辑流。 |
setReadOnly
设置数据源是否只读。
定义:
interface DataSource
setReadOnly: (readOnly: boolean) => void;
}
参数:
字段 | 类型 | 含义 | 备注 |
readOnly | boolean | 是否只读,true只读,false可读写; |
getTotalCount
获取数据总个数。
定义:
interface DataSource
getTotalCount: () => number;
}
getCurrentPageNumber
获取当前数据源分页页码。
定义:
interface DataSource
getCurrentPageNumber: () => number;
}
enableCustomPagination
开启自定义逻辑流分页。
定义:
interface DataSource
enableCustomPagination: (options: { pageSize: number }) => void;
}
参数:
字段 | 类型 | 含义 | 备注 |
options | { pageSize: number } | pageSize: 每页数据量 |
enableCustomSearch
开启自定义逻辑流搜索。
定义:
interface DataSource
enableCustomSearch: () => void;
}
registerListener
注册数据加载的监听器,每次数据变化时,触发回调。
定义:
interface DataSource
registerListener: (options: { loadListener?: () => void }) => void;
}
参数:
字段 | 类型 | 含义 | 备注 |
options | { loadListener?: () => void } | loadListener: 数据变化时回调 |
EntityObject
实体对象,数据模型中实体(或者内存实体)的一个实例。
通过数据相关的API创建或者获取。
定义:
interface EntityObject {
id: string;
dbId: string;
get: <T extends VALUE>(attrMeta: AttrMeta) => T;
set: (attrMeta: AttrMeta, value: VALUE) => void;
addAssociation: (meta: AssociationMeta, target: EntityObject | EntityObject[]) => void;
removeAssociation: (meta: AssociationMeta, target: EntityObject | EntityObject[]) => void;
setAssociation: (meta: AssociationMeta, target: EntityObject | EntityObject[]) => void;
getAssociatedObject: <T extends EntityObject | Array<EntityObject>>(
meta: AssociationMeta,
) => T | undefined;
meta: EntityMeta;
}
id
实体对象ID。
dbId
实体对象在数据库中的ID。如果还未提交数据,此字段为空。
get
获取实体对象对应字段的值。
字段 | 类型 | 含义 | 备注 |
T | VALUE | 返回值类型 | 对于通过属性配置的字段,因为可以通过supportFieldType约束字段类型,所以可以配置合适的类型,获取确定类型的结果。 |
attrMeta | AttrMeta | 实体的字段 | 如果是关联字段也可以用此方法。 |
set
更新实体对象对应字段的值。
字段 | 类型 | 含义 | 备注 |
attrMeta | AttrMeta | 实体的字段 | 如果是关联字段也可以用此方法。 |
value | VALUE | 要更新的数值 |
addAssociation
给实体对象添加关联。
字段 | 类型 | 含义 | 备注 |
meta | AssociationMeta | 关联模型 | |
target | EntityObject | EntityObject[] | 要关联的对象 | 如果是对一关联,应该是实体对象; 如果是对多关联,应该是实体对象列表。 |
removeAssociation
给实体对象移除关联。
字段 | 类型 | 含义 | 备注 |
meta | AssociationMeta | 关联模型 | |
target | EntityObject | EntityObject[] | 要设置的关联对象 | 如果是对一关联,应该是实体对象; 如果是对多关联,应该是实体对象列表。 |
setAssociation
给实体对象设置关联。会把原有的关联移除。
字段 | 类型 | 含义 | 备注 |
meta | AssociationMeta | 关联模型 | |
target | EntityObject | EntityObject[] | 要移除的对象 | 如果是对一关联,应该是实体对象; 如果是对多关联,应该是实体对象列表。 |
getAssociatedObject
获取关联对象。
字段 | 类型 | 含义 | 备注 |
meta | AssociationMeta | 关联模型 |
返回值,如果是对一关联,应该是实体对象;如果是对多关联,应该是实体对象列表。
meta
获取实体对应的实体定义。
EnumValue
一个枚举值的实例。
参数:
字段 | 类型 | 含义 | 备注 |
enumTypeId | string | 枚举类型的ID | |
key | string | 枚举名 | |
value | string | 枚举值 | |
values | () => EnumValue[] | 获取该枚举类型的所有值 |
|
FileValue
文件实例对象。
定义:
interface FileValue {
name: string;
url: string;
}
参数:
字段 | 类型 | 含义 | 备注 |
name | string | 文件名 | |
url | string | 文件url |
Margin
外边距。
定义:
interface Margin {
marginLeft: string;
marginRight: string;
marginTop: string;
marginBottom: string;
}
与style的同名参数含义一致。
Padding
内边距。
定义:
interface Padding {
paddingLeft: string;
paddingRight: string;
paddingTop: string;
paddingBottom: string;
}
与style的同名参数含义一致。
Size
尺寸。用于宽高配置。
定义:
interface Size {
toValue: (Margin?: Margin | string) => string;
}
参数:
字段 | 类型 | 含义 | 备注 |
toValue | ()=>string | 获取尺寸数值 | 获取的数值,可以直接赋值给style.width 或者 style.height |
VALUE
平台使用的数据值,方便API声明。包括基础类型、日期、枚举、文件。
定义:
type VALUE =
| BOOLEAN
| TEXT
| CHAR
| INTEGER
| LONG
| DECIMAL
| DATETIME
| EnumValue
| FileValue;
AttrMeta
字段元信息。配置字段时的Props参数。
定义:
type FILE_VALUE_TYPE = 'FILE' | 'DOCUMENT' | 'AUDIO' | 'VIDEO' | 'IMAGE';
type VALUE_TYPE =
| 'BOOLEAN'
| 'TEXT'
| 'CHAR'
| 'INTEGER'
| 'LONG'
| 'DECIMAL'
| 'ENUMERATION'
| 'DATETIME'
| FILE_VALUE_TYPE;
interface AttrMeta {
id: string;
name: string;
type: VALUE_TYPE;
isSystemAttr: () => boolean;
isAssociationAttr: () => this is AssociationAttrMeta;
enumTypeId?: string;
enums?: EnumValue[];
}
参数:
字段 | 类型 | 含义 | 备注 |
id | string | 字段ID | 如果是关联字段,id会包含关联信息,不是纯粹的字段ID。 |
name | string | 字段名称 | |
type | VALUE_TYPE | 字段类型 | 参见字段类型。 |
isSystemAttr | () => boolean | 判断是否是系统字段 | |
isAssociationAttr | () => boolean | 判断是否是关联字段 | 如果是可以作为AssociationAttrMeta使用。 |
enumTypeId | string | 枚举类型ID | 字段类型是 ENUMERATION时,有此字段。 |
enums | EnumValue[] | 此枚举的全部值 | 字段类型是 ENUMERATION时,有此字段。 |
AssociationAttrMeta
关联字段元信息。如果配置字段时选择的是关联字段,Props参数即是此类型。
定义:
interface AssociationAttrMeta extends AttrMeta {
getAssociationMeta: () => AssociationMeta;
getAssociationEntityMeta: () => EntityMeta;
getAssociationEntityAttrMeta: () => AttrMeta;
}
参数:
字段 | 类型 | 含义 | 备注 |
getAssociationMeta | () => AssociationMeta | 获取关联 | |
getAssociationEntityMeta | () => EntityMeta | 获取关联的实体 | |
getAssociationEntityAttrMeta | () => AttrMeta | 获取关联的字段 |
MultiAttrMetaWith
多字段配置。multi-field在不配置pack参数时,产生的Props参数类型。
定义:
type AttrMetaWith<Config> = Config & {
field: AttrMeta;
};
type MultiAttrMetaWith<Config> = Array<AttrMetaWith<Config>>;
假设组件给每个字段扩展的字段是 title, 则Props参数类型是:
Array<{
field: AttrMeta;
title: string;
}>
PackMultiAttrMetaWith
多字段配置。multi-field在配置pack参数时,产生的Props参数类型。
定义:
type PackMultiAttrMetaWith<PackKey extends string, Config> = {
[key in PackKey]?: MultiAttrMetaWith<Config>;
}
假设pack参数是aaa,则Props参数是:
{
aaa?: MultiAttrMetaWith<Config>;
}
EntityMeta
实体元信息。
定义:
interface EntityMeta {
id: string;
name: string;
isSystemEntity: () => boolean;
attrs: () => AttrMeta[];
}
参数:
字段 | 类型 | 含义 | 备注 |
id | string | 实体ID | |
name | string | 实体名称 | |
isSystemEntity | () => boolean | 判断是否是系统实体 | 定义在系统数据模块中的实体是系统实体。 |
attrs | () => AttrMeta[] | 获取实体内的所有字段 |
DataSourceMeta
数据源元信息。
定义:
type DATA_SOURCE_TYPE = 'context' | 'database' | 'flow';
interface DataSourceMeta {
type: DATA_SOURCE_TYPE;
getDataMeta: () => EntityMeta;
executeOnce: boolean;
enableLoading: boolean;
}
参数:
字段 | 类型 | 含义 | 备注 |
type | string | 数据源的类型 |
|
getDataMeta | () => EntityMeta | 获取数据源对应的实体定义 | |
executeOnce | boolean | 此数据源是否仅执行一次 |
|
enableLoading | boolean | 是否开启loading效果 | 由平台用户设置,组件需根据此字段决定是否实现loading效果。 |
AssociationMeta
关联元信息。
定义:
interface interface AssociationMeta {
id: string;
}
参数:
字段 | 类型 | 含义 | 备注 |
id | string | 关联ID |
TemplateMeta
模板元信息。
定义:
interface TemplateMeta {
template: string;
parameters?: string[];
}
参数:
字段 | 类型 | 含义 | 备注 |
template | string | 模板字符串 | |
parameters | Array<string> | 模板字符串中使用的表达式 |
ActionMeta
页面事件元信息。
定义:
interface ActionMeta {
noAction: () => boolean;
}
参数:
字段 | 类型 | 含义 | 备注 |
noAction | () => boolean | 判断是否是空事件 |
contextDataMeta
上下文数据元信息。
定义:
interface contextDataMeta {
contextData: string;
}
参数:
字段 | 类型 | 含义 | 备注 |
contextData | string | 上下文数据标识 |
Page
页面。
定义:
interface Page {}
OuterPage
外部页面。
interface OuterPage extends Page {
url: string;
target?: '_parent' | '_blank';
}
参数:
字段 | 类型 | 含义 | 备注 |
url | string | 外部页面url | |
target | '_parent' | '_blank' | 外部页面打开方式 |
|
NavItem
导航项。
定义:
interface NavItem {
id: string;
title: string;
level: number;
children?: NavItem[];
toPage(): Page;
}
参数:
字段 | 类型 | 含义 | 备注 |
id | string | 导航ID | |
title | string | 导航名称 | |
level | number | 导航层级 |
|
children | NavItem[] | 子导航项 | 有此字段说明是导航组。 |
toPage | ()=>Page | 获取导航对应页面的方法 |
Node
组件节点对象;
定义:
interface Node {
id: string;
parent?: Node;
}
IconMeta
图标对象。
定义:
interface IconMeta {
component: React.ComponentType<any>;
}
参数:
字段 | 类型 | 含义 | 备注 |
component | React.ComponentType<any> | 图标的React组件 |
IReactComponent
React组件联合类型。
定义:
type IReactComponent<P = any> =
| React.ClassicComponentClass<P>
| React.ComponentClass<P>
| React.FunctionComponent<P>
| React.ForwardRefExoticComponent<P>;
组件相关模型数据
组件相关的一些模型数据定义。在一些高级定制场景可能会需要。
模型数据是平台的内部实现,有可能会随着版本升级发生变化,需要尽量避免在组件内部使用模型内部字段。
在一些场景可以通过一系列convertXXX方法把模型数据整体转化为API需要的对象,比如 convertAttrMeta
DataSourceSchemaData
数据源模型定义。
EntityAttrSchemaData
实体字段模型定义。
PageEventSchemaData
页面事件模型。定义:
type PageEventSchemaData = string | MobiEvent;
MobiEvent
新页面事件模型数据。
定义:
// 事件类型
enum EventType {
none = 'none',
insideJump = 'inside_jump',
outsideJump = 'outside_jump',
submit = 'submit',
cancel = 'cancel',
delete = 'delete',
callFrontflow = 'call_frontflow',
callBackendflow = 'call_backendflow',
callWorkflow = 'call_workflow',
completeWorkflow = 'complete_workflow',
openUserTaskpage = 'open_user_taskpage',
close = 'close',
}
// web外部链接跳转方式
enum WebJumpType {
blank = 'blank',
self = 'self',
}
// 小程序跳转方式
enum MiniJumpType {
redirectTo = 'redirectTo',
navigateTo = 'navigateTo',
switchTab = 'switchTab',
}
interface MobiEventOptions {
targetPage?: string; // 内部跳转,外部跳转
target?: WebJumpType; // web外部链接跳转方式
miniJumpType?: MiniJumpType; //小程序跳转方式
ifCancel?: boolean; // 关闭页面
onlyInMemory?: boolean; // 删除数据
flowId?: string; // 调用逻辑流,调用工作流
flowParams?: string[]; // 调用逻辑流,调用工作流
userTaskNode?: string; // 完成用户任务
taskResultNode?: string; // 完成用户任务
contextData?: string | null; // 内部跳转携带的参数
}
interface MobiEvent {
type: EventType;
options?: MobiEventOptions;
}
ResourceFileSchemaData
静态资源文件模型定义。
SizeSchemaData
用于样式的尺寸模型定义。
NavItemSchemaData
导航项模型定义。
TemplateSchemaData
模板字符串模型定义。
StaticValueSchemaData
静态数据的模型数据,联合类型。
定义:
type StaticValueSchemaData =
| ResourceFileSchemaData
| BooleanSchemaData
| CharTextSchemaData
| IntegerLongDecimalSchemaData;
MultiAttrSchemaDataWith PackMultiAttrSchemaDataWith
字段数组模型数据,包括扩展的参数。
定义:
type AttrSchemaDataWith<Config> = Config & {
field: EntityAttrSchemaData;
};
type EditNameConfig = {
name: string;
};
type SearchTypeConfig = {
searchType: string | boolean;
};
type MultiAttrSchemaDataWith<Config> = Array<AttrSchemaDataWith<Config>> | undefined;
type PackMultiAttrSchemaDataWith<PackKey extends string, Config> = {
[key in PackKey]?: MultiAttrSchemaDataWith<Config>;
};