API

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍自定义组件依赖的平台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

文件信息

  • url:文件网络路径。

  • name:文件名称。

  • type:文件类型。

返回值:文件对象。

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

数据源模型数据

参见DataSourceSchemaData

返回值:DataSourceMeta,数据源属性对象。

DataSourceMeta定义请参见DataSourceMeta

convertActionMeta

将事件模型数据转换为事件属性对象。

定义:

interface ComponentApi
  convertActionMeta: (schemaData: PageEventSchemaData) => ActionMeta;
}

参数:

字段

类型

含义

备注

schemaData

PageEventSchemaData

事件模型数据

参见PageEventSchemaData

返回值:ActionMeta,事件属性对象。

ActionMeta定义请参见ActionMeta

convertAttrMeta

将字段模型数据转换为字段对象。

定义:

interface ComponentApi
  convertAttrMeta: ((schemaData: EntityAttrSchemaData) => AttrMeta | undefined) &
    ((attrId: string, entityId: string) => AttrMeta | undefined);
}

参数:

字段

类型

含义

备注

schemaData

EntityAttrSchemaData

实体字段模型数据

参见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>

实体模型数据数组或者带包装字段的实体模型数据数组

参见MultiAttrSchemaDataWith PackMultiAttrSchemaDataWith

返回值:MultiAttrMetaWith<Config> | PackMultiAttrMetaWith<PackKey, Config>,包装后的字段数组;

MultiAttrMetaWith定义请参见MultiAttrMetaWith

PackMultiAttrMetaWith定义请参见PackMultiAttrMetaWith

convertValue

将静态模型数据转换为值对象。

定义:

interface ComponentApi
  convertValue: (propValue: StaticValueSchemaData) => VALUE;
}

参数:

字段

类型

含义

备注

propValue

StaticValueSchemaData

静态模型数据

参见StaticValueSchemaData

返回值:VALUE,值对象。

VALUE定义请参见VALUE

convertTemplate

将模板字符串模型数据转换为模板对象。

定义:

interface ComponentApi
  convertTemplate: (propValue: TemplateSchemaData) => TemplateMeta;
}

参数:

字段

类型

含义

备注

propValue

TemplateSchemaData

模板字符串模型数据

参见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

尺寸模型数据

参见SizeSchemaData

返回值:Size,样式大小对象。

Size定义请参见Size

convertFileValue

将文件模型数据转换为文件对象。

定义:

interface ComponentApi
  convertFileValue: (propValue: ResourceFileSchemaData) => FileValue;
}

参数:

字段

类型

含义

备注

propValue

ResourceFileSchemaData

文件模型数据

参见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个:

  1. 数据容器修改自己children的数据上下文。

    1.1 一种是不传递data,把数据容器加载数据产生的数据上下文向下传递, 比如Data数据容器。

    1.2 另一种是传递data,把数据容器加载的数据,进行拆分,作为新的数据上下文向下传递,比如List Gallery。

  2. 传递数据上下文给内部定义的组件(组件内部定义了子组件,并通过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

数据源的类型

  • context:上下文数据源

  • database:数据库数据源

  • flow:逻辑流数据源

getDataMeta

() => EntityMeta

获取数据源对应的实体定义

executeOnce

boolean

此数据源是否仅执行一次

  • true 仅执行一次

  • false 受数据驱动影响,会执行多次

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'

外部页面打开方式

  • 缺省:当前页面打开

  • _blank:新页面打开

  • _parent:父级框架打开(iframe场景)

NavItem

导航项。

定义:

interface NavItem {
  id: string;
  title: string;
  level: number;
  children?: NavItem[];
  toPage(): Page;
}

参数:

字段

类型

含义

备注

id

string

导航ID

title

string

导航名称

level

number

导航层级

  • 0:一级导航

  • 1:二级导航

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>;
};