_value

值规范模块

值处理专用模块

函数名 说明
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) valueCopy(target, source, field)

「标准」Ux.valueCopy

该函数负责将 field 字段中的信息从 source 拷贝到 target 中。

  1. field 为 String:拷贝单个字段数据
  2. field 为 Array:拷贝多个字段数据
  3. 如果读取的数据为 Object / Array 则采用深度拷贝
Parameters:
Name Type Description
target Object

拷贝目标对象

source Object

拷贝源对象

field String | Array

需要拷贝的字段信息

(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);
 });

第三参数为回调函数,会将读取到的数据直接传给回调函数来执行,这里执行的是唯一数据,上述示例中,读取的数据为:

  1. source = room.type 的Assist数据源(一般是一个DataArray)。
  2. 使用key = 值筛选唯一记录。
  3. 将唯一记录传给 consumer 函数执行筛选过后的回调流程。
Parameters:
Name Type Description
reference ReactComponent

React对应组件引用。

input Object

输入数据。

consumer function

执行函数。

(static) valueFabrics(reference, input, consumer)

「引擎」Ux.valueFabrics

(略)增强版的valueFabric函数,带过滤器的版本,可支持过滤操作。

Parameters:
Name Type Description
reference 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

配置解析统一调用函数(特殊应用)

  1. 如果 attrPath 长度为1,则直接提取 target 中的:target[attrPath[0]]
  2. 如果长度大于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

梯度处理专用函数,函数执行流程

  1. 先全部拉平,生成带.属性的对象(一层结构)。
  2. 按照拉平的属性名进行排序(顺序处理)。
  3. 然后执行结构化,将所有的.操作符移除。

最终目的是生成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) valueNow(pattern) → {any}

「标准」Ux.valueNow

返回当前时间,直接得到 Moment 对象。

Parameters:
Name Type Description
pattern String

可支持的时间格式。

Returns:

返回合法的 Moment 对象。

Type
any

(static) valueOnChange(reference, state, key)

「标准」Ux.valueOnChange

行编辑器专用函数,用于编辑表格行相关信息

Parameters:
Name Type Default Description
reference React.Component

React组件引用。

state Object

组件引用本身状态信息。

key String source

状态中需要处理的字段信息key

(static) valuePair(expr) → {Object}

「标准」Ux.valuePair

表达式解析成对象的专用函数

  1. 如果 expr 是 String 则执行解析。
  2. 如果 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

表达式信息,可能包含键值对:name1=value1,name2=value2

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提交表单被规范化过后的数据。

  1. 注入默认语言信息,Cv['Language']读取语言信息,默认cn
  2. 如果记录中不包含active字段,则注入默认的 active。
  3. 如果包含了应用数据,则将应用的 sigma 注入到请求数据中。
  4. 移除掉所有的 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,由于后端无法识别某些值,所以执行下边处理

  1. 宽模式,0, null, undefined,false 都会被移除,包括 ""。
  2. 严格模式,仅移除 undefined,其他的保留。

注意对比这个API和denull的区别,denull中只处理null值的属性。

Parameters:
Name Type Default Description
data Object

输入的Object对象。

wild boolean false

是否使用宽模式。

Returns:

返回处理好的数据。

Type
Object