值规范模块
值处理专用模块
函数名 | 说明 |
---|---|
valueAppend | 给某个对象追加字段信息,只追加没有的内容。 |
valueCopy | 深度拷贝字段数据信息(支持嵌套)。 |
valueDuration | 计算两个时间区间,根据不同单位返回,默认计算天。 |
valueEndTime | 根据开始时间计算结束时间,默认天。 |
valueExpr | 「内部用」解析表达式主体方法,用于执行表达式解析流程。 |
valueFabric | 「引擎」字面量配置下的字典数据提取。 |
valueFabrics | 「引擎」字面量配置下的字典数据提取,支持过滤器版本。 |
valueFactor | 百分数转换成浮点数。 |
valueFind | 值路径解析函数。 |
valueFloat | 浮点数转换函数。 |
valueInt | 整数转换函数。 |
valueLadder | 「引擎」梯度处理函数。 |
valueLimit | 「引擎」继承属性处理函数,移除fnOut,reference,config三个核心属性。 |
valueNow | 读取当前时间,返回合法moment对象。 |
valueOnChange | 「Web」自定义组件专用事件函数,生成onChange用。 |
valuePair | 将表达式转换成Object对象,表达式格式k1=v1,k2=v2,k3=v3,... 。 |
valueParse | 将字符串<type>:<expression> 解析成表达式配置对象。 |
valuePath | 从Object中深度读取数据信息,可支持带.的模式。 |
valuePinyin | 拼音转换函数。 |
valueRequest | 「引擎」请求规范函数,自带language, active, sigma 的值。 |
valueStartTime | 根据结束时间计算开始时间,默认天。 |
valueTime | 时间转换函数,将string转换成moment。 |
valueTimes | 批量转换对象中的时间格式字段。 |
valueValid | 移除所有undefined属性,支持宽度模式和非宽度模式。 |
Methods
(static) valueAppend(item, field, value)
「标准」Ux.valueAppend
不重复追加值到item
对象中(包含则不设置)
框架内部的使用代码如:
const {$clear, form} = reference.props;
// 记录切换:从更新表单 -> 添加表单切换
if ($clear && $clear.is()) {
const keys = $clear.to();
keys.forEach(key => Value.valueAppend(data, key, undefined));
}
这里需要解释这个API和Ux.assign
(mode=2)的区别,在Ux.assign
中,追加模式是做合并,而且追加时支持嵌套追加,
除了顶层Object以外它的子对象也会实现合并追加流程,而Ux.valueAppend
是单纯的值追加过程,只在当前传入对象中追加
是否包含了field的情况。
Parameters:
Name | Type | Description |
---|---|---|
item |
Object | 被设置的对象引用 |
field |
String | 将要设置的字段名 |
value |
any | 将要设置的字段值 |
(static) valueArray(input) → {Array}
「标准」Ux.valueArray
对数据进行规范化解析
- 如果 input = undefined,返回 []
- 如果 input = Array,直接返回
- 如果 input = Object,则检查 list 节点(必须是Array)
Parameters:
Name | Type | Description |
---|---|---|
input |
any | 输入的数据 |
Returns:
返回转换好的拼音信息
- Type
- Array
(static) valueCopy(target, source, field)
「标准」Ux.valueCopy
该函数负责将 field
字段中的信息从 source 拷贝到 target 中。
- field 为 String:拷贝单个字段数据
- field 为 Array:拷贝多个字段数据
- 如果读取的数据为 Object / Array 则采用深度拷贝
Parameters:
Name | Type | Description |
---|---|---|
target |
Object | 拷贝目标对象 |
source |
Object | 拷贝源对象 |
field |
String | Array | 需要拷贝的字段信息 |
Returns:
Object 最终拷贝过的属性
(static) valueDuration(from, to, mode) → {number}
「标准」Ux.valueDuration
根据from和to计算中间的duration差值。
- years - y
- monthds -M
- weeks -w
- days - d
- hours - h
- minutes - m
- seconds - s
- milliseconds - ms
第三参数表格参考 moment,注意支持单数模式,默认单位为天。
度量值(复数) | 单数 | 说明 |
---|---|---|
years | year | 年 |
months | month | 月 |
weeks | week | 周 |
days | day | 天 |
hours | hour | 小时 |
minutes | minute | 分钟 |
seconds | second | 秒 |
milliseconds | millisecond | 毫秒 |
Parameters:
Name | Type | Default | Description |
---|---|---|---|
from |
String | Moment | 开始时间 |
|
to |
String | Moment | 结束时间 |
|
mode |
String |
day
|
计算模式 |
Returns:
返回最终的计算数值
- Type
- number
(static) valueEndTime(from, duration, mode) → {Moment}
「标准」Ux.valueEndTime
根据开始时间、间隔、模式计算结束时间
Parameters:
Name | Type | Default | Description |
---|---|---|---|
from |
String | Moment | 开始时间 |
|
duration |
Number | 间隔时间 |
|
mode |
String |
day
|
计算模式 |
Returns:
返回结束时间
- Type
- Moment
(static) valueExpr(expr, data, keep) → {string}
「引擎」Ux.valueExpr
(通常内部)解析表达式强化方法,主要用于解析Zero中带:
的自定义表达式相关信息。
const user = {
username: "Lang",
age: 12
};
const keepValue = Ux.valueExpr("你的名字:username", user, true);
// 输出:你的名字Lang。
// 执行后 user 的值为:{ username: "Lang", age: 12 };
const removeValue = Ux.valueExpr("你的名字:username", user);
// 输出:你的名字Lang。
// 之后后 user 的值:{ age:12 }; 原始的 username 已经从输入Object中移除。
注意第三参数,第三参数会对传入参数执行保留或不保留的两种方案,如果 keep = false(默认),那么在执行过后,原始入参中
被替换的参数属性会被移除掉,而 keep = true 时则不会移除,会保留其数据信息,并且注意该方法和Ux.formatExpr
的区别,
通常valueExpr
是直接使用,建议在内部调用,而formatExpr
会有更多操作,所以提供给用户调用。
Parameters:
Name | Type | Default | Description |
---|---|---|---|
expr |
String | 传入的表达式或字段名。 |
|
data |
Object | 记录信息。 |
|
keep |
boolean |
false
|
格式化过后是否保留原始的值的。 |
Returns:
返回最终格式化后的数据。
- Type
- string
(static) valueFabric(reference, input, consumer)
「引擎」Ux.valueFabric
解析 fabric 专用事件配置处理器,该函数为后期函数,用于提取字段数据。
第二个参数通常为:
// source,keyField,keyValue
Ux.valueFabric(reference, `room.type,key,${roomTypeId}`, type => {
const standardPrice = type.price;
formValues.discount = Ux.mathDiscount(price, standardPrice);
});
第三参数为回调函数,会将读取到的数据直接传给回调函数来执行,这里执行的是唯一数据,上述示例中,读取的数据为:
- source = room.type 的Assist数据源(一般是一个DataArray)。
- 使用key = 值筛选唯一记录。
- 将唯一记录传给 consumer 函数执行筛选过后的回调流程。
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React对应组件引用。 |
input |
Object | 输入数据。 |
consumer |
function | 执行函数。 |
(static) valueFabrics(reference, input, consumer)
「引擎」Ux.valueFabrics
(略)增强版的valueFabric函数,带过滤器的版本,可支持过滤操作。
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React对应组件引用。 |
input |
Object | 输入数据。 |
consumer |
function | 执行函数。 |
(static) valueFactor(literal) → {Number}
「标准」Ux.valueFactor
因子计算函数,将一个带 %
号的字符串转换成浮点数,转换不成功则 undefined,步骤:
const item = "62.5%";
const value = Ux.valueFactor(item);
// value 的值为 0.625
Parameters:
Name | Type | Description |
---|---|---|
literal |
String | 将要被转换的字符串 |
Returns:
返回最终转换函数
- Type
- Number
(static) valueFind(target, attrPath) → {any|*}
「引擎」Ux.valueFind
配置解析统一调用函数(特殊应用)
- 如果 attrPath 长度为1,则直接提取 target 中的:
target[attrPath[0]]
。 - 如果长度大于2,则先提取
target[attrPath[0]]
,其次提取第二阶段名称,暂时只支持长度为2的模式。
内部执行函数代码示例。
PROP: (expression, {props}) => fnPredicate("PROP", expression, () => {
const path = expression.split('.'); // 路径解析
return T.valueFind(props, path);
}),
Parameters:
Name | Type | Description |
---|---|---|
target |
any | 被查找的引用信息。 |
attrPath |
Array | 属性路径信息。 |
Returns:
返回最终解析的属性值。
- Type
- any | *
(static) valueFloat(literal, dft, digest) → {Number}
「标准」Ux.valueFloat
将一个字符串转换成合法浮点数,保证转换成功,如果出现转换失败,取默认值。
Parameters:
Name | Type | Default | Description |
---|---|---|---|
literal |
String | 被转换的字符串 |
|
dft |
Number |
0
|
转换失败的默认值 |
digest |
Number |
2
|
小数点之后的位数 |
Returns:
返回最终浮点数
- Type
- Number
(static) valueInt(literal, dft) → {number}
「标准」Ux.valueInt
将一个字符串转换成整数,保证转换成功,如果出现转换失败,取默认值。
const valid = "1231";
const okValue = Ux.valueInt(valid, 12);
const invalid = null;
const koValue = Ux.valueInt(invalid, 12);
// 最终结果
// okValue 的值为 1231
// koValue 的值为 12
Parameters:
Name | Type | Default | Description |
---|---|---|---|
literal |
String | 被转换的字符串 |
|
dft |
Number |
0
|
转换失败的默认值 |
Returns:
返回转换后的函数
- Type
- number
(static) valueLadder(item) → {Object}
「标准」Ux.valueLadder
梯度处理专用函数,函数执行流程
- 先全部拉平,生成带
.
属性的对象(一层结构)。 - 按照拉平的属性名进行排序(顺序处理)。
- 然后执行结构化,将所有的
.
操作符移除。
最终目的是生成Json
树。
const config = {
"optionJsx.item": 12,
"optionItem.label": "标签",
"field": "email",
"optionItem.style.color": "red",
"ajax.magic.params": {
"name": "Lang",
"age": 13
}
}
const values = Ux.valueLadder(config);
上述代码执行过后,会返回下边的结果:
{
"ajax":{
"magic":{
"params":{
"name": "Lang",
"age": 13
}
}
},
"field": "email",
"optionItem":{
"label": "标签",
"style": {
"color": "red"
}
},
"optionJsx":{
"item": 12
}
}
Parameters:
Name | Type | Description |
---|---|---|
item |
Object | 输入对象处理 |
Returns:
返回最终构造的对象信息
- Type
- Object
(static) valueLimit(jsx) → {Object}
「标准」Ux.valueLimit
Zero UI 中用于计算自定义组件中的继承属性,移除原生态的 Ant Design 中不支持的特殊属性
- fnOut:Redux架构下写状态树的专用函数,可统一写。
- reference:React Component 组件引用。
- config:自定义控件传入的基本配置信息(大部分组件中的配置都是使用 config)。
框架中的代码如:
// 根据Filter计算双重数据源
const from = Op.getFrom(this, config, fromTable);
const to = Op.getTo(this, config, toTable);
// 处理InputGroup中的jsx
const attrs = Ux.valueLimit(jsx);
const $attrs = Ux.clone(attrs);
return (
<Input.Group {...$attrs} className={"web-table-transfer"}>
<Table {...fromTable} dataSource={from}/>
<Filter config={config} reference={this}/>
<Table {...toTable} dataSource={to}/>
</Input.Group>
);
Parameters:
Name | Type | Description |
---|---|---|
jsx |
Object | 处理React中的jsx继承属性专用 |
Returns:
返回最终将要继承的属性信息
- Type
- Object
(static) valueLink(from, to, vConn)
「标准」Ux.valueLink
vConn = true:
M1 = {
"k1": "v1",
"k2": "v2"
},
M2 = {
"v1": "value1",
"v2": "value2"
}
R = {
"k1": "value1",
"k2": "value2"
}
vConn = false
M1 = {
"k1": "v1",
"k2": "v2"
},
M2 = {
"k1": "value1",
"k2": "value2"
}
R = {
"v1": "value1",
"v2": "value2"
}
Parameters:
Name | Type | Default | Description |
---|---|---|---|
from |
Object | 拷贝源对象 |
|
to |
Object | 拷贝目标对象 |
|
vConn |
Boolean |
false
|
选择操作模式 |
Returns:
Object 最终拷贝过的属性
(static) valueNow(pattern) → {any}
「标准」Ux.valueNow
返回当前时间,直接得到 Moment 对象。
Parameters:
Name | Type | Description |
---|---|---|
pattern |
String | 可支持的时间格式。 |
Returns:
返回合法的 Moment 对象。
- Type
- any
(static) valueOk(input, config, output)
「标准」Ux.valueOk
该函数负责将 field
字段中的信息从 source 拷贝到 target 中。
- field 为 String:拷贝单个字段数据
- field 为 Array:拷贝多个字段数据
- 如果读取的数据为 Array 则采用深度拷贝
Parameters:
Name | Type | Description |
---|---|---|
input |
Object | 拷贝源对象 |
config |
Array | 需要拷贝的字段信息 |
output |
Object | 拷贝目标对象 |
Returns:
Object 最终拷贝过的属性
(static) valueOnChange(reference, state, key)
「标准」Ux.valueOnChange
行编辑器专用函数,用于编辑表格行相关信息
Parameters:
Name | Type | Default | Description |
---|---|---|---|
reference |
React.Component | React组件引用。 |
|
state |
Object | 组件引用本身状态信息。 |
|
key |
String |
source
|
状态中需要处理的字段信息 |
(static) valuePair(expr) → {Object}
「标准」Ux.valuePair
表达式解析成对象的专用函数
- 如果 expr 是 String 则执行解析。
- 如果 expr 是 Object类型,则直接返回 expr 这个对象。
const user = "username=Lang,email=lang.yu@hpe.com";
const userObj = Ux.valuePair(user);
上述代码执行后生成格式如:
{
"username": "Lang",
"email": "lang.yu@hpe.com"
}
Parameters:
Name | Type | Description |
---|---|---|
expr |
String | 表达式信息,可能包含键值对: |
Returns:
返回转换好的对象
- Type
- Object
(static) valueParse(valueOrExpr) → {Object}
「标准」Ux.valueParse
将字符串解析成
{
"type": "解析类型",
"expression": "最终表达式"
}
Parameters:
Name | Type | Description |
---|---|---|
valueOrExpr |
String | 表达式信息 |
Returns:
计算表达式的解析结果。
- Type
- Object
(static) valuePath(data, path) → {null|any}
「标准」Ux.valuePath
对象树检索专用函数,可根据 path 检索对象树
const user = {
"teacher":{
"son":{
"username": "Lang"
}
}
}
const son = Ux.valuePath(user, "teacher.son");
const username = Ux.valuePath(user, "teacher.son.username");
Parameters:
Name | Type | Description |
---|---|---|
data |
Object | 将要搜索的对象。 |
path |
String | 路径必须是一个字符串,并且包含 |
Returns:
返回最终搜索到的值,否则为 null。
- Type
- null | any
(static) valuePinyin(input) → {String}
「标准」Ux.valuePinyin
将汉字转换成拼音,在某些场景中,中文字转换成拼音后可根据拼音的字典序进行排列,这是业务场景所必须的,这种转换
也是有必要的,而系统中主要使用了js-pinyin
模块实现直接转换,封装了第三方库。
Parameters:
Name | Type | Description |
---|---|---|
input |
String | 输入的数据 |
Returns:
返回转换好的拼音信息
- Type
- String
(static) valueRequest(params) → {Object}
「引擎」Ux.valueRequest
Ant Design提交表单被规范化过后的数据。
- 注入默认语言信息,
Cv['Language']
读取语言信息,默认cn
。 - 如果记录中不包含
active
字段,则注入默认的 active。 - 如果包含了应用数据,则将应用的
sigma
注入到请求数据中。 - 移除掉所有的 undefined 节点。
Parameters:
Name | Type | Description |
---|---|---|
params |
Object | 输入数据值。 |
Returns:
被处理过后的请求数据值。
- Type
- Object
(static) valueStartTime(to, duration, mode) → {Moment}
「标准」Ux.valueStartTime
根据结束时间、间隔、模式计算开始时间
Parameters:
Name | Type | Default | Description |
---|---|---|---|
to |
String | Moment | 结束时间 |
|
duration |
Number | 间隔时间 |
|
mode |
String |
day
|
计算模式 |
Returns:
返回开始时间
- Type
- Moment
(static) valueTime(value, format) → {Moment}
「标准」Ux.valueTime
时间转换标准函数,将字符串格式的对象转换成合法 Moment 对象,返回失败则报错。
Parameters:
Name | Type | Description |
---|---|---|
value |
String | 被转换的字符串。 |
format |
String | Moment可解析的格式信息,默认ISO。 |
Returns:
返回 Moment 对象。
- Type
- Moment
(static) valueTimes(data, …fields)
「标准」Ux.valueTimes
时间转换专用函数,将对象中的 Object 中所有 fields
字段转换成时间格式。
这个函数只支持 ISO 格式,批量转换对象中的字段。
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
data |
Object | 被转换的对象数据。 |
|
fields |
Array.<String> |
<repeatable> |
被转换对象的字段数组信息。 |
(static) valueValid(data, wild) → {Object}
「标准」Ux.valueValid
将输入数据处理成合法对象,两种模式处理对象Object,由于后端无法识别某些值,所以执行下边处理
- 宽模式,0, null, undefined,false 都会被移除,包括 ""。
- 严格模式,仅移除 undefined,其他的保留。
注意对比这个API和denull
的区别,denull
中只处理null值的属性。
Parameters:
Name | Type | Default | Description |
---|---|---|---|
data |
Object | 输入的Object对象。 |
|
wild |
boolean |
false
|
是否使用宽模式。 |
Returns:
返回处理好的数据。
- Type
- Object