_kernel

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.基本介绍

复杂配置,用于生成数据域的元数据定义信息,主要包含:

  1. 行定义信息(rows),执行行过滤专用。
  2. 查询条件信息(criteria),执行数据过滤专用(预处理)。
  3. 列定义信息(projection),执行列过滤专用。
  4. 资源视图信息(view),执行资源视图筛选(主视图)。
  5. 资源访问者信息(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.基本介绍

  1. 根据传入的 treeData 提取 resource.tree 构造分类
  2. 读取远程的权限组,权限组挂在分类下边

该方法用于在管理过程中将资源和权限进行树形分组,生成引导菜单。

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.基本介绍

  1. 直接读取 resource.tree 中的内容
  2. 遇到 ID:XXX 需要执行判断,进行深度树的二次读取
  3. 最终构造完成的树形数组(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;

只有pluginconfig有值或存在时才执行解析流程!!

按钮配置中会存在如下数据结构:

{
    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对象:

  1. 「LIST」如果存在config.options,则可以为该对象注入clientKey的客户端配置。
  2. 「FORM」如果存在config.form,则重新构造config.form.op(该配置会影响表单中的操作,包括ACL信息),构造操作信息的同时,系统会构造event事件信息,并且注入到config.event中,该值会被Fabric引擎使用。

2.4. parseOp(解析Array)

该方法不带异步参数,不支持同步模式。

入参表

参数名 类型 含义
config Array 按钮配置队列。
options Object 解析操作时的辅助配置信息。

该方法主要用于ExListXX组件解析组件操作用,目前执该流程的组件主要是:ExListOpen / ExListComplex / ExListQuery

  1. 先根据options中的配置dynamic.op进行分流操作,如果为true则直接远程读取按钮配置信息,如果为false则直接使用资源文件中的配置。
  2. 先执行基础按钮的规范化操作,包括带plugin的按钮配置解析操作。
  3. 执行完成后,追加op.extension的扩展按钮操作(options中以op.extension为前缀的选项):
    1. 如果op.config中包含executor,则执行直接按钮扩展,从props的$op对象中构造(纯开发)。
    2. 如果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 专用容器控件渲染,该函数主要用于渲染容器基础配置,该函数支持两种渲染模式:

  1. 无容器模式:container无配置,为空。
  2. 有容器模式:container中有内容,带容器渲染。

2.参数说明

  1. container:容器配置信息,对应后端的containerConfig配置对象。
  2. UI:配置专用组件import UI from 'oi';,专用于配置的核心组件定义(Ox组件)。
  3. inherit:继承属性集,构造继承属性,连接原生yoAmbient构造的属性集。
  4. 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 修饰包装组件。

  1. 提取 control 中的配置信息
  2. 是否执行了 $switcher 的随机跳跃处理(刷新界面专用)
  3. 事件执行器,针对特殊节点: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执行行列渲染。每个单元格内部:

  1. xuiCell:执行单元格内容渲染。
  2. xuiColumn:执行单元格属性渲染<Col/>元素。

2.xuiCell

xuiCell用于构造fnJsx函数,内置会递归执行:

  1. xuiGrid:rows配置。
  2. 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

Type Definitions

Ex