核心通道模块
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 | 输入reference 和sourceKey (上述调用代码第二参)。 |
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
执行数据预处理
- 提取所有
USER
列相关信息。 - 根据传入数据执行
$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
带有企业信息页面的专用处理流程,主要用于查询条件设置。
- 员工页面
- 部门页面
- 组页面
- 分公司页面
为这些页面注入 companyId
的查询条件,直接根据 $query 的查询条件注入特定条件:
companyId,=<公司ID值>
这里的companyId的数据源来自于props中的$inited.key
变量,最终会生成特定的$query存储在
reference的state状态信息中,构造特定查询条件,不仅如此,companyId,=
的条件会注入到Qr流程,挂载到
$query
的criteria
节点中。
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React对应组件引用 |
Returns:
返回Promise。
- Type
- Promise.<T>
(static) yiContainer(reference) → {Promise.<T>}
「通道」Ex.yiContainer
1. 基本介绍
模板处理种类
- 静态模板
- 动态模板
动态模板判断
判断$dynamic
的依据和条件:
- $router 中的 path 路径以:/ui/ 开头
- $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
对象中抽取数据信息:
- 根据
$output.layout
重写状态中的state.$tpl
模板信息。 - 若包含
$output.containerName
则重写状态中state.$container
容器信息。 - 页面组件解析:
- 解析
$output.secure
属性,追加state.$secure
属性。 - 读取
$output.grid
网格布局属性,重写state.$grid
属性。 - 读取
$output.assist
辅助数据定义,重写state.$assist
属性。 - 读取
$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
- 单参,直接提取控件配置,调用
yoControl
执行容器和组件的配置规范化(container/component)。 - 双参,根据
control
和类型type
执行控件配置提取(包括Form和List)- 根据控件ID(
control
)和类型(type
)读取基本配置和操作配置。 - 在响应信息中为操作注入ACL安全配置信息
__acl
。 - 再执行
parseControl
方法执行控件配置规范化(主要针对操作)
- 根据控件ID(
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 的配置信息来源于三部分:
UI.json
:静态配置,会在 reference 中生成 $hoc 变量- 远程的 UI_MODULE中的 metadata 字段
- (默认值)最初的 metadata 字段为 FILE 模式(即文件路径)
- (动态管理)如果管理过程中执行了更新,那么直接就是 metadata 的内容
- 如果 standard = false 那么不考虑 $hoc 的生成,而是直接使用 hoc 变量
- 这种情况不引入 HocI18r 同样不引入 HocI18n 两个数据结构
- 如果
standard = true
那么有两种可能- 已经绑定过 UI.json,则使用混合模式(远程优先)
- 未绑定过 UI.json,则直接使用远程模式
2. 模块读取
根据路径直接读取,路径中包含三部分,如:
/ox/ci/search
{
app: "ox",
module: "ci",
page: "search"
}
src/components/ci/search
代码目录中。
Zero Ui中定义的应用维度主要分三层
- app:应用层,依靠
Z_ROUTE
的环境变量规划不同的应用,多应用区分。 - module:模块,
src/components
目录下的第一层目录,上述的ci
目录。 - page:页面,
src/components
目录下的第二层目录,上述的search
目录。
3. 配置对象
Zero Ui中的配置对象有两种类型:HocI18n
和HocI18r
两种,这两种数据对象的函数是一样的,但类型不同,也就是说
这两个对象在调用配置读取的API如Ux.fromHoc
和Ux.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
来实现表单初始化。
该方法执行流程如下:
- 先从绑定的资源文件
cab/<LANG>/
中读取_form
节点中的配置信息。 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. 基本介绍
标准核心模块专用方法,内部调用函数
- yiModule
- yiAssist
- yiParameters
2. yiParameters
yiModule
和yiAssist
可直接参考文档中的做法,yiParameters用于处理路由中的参数,
构造reference.state
中特定的$query
变量。
- 从
$router
中读取核心参数type
和status
。 - 如果构造的条件超过1个,使用
AND
连接符。
参数 | 含义 |
---|---|
type | 广义的类型参数。 |
status | 广义的状态参数。 |
上述读取参数可位于路径中,也可位于查询字符串中,如/uri/xxx/:p1?p2=v2
,p1
和p2
都是合法参数。
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. 基本介绍
用于渲染通用模块:
/ambient/tabular/:type
字典/ambient/category/:type
类别(树形字典)/ambient/employee/:type
员工/ambient/identity/:type
档案(个人隐私)/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
的配置插入到对应位置,并且这些按钮的显示还被下边两个因素影响:
- 操作用户是否具有这些操作按钮的ACL权限。
- 这个列表中是否已经配置了这些按钮。
2. 构造属性表
源属性名 | 源 | 类型 | 目标属性名 | 含义 |
---|---|---|---|---|
构造 | state | config | 计算当前Extra区域按钮的基本配置。 | |
$submitting | state | Boolean | $submitting | 是否处于提交状态(防重复提交专用属性)。 |
activeKey | 第二参数 | String | $activeKey | 被激活的页签主键。 |
$view | state | String | $view | 视图模式读取,三种:list, add, edit 。 |
构造 | Function | doSubmitting | 防重复提交专用函数。 |
3. 核心
3.1. 满足构造条件
- 视图模式必须是
add
或edit
。 - 如果是
add
,必须配置了tabs.extra.add
项。 - 如果是
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 |
|
UI |
function |
Returns:
- Type
- Object
(static) yoAction(reference, prefix, ordered) → {Object}
「通道」Ex.yoAction
优先读取
Ex.yoAmbient
构造继承属性集。
1. 基本介绍
按钮和操作专用,ExAction/ExButton
专用的处理。
按钮专用过滤函数,主要过滤几个区域的核心按钮:
- Open区
- Batch区
- Search区
- Extra区
- Row区
- Extension扩展(全区域)
2. 核心执行逻辑
该函数的核心执行逻辑如:
- 调用
yoAmbient
初始化继承属性。 - 顺序计算/无序计算(针对state中的
op
变量定义)。 - 执行前缀过滤。
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. 核心属性
计算继承属性(统一继承属性专用处理),统一继承的属性:
-
基本属性:
- $app:应用数据,DataObject
- $user:登录用户数据,Object
- $router:路由数据,DataRouter
- $menus:菜单专用数据,DataObject
- $profile: 登录用户Profile信息
- $parent: 父记录专用数据
- $submitting:redux防重复提交专用
- $hotel:旧系统专用
-
标识符专用属性,读取属性中的 $identifier 模型标识符。
-
特殊禁用变量:$disabled 属性。
-
提交状态变量
- $submitting:正在提交
- $loading:正在加载
- $dirty:脏数据
- $collapsed:菜单开合处理
-
选中项:$selected
-
函数处理,继承函数前缀:
rx, do, fn
。 -
特殊引用
- reference:父引用
- react:根引用
-
插件配置
- $plugins:插件继承
-
选项
$options
处理,执行_seekOption
方法: -
编程配置 config 合并到
uniform.config
中形成最终配置。 -
Assist数据提取,从 props 和 state 中提取,之后处理 rxAssist 中部函数。
-
动态操作符:
$opKey
注入 -
附加配置:
$record
专用处理- 外层变量是单变量,用于记录拷贝
- 如果是数组,必定会在 Form 中选择方式,那可直接走 Assist
- 外层变量会在config过程中引入特殊属性
rowData
用于记录外层选中记录
-
配置处理完过后冻结,调用:
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
方法执行计算
- 先调用
_seekOptionPre
方法 - 再调用
_seekOption
方法
配置源头来自于几处:
- props属性中的
$options
变量存储的配置信息。 - state状态中
$options/options
两个变量,options是旧系统专用变量(暂时不废弃),$options是统一过后的新变量。 - 如果存在
$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位随机加密字符串,组件创建时生成,后期可验证属性的版本。"
}
代码执行流程如下
type = CONTAINER
:调用_seekContainer
处理容器配置。type <> CONTAINER
的类型:- 先调用
_seekContainer
处理容器配置。 - 再调用
_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中,静态动态都会使用)
- 追加$controls控件配置信息,直接继承
$controls
配置数据 - 初始化数据 $inited,直接继承初始化表单数据(表单专用)
- $mode,表单模式,
ADD | EDIT
传入 - $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
- 默认读取props中的
$inited
变量作为继承的表单初始化数据 - 如果当前组件的状态state中生成了新的
$inited
数据- 子表单专用,使用state中的
$inited
数据构造子表单初始化数据 - 构造rxView函数用于更改当前状态中的表单初始化数据
- 子表单专用,使用state中的
$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
处理。
- 初始化表单值
$inited
,赋予connector
的连接符。 - 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. 基本介绍
该函数的处理内容:
- form 基本配置处理
- assist 赋值数据处理
- control 控件配置 magic:处理Ajax专用 control:控件配置 addon:处理AddOn
- dialog 窗口专用配置
- config 核心配置
- $inited 初始化数据
- 表单处理专用 $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. 配置数据源
- addOn.form:通过编程部分拿到的 form 信息
- S0(前端静态文件)_form:前端静态配置(主配置)——通常静态form使用此配置
- S1(前端上表单)_formUp:前端静态配置(辅助配置)
- S2(前端下表单)_formDown:前端静态配置(辅助配置)
- D0(后端动态文件)form:后端主配置
- D1(后端上表单)formUp:后端主配置
- 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组件引用,此处一般表示当前 |
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组件引用,此处一般表示当前 |
item |
Object | 当前打开以前配置,页签 |
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
函数构造默认查询条件:
- 基础查询条件
- 如果props中传入了
$query
了,则以此为默认的基础查询条件。 - props中未传入,则以state中的
query
为默认基础条件。
- 如果props中传入了
- 然后结合状态中的更改条件执行计算(配合QQuery对象)
- $condition:列过滤导致的查询条件更改。
- $filters:表单查询(基础/高级)导致的查询条件的更累。
- 合并到一起后执行最终的运算,如果要移除,则使用
__DELETE__
值。 - 计算时键值使用
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组件引用,此处一般表示当前 |
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控制 可见列 |
|------------------------ 保存 视图列 |
最终关系:
- 全列 = 系统列(不可见) + 业务列(可见)
- 业务列 = ACL可见($columns) + ACL不可见(权限控制列)
- ACL可见列 = 我的视图列($columnsMy) + 视图未选中列
3.2. 三个基础函数
该函数会构造三个核心函数,对应三个系统按钮
按钮代码 | 函数 | 含义 |
---|---|---|
op.extra.column | rxProjection | 设置选中列,未保存之前刷新后失效,如果保存了下一次生效。 |
op.extra.export | rxExport | 导出数据专用按钮。 |
op.extra.import | rxImport | 导入数据专用按钮。 |
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React组件引用,此处一般表示当前 |
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组件引用,此处一般表示当前 |
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.enabled
和search.advanced
两个选项来执行开启和禁用:
search.enabled
:启用基础搜索(搜索框)。search.advanced
:启用高级搜索(搜索表单)。
3.2. 查询条件
影响ExListXxx
的条件有三个状态值:$filters, $condition, $query
:
- $query:主条件,包括从外置传入的条件
- $condition:列过滤专用条件
- $filters:当前组件操作的条件(基础搜索和高级搜索)
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React组件引用,此处一般表示当前 |
Returns:
工具栏消费专用的属性集。
- Type
- Object
(static) yoPolymorphism(reference, form) → {Object}
「通道」Ex.yoPolymorphism
1. 基本介绍
动态扩展配置,前置调用yoAmbient
方法处理统一配置,之后追加:
- 直接读取fromHoc中的grid配置
- 如果传入了专用表单配置,则处理form表单配置,填充$form变量
- state中的$query读取
- state中的config.options中读取$identifier
- 构造$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_CATEGORY
和X_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. 基本介绍
(高频函数)执行渲染拦截的专用函数:
$ready = true
,执行渲染。$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
基础上去掉复杂的列过滤、查询等相关功能,只保留:
- 行操作扩展,除开编辑、删除,还可定制其他行扩展按钮。
- 添加区域操作扩展,除开添加按钮,还可定制其他区域按钮。
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/>
元素。
核心逻辑
- 根据
tabs.count
运算可打开的页签数,超过限制不再打开。 - 如果打开了新的页签,旧页签是否处于禁用状态(防止不专注工作副总用)。
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 | 路由变化的回调函数 |