Zero Ui 中的Web组件
1.组件使用
组使用的代码如下:
import { XXX } from 'web';
// .....
return (
<XXX/>
)
economy组件层位于ux工具之上,可直接执行如下代码
import Ux from 'ux';
2.组件文档标记
- 属性props:直接从上层组件中继承过来的属性。
- 状态state:当前组件执行componentDidMount构造的状态。
3.组件列表
生命周期中的单个标记分别对应
Hoc生命周期,Mount初始化,Update更新
三个生命周期。
组件名 | 生命周期 | 相关Ant组件 | className | 说明 |
---|---|---|---|---|
* Dialog | x o o | <Modal/> |
web-dialog web-dynamic-dialog |
动态弹出框专用组件,可配置不同弹出框。 |
* DialogButton | x o x | <Button/> -- <Modal/> -- <Drawer/> -- <Popover/> |
web-dialog-button-header | 带子组件的按钮,可渲染按钮内组件。 |
* DialogMenu | x o x | <Dropdown/> -- <Menu/> -- <Button/> |
包含子组件专用的菜单执行。 | |
* PageCard | o o x | <Card/> |
web-card | 卡片组件容器。 |
* Rectangle | x x x | <fieldset/> |
web-rectangle | 「Html」专用HTML矩形元素。 |
ColumnUser | x o x | <Fragment/> |
表格中的列渲染专用<Table/> 执行。 |
|
G6Editor | x o x | 复杂元素 | web-g6-editor | 拓扑图编辑器 |
G6Viewer | x o x | 复杂元素 | web-g6-viewer | 拓扑图查看器 |
Graphic2 | x o o | <div/> |
G2渲染图信息。 | |
LoadingAlert | x x x | <Alert/> |
web-alert-iconlist web-alert-list web-alert-text |
警告信息专用组件,支持多行文本、图标计算、多数据格式、直接配置模式。 |
LoadingContent | o x x | <Spin/> |
web-loading | 加载效果专用组件,支持组件/页面/区域三种。 |
Navigation | x x x | <Breadcrumb/> |
web-navigation | 面包屑导航组件。 |
NavSwallow | x x x | <div/> |
web-nav-swallow | 燕尾导航专用组件。 |
4.设计原则
- 属性传入过程中的所有内容(源 = props),都是通过编程方式传入,优先级最高,它通常会覆盖Zero Ui解析过后的默认行为。
- 只要存在状态数据,在
render
中都会调用Ux.xtReady
方法执行加载完成后的第一个render,该操作可防止异步结果未完成导致的渲染错误。
4.1. 特殊说明
- Dialog中的
web-dynamic-dialog
是遗留系统使用的className,新系统都会使用web-dialog
来实现,暂时未重构。 - 组件中带
*
的表示当前组件支持children
属性,即组件本身为容器组件。 FormDesigner
不提供文档说明,因为它主要存在于Ox中的配置模块,不属于标准操作,通常是直接使用。
4.2. 基础文件规范
4.2.1. 文件规范
文件 | 说明 |
---|---|
UI.js | 主入口源代码文件。 |
Op.js | 事件专用源代码文件。 |
Web.jsx | Jsx渲染专用函数。 |
4.2.2. 函数规范
特定函数 | 说明 |
---|---|
componentCt | 构造函数,constructor函数专用。 |
componentInit | 初始化函数,componentDidMount函数专用。 |
componentUp | 更新函数,componentDidUpdate函数专用。 |
renderXXX | Jsx渲染专用函数。 |
yiXXX | 初始化状态专用方法(子方法、主方法)。 |
yoXXX | 渲染组件专用计算方法。 |
4.2.3. 属性状态规范
变量 | 源 | 说明 |
---|---|---|
config | props | 组件配置数据。 |
data | props | 组件核心数据(一般是业务数据)。 |
rxInject | props | 「开发专用」注入专用,修改配置用。 |
$submitting | props | 防重复提交的专用属性,$submitting = true表示正在提交。 |
$ready | state | 加载完成专用属性。 |
Methods
(static) * Dialog()
「组件」Dialog
旧名称依然可用:
DynamicDialog
import { DynamicDialog } from 'web'; // 旧版本
import { Dialog } from 'web';
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
x | Ok | Ok |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
className | props | String | 当前窗口设置的className,默认web-dynamic-dialog 。 |
|
children | props | Jsx | React中专用的children 子元素信息。 |
|
$visible | props | Boolean | 当前窗口是否显示(直接外层传入该变量)。 | |
$loading | props | Boolean | 当前窗口是否处于提交加载状态。 | |
$footer | props | Jsx | 是否定制过窗口的底部按钮,要重写Ok/Cancel 时使用。 |
|
rxOk | props | Function | 点击确认按钮外置函数。 | |
rxCancel | props | Function | 点击取消按钮外置函数。 | |
$dialog | props | String/Object | String格式通过aiExprWindow转换成Object。 | |
$dialog | title | props | String | 「Ant」窗口标题。 |
$dialog | okText | props | String | 「Ant」OK按钮使用文字。 |
$dialog | cancelText | props | String | 「Ant」取消按钮使用文字。 |
$dialog | visible | props | Boolean | 「Deprecated」直接使用$visible 代替。 |
$dialog | width | props | Number | 「Ant」窗口宽度。 |
$dialog | maskClosable | props | Boolean | 「Ant」点击遮罩是否触发关闭动作。 |
$dialog | onOk | props | String | 「自定义」点击onOk 按钮触发的Ux.connectId 锚点,该事件会被外层的rxOk 覆盖。 |
$dialog | component | props | Jsx | 「自定义」新版支持,窗口内的children元素的替换元素,当前组件不用,但外层解析会使用。 |
$ready | state | Boolean | 标识当前组件已经加载完成。 |
3. 组件核心点
3.1. 资源解析
配置信息$dialog
的示例如(String模式):
title,okText,cancelText,visible,width,maskClosable,onOk,component
3.2. 关于$footer
只有okText属性没有传值时,$footer
设置的内容才会生效,也就是说如果要定制footer,那么需要将okText设置
为空字符串""
。
3.3. 关于onOk
onOk在不传入rxOk
外层函数时会直接触发Ux.connectId
去点击链接的onOk
元素的onClick
事件,如果传入了
rxOk
则默认的链接点击行为会被废弃,而使用外层属性。
(static) * DialogButton()
「组件」DialogButton
import { DialogButton } from 'web';
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
x | Ok | x |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
children | props | Jsx | React级别的子组件。 | |
$content | props | Jsx | 传入的子组件,该子组件优先级低于children。 | |
$hidden | props | Boolean | 是否隐藏当前按钮,如果为true则隐藏按钮。 | |
$mode | props | String | 设置三种模式:DIALOG | DRAWER | POPOVER 。 |
|
$button | props | String/Object | 调用aiExprAction 解析该配置生成按钮专用配置。 |
|
$dialog | props | Object | 不同窗口模式使用不同配置完成。 | |
$loading | props | Boolean | 是否处于提交/加载状态。 | |
rxClick | props | Function | 按钮点击的回调函数,在点击按钮设置visible=true过后执行该回调。 | |
rxOk | props | Function | 优先考虑使用外层rxOk执行该函数,如果是String则直接触发Ux.connectId 操作。 |
|
button | state | Object | 存储在当前组件的按钮配置。 | |
dialog | state | Object | 存储在当前组件的窗口配置。 | |
visible | state | Boolean | 显示/隐藏窗口专用配置。 | |
render | state | Function | 专用Jsx的渲染函数。 |
3. 组件核心点
3.1. 关于子组件的计算
- 过滤掉的属性表:
$disabled
$button
$dialog
$mode
$inited
$content
- 其他属性再追加
rxClose
专用方法关闭窗口进行继承。 - 内置窗口使用
Dialog
组件替换原生的<Modal/>
操作,来完成状态注入。
3.2. 模式解析
$mode
设置的值生成三种不同的窗口:
- DIALOG:弹出窗口组件
<Modal/>
。 - DRAWER:抽屉窗口组件
<Drawer/>
。 - POPOVER:浮游窗口组件
<Popover/>
。
3.3. 状态说明
$loading
:组件是否处于加载状态,当前按钮的加载状态等价于提交状态,这个值会传递给子组件。visible
:用于记录当前组件的现实和隐藏的专用属性,注意这个属性和Zero Ui规范中的$visible
有一定区别,原因是这个组件是旧组件,历史太长,暂时没做更改。
(static) * DialogMenu()
「组件」DialogMenu
import { DialogMenu } from 'web';
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
x | Ok | x |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
$mode | props | String | 设置窗口模式:DIALOG | DRAWER ,该组件不支持浮游窗口。 |
|
$items | props | Array | 菜单项相关配置。 | |
$button | props | String/Object | 调用aiExprAction 解析该配置生成按钮专用配置。 |
|
$content | props | Object | 不同菜单渲染的组件对象,上层传入外置对象。 | |
$inited | props | Object | 初始化表单值信息。 | |
$loading | props | Boolean | 是否处于提交/加载状态。 | |
$functions | props | Object | 执行CONFIRM时的回调函数,用于处理回调信息。 | |
button | state | Object | 主按钮配置信息。 | |
items | state | Array | 菜单项专用配置。 | |
renders | state | Object | 生成的子组件渲染器。 | |
visible | state | Object | key =true/false,记录每个菜单项组件的显示/隐藏。 |
|
windows | state | Object | key =配置,记录每个窗口的配置信息。 |
3. 组件核心点
3.1. 单个选项结构
{
"button": "按钮配置",
"dialog": "窗口配置",
"component": "使用的组件key,对应$content变量",
"confirm": "删除专用,带有浮游提示窗口(是否)",
"init": "布尔值,是否给子组件传入初始化数据信息。"
}
3.2. 三种执行器
- DIRECT:直接执行函数的执行器。
- DIALOG:窗口执行器,设置显示/隐藏专用执行器。
- CONFIRM:直接应用
Modal.confirm
的执行器。
3.3. 初始化数据渲染器
- 先从props中读取
$inited
变量作为表单初始化变量。 - 判断
init
的值,过滤$disabled
$disabledItems
$inited
$items
$button
$functions
$content
$mode
- 为
$inited
和$parent
赋值- 带
_
前缀的字段直接放到$inited
中。 - $parent中存储的就是$inited数据。
- 带
- 追加
rxClose
专用方法进入子组件。
3.4. 状态说明
$loading
:组件是否处于加载状态,当前按钮的加载状态等价于提交状态,这个值会传递给子组件。visible
:此处是一个Object类型,记录了每个组件的显示和隐藏状态。
(static) * PageCard()
「组件」PageCard
import { PageCard } from 'web';
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
Ok | Ok | x |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
children | props | Jsx | React中专用的children 子元素信息。 |
|
reference | props | React | 父引用,遵循Zero Ui的规范,该变量为固定变量,引用父组件。 | |
className | props | String | 外置传入className,计算最终的风格专用属性,默认web-card 。 |
|
$key | props | String | 读取外层绑定资源文件,调用Ux.fromXX 作用于reference,默认读取_page 节点。 |
|
$submitting | props | Boolean | 是否处于提交状态,如果提交状态,则会计算按钮的loading属性。 | |
$title | props | String | 卡片标题文本数据,优先使用$title 属性, |
|
$leftVisible | props | Boolean | 是否隐藏左边按钮。 | |
$rightVisible | props | Boolean | 是否隐藏右边按钮。 | |
$backVisible | props | Boolean | 是否隐藏返回按钮。 | |
$disabled | props | Object | 按钮禁用状态计算,根据不同的状态禁用对应按钮。 | |
$extra | props | Jsx | 是否执行extra属性的注入,计算extraContent部分。 | |
rxInject | props | Function | 「开发专用」注入配置专用函数。 | |
$config | left | state | Array | 卡片组件左侧按钮。 |
$config | right | state | Array | 卡片组件右侧按钮。 |
3. 组件核心点
3.1. 工具栏
整个PageCard工具栏分为三部分
左 | 右 | 关闭 |
---|---|---|
左侧按钮区间 | 右侧按钮区间 | 关闭按钮区间 |
$leftVisible | $rightVisible | $backVisible |
如果传入了$extra
变量,那么这个Jsx元素会替换掉$rightVisible和$backVisible
两个区域的组件。
3.2. 防重复提交
左侧和右侧的按钮通常会使用Ux.connectId
方法触发按钮点击动作,并且会根据$submitting
的值来判断
当前按钮是否处于加载状态,即使是不在当前组件的子组件中,也可以直接使用该值来渲染按钮的加载。
3.3. 禁用状态
$config
变量中存储了left
和right
中每一个按钮的key
信息,而$disabled
则存储了禁用启用状态(外置传入)。
假设$disabled
包含了值:
{
"key1": true,
"key2": true
}
上述配置会禁用key1
和key2
的按钮信息。
(static) * Rectangle()
「组件」Rectangle
import { Rectangle } from 'web';
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
x | x | x |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
children | props | Jsx | React中专用的children 子元素信息。 |
|
config | props | Object | ||
config | title | props | String | <fieldset/> 元素中的legend 专用。 |
(static) ColumnUser()
「组件」ColumnUser
import { ColumnUser } from 'web';
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
x | Ok | x |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
config | uri | props | String | Ajax加载专用uri配置。 |
config | field | props | String | Ajax响应读取字段field 提取为最终渲染。 |
config | expr | props | String | Ajax更新的表达式,如果存在expr则使用响应数据执行格式化。 |
config | icon | props | Boolean | 是否在当前列中显示图标信息。 |
$icon | props | String/Object | 当前列所使用的<Icon/> 相关信息。 |
|
$key | props | Any | 加载记录的专用主键信息,只提供主键信息。 | |
$empty | props | String | 如果没有读取到数据则传入该值表示空数据渲染。 | |
value | state | String | 计算出来的最终呈现的文字信息。 | |
$system | state | Boolean | 是显示系统图标还是应用图标。 | |
$ready | state | Boolean | 标识当前组件已经加载完成。 |
3. 组件核心点
3.1. 关于Ajax加载
- 该组件位于
<Table/>
元素中渲染特定列USER
专用,此处有个误区就是列的名称,这里应用了ColumnUser
是因为最早的设计中它是为了加载创建人、更新人而量身定制的列,而后续更改过后,依旧维持了这个名字,没有更改。 - 该组件中的Ajax只支持
GET
方法,内部调用Ux.ajaxGet(uri,{key});
方法执行相关操作,这也是该列的限制。
3.2. 关于Icon计算
- 如果state中计算的
$system=true
,则直接设置图标为type = setting
为图标类型,颜色#7D7D7D
。 - 相反则直接读取
$icon
图标信息,如果没有提供则直接使用type = user
为图标类型,颜色#CD2990
。
图标类型的格式为:
<type>,<color>
图标的尺寸不能设置,只能是16,但是颜色可以根据提供的$icon
来进行设置。
(static) G6Editor()
「组件」G6Editor
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
x | Ok | x |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
$gEvent | props | GEvent | 图综合对象。 | |
$ready | state | Boolean | 标识当前组件已经加载完成。 |
(static) G6Viewer()
「组件」G6Viewer
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
x | Ok | x |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
$gEvent | props | GEvent | 图综合对象。 | |
$ready | state | Boolean | 标识当前组件已经加载完成。 |
(static) Graphic2()
「组件」Graphic2
import { Graphic2 } from 'web';
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
x | Ok | Ok |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
config | props | Object | g2图形专用配置数据。 | |
data | props | Array | 渲染图形专用的数据。 | |
$gid | props | String | 当前g2图形的<div/> 的id属性,g2的API专用。 |
|
$gFn | props | Function | 构造配置的专用函数。 | |
$g2 | state | Object | 最终计算出来的配置信息。 | |
$ready | state | Boolean | 标识当前组件已经加载完成。 |
3. 组件核心点
3.1. $gFn
函数
$gFn
是一个必须传入的函数,用于构造graphic引用,这个引用可直接调用下边API执行图形渲染,
目前可绑定的函数如:
Ux.g2Bar
:饼图构造函数。
(static) LoadingAlert()
「组件」LoadingAlert
import { LoadingAlert } from 'web';
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
x | x | x |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
className | props | String | 外置传入className,计算最终的风格专用属性。 | |
$type | props | String | 警告的类型,类型值包括:success, info, warning, error 。 |
|
$icon | props | String | 图标专用属性,设置图标类型。 | |
$size | props | Number | 图标字体信息,对应style中的fontSize 。 |
|
$alert | props | Object | ||
$alert | hideIcon | props | Boolean | 「Ant」是否隐藏图标,和showIcon的最终值相反。 |
$alert | type | props | String | 「Ant」配置数据中设置type字段信息。 |
$alert | message | props | String | 「Ant」警告信息的标题属性。 |
$alert | description | props | String/Array | 「Ant」警告信息的描述信息,可支持多行描述信息。 |
2.1. $alert结构示例
{
"message": "标题文字",
"description": [],
"type": "配置的type",
"hideIcon": "是否隐藏图标"
}
3. 组件核心点
3.1. description处理
- 如果类型是String,则直接将description作为渲染文本基础元素来处理。
- 如果类型是Array,长度为1,则直接将第一个元素作为渲染文本来处理。
- 如果类型是Array,长度大于1,则使用
<ul/>
的列表方式渲染多行文本。
3.2. type执行流程
- 优先选择props中的
$type
属性。 - 然后使用props中
$alert
中的type
属性。 - 如果都没传入则使用默认值
info
。
3.3. icon计算流程
- 优先选择props中的
$icon
属性。 - 然后使用props中
$alert
中的icon
属性。 - 如果1和2都读取不了任何数据,则为无图标模式,否则为有图标模式。
3.4. 其他
- 组件外层有
<div/>
元素执行封装。 - 计算
<Alert/>
的属性后传入,其中description和icon都可直接使用Jsx语法直接渲染。 - 最外层的className有两种选择:
showIcon = true
有图标模式:web-alert-iconlist
。showIcon = true
无图标模式:web-alert-list
。showIcon = false
纯模式:web-alert-text
。
(static) LoadingContent()
「组件」LoadingContent
import { LoadingContent } from 'web';
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
Ok | x | x |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
$height | props | Number/String | 当前加载遮罩的高度,默认高度为100%(自动填充满) | |
$tip | props | String | 当前组件呈现的文字信息,默认根据资源文件计算。 | |
$top | props | String | 高度单位,可设置成paddingTop的值,默认:窗口高度 x 1/4 。 |
3. 组件核心点
3.1. 资源文件
文件位置:cab/<LANGUAGE>/economy/web/LoadingContent.json
文件内容:
{
"loading": "数据加载中……"
}
3.2. 属性计算
传入的三个属性主要是为计算最外层<div/>
的style
属性,
(static) Navigation()
「组件」Navigation
旧名称依然可用:
PagerHeader
import { PagerHeader } from 'web'; // 旧版本
import { Navigation } from 'web';
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
x | x | x |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
$router | props | DataRouter | 特殊属性$router用于执行路由操作的专用对象。 | |
$navs | props | Array | 每个元素最终用于aiLink 操作。 |
面包屑导航渲染,通常用于主界面的二级面包屑导航,链接会禁用
<a/>
的href
导航而采用react-router
中的路由导航功能。
(static) NavSwallow()
「组件」NavSwallow
import { NavSwallow } from 'web';
1. 生命周期
Hoc高阶周期 | Mount初始化 | Update更新 |
---|---|---|
x | x | x |
2. 属性说明
属性名 | 二级属性 | 源 | 类型 | 说明 |
---|---|---|---|---|
$common | props | Boolean | 是否普通模式。 | |
$steps | title | props | Array | 当前步骤的标题信息。 |
$current | props | Number | 激活的当前步骤,从0开始,配合索引计算。 |
3. 组件核心点
3.1. 特定className的值
$common属性 | 节点类型 | className值 |
---|---|---|
true | 开始节点 | step start-common |
true | 中间节点 | step-middle |
true | 结束节点 | step-middle |
false | 开始节点 | step |
false | 中间节点 | step-middle |
false | 结束节点 | step-end |
无关 | 激活节点 | step-active |