web-component

Zero Ui 中的Web组件

1.组件使用

组使用的代码如下:

import { XXX } from 'web';

// .....
return (
     <XXX/>
)

economy组件层位于ux工具之上,可直接执行如下代码

import Ux from 'ux';

2.组件文档标记

  1. 属性props:直接从上层组件中继承过来的属性。
  2. 状态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.设计原则

  1. 属性传入过程中的所有内容(源 = props),都是通过编程方式传入,优先级最高,它通常会覆盖Zero Ui解析过后的默认行为。
  2. 只要存在状态数据,在render中都会调用Ux.xtReady方法执行加载完成后的第一个render,该操作可防止异步结果未完成导致的渲染错误。

4.1. 特殊说明

  1. Dialog中的web-dynamic-dialog是遗留系统使用的className,新系统都会使用web-dialog来实现,暂时未重构。
  2. 组件中带*的表示当前组件支持children属性,即组件本身为容器组件。
  3. 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. 关于子组件的计算

  1. 过滤掉的属性表:
    • $disabled
    • $button
    • $dialog
    • $mode
    • $inited
    • $content
  2. 其他属性再追加rxClose专用方法关闭窗口进行继承。
  3. 内置窗口使用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. 初始化数据渲染器

  1. 先从props中读取$inited变量作为表单初始化变量。
  2. 判断init的值,过滤
    • $disabled
    • $disabledItems
    • $inited
    • $items
    • $button
    • $functions
    • $content
    • $mode
  3. $inited$parent赋值
    • _前缀的字段直接放到$inited中。
    • $parent中存储的就是$inited数据。
  4. 追加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变量中存储了leftright中每一个按钮的key信息,而$disabled则存储了禁用启用状态(外置传入)。

假设$disabled包含了值:

{
    "key1": true,
    "key2": true
}

上述配置会禁用key1key2的按钮信息。

(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计算

  1. 如果state中计算的$system=true,则直接设置图标为type = setting为图标类型,颜色#7D7D7D
  2. 相反则直接读取$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处理

  1. 如果类型是String,则直接将description作为渲染文本基础元素来处理。
  2. 如果类型是Array,长度为1,则直接将第一个元素作为渲染文本来处理。
  3. 如果类型是Array,长度大于1,则使用<ul/>的列表方式渲染多行文本。

3.2. type执行流程

  1. 优先选择props中的$type属性。
  2. 然后使用props中$alert中的type属性。
  3. 如果都没传入则使用默认值info

3.3. icon计算流程

  1. 优先选择props中的$icon属性。
  2. 然后使用props中$alert中的icon属性。
  3. 如果1和2都读取不了任何数据,则为无图标模式,否则为有图标模式

3.4. 其他

  1. 组件外层有<div/>元素执行封装。
  2. 计算<Alert/>的属性后传入,其中description和icon都可直接使用Jsx语法直接渲染。
  3. 最外层的className有两种选择:
    1. showIcon = true有图标模式:web-alert-iconlist
    2. showIcon = true无图标模式:web-alert-list
    3. 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