_channel

核心通道模块

y系列通道专用方法,Zero Extension中最大的亮点。

函数前缀 说明 含义
yi 状态执行函数,componentDidMount中调用 yi - 嗨,i - initialize
yo 渲染执行函数,render中调用 yo - 哟,o - origin
yu 更新专用函数,componentDidUpdate中调用 yu - 唷,u - update
yl 加载型容器函数,$ready的检查 yl - 加载,l - loading

1. 函数列表

函数名 含义
yiAssist 在state中注入Assist辅助数据节点$t_$a_前缀。
yiColumn 表格组件的列配置信息中,预处理$render = USER的Ajax辅助数据列(性能提升版本,预读取)。
yiCompany 为查询引擎追加companyId,=的公司条件。
yiControl 「页面+控件」单个控件专用的控件配置初始化函数。
yiLayout 「容器+控件」单个页面初始化配置的专用函数,包括计算布局相关信息。
yiModule 读取模块配置,静态存储于后端的某个JSON文件,动态则存储于X_MODULE表中。
yiPartForm 区域表单初始化,等价于原始的yiForm,但由于配置数据来源于不同存储位置,所以重命名为yiPartForm替代。
yiStandard 标准页面渲染专用(静态开发模式)。
ylCard 带$ready的PageCard简化版。
ylDynamic 带$ready的PageCard(支持远程读取配置)简化版。
yoAction 五个按钮区域的属性继承函数。
yoAmbient 「高频」统一调用的属性继承函数,几乎每个组件都会使用。
yoComponent yoAmbient的别名函数。
yoControl 动态渲染中的每个控件专用的属性继承函数。
yoDynamic 表单的$inited专用处理二义性属性继承函数。
yoFilter 查询表单专用属性继承函数。
yoForm 标准表单专用继承函数。
yoFormAdd 「ExListXxx」列表内部专用添加表单属性继承函数。
yoFormEdit 「ExListXxx」列表内部专用编辑表单属性继承函数。
yoList 「ExListXxx」列表组件属性继承函数。
yoListBatch 「ExListXxx」Batch批量区域操作属性继承函数。
yoListExtra 「ExListXxx」Extra附加区域操作属性继承函数。
yoListOpen 「ExListXxx」Open添加区域操作属性继承函数。
yoListSearch 「ExListXxx」Search区域基础搜索和高级搜索工具栏属性继承函数。
yoRender 组件专用检查是否加载完成的函数,$ready标记检查。
yoTabExtra <Tabs/>中附加区域属性继承函数,通常在添加表单/编辑表单页签。
yoTable <Table/>表格组件专用属性继承函数,ExListXxx共享。
yoTabPage <Tabs.Pane/>页签中每一页的属性继承函数。
yuCondition $condition查询条件更新检查函数。
yuDirty $dirty组件脏状态更新检查函数。
yuLoading $loading父组件驱动子组件更新检查函数。
yuQuery $query查询条件更新检查函数。
yuRouter $router中的路由参数更新检查函数。

2. 通道核心点

Methods

(static) yiAssist(reference, state) → {Promise.<T>}

「通道」Ex.yiAssist

1. 输入来源

来源 含义
cab/<LANG> 资源目录cab/<LANG>/中绑定的资源文件的_assist节点,使用@zero绑定。
config 直接从props中读取配置,消费assist节点,这种通常是配置型。

2. 辅助数据种类

示例中的数据结构直接从_assist开始,或config.assist开始,它包含了多个键值配置,每个配置如下:

节点 含义
uri Ajax远程方法的Uri地址。
method 默认GET,可修改成其他方法来读取。
magic 新版查询模式,非查询引擎,直接将magic节点佐为查询条件。
params.criteria 这种通常是qr=true,设置查询引擎。
qr (Boolean)是否强制性使用查询引擎,强制使用则会触发后端查询引擎。
response 配置响应数据的特殊属性,主要用来配置记录主键。
group 这个配置目前仅用于X_TABULAR读取,根据某个字段进行分组,然后使用值构造变量。

2.1. 非X_TABULAR类型

这种类型比较自由,读取任意接口或任意表都可以。

{
     "model.information": {
         "uri": "/api/model/full/read",
         "response": {
             "key": "id"
         }
     },
     "model.resource":{
         "uri": /api/model/resource"
     }
}

上边的配置信息会在state中生成两个变量,这种模式的变量名直接根据配置中的Object属性字段来定义。

  • $a_model_information
  • $a_model_resource

2.2. X_TABULAR类型

这种类型只读取X_TABULAR的数据类型,而且会提供group方法执行分组,通常是TYPE字段。

{
     "tabular": {
         "uri": "/api/types/tabulars",
         "method": "POST",
         "magic": {
             "$body": [
                 "zero.authority",
                 "member.card"
             ]
         },
         "group": "type"
     }
}

上边配置生成的变量为:

  • $t_zero.authority
  • $t_member_card

3. Js脚本

3.1. 调用代码

框架内部的调用代码如下:

import Ex from 'ex';

const state = {};
Ex.yiAssist(reference, state).then(response => {
    // response 变量中会包含执行 assist 辅助数据流程后的变量
    // 假设使用了 2.1 和 2.2 的综合配置
    // 则会生成下边四个属性
    // - $a_model_information,数据类型是 DataArray
    // - $a_model_resource,数据类型是 DataArray
    // - $t_permission_type,数据类型是 DataArray
    // - $t_member_card,数据类型是 DataArray
})

3.2. 提取数据代码

import Ux from 'ux';

// 直接传入原始key,会直接做转换
// member.card,系统会检索读取上述列表中的 $t_member_card 变量的值
// 返回值为 Array 类型。
const memberCard = Ux.onDatum(reference, "member.card");

3.3. Datum函数

除开直接读取的onDatum以外,还可以使用一些带有Datum关键字的函数,例如:

Datum函数 纯函数
elementFindDatum elementFind
elementUniqueDatum elementUnique
elementGroupDatum elementGroup

Datum的函数会比纯函数多两个参数,前两个参数就是onDatum的两个参数,简单说是Datum遵循如下代码执行流程:

步骤 执行代码
1 输入referencesourceKey(上述调用代码第二参)。
2 调用onDatum抽取函数,生成数据(Array类型)。
3 执行主方法,纯函数中的方法,以Array数据为基础。
Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

state State

输入状态,计算之前的

Returns:

执行更新过后的状态,计算之后的

Type
Promise.<T>

(static) yiColumn(reference, initState, $data) → {Promise.<T>}

「通道」Ex.yiColumn

1. 基本介绍

列渲染专用处理函数,用于处理USER特殊类型的$render执行数据预处理

  1. 提取所有USER列相关信息。
  2. 根据传入数据执行$lazy的计算(预处理Ajax,系统中唯一调用Ux.ajaxEager的位置。

这种类型的代码流程如下:

步骤 含义
1 扫描表格配置table中的columns节点。
2 columns节点中抽取$render = USER的列类型。
3 收集所有这种类型,执行单独的参数合并,数据条目的读取和辅助数据读取请求不对等,可能10条数据由于某个字段值一样只读取四次。
4 构造state中的$lazy变量:一个Object类型。

2. 关于$lazy的结构

2.1. 数据

[
     { "type": "type1", "name": "记录1" },
     { "type": "type1", "name": "记录2" },
     { "type": "type1", "name": "记录3" },
     { "type": "type2", "name": "记录4" },
     { "type": "type2", "name": "记录5" },
     { "type": "type2", "name": "记录6" }
]

2.2. 辅助数据

[
     { "key": "type1", "name": "类型1" },
     { "key": "type2", "name": "类型2" }
]

2.3. 最终生成的变量

{
    "type":{
         "type1": "类型1",
         "type2": "类型2"
    }
}
  • 上述结构中type是数据记录中的属性。
  • Object中的数据就是type对应的:值 = 显示文字的Map字典。
Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

initState State

返回当前组件状态

$data Object

搜索的最终结果,$data.list 中包含数据

Returns:

执行更新过后的状态

Type
Promise.<T>

(static) yiCompany(reference) → {Promise.<T>}

「通道」Ex.yiCompany

带有企业信息页面的专用处理流程,主要用于查询条件设置。

  1. 员工页面
  2. 部门页面
  3. 组页面
  4. 分公司页面

为这些页面注入 companyId 的查询条件,直接根据 $query 的查询条件注入特定条件:

companyId,=<公司ID值>

这里的companyId的数据源来自于props中的$inited.key变量,最终会生成特定的$query存储在 reference的state状态信息中,构造特定查询条件,不仅如此,companyId,=的条件会注入到Qr流程,挂载到 $querycriteria节点中。

Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

Returns:

返回Promise。

Type
Promise.<T>

(static) yiContainer(reference) → {Promise.<T>}

「通道」Ex.yiContainer

1. 基本介绍

模板处理种类

  1. 静态模板
  2. 动态模板

动态模板判断

判断$dynamic的依据和条件:

  1. $router 中的 path 路径以:/ui/ 开头
  2. $router 中的参数同时包含:module / page

最终返回

{
    app: "应用名",
    module: "模块名",
    page: "页面名"
}
  • $container:容器配置
  • $component:内部组件配置

渲染计算

$dynamic:

  • = true:动态渲染,Ox Engine
  • = false:静态渲染,Zero UI

2. 动态执行逻辑

这是Extension扩展中动态渲染模板的基础,最终都是为了改变当前组件中的state结构。

2.1. 路由解析

调用_seekRoute解析react-router相关信息,构造完成后状态如下:

{
    $input: {
        app,
        module,
        page
    },
    $dynamic: "(Boolean)是否执行动态渲染",
    $secure: "(Boolean)是否安全页面(鉴权)"
}

如果是动态页面,参数$input直接来自于路由和环境变量的计算:

参数 来源 含义
app 环境变量Z_ROUTE 当前应用的专用路由(标识应用程序)。
module $router变量 当前页面所属模块。
page $router变量 当前页面名称。

2.2. 异步初始化

调用startAsync函数,初始化状态信息,完成后结构如下:

{
    $tpl: {},
    $container: {},
    $grid: {},
    $assist: {},
    $controls: {}
}
属性名 含义
$tpl 模板详细数据信息。
$container 容器配置信息。
$grid 生成的网格布局基础配置。
$assist 需使用的辅助数据定义。
$controls 所有当前页面需要的控件配置信息。
$secure 后期追加,页面是否执行鉴权。

2.2. 模块配置

调用yiModule函数执行模块初始化(略)。

2.3. 页面配置

使用模块中存在的data.$input作为入参,读取页面配置信息,页面配置包括容器/组件双配置。

2.4. 页面规范化

调用_seekPage函数执行页面配置初始化,从$output对象中抽取数据信息:

  1. 根据$output.layout重写状态中的state.$tpl模板信息。
  2. 若包含$output.containerName则重写状态中state.$container容器信息。
  3. 页面组件解析:
    1. 解析$output.secure属性,追加state.$secure属性。
    2. 读取$output.grid网格布局属性,重写state.$grid属性。
    3. 读取$output.assist辅助数据定义,重写state.$assist属性。
    4. 读取$output.controls配置数据,重写state.$controls属性。

3. 最终状态

执行完上述方法后的最终状态如(示例模板):

{
    $input:{
        app: "所属应用",
        module: "所属模块",
        page: "所属页面"
    },
    $output: "(输出)远程读取配置的基础数据",
    $dynamic: "(Boolean)是否动态渲染",
    $secure: "(Boolean)是否安全页面",
    $tpl: "使用模板的详细配置",
    $container: "容器相关配置",
    $grid: "网格布局基础信息",
    $assist: "辅助数据定义信息",
    $controls: "当前控件的所有配置信息"
}

状态中的数据存储是定义好的元数据信息,包括配置数据,其目的是为了让真正执行过程中的方法可根据这些数据对页面渲染进行计算。

Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

Returns:

执行更新过后的状态

Type
Promise.<T>

(static) yiControl(argumentsopt) → {Promise.<T>}

「通道」Ex.yiControl

1. 基本介绍

控件专用处理,从后端读取配置:UI_CONTROL / UI_FORM / UI_LIST

  1. 单参,直接提取控件配置,调用yoControl执行容器和组件的配置规范化(container/component)。
  2. 双参,根据control和类型type执行控件配置提取(包括Form和List)
    1. 根据控件ID(control)和类型(type)读取基本配置和操作配置。
    2. 在响应信息中为操作注入ACL安全配置信息__acl
    3. 再执行parseControl方法执行控件配置规范化(主要针对操作)

2. 使用场景

该函数仅位于控件配置预初始化专用流程。

Parameters:
Name Type Attributes Description
arguments arguments <optional>

可选参数,变参

Returns:

返回最终的 Promise。

Type
Promise.<T>

(static) yiModule(reference, state, standard) → {Promise.<T>}

「通道」Ex.yiModule

1. 基本介绍

一个 module 的配置信息来源于三部分:

  1. UI.json:静态配置,会在 reference 中生成 $hoc 变量
  2. 远程的 UI_MODULE中的 metadata 字段
    • (默认值)最初的 metadata 字段为 FILE 模式(即文件路径)
    • (动态管理)如果管理过程中执行了更新,那么直接就是 metadata 的内容
  3. 如果 standard = false 那么不考虑 $hoc 的生成,而是直接使用 hoc 变量
    • 这种情况不引入 HocI18r 同样不引入 HocI18n 两个数据结构
  4. 如果 standard = true 那么有两种可能
    • 已经绑定过 UI.json,则使用混合模式(远程优先)
    • 未绑定过 UI.json,则直接使用远程模式

2. 模块读取

根据路径直接读取,路径中包含三部分,如:

/ox/ci/search
{
    app: "ox",
    module: "ci",
    page: "search"
}

src/components/ci/search代码目录中。

Zero Ui中定义的应用维度主要分三层

  1. app:应用层,依靠Z_ROUTE的环境变量规划不同的应用,多应用区分。
  2. module:模块,src/components目录下的第一层目录,上述的ci目录。
  3. page:页面,src/components目录下的第二层目录,上述的search目录。

3. 配置对象

Zero Ui中的配置对象有两种类型:HocI18nHocI18r两种,这两种数据对象的函数是一样的,但类型不同,也就是说 这两个对象在调用配置读取的API如Ux.fromHocUx.fromPath时会维持一致。

当前函数会读取X_MODULE的配置数据信息,如果存在,则和Cab.json的资源文件中的配置进行合并,生成最终的配置对象。

  • 远程数据存储于HocI18r
  • 本地资源配置存储于HocI18n
  • 本地和远程同时执行时候,直接读取metadata构造附加的hoc配置数据。
Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

state State

返回当前组件状态

standard boolean

是否执行标准化

Returns:

执行更新过后的状态

Type
Promise.<T>

(static) yiPartForm(ref, config, inherit) → {Object}

「通道」Ex.yiPartForm

1. 基本介绍

初始化表单配置的专用方法,等价于yiForm,旧版本有一个yiForm方法,为了兼容原始方法,所以独立了 另外一个方法yiPartForm来实现表单初始化。

该方法执行流程如下:

  1. 先从绑定的资源文件cab/<LANG>/中读取_form节点中的配置信息。
  2. inherit用于判断React引用是使用传入引用,还是传入引用的父引用。

2. 标准化配置

调用Ux.configForm对表单数据进行配置(同步流程),这个步骤需要完成以下几点:

  • 从配置中读取renders对象用于配置key = Jsx的表单字段(开发用来渲染表单字段专用)
  • 构造状态state中的$onChange函数
  • config中的变量state作为附加值合并到reference的状态中

3. config参数

config参数中的核心结构如下:

{
    renders: {},
    onChange: {}
}
变量 类型 含义
renders Object field = Jsx结构,渲染表单时对应的字段渲染函数。
onChange Object field = Function结构,对象中的每个函数可以注入到字段的onChange外置函数中。
Parameters:
Name Type Default Description
ref Object | ReactComponent

React组件引用

config Object

和表单相关的基本配置

inherit Object true

将要继承到表单中的属性信息

Returns:
Type
Object

(static) yiStandard(reference, inputState) → {Promise.<T>}

「通道」Ex.yiStandard

1. 基本介绍

标准核心模块专用方法,内部调用函数

  1. yiModule
  2. yiAssist
  3. yiParameters

2. yiParameters

yiModuleyiAssist可直接参考文档中的做法,yiParameters用于处理路由中的参数, 构造reference.state中特定的$query变量。

  1. $router中读取核心参数typestatus
  2. 如果构造的条件超过1个,使用AND连接符。
参数 含义
type 广义的类型参数。
status 广义的状态参数。

上述读取参数可位于路径中,也可位于查询字符串中,如/uri/xxx/:p1?p2=v2p1p2都是合法参数。

Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

inputState State

返回当前组件状态

Returns:

执行更新过后的状态

Type
Promise.<T>

(static) ylCard(reference, fnRender, config) → {JSX.Element}

「通道」Ex.ylCard

1. 基本介绍

渲染带 PageCard 的页面专用组件。

config 配置的数据结构

{
     title: 左上标题(同一个页面切换刷参数时必须)
     header:提示信息,用于加载 LoadingAlert 的表单说明信息(头)
     name: 当前组件的名称
     color:当前日志的背景色(白色字体)
}

2. 构造属性

该方法会根据config构造PageCard组件所需的所有属性,并且在执行渲染之前检查$ready的值, 如果$ready值为true才执行界面渲染。

属性 含义
$title 左上角的标题信息。
$extra 构造extraContent右上角核心组件信息。
$leftVisible 是否显示左边按钮。
$disabled 是否禁用按钮。
reference 需传入的当前React组件引用。
Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

fnRender function

子组件渲染函数

config Object

输入的配置数据

Returns:
Type
JSX.Element

(static) ylDynamic(reference, fnRender, config) → {JSX.Element}

「通道」Ex.ylDynamic

1. 基本介绍

用于渲染通用模块:

  1. /ambient/tabular/:type 字典
  2. /ambient/category/:type 类别(树形字典)
  3. /ambient/employee/:type 员工
  4. /ambient/identity/:type 档案(个人隐私)
  5. /ambient/customer/:type 客户信息

专用统一模块渲染流程

2. 扩展模块

这个函数为扩展模块专用函数,主要用于简化扩展模块中的页面开发,这种页面大部分布局如下伪图:

|------------------------------------------|
| Title (Left)               (Right) Extra |
|------------------------------------------|
|| Content                                ||
||                                        ||
||                                        ||
||                                        ||
||----------------------------------------||

PageCard主要用于定义上述不同区域的配置,且ylDynamic会将cab中的资源文件配置作为默认 配置,如果从远程X_MODULE读取到了特殊配置则会覆盖默认配置。

Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

fnRender function

渲染函数

config Object

输入的配置数据

Returns:
Type
JSX.Element

(static) ylTabExtra(reference, tabs, UI) → {Object}

「通道」Ex.ylTabExtra

优先读取Ex.yoAction构造继承属性集,当前版本提供给ExListXxx组件内部专用。

1. 基本介绍

统一处理表单内部的按钮区域,它包含两种状态。

视图模式 按钮 含义
add 添加,重置 添加表单界面专用按钮。
edit 编辑,删除,重置 编辑表单界面专用按钮。

如果配置了op.extension那么扩展按钮会根据其index的配置插入到对应位置,并且这些按钮的显示还被下边两个因素影响:

  1. 操作用户是否具有这些操作按钮的ACL权限。
  2. 这个列表中是否已经配置了这些按钮。

2. 构造属性表

源属性名 类型 目标属性名 含义
构造 state config 计算当前Extra区域按钮的基本配置。
$submitting state Boolean $submitting 是否处于提交状态(防重复提交专用属性)。
activeKey 第二参数 String $activeKey 被激活的页签主键。
$view state String $view 视图模式读取,三种:list, add, edit
构造 Function doSubmitting 防重复提交专用函数。

3. 核心

3.1. 满足构造条件

  1. 视图模式必须是addedit
  2. 如果是add,必须配置了tabs.extra.add项。
  3. 如果是edit,必须配置了tabs.extra.edit项。

如果构造条件不满足,那么extra部分不显示任何东西。

3.2. RESET

重置按钮是一个特殊的存在,必须是可操作按钮存在的情况才执行重置,如果不存在可操作按钮,那么重置会无效。

检测代码:

// 检查是否计算结果是单独的重置按钮RESET
if (attrs.config && 1 === attrs.config.length) {
     attrs.config = attrs.config.filter(item => "op.submit.reset" !== item.category);
}

3.3. 权限控制

调用setEdition内部私有方法计算可编辑的相关关系,实现对某个表单的ACL权限控制,直到可控制表单三态。

Parameters:
Name Type Description
reference Object | ReactComponent

React组件引用

tabs Object

<Tabs/>的基本配置

UI function
Returns:
Type
Object

(static) yoAction(reference, prefix, ordered) → {Object}

「通道」Ex.yoAction

优先读取Ex.yoAmbient构造继承属性集。

1. 基本介绍

按钮和操作专用,ExAction/ExButton 专用的处理。

按钮专用过滤函数,主要过滤几个区域的核心按钮:

  1. Open区
  2. Batch区
  3. Search区
  4. Extra区
  5. Row区
  6. Extension扩展(全区域)

2. 核心执行逻辑

该函数的核心执行逻辑如:

  1. 调用yoAmbient初始化继承属性。
  2. 顺序计算/无序计算(针对state中的op变量定义)。
  3. 执行前缀过滤。

3. 默认值

3.1. 默认的顺序配置:

{
     "op.open": [
         "op.open.add",
         "op.open.filter"
     ],
     "op.batch": [
         "op.batch.edit",
         "op.batch.delete"
     ],
     "op.extra": [
         "op.extra.column",
         "op.extra.export",
         "op.extra.import"
     ],
     "op.add": [
         "op.submit.add",
         "op.submit.reset"
     ],
     "op.edit": [
         "op.submit.save",
         "op.submit.delete",
         "op.submit.reset"
     ]
}

3.2. 列表区域图示

*的是存在配置的区域。

列表页

|--------------------------------------------------|
| *Open    *Batch               Search      *Extra |
|--------------------------------------------------|
|  Row                                             |
|  Row                                             |
|  Row                                             |
|  Row                                             |
|  Row                                             |
|--------------------------------------------------|

表单页

|--------------------------------------------------|
|                                     *Add / *Edit |
|--------------------------------------------------|
|  Form (Grid)                                     |
|                                                  |
|                                                  |
|                                                  |
|                                                  |
|--------------------------------------------------|

3.3. 各项详解

页面 区域前缀 区域代码 含义
列表页 op.open Open区域 op.open.add 添加新记录
op.open.filter 清空列过滤条件(每一列的列过滤条件清除按钮)
op.batch Batch区域 op.batch.edit 批量编辑
op.batch.delete 批量删除
op.extra Extra区域 op.extra.column 列更改区域
op.extra.export 导出按钮
op.extra.import 导入按钮
表单页 op.add Add提交区 op.submit.add 添加按钮
op.submit.reset 重置按钮
op.edit Edit提交区 op.submit.save 保存按钮
op.submit.delete 删除按钮
op.submit.reset 重置按钮

后边两个区域Add提交区/Edit提交区主要位于内置的表单页,除开上边的五个核心区域以外,还会根据 op.extension前缀对应的配置来追加自定义按钮,以完成按钮的配置流程。

Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

prefix String

操作前缀

ordered Object

排序专用

Returns:

计算最终生成的继承属性专用方法

Type
Object

(static) yoAmbient(reference, config) → {Object}

「通道」Ex.yoAmbient

1. 基本介绍

该方法为高频使用方法,几乎所有的组件需要继承属性时调用该方法生成inherit属性集。

2. 核心属性

计算继承属性(统一继承属性专用处理),统一继承的属性:

  1. 基本属性:

    • $app:应用数据,DataObject
    • $user:登录用户数据,Object
    • $router:路由数据,DataRouter
    • $menus:菜单专用数据,DataObject
    • $profile: 登录用户Profile信息
    • $parent: 父记录专用数据
    • $submitting:redux防重复提交专用
    • $hotel:旧系统专用
  2. 标识符专用属性,读取属性中的 $identifier 模型标识符。

  3. 特殊禁用变量:$disabled 属性。

  4. 提交状态变量

    • $submitting:正在提交
    • $loading:正在加载
    • $dirty:脏数据
    • $collapsed:菜单开合处理
  5. 选中项:$selected

  6. 函数处理,继承函数前缀:rx, do, fn

  7. 特殊引用

    • reference:父引用
    • react:根引用
  8. 插件配置

    • $plugins:插件继承
  9. 选项$options处理,执行_seekOption方法:

  10. 编程配置 config 合并到 uniform.config中形成最终配置。

  11. Assist数据提取,从 props 和 state 中提取,之后处理 rxAssist 中部函数。

  12. 动态操作符:$opKey 注入

  13. 附加配置:$record 专用处理

    • 外层变量是单变量,用于记录拷贝
    • 如果是数组,必定会在 Form 中选择方式,那可直接走 Assist
    • 外层变量会在config过程中引入特殊属性rowData用于记录外层选中记录
  14. 配置处理完过后冻结,调用:freeze

3. 属性继承表

源属性名 类型 目标属性名 含义
$app props DataObject $app 应用程序配置数据,也可以直接调用Ux.isInit()读取。
$user props Object $user 登录用户基础数据,也可以直接调用Ux.isLogged()读取。
$profile props DataObject $profile (保留属性)
$router props DataRouter $router react-router路由器专用对象。
$menus props Array $menus 当前应用程序所需的所有菜单信息。
$parent props Object $parent 父记录数据(直接引用父记录),一般存储顶层记录数据。
$identifier props String $identifier 统一模型标识符。
$disabled props Boolean $disabled 是否禁用组件。
$submitting props Boolean/DataObject $submitting 如果是redux则是DataObject对象,如果是state中读取,则是Boolean类型。
$selected props Any $selected 从属性中直接继承$selected变量(选中项)。
函数 props Function rx/fn/do 从属性中继承所有函数属性,rx,fn,do三种。
this React reference 构造当前引用,该引用会输入成为组件消费的父引用(Zero Ui基础规范)。
react React react 顶层引用。
$collapsed props Boolean $collapsed 当前应用的菜单打开/关闭状态。
$plugins props Object $plugins 需要继承的插件属性信息。
$options props Object $options 「低优先级」(从属性继承)选项数据。
$options state Object $options 「中优先级」(从当前组件状态中构造)选项数据。
module.options state Object $options 「高优先级」(从当前组件$hoc中读取,远程加本地)选项数据。
辅助数据 props DataArray $t_/$a_ 读取属性直接继承的辅助数据。
辅助数据 state DataArray $t_/$a_ 读取当前组件状态中构造的辅助数据(优先级更高)。
$opKey props String $opKey 动态配置时使用的操作主键$opKey
$record props Any $record 记录专用数据,结构很多,在DialogEditor中还包含了专用rowData数据。
config 计算 Object config 计算最终的组件配置信息。

4. 函数核心

4.1. _seekOption

$options属性构造过程中,原始的uniform.$options = yoOption(reference);已经被废弃,采用新的 _seekOption/_seekOptionPre方法执行计算

  1. 先调用_seekOptionPre方法
  2. 再调用_seekOption方法

配置源头来自于几处:

  1. props属性中的$options变量存储的配置信息。
  2. state状态中$options/options两个变量,options是旧系统专用变量(暂时不废弃),$options是统一过后的新变量。
  3. 如果存在$hoc(执行过资源绑定),那么读取_module节点(远程加本地),使用module.options执行再合并。

4.2. $record/$parent

这两个变量都用于存储父记录数据

  • $parent:父记录专用数据(旧系统模式),标准格式Object
  • $record:扩展模块才出现的专用数据,附加额外的父类数据结构
    • rowData:DialogEditor中用来存储选中行的数据信息。

类似下边布局

|--------------------------------------------------|
|  Form (Grid)                                     |
|                                                  |
|                                                  |
|                                                  |
|--------------------------------------------------|
|  Row                                             |
|  Row                                             |
|  Row                                             |
|--------------------------------------------------|
  • $parent存储的是Form(Grid)表单的完整数据。
  • $record.rowData存储的是字段中某一行的数据(子表单增删改)。

4.3. $record/$options

  • $options用于继承配置内容,元数据继承。
  • $record用于继承数据内容,数据继承。
Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

config Object

额外的配置数据

Returns:

计算最终生成的继承属性专用方法

Type
Object

(static) yoComponent(reference, config) → {Object}

「通道」Ex.yoComponent

yoAmbient函数对应的别名函数,代码逻辑一模一样,yoAmbient等价函数。

Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

config Object

额外的配置数据

Returns:

计算最终生成的继承属性专用方法

Type
Object

(static) yoControl(control) → {Object}

「通道」Ex.yoControl

优先读取Ex.yoAmbient构造继承属性集。

1. 基本介绍

输入配置的基本信息如(四大基本组件):

{
    "type": "COMPONENT / LIST / FORM / CONTAINER",
    "sign": "64位随机加密字符串,组件创建时生成,后期可验证属性的版本。"
}

代码执行流程如下

  1. type = CONTAINER:调用_seekContainer处理容器配置。
  2. type <> CONTAINER的类型:
    1. 先调用_seekContainer处理容器配置。
    2. 再调用_seekComponent处理组件配置。

2. 核心流程解析

2.1. _seekContainer

componentName存在时才能构造容器配置,否则传入的attrs为空对象。

函数签名:

const _seekContainer = (attrs = {}, control = {}, componentType)

主要是构造attrs.container对象,输入的control数据结构如下:

{
     containerConfig: "容器基础配置信息",
     containerName: "「Required」容器名称,必须包含该配置"
}

构造的container的数据结构如下:

{
    key: "设置成控件主键 control.key",
    pageId: "读取控件中关联页面ID control.pageId",
    name: "设置成containerName的值",
    config: "读取containerConfig,否则就直接置空 {}",
    componentType: "函数中的第三参"
}

2.2. _seekComponent

函数签名:

const _seekComponent = (attrs = {}, control = {}) => {

直接构造组件配置,输入的control数据结构如下:

{
    componentConfig: "组件基础配置信息",
    componentData: "当前组件依赖的数据信息",
    componentName: "当前组件名称"
}

构造的最终attrs数据结构如下:

{
    key: "设置成控件主键 control.key",
    pageId: "读取控件中关联页面ID control.pageId",
    name: "设置成componentName的值",
    config: "设置成componentConfig,否则直接置空",
    source: "设置成componentData,作为当前组件专用数据源"
}

3. 容器/组件

动态渲染过程中,最终形成的jsx的数据结构如:

<!-- 容器层 -->
<Container>
    <!-- 组件层 -->
    <Component/>
</Container>

4. 后端动态输入

后端动态输入的结构来自于UI_CONTROL, UI_LIST, UI_FORM几张表,完整数据结构如下:

{
    
}
Parameters:
Name Type Description
control Object

控件原始配置。

Returns:

返回动态处理中的控件专用配置。

Type
Object

(static) yoDynamic(reference) → {Object}

「通道」Ex.yoDynamic

优先读取Ex.yoAmbient构造继承属性集。

1. 基本介绍

动态扩展配置,前置调用yoAmbient方法处理统一配置,然后追加配置:

(新版移除了$identifier,挪动到yoAmbient中,静态动态都会使用)

  1. 追加$controls控件配置信息,直接继承$controls配置数据
  2. 初始化数据 $inited,直接继承初始化表单数据(表单专用)
  3. $mode,表单模式,ADD | EDIT传入
  4. $fabric,Ox的Fabric引擎专用变量,存储了fabric相关配置信息

2. 属性继承表

源属性名 类型 目标属性名 含义
$controls props Any $controls 控件配置数据。
$inited props Object $inited 专用表单初始化数据。
$mode props String $mode 表单模式,ADD = 添加模式,EDIT = 编辑模式。
$fabric props Object $fabric Fabric引擎专用定义数据(执行Ox逻辑专用)。

3. 关于$inited

  1. 默认读取props中的$inited变量作为继承的表单初始化数据
  2. 如果当前组件的状态state中生成了新的$inited数据
    • 子表单专用,使用state中的$inited数据构造子表单初始化数据
    • 构造rxView函数用于更改当前状态中的表单初始化数据
    $inited
---------------> props(低优先级)
                                 $inited, rxView
          ------ state(高优先级)------------------> 子组件
          |        |
       $inited     |
          |        |
          ---------|
Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

Returns:

计算最终生成的继承属性专用方法

Type
Object

(static) yoFilter(reference) → {Object}

「通道」Ex.yoFilter

优先读取Ex.yoDynamic构造继承属性集。

1. 基本介绍

查询表单专用,构造查询信息,内置先调用yoDynamic处理。

  1. 初始化表单值$inited,赋予connector的连接符。
  2. rxClose构造,可关闭子表单。

2. $inited

该方法会为表单数据追加connector字段(搜索条件表单专用)。

Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

Returns:

计算最终生成的继承属性专用方法

Type
Object

(static) yoForm(reference, additional, data) → {Object}

「通道」Ex.yoForm

优先读取Ex.yoAmbient构造继承属性集。

1. 基本介绍

该函数的处理内容:

  1. form 基本配置处理
  2. assist 赋值数据处理
  3. control 控件配置 magic:处理Ajax专用 control:控件配置 addon:处理AddOn
  4. dialog 窗口专用配置
  5. config 核心配置
  6. $inited 初始化数据
  7. 表单处理专用 $identifier:统一标识符 $mode:表单模式,ADD/EDIT $addKey:添加表单的组件

2. 属性继承表

2.1. 构造config属性

源属性名 类型 目标属性名 含义
form addOn Object config.form 编程模式下的表单配置。
_form cab Object config.form 前端静态配置(主配置)。
_formUp cab Object config.form 前端静态上表单配置(辅助配置)。
_formDown cab Object config.form 前端静态下表单配置(辅助配置)。
_form ajax Object config.form 后端动态配置(主配置)。
_formUp ajax Object config.form 后端动态上表单配置(辅助配置)。
_formDown ajax Object config.form 后端动态下表单配置(辅助配置)。
assist addOn Object assist 表单中的辅助数据定义。
magic addOn Object magic 数据远程加载专用配置。
addon addOn Object addon 附加组件专用配置。
control addOn Object control 读取UI_FORM专用远程配置。
dialog addOn Object dialog (标题)构造窗口配置。
modal addOn Object modal (配置)构造窗口配置。

2.2. 特殊继承属性

源属性名 类型 目标属性名 含义
data 入参 Object $inited 构造表单专用数据。
$mode props String $mode 表单模式:ADD,EDIT。
$addKey props Any $addKey 添加生成的UUID,作为子表单专用主键。
$identifier props String $identifier 统一模型标识符。
计算 Object __acl 表单权限基础数据。

3. 表单布局计算

3.1. 配置数据源

  1. addOn.form:通过编程部分拿到的 form 信息
  2. S0(前端静态文件)_form:前端静态配置(主配置)——通常静态form使用此配置
  3. S1(前端上表单)_formUp:前端静态配置(辅助配置)
  4. S2(前端下表单)_formDown:前端静态配置(辅助配置)
  5. D0(后端动态文件)form:后端主配置
  6. D1(后端上表单)formUp:后端主配置
  7. D2(后端下表单)formDown:后端主配置 布局最终顺序:
表单布局顺序       模式1     模式2     模式3
addon.form
        S1                           o
        D1
        S0        o         o        o
        D0                  o        o
        S2                           o
        D2

有了上述结构后,可根据资源文件和远程配置构造不同的表单布局字段数据(2 x 3合计六个维度)。

3.2. 关于表单的权限说明

(略)后期补充

3.3. 专用配置的格式

主要是补充 additional 的格式信息

Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

additional Object

额外配置处理

data Object

数据记录相关信息

Returns:

计算最终生成的继承属性专用方法

Type
Object

(static) yoFormAdd(reference, item) → {Object}

「通道」Ex.yoFormAdd

优先读取Ex.yoAmbient构造继承属性集,当前版本提供给ExListXxx组件内部专用。

1. 基本介绍

该方法近似于yoList,但该属性集是传递给表单,附带了表单属性集。

2. 构造属性表

源属性名 类型 目标属性名 含义
构造 Function rxClose 关闭表单容器专用回调方法。
构造 Function doSubmitting 表单防重复加载设置提交状态专用方法。
构造 Function doDirty 设置当前列表的$dirty = true,通常在配置中才使用。
key 页签 Any $addKey 添加表单主记录主键。
String $mode 固定值"ADD"。
options state Object $identifier 当前列表的配置数据,从配置数据中抽取配置项:identifier
plugins state Object $plugins 为子表单计算pluginField字段控制专用函数。
$query props Object $query 当前列表的查询条件,处理特殊条件专用。
$rowData state Object $record.rowData 子表单中DialogEditor专用行选中记录信息。

3. 核心

3.1. 关于模型标识符

该方法在内部使用,为静态标识符,所以只支持静态模式下的identifier模型标识符读取,不从远程获取, 远程获取会在OxList组件中完成,而不是ExListXxx组件中。

3.2. rxClose

关闭回调函数可以被子表单使用,子表单提交完成后通常会调用rxClose函数关闭表单返回到列表界面, 返回时还会重新加载列表。

Parameters:
Name Type Description
reference Object | ReactComponent

React组件引用,此处一般表示当前ExListXXX组件。

item Object

页签配置

Returns:

传入添加子表单的属性集

Type
Object

(static) yoFormEdit(reference, item) → {Object}

「通道」Ex.yoFormEdit

优先读取Ex.yoAmbient构造继承属性集,当前版本提供给ExListXxx组件内部专用。

1. 基本介绍

该方法近似于yoList,但该属性集是传递给表单,附带了表单属性集。

2. 构造属性表

源属性名 类型 目标属性名 含义
构造 Function rxClose 关闭表单容器专用回调方法。
构造 Function rxView 读取数据记录专用回调方法。
构造 Function doSubmitting 表单防重复加载设置提交状态专用方法。
构造 Function doDirty 设置当前列表的$dirty = true,通常在配置中才使用。
String $mode 固定值"EDIT"。
options state Object $identifier 当前列表的配置数据,从配置数据中抽取配置项:identifier
plugins state Object $plugins 为子表单计算pluginField字段控制专用函数,并且计算pluginRow(转换成pluginForm)控制函数。
$query props Object $query 当前列表的查询条件,处理特殊条件专用。
$inited state Object $inited 编辑表单初始化数据专用。
$rowData state Object $record.rowData 子表单中DialogEditor专用行选中记录信息。

3. 核心

3.1. 关于模型标识符

该方法在内部使用,为静态标识符,所以只支持静态模式下的identifier模型标识符读取,不从远程获取, 远程获取会在OxList组件中完成,而不是ExListXxx组件中。

3.2. 关于插件

pluginRow插件在表单中本身作为了行控制,所以内置子表单的字段控制直接设置成该函数

  • 如果列表中数据不可编辑,那么表单中的数据不可编辑(只读)。
  • 如果列表中数据不可删除,那么表单中的数据不可删除。

编辑/删除两种操作在列表和表单中维持一致性。

Parameters:
Name Type Description
reference Object | ReactComponent

React组件引用,此处一般表示当前ExListXXX组件。

item Object

当前打开以前配置,页签key就是记录主键。

Returns:

传入编辑子表单的属性集

Type
Object

(static) yoList(reference) → {Object}

「通道」Ex.yoList

优先读取Ex.yoAmbient构造继承属性集。

1. 基本介绍

ExListXX组件专用方法,为列表构造所有对应的属性。

2. 构造属性表

源属性名 类型 目标属性名 含义
$query props Object $query 构造默认查询条件,该条件每次执行远程调用后会被重置。
$selected state Array $selected 当前列表选中的行。
$options state Object $options 当前列表的所有配置选项,options节点,属性名中带.操作符。
$condition state Object $condition 列过滤专用条件。
构造 Function rxSearch 加载列表数据专用方法,排序、服务端分页。
构造 Function rxCondition 设置列过滤条件,点击列过滤时专用函数。
构造 Function rxOpen 打开新的Tab页专用函数。
构造 Function rxSelected 选择行数据时专用函数,用于恢复状态专用。
构造 Function rxDelete 删除行记录专用函数。
构造 Function rxView 查看行记录数据专用函数。
构造 Function doLoading 设置加载状态。
构造 Function doDirty (脏数据标记)更改数据状态为脏数据,然后触发列表的自动加载。
rxExtension props Function rxExtension op.extension类Action执行过滤专用函数。
rxPostDelete props Function rxPostDelete rxDelete内部调用。
rxPostSelected props Function rxPostSelected rxSelected内部调用。
rxPostOpen props Function rxPostOpen rxTabAdd/rxTabEdit/rxTabOpen内部调用。
rxPostClose props Function rxPostClose rxTabClose内部调用。

3. 关于$query

$query是整个List组件中最复杂的部分,它包含两部分内容。

3.1. 构造默认条件

调用Ux.qrInherit函数构造默认查询条件:

  1. 基础查询条件
    1. 如果props中传入了$query了,则以此为默认的基础查询条件。
    2. props中未传入,则以state中的query为默认基础条件。
  2. 然后结合状态中的更改条件执行计算(配合QQuery对象)
    1. $condition:列过滤导致的查询条件更改。
    2. $filters:表单查询(基础/高级)导致的查询条件的更累。
  3. 合并到一起后执行最终的运算,如果要移除,则使用__DELETE__值。
  4. 计算时键值使用field,op,如name,=name,>虽然是同一个字段,表示两个不同的条件。

3.2. 关于Dirty

doDirty只在动态渲染界面中使用,当系统检测当前List出现了dirty = true的状态时,系统会自动 刷新当前列表数据(调用rxSearch和默认查询条件)。

3.3. Post系列

Post系列用于行操作时的回调,目前只提供两种:

  • rxPostDelete:删除行时的回调函数。
Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

Returns:

计算最终生成的继承属性专用方法

Type
Object

(static) yoListBatch(reference) → {Object}

「通道」Ex.yoListBatch

优先读取Ex.yoAmbient构造继承属性集,当前版本提供给ExListXxx组件内部专用。

1. 基本介绍

统一处理Batch区域按钮操作,所有的ExListXxx组件共享,主要包含:基础配置:op.batch + 扩展配置:+ op.extension,其中 op.extension 中的配置如:

{
    region: "op.batch.xxx"
}

2. 构造属性表

源属性名 类型 目标属性名 含义
String $category 固定值,按钮类型,LINK | BUTTON两种,此处为LINK
构造 Function doSubmitting 表单防重复加载设置提交状态专用方法。
构造 Function doDirty 设置当前列表的$dirty = true,通常在配置中才使用。
构造 Function rxBatchEdit 批量编辑所需的外层函数,设置选中状态专用。
$columns state Array (内嵌) 「动态」批量编辑op.batch.edit专用配置,编辑表单读取属性用。
$columnsMy state Array (内嵌) 「动态」批量编辑op.batch.edit专用配置,编辑表单读取属性配置用。
$selected state Array $selected 已选中的项数据列表。
$submitting state Boolean $submitting 防重复提交的基础提交状态。
构造 Array config 按钮专用配置构造函数,构造两部分:基础 + 扩展,包括选择未选中的状态计算。

3. 核心

3.1. 关于选中

批量操作启用时,<Table/>中会根据批量操作种类设置多选框,一旦有一个操作合法则会提供多选框, 多选框操作变量为$selected,它为批量操作提供了数据选中依据,为了防止用户选错,当任何选项都未选中时, 批量操作会被禁用。

3.2. 关于编辑

批量编辑是Zero Ui提供的固定功能,op.batch.edit,该功能会根据当前记录的列信息和视图信息(columnFull/columnMy)来计算 最终可编辑的属性表,属性信息支持不同种类,其控件内容也不同。

Parameters:
Name Type Description
reference Object | ReactComponent

React组件引用,此处一般表示当前ExListXXX组件。

Returns:

button.config中保存了所有按钮信息

Type
Object

(static) yoListExtra(reference) → {Object}

「通道」Ex.yoListExtra

优先读取Ex.yoAmbient构造继承属性集,当前版本提供给ExListXxx组件内部专用。

1. 基本介绍

统一处理Extra区域按钮操作,所有的ExListXxx组件共享,主要包含:基础配置:op.extra + 扩展配置:+ op.extension,其中 op.extension 中的配置如:

{
    region: "op.extra.xxx"
}

关于 $columns/$columnsMy 的注入,这个区域也会需要,但由于数据结构不同,而一直没有出问题,这部分暂时不执行代码合并。重复代码部分如:

     editorRef.config.forEach((config = {}) => {

         const {component = {}} = config;
         const editorRef = component.config;

         editorRef.$columns = $columns;
         editorRef.$columnsMy = $columnsMy;
     });

2. 构造属性表

源属性名 类型 目标属性名 含义
构造 Function doSubmitting 表单防重复加载设置提交状态专用方法。
构造 Function doDirty 设置当前列表的$dirty = true,通常在配置中才使用。
构造 Function rxColumnSave 保存我的视图专用方法,可创建我的列视图
构造 Function rxExport 导出数据按钮专用。
构造 Function rxImport 导入数据专用按钮。
构造 Function rxProjection 设置projection列视图专用方法,选择了列视图过后,可设置当前列表显示那些列信息。
$columns state Array (内嵌) 我的视图列。
$columnsMy state Array (内嵌) 模型全列。

3. 核心

3.1. 关于列视图

列视图在构造过程中层次如下:

|-------------------------------------------- 全列 |
|--------------------------------------     业务列 |
|------------------------------ ACL控制      可见列 |
|------------------------ 保存               视图列 |

最终关系:

  1. 全列 = 系统列(不可见) + 业务列(可见)
  2. 业务列 = ACL可见($columns) + ACL不可见(权限控制列)
  3. ACL可见列 = 我的视图列($columnsMy) + 视图未选中列

3.2. 三个基础函数

该函数会构造三个核心函数,对应三个系统按钮

按钮代码 函数 含义
op.extra.column rxProjection 设置选中列,未保存之前刷新后失效,如果保存了下一次生效。
op.extra.export rxExport 导出数据专用按钮。
op.extra.import rxImport 导入数据专用按钮。
Parameters:
Name Type Description
reference Object | ReactComponent

React组件引用,此处一般表示当前ExListXXX组件。

Returns:

button.config中保存了所有按钮信息

Type
Object

(static) yoListOpen(reference) → {Object}

「通道」Ex.yoListOpen

优先读取Ex.yoAmbient构造继承属性集,当前版本提供给ExListXxx组件内部专用。

1. 基本介绍

统一处理Open区域按钮操作,所有的ExListXxx组件共享,主要包含:基础配置:op.open + 扩展配置:+ op.extension,其中 op.extension 中的配置如:

{
    region: "op.open.xxx"
}

2. 构造属性表

(无)

3. 核心

3.1. 清除

针对op.open.filter执行查询条件清除按钮的禁用和启用提示,如果执行了列过滤,则启用该按钮,如果未执行,则不启用该按钮,根据$condition来。

Parameters:
Name Type Description
reference Object | ReactComponent

React组件引用,此处一般表示当前ExListXXX组件。

Returns:

button.config中保存了所有按钮信息

Type
Object

(static) yoListSearch(reference) → {Object}

「通道」Ex.yoListSearch

优先读取Ex.yoAmbient构造继承属性集,当前版本提供给ExListXxx组件内部专用。

1. 基本介绍

*: 这个函数和其他yoList有一定区别,主要在属性构造上。

基础搜索/高级搜索工具栏专用,基本逻辑类似于yoFormAdd/yoFormEdit,提供给查询表单用的属性集。

2. 构造属性表

源属性名 类型 目标属性名 含义
options state Object $options 当前组件构造的options选项信息,直接继承。
$filters state Object $inited 「主条件」根据条件数据构造高级搜索表单的初始化数据。
$filtersRaw state Object $inited 「辅助条件」根据条件数据构造高级搜索表单的初始化数据,配置化特殊情况专用。
构造 Object config 从options中直接抽取search打头的选项。
构造 Boolean $disableClear 是否禁止清空按钮,如果没有条件则禁用该按钮。
构造 Function rxFilter 构造查询条件,双参,同时修改主条件和辅助条件,查询表单提交用。
$form props Object $form 传入基础配置key = Jsx的表单元素哈希表,后期根据键值抽取表单。

3. 核心

3.1. 关于搜索模式

搜索模式可以通过search.enabledsearch.advanced两个选项来执行开启和禁用:

  1. search.enabled:启用基础搜索(搜索框)。
  2. search.advanced:启用高级搜索(搜索表单)。

3.2. 查询条件

影响ExListXxx的条件有三个状态值:$filters, $condition, $query

  • $query:主条件,包括从外置传入的条件
  • $condition:列过滤专用条件
  • $filters:当前组件操作的条件(基础搜索和高级搜索)
Parameters:
Name Type Description
reference Object | ReactComponent

React组件引用,此处一般表示当前ExListXXX组件。

Returns:

工具栏消费专用的属性集。

Type
Object

(static) yoPolymorphism(reference, form) → {Object}

「通道」Ex.yoPolymorphism

1. 基本介绍

动态扩展配置,前置调用yoAmbient方法处理统一配置,之后追加:

  1. 直接读取fromHoc中的grid配置
  2. 如果传入了专用表单配置,则处理form表单配置,填充$form变量
  3. state中的$query读取
  4. state中的config.options中读取$identifier
  5. 构造$inited中的$identifier

2. 构造属性表

源属性名 类型 目标属性名 含义
config state Object config 直接从 grid 中读取核心配置,Ox组件动态渲染专用。
$query state Object $query 构造子组件所需的查询条件。
form 第二参 Object $form 表单配置,使用拷贝config改变原始配置。
$identifier props String $identifier 统一模型标识符。

3. 核心

3.1. 特定场景

对应特定界面处理,目前常用于X_CATEGORYX_TABULAR的管理。

|--------------------------------------------------|
|  Menu  |  Content ( List )                       |
|        |  Row                                    |
|        |  Row                                    |
|        |  Row                                    |
|        |  Row                                    |
|        |  Row                                    |
|        |  Row                                    |
|--------------------------------------------------|
  • 左边部分是选择。
  • 右边部分是一个完整带有List界面的主界面(ExListXxx页)。
Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

form Object
Returns:

计算最终生成的继承属性专用方法

Type
Object

(static) yoRender(reference, fnJsx, debug) → {JSX.Element}

「通道」Ex.yoRender

1. 基本介绍

(高频函数)执行渲染拦截的专用函数:

  1. $ready = true,执行渲染。
  2. $ready = false,不执行渲染,只 Loading。

2. 核心

2.1. 加载

该函数不提供属性集,主要用于加载,它和xtReady的区别点在于:

  • xtReady:自定义组件专用economy目录下的所有组件。
  • yoRender:Extension组件专用extension/ecosystem目录下的扩展组件。

2.2. 过渡

这个函数主要为过渡效果量身打造。

Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

fnJsx function

执行jsx的Render

debug Object

调试信息

Returns:
Type
JSX.Element

(static) yoTable(reference) → {Object}

「通道」Ex.yoTable

优先读取Ex.yoList构造继承属性集,当前版本提供给ExListOpen组件内部专用。

1. 基本介绍

ExListOpen是新组件,在ExListComplex基础上去掉复杂的列过滤、查询等相关功能,只保留:

  1. 行操作扩展,除开编辑、删除,还可定制其他行扩展按钮。
  2. 添加区域操作扩展,除开添加按钮,还可定制其他区域按钮。

2. 构造属性表

源属性名 类型 目标属性名 含义
table state Object config 表格的基础配置,对应<Table/>的配置。
op state Object $batch 计算是否支持批量操作,如果不支持批量则批量区域不显示内容。
$plugins state Object $plugins 可定制插件提供给表格列使用。
$executor props Object $executor 提供key = Function的哈希表,用于执行直接的行操作回调。
$dirty state Boolean $dirty 脏数据检查。
$loading state Boolean $loading 当前表格是否处于加载状态,提交/加载过程都有可能。
$dirtyAsync state Boolean $dirtyAsync 异步脏数据检查,对于某些特定场景下Ajax操作导致的脏数据检查。

3. 核心

该操作核心内容在yoList中,附加内容只是追加过程,所以列表支持的功能,纯表格也同样支持。

Parameters:
Name Type Description
reference Object

React组件引用

Returns:

表格专用配置

Type
Object

(static) yoTabPage(reference, items, index, item) → {Object}

「通道」Ex.yoTabPage

1. 基本介绍

该函数用于构造<Tabs/>中每一页专用的配置,该值最终会构造<Tabs.TabPane/>元素。

核心逻辑

  1. 根据tabs.count运算可打开的页签数,超过限制不再打开。
  2. 如果打开了新的页签,旧页签是否处于禁用状态(防止不专注工作副总用)。
Parameters:
Name Type Description
reference Object | ReactComponent

React组件引用

items Array

每一个页签的配置,构成完整数组

index Number

当前页签的索引信息

item Object

每一个页签的配置信息

Returns:
Type
Object

(static) yuRouter(reference, virtualRef, callback)

「通道」Ex.yuRouter

1. 基本介绍

特殊方法,该方法在Ux.isRoute之前,需要和它做出对比:

  • Ux.isRoute是检查路由的路径是否发生更改(无关参数),返回true/false值。
  • Ex.yuRouter是检查路由路径中的参数是否发生了更改,直接执行回调。

2. 代码示例

const reference = this;
Ex.yuRouter(reference, {props, state}, () =>
     Ex.yiStandard(reference).then(Ux.pipe(reference)));

操作界面同样是如下,左边点击菜单时只会发生参数更改,路由路径不变化。

|--------------------------------------------------|
|  Menu  |  Content ( List )                       |
|        |  Row                                    |
|        |  Row                                    |
|        |  Row                                    |
|        |  Row                                    |
|        |  Row                                    |
|        |  Row                                    |
|--------------------------------------------------|
Parameters:
Name Type Description
reference Object | ReactComponent

React对应组件引用

virtualRef Object

旧的属性和状态

callback function

路由变化的回调函数