Extension内核模块
扩展内核的核心模块
操作列表
函数 | 说明 |
---|---|
authData | ACL管理中生成定义数据专用函数。 |
authGroups | ACL权限分组专用函数。 |
authKeySet | ACL操作过程中已选择值专用函数。 |
authRequest | ACL请求构造专用函数。 |
authRule | ACL资源访问者规则定义读取专用函数。 |
authTpl | ACL界面模板生成专用函数。 |
authTreeRes | ACL资源树数据构造函数。 |
configClick | 按钮扩展配置。 |
configColumn | 表格列扩展配置。 |
configDialog | 窗口扩展配置。 |
configGrid | Grid布局扩展配置。 |
configRelation | 关系运算扩展配置。 |
designer | 「内部类」图编辑器。 |
dialog | 「内部类」窗口。 |
form | 「内部类」表单。 |
inApi | 接口管理输入。 |
init | 「内部类」初始化数据(环境信息)。 |
inJob | 任务管理输入。 |
outApi | 接口管理输出。 |
outJob | 任务管理输出。 |
parserOfButton | 「解析」生成操作专用解析器。 |
parserOfColor | 「解析」生成彩色日志解析器。 |
sexExAction | 扩展操作专用函数,处理特定配置。 |
sexExPlugin | 插件接入专用函数,处理和插件相关的部分。 |
uiDialog | 「组件」构造Dialog快速开发组件。 |
uiTab | 「组件」构造Tab快速开发组件。 |
xuiContainer | 动态渲染容器组件(模板)。 |
xuiDecorator | 动态渲染修饰模块(容器+组件)。 |
xuiGrid | 动态渲染Grid组件(页面+组件)。 |
Methods
(static) authData(configuration, items, views) → {Object}
「引擎」Ex.authData
1.基本介绍
复杂配置,用于生成数据域的元数据定义信息,主要包含:
- 行定义信息(rows),执行行过滤专用。
- 查询条件信息(criteria),执行数据过滤专用(预处理)。
- 列定义信息(projection),执行列过滤专用。
- 资源视图信息(view),执行资源视图筛选(主视图)。
- 资源访问者信息(visitant),新维度,执行复杂的资源访问逻辑。
Parameters:
Name | Type | Description |
---|---|---|
configuration |
Object | 传入的核心ACL配置数据 |
items |
Array | 和ACL配置相关的资源组项目信息 |
views |
Array | 视图信息 |
Returns:
- Type
- Object
(async, static) authGroups(state, types) → {Promise.<*>}
「引擎」Ex.authGroups
1.基本介绍
- 根据传入的 treeData 提取 resource.tree 构造分类
- 读取远程的权限组,权限组挂在分类下边
该方法用于在管理过程中将资源和权限进行树形分组,生成引导菜单。
Parameters:
Name | Type | Description |
---|---|---|
state |
State | 当前组件状态信息 |
types |
Array | 资源树类型定义信息 |
Returns:
- Type
- Promise.<*>
(static) authKeySet(source, config, grouped) → {Object}
「引擎」Ex.authKeySet
1.基本介绍
根据datum的字典数据以及动态执行器,生成不同权限管理的基础配置(主视图)。
Parameters:
Name | Type | Description |
---|---|---|
source |
Array | 资源记录过滤源 |
config |
Object | 行过滤、列过滤、查询条件基础配置 |
grouped |
Object | 权限分组哈希表 |
Returns:
最终的权限定义主键集
- Type
- Object
(static) authRequest(reference, selected, fnEvent) → {Object}
「引擎」Ex.authRequest
1.基本介绍
生成ACL管理请求专用函数,针对不同类型的权限管理生成统一的ACL管理请求。
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React组件引用 |
selected |
Array | 权限管理过程中已经选择的项 |
fnEvent |
function | 专用事件执行函数(生成数据专用) |
Returns:
- Type
- Object
(static) authRule()
「引擎」Ex.authRule
1.基本介绍
读取当前界面相关的所有权限管理规则定义,这个方法用来完成界面生成(动态专用)。
(async, static) authTpl(params) → {Promise.<*>}
「引擎」Ex.authTpl
1.基本介绍
生成界面模板,根据界面模板来处理ACL管理。
Parameters:
Name | Type | Description |
---|---|---|
params |
Object | 当前请求的参数信息 |
Returns:
- Type
- Promise.<*>
(async, static) authTreeRes(state) → {Promise.<*>}
「引擎」Ex.authTreeRes
1.基本介绍
- 直接读取 resource.tree 中的内容
- 遇到 ID:XXX 需要执行判断,进行深度树的二次读取
- 最终构造完成的树形数组(parentId一致)
Parameters:
Name | Type | Description |
---|---|---|
state |
State | React组件状态 |
Returns:
- Type
- Promise.<*>
(static) configClick(config, reference) → {function}
「配置」Ex.configClick
按钮扩展配置。
Parameters:
Name | Type | Description |
---|---|---|
config |
Object | 按钮完整配置 |
reference |
Object | ReactComponent | React对应组件引用 |
Returns:
返回需要绑定的执行函数
- Type
- function
(static) configColumn(original, config) → {Array}
「配置」Ex.configColumn
表格列扩展配置。
Parameters:
Name | Type | Description |
---|---|---|
original |
Array | 原始列配置 |
config |
Object | 表格专用输入配置 |
Returns:
返回处理过后的列配置
- Type
- Array
(static) configDialog(input) → {Object}
「配置」Ex.configDialog
窗口扩展配置
Button / Link 中的 Dialog专用配置,直接的 Dialog不需要配置 转换处理,Dialog的基础配置直接放到 config 变量中
返回数据格式如:
{
button: "按钮基本配置",
dialog: "关联窗口配置",
component: "按钮关联组件",
componentConfig: "关联组件配置"
}
Parameters:
Name | Type | Description |
---|---|---|
input |
Object | 基本输入配置 |
Returns:
返回构造好的配置
- Type
- Object
(static) configGrid(grid, control, prefix) → {Array}
「配置」Ex.configGrid
Grid布局扩展配置。
Parameters:
Name | Type | Description |
---|---|---|
grid |
Array.<Array> | 矩阵专用扩展Grid布局配置 |
control |
Object | 控件表 |
prefix |
String | 前缀信息,用于识别组件的key专用 |
Returns:
返回最终布局
- Type
- Array
(static) configRelation(data, config, reference) → {Object}
「配置」Ex.configRelation
关系扩展配置,data 中的数据结构:
{
"up": [],
"down": []
}
Parameters:
Name | Type | Description |
---|---|---|
data |
Object | 基本数据信息 |
config |
Object | 关系完整配置 |
reference |
Object | ReactComponent | React对应组件引用 |
Returns:
最终的关系配置数据信息
- Type
- Object
(static) designer(reference) → {Object}
「内部类」Ex.designer
图编辑器专用(文档暂时不提供)
Parameters:
Name | Type | Description |
---|---|---|
reference |
Returns:
- Type
- Object
(static) dialog(reference) → {Object}
「内部类」Ex.dialog
根据 reference
执行窗口操作
{
add: (data) => Promise,
save: (data) => Promise,
saveRow: (data) => Promise,
saveSelected: (data) => Promise
}
函数说明
函数名 | 说明 |
---|---|
add | 窗口添加执行 |
save | 窗口保存执行 |
saveRow | 保存当前行 |
saveSelected | 保存当前窗口选择的 |
当前API的框架内部调用代码如:
import Ex from 'ex';
const $opSaveField = (reference) => params =>
Ex.dialog(reference).saveRow(params);
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React对应组件引用 |
Returns:
返回对象信息
- Type
- Object
(static) form(reference) → {Object}
「内部类」Ex.form
根据 reference
执行表单操作
{
add: (params) => Promise,
save: (params) => Promise,
remove: (params) => Promise,
filter: (params) => Promise,
query: (params) => Promise,
wizard: (params) => Promise
}
函数说明
函数名 | 说明 |
---|---|
add | 添加表单提交 |
save | 保存表单提交 |
remove | 删除表单提交 |
filter | 高级搜索查询条件处理 |
query | 直接搜索表单处理 |
wizard | 步骤表单提交 |
当前API的框架内部调用代码如:
import Ex from 'ex';
const $opAdd = (reference) => params => Ex.form(reference).add(params, {
uri: "/api/role",
dialog: "added",
});
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React对应组件引用 |
Returns:
返回对象信息
- Type
- Object
(static) inApi(uri) → {Object}
「输入」Ex.inApi
任务处理输入
Parameters:
Name | Type | Description |
---|---|---|
uri |
Object | 任务配置 |
Returns:
处理过的任务数据
- Type
- Object
(static) init(reference) → {Object}
「内部类」Ex.init
根据 reference
执行初始化
{
"company": () => Promise
}
函数说明
函数名 | 说明 |
---|---|
company | 企业信息初始化 |
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React对应组件引用 |
Returns:
返回最终数据
- Type
- Object
(static) inJob(mission) → {Object}
「输入」Ex.inJob
任务处理输入
Parameters:
Name | Type | Description |
---|---|---|
mission |
Object | 任务配置 |
Returns:
处理过的任务数据
- Type
- Object
(static) outApi(params) → {Object}
「输出」Ex.outApi
任务处理输出
Parameters:
Name | Type | Description |
---|---|---|
params |
Object | 提交之前原始任务数据 |
Returns:
任务输出数据
- Type
- Object
(static) outJob(params) → {Object}
「输出」Ex.outJob
任务处理输出
Parameters:
Name | Type | Description |
---|---|---|
params |
Object | 提交之前原始任务数据 |
Returns:
任务输出数据
- Type
- Object
(static) parserOfButton(reference) → {Object}
「解析」Ex.parserOfButton
1. 基本介绍
生成按钮专用解析器,返回对象结构如(每个键都是函数):
{
parsePlugin: () => "按钮插件解析函数",
parseComponent: () => "组件解析函数",
parseControl: () => "按钮本身解析函数,解析不同组件专用,LIST, FORM 不同",
parseOp: () => "解析按钮本身专用方法",
}
函数名 | 异步 | 同步 | 含义 |
---|---|---|---|
parsePlugin | o | o | 插件解析专用。 |
parseComponent | o | o | 组件解析专用。 |
parseControl | o | o | 控件解析专用。 |
parseOp | o | x | 操作按钮解析专用。 |
2. 子函数解析
2.1. parsePlugin(解析Object)
入参表
参数名 | 类型 | 含义 |
---|---|---|
buttons | Object | 全按钮配置,key = Object 结构。 |
options | Object | 列表/组件的专用配置options 结构。 |
async | Boolean | 是否执行异步模式。 |
插件解析主要处理Object
的按钮专用,处理每个元素(Object类型)的配置信息,它用来处理按钮的某些功能。
button元素中有关此函数的数据结构如下:
{
plugin:{
tooltip: "...",
confirm: "...",
prompt: "...",
connect: "...",
message: "..."
}
}
配置项
配置项 | 类型 | 表达式 | 含义 |
---|---|---|---|
tooltip | Boolean | 启用tooltip功能,直接设置tooltip=true 来打开<Tooltip/> ,按钮外围浮游提示信息。 |
|
confirm | String | options[confirm] | 执行Modal.confirm 功能,弹出提示框确认/取消。 |
prompt | String | options[prompt] | 实现浮游提示确认/取消框。 |
connect | String | options[connect] | 配置被链接的操作元素ID,最终会调用Ux.connectId 触发该元素的onClick事件。 |
message | String | options[message] | 需要使用的文本信息。 |
2.2. parseComponent(解析Object)
入参表
参数名 | 类型 | 含义 |
---|---|---|
buttons | Object | 全按钮配置,key = Object 结构。 |
options | Object | 列表/组件的专用配置options 结构。 |
component | Object | 动态组件配置信息。 |
async | Boolean | 是否执行异步模式。 |
组件解析主要处理Object
中按钮配置专用,component
(第三参)中的结构如:
{
plugin: "Jsx元素集合,里面包含了所有可读取的组件信息。",
config: "Jsx元素所需的配置数据。"
}
// 抽取配置代码如下
const Jsx = components.plugin;
const config = components.config;
只有
plugin
和config
有值或存在时才执行解析流程!!
按钮配置中会存在如下数据结构:
{
plugin: {
componentType: "",
component: ""
}
}
配置项
配置项 | 类型 | 表达式 | 含义 |
---|---|---|---|
componentType | String | Jsx[componentType] | 用于读取Jsx元素 |
component | String | config | component] |
注入完成了组件的Jsx元素和配置数据过后,就会调用_parseContainer
方法执行外层容器元素信息,容器元素
主要由按钮元素的plugin决定:
{
plugin:{
window: "弹出窗口",
popover: "浮游窗口",
drawer: "抽屉窗口"
}
}
构造的配置数据结构如下:
{
type: "窗口类型",
dialog: "解析的窗口配置"
}
完整配置表格如下:
待解析节点 | 生成type | 调用函数生成dialog |
---|---|---|
window | WINDOW | Ux.aiExprWindow |
popover | POPOVER | Ux.aiExprPopover |
drawer | DRAWER | Ux.aiExprDrawer |
三者都无 | NONE | <无dialog节点> |
该函数最终生成的完整配置表如下:
{
component: "Jsx元素",
config: "组件配置数据",
type: "「容器」窗口类型",
dialog: "「容器」窗口配置"
}
2.3. parseControl(解析Array)
入参表
参数名 | 类型 | 含义 |
---|---|---|
config | Array | 控件配置队列。 |
options | Object | 解析控件时的辅助配置信息。 |
async | Boolean | 是否执行异步模式。 |
该方法主要用于控件的动态配置,从远程读取UI_CONTROL
表中的配置数据,再配合控件类型以及操作列表组合成最终用于
Jsx元素的控件属性相关信息。直接从第二参中读取type
配置参数,该参数目前版本支持(LIST
-列表配置,FORM
-表单配置)。
第一个参数为config
对象:
- 「LIST」如果存在
config.options
,则可以为该对象注入clientKey
的客户端配置。 - 「FORM」如果存在
config.form
,则重新构造config.form.op
(该配置会影响表单中的操作,包括ACL信息),构造操作信息的同时,系统会构造event
事件信息,并且注入到config.event
中,该值会被Fabric
引擎使用。
2.4. parseOp(解析Array)
该方法不带异步参数,不支持同步模式。
入参表
参数名 | 类型 | 含义 |
---|---|---|
config | Array | 按钮配置队列。 |
options | Object | 解析操作时的辅助配置信息。 |
该方法主要用于ExListXX
组件解析组件操作用,目前执该流程的组件主要是:ExListOpen / ExListComplex / ExListQuery
。
- 先根据options中的配置
dynamic.op
进行分流操作,如果为true则直接远程读取按钮配置信息,如果为false则直接使用资源文件中的配置。 - 先执行基础按钮的规范化操作,包括带plugin的按钮配置解析操作。
- 执行完成后,追加
op.extension
的扩展按钮操作(options中以op.extension
为前缀的选项):- 如果
op.config
中包含executor
,则执行直接按钮扩展,从props的$op
对象中构造(纯开发)。 - 如果
op.config
中只包含connectId
属性,则该按钮操作直接绑定onClick生成Ux.connectId
的锚点。
- 如果
op.extension
扩展配置片段如:
"op.extension.confirm": {
"text": "确认单据",
"icon": "checked",
"className": "ux-spec",
"region": "op.tab.confirm",
"plugin": {
"tooltip": true
},
"config": {
"connectId": "$opFinish",
"index": 1
}
},
关于扩展按钮的解析最终会调用yoExtension
内置函数(不开放)执行解析,该函数的逻辑会在yo
方法中说明,
上述规范化操作完成后,整个按钮部分的配置程序就执行完成,规范化的结果会存储在state中。
3. 总结
parserOfButton
方法执行后,会生成一个带四个子函数的核心对象,这四个子函数主要做按钮级别的配置规范化操作。
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React对应组件引用 |
Returns:
- Type
- Object
(static) parserOfColor(name) → {Object}
「解析」Ex.parserOfColor
1. 基本介绍
生产日志器专用解析器,返回不同日志器记录日志(每个键都是函数):
{
private: () => "私有组件",
form: () => "表单组件",
list: () => "列表专用",
action: () => "操作组件",
tpl: () => "模板",
component: () => "通用组件",
container: () => "容器组件",
page: () => "页面组件",
type: () => "分类处理",
control: () => "控件",
dynamic: () => "动态组件",
view: () => "视图组件",
define: () => "定义组件"
}
2. 日志函数作用规范
函数名 | 日志组件 |
---|---|
private | 私有组件。 |
form | 表单组件专用<Form/> 。 |
list | 列表组件专用<ExListXXX/> 。 |
action | 操作按钮专用,通常在列表操作组件中使用。 |
tpl | 模板组件专用。 |
component | 公有组件专用。 |
container | 容器组件专用。 |
page | 页面组件专用。 |
type | 「保留」分类组件专用。 |
control | 自定义控件专用。 |
dynamic | 动态组件专用。 |
view | 视图组件专用。 |
define | 自定义组件专用。 |
Parameters:
Name | Type | Description |
---|---|---|
name |
String | 组件名称 |
Returns:
- Type
- Object
(static) sexExAction(reference, key, Component) → {Object}
「快速」Ex.sexExAction
统一处理特殊带窗口操作按钮:
{
"button": {
},
"dialog":{
}
}
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React对应组件引用。 |
key |
String | 被读取的配置键值。 |
Component |
Object | ReactComponent | 组件类型。 |
Returns:
处理过后的 Action 相关配置。
- Type
- Object
(static) sexExPlugin(reference, options, key) → {function}
「快速」Ex.sexExPlugin
如果出现了 pluginKey,则从 Plugin.Function 中读取函数 该函数返回三种信息:
{
"selection": 自动计算,edition = true 并且 deletion = true 时可选择
"edition": 默认 true(可编辑)
"deletion": 默认 true(可删除)
}
限制,批量编辑和批量删除只能针对 edition / deletion 同时为true的时候,否则这种记录都不可能被批量操作选中
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React对应组件引用。 |
options |
Object | 插件配置选项。 |
key |
String | 读取配置的键。 |
Returns:
返回插件专用处理函数。
- Type
- function
(static) uiDialog(reference, consumer) → {Dialog}
##「组件」Ex.uiDialog
构造Dialog引用组件快速开发窗口,为状态注入__dialog
变量(内置)
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React组件引用。 |
consumer |
function | 构造Tab的回调函数。 |
Returns:
窗口引用
- Type
- Dialog
(static) uiTab(reference, consumer) → {Tab}
##「组件」Ex.uiTab
构造Tab应用组件快速开发页签,为状态注入__tabs
变量(内置)
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React组件引用。 |
consumer |
function | 构造Tab的回调函数。 |
Returns:
窗口引用
- Type
- Tab
(static) xuiContainer(container, UI, inherit, fnJsx) → {boolean|Jsx}
「动态」Ex.xuiContainer
1.基本介绍
执行 xuiContainer
专用容器控件渲染,该函数主要用于渲染容器基础配置,该函数支持两种渲染模式:
- 无容器模式:
container
无配置,为空。 - 有容器模式:
container
中有内容,带容器渲染。
2.参数说明
- container:容器配置信息,对应后端的
containerConfig
配置对象。 - UI:配置专用组件
import UI from 'oi';
,专用于配置的核心组件定义(Ox组件)。 - inherit:继承属性集,构造继承属性,连接原生
yoAmbient
构造的属性集。 - fnJsx:「Jsx渲染函数」组件专用Jsx渲染函数,容器函数会笼罩在
fnJsx
外围。
3.追加属性
除开
Ex.yoAmbient
函数构造的属性集以外,当前函数会追加特定属性信息
属性名 | 含义 |
---|---|
key | 配置中的组件key信息,来自于container.config.key键值。 |
$metadata | 元数据信息,记录了组件key,组件名称,页面ID,组件类型等。 |
$fabric | 从props和state中构造所有Fabric引擎所需的基础配置。 |
$controls | 组件配置,存储了当前页面所需的所有配置信息。 |
3.1.$metadata结构
{
key: "组件key",
type: "组件名称,系统会根据该名称读取容器组件",
page: "当前配置中的pageId,页面ID",
componentType: "当前容器类型"
}
3.2.$controls加锁
$controls变量会在读取完成后执行加锁Object.freeze
操作,一旦加锁后,该配置信息不可被更改(只读)。
3.3.递归渲染
在container + component
结构中,还允许component
定义自我容器,如果出现自我容器,则容器会构造两层,如:
<Container>
<SelfContainer>
<Component/>
</SelfContainer>
</Container>
- Container:外层容器配置的基础信息
containerConfig
。 - SelfContainer:内层容器配置的基础信息。
- Component:组件本身以及组件基础配置。
SelfContainer + Component
等价于xuiControl
的内容。
Parameters:
Name | Type | Description |
---|---|---|
container |
Object | 容器配置信息 |
UI |
Object | 组件配置 |
inherit |
Object | 将被继承的属性表 |
fnJsx |
function | 容器中组件渲染专用函数 |
Returns:
渲染带容器的组件信息
- Type
- boolean | Jsx
(static) xuiDecorator(configuration, UI, inherit, state) → {boolean|Jsx}
「动态」Ex.xuiDecorator
1.基本介绍
执行 xuiDecorator
修饰包装组件。
- 提取 control 中的配置信息
- 是否执行了 $switcher 的随机跳跃处理(刷新界面专用)
- 事件执行器,针对特殊节点:
decorator
执行事件注入解析工作
2.xuiControl解析流程
根据传入的配置信息,构造组件配置。
2.1.基础流程:
- 如果
isContainer = true
,证明当前组件带容器配置,先渲染容器,再渲染组件。 - 如果提取了
control.name
,从UI
中构造的组件,则执行组件渲染。 - 如果内置包含了
control.container
,则构造内置容器。
2.2.继承属性:
属性名 | 含义 |
---|---|
data | 构造当前组件所需的数据信息,调用seekData 方法执行计算(只能同步操作)。 |
config | 构造当前组件所需的配置信息。 |
event | 事件专用配置信息,该事件会在内部执行Fabric引擎。 |
Parameters:
Name | Type | Description |
---|---|---|
configuration |
Object | 修饰组件专用配置数据 |
UI |
Object | 组件配置 |
inherit |
Object | 将被继承的属性表 |
state |
State | 组件专用状态信息 |
Returns:
渲染修饰过的组件
- Type
- boolean | Jsx
(static) xuiGrid(grid, UI, inherit) → {Jsx}
「动态」Ex.xuiGrid
1.基本介绍
执行 xuiGrid
专用Grid控件布局,执行每个单元格的渲染操作,Grid执行行列渲染。每个单元格内部:
- xuiCell:执行单元格内容渲染。
- xuiColumn:执行单元格属性渲染
<Col/>
元素。
2.xuiCell
xuiCell用于构造fnJsx
函数,内置会递归执行:
- xuiGrid:
rows
配置。 - xuiDecorator:
control
配置。
3.最终骨架
最终骨架代码:
3.1.容器部分
<Container>
<SelfContainer>
<Component/>
</SelfContainer>
</Container>
3.2.网格部分
上边骨架中的<Component/>
部分
<Row>
<Col>
{xuiGrid}
{xuiDecorator}
</Col>
</Row>
Parameters:
Name | Type | Description |
---|---|---|
grid |
Array.<Array> | Grid布局专用二维数组配置 |
UI |
Object | 组件配置 |
inherit |
Object | 将被继承的属性表 |
Returns:
渲染行列<Row>, <Col>
的Grid组件
- Type
- Jsx