公式与条件数据
Zion 支持在组件和行为中使用公式,实现数据的动态计算与条件判断。
公式基础
公式用于对数据进行计算和处理,支持多种类型:
- 文本、数字、数组、时间等类型的转换与运算
- 条件判断与逻辑处理
类型转换
名称 | 描述 | 示例输入 | 示例输出 |
---|---|---|---|
TO_TEXT | 将整数、小数、jsonb 等转为文本 | {"message": "Hello World!"} | {"message": "Hello World!"} |
TO_INTEGER | 文本或小数转为整数 | -3.1415926 | -3 |
TO_DECIMAL | 文本转为小数 | "-3.1415926" | -3.1415926 |
TEXT_TO_DATETIME | 文本转为日期时间 | "2025-02-21 14:36" | 2025-02-21T14:36:00.000+08:00 |
COMBINE_DATE_AND_TIME | 合并日期和时间为日期时间 | 日期:2024-01-08 时间: 13:38:00.000+08:00 | 2024-01-08T13:38:00.000+08:00 |
EXTRACT_DATE_OR_TIME | 提取日期时间中的日期或时间 | 2024-01-08 13:38:00.000+08:00 | 2024-01-08 |
文本处理
名称 | 描述 | 示例输入 | 示例输出 |
---|---|---|---|
STRING_LEN | 返回文本长度 | "Hello World!" | 12 |
REPLACE_PART | 替换指定位置的文本 | 文本:"Hello World!" 起始位置: 1 替换字符数: 4 新文本: "ola" | "Hola World!" |
REPLACE_TEXT | 替换指定文本 | 文本:"Hello World!" 旧文本: "o" 新文本: "" 替换次数: 1 | "Hell World" |
FIND | 返回指定文本首次出现的位置 | 文本:"Hello World!" 要定位的文本: "o" | 4 |
CONTAIN | 判断是否存在指定文本 | 文本:"Hello World!" 要查找的文本: "ello" | true |
SUBSTRING | 截取一段子文本 | 文本:"Hello World!" 开始位置: 0 结束位置: 5 | "Hello" |
LEFT | 从文本头部返回指定字符数 | 文本:"Hello World!" 字符数: 5 | "Hello" |
RIGHT | 从文本尾部返回指定字符数 | 文本:"Hello World!" 字符数: 5 | "World" |
LOWER | 转为小写 | "Hello World!" | "hello world!" |
UPPER | 转为大写 | "Hello World!" | "HELLO WORLD!" |
RANDOM_STRING | 生成随机文本 | 最小长度:5 最大长度: 10 小写: true 大写: true 数字: true | "seXr3aoRD" |
SPLIT | 按指定字符分割文本为数组 | 文本:"2024/01/08" 分隔符: "/" | ["2024", "01", "08"] |
数学运算
名称 | 描述 | 示例输入 | 示例输出 |
---|---|---|---|
+ | 数字加法 | 数字1:5 数字2: 10 | 15 |
- | 数字减法 | 数字1:5 数字2: 10 | -5 |
* | 数字乘法 | 数字1:5 数字2: 10 | 50 |
/ | 数字除法 | 数字1:5 数字2: 10 | 0.5 |
% | 返回除后所得的余数,符号与被除数一致 | 被除数:-5 除数: 10 | -5 |
MIN | 返回最小值 | 数字1:5 数字2: 10 | 5 |
MAX | 返回最大值 | 数字1:5 数字2: 10 | 10 |
ROUND_UP | 返回向上最接近的整数 | 数字:3.5 | 4 |
ROUND_DOWN | 返回向下最接近的整数 | 数字:-3.5 | -4 |
INT | 取整 | 数字:-3.5 | 3 |
ABS | 返回绝对值 | 数字:-3.5 | 3.5 |
RANDOM_NUMBER | 返回指定数字之间的随机整数 | 最小值:1 最大值: 10 | 6 |
POWER | 幂运算 | 底数:2 指数: 3 | 8 |
DECIMAL_FORMAT | 小数格式化 | 小数:3.1415926 精确到几位小数: 2 舍入模式: HALF_EVEN 清除末尾的所有零: true | 3.14 |
数组处理
名称 | 描述 | 示例输入 | 示例输出 |
---|---|---|---|
GET_ITEM | 从数组中获取一项,索引从0开始 | 数组:["2024", "01", "08"] 索引: 1 | "01" |
ARRAY_TO_ITEM | 从数组中获取一项(即将废弃,推荐使用GET_ITEM) | 数组:["2024", "01", "08"] 索引: 1 | "01" |
ARR_LEN | 获取数组的长度 | 数组:["2024", "01", "08"] | 3 |
FIRST | 返回数组的第一项 | 数组:["2024", "01", "08"] | "2024" |
LAST | 返回数组的最后一项 | 数组:["2024", "01", "08"] | "08" |
RANDOM_ITEM | 返回数组的随机一项 | 数组:["2024", "01", "08"] | "01" |
SLICE | 取出数组中的一段 | 数组:["2024", "01", "08"] 开始位置: 1 数量: 2 | ["01", "08"] |
JOIN | 将文本类型的数组连接成字符串 | 数组:["2024", "01", "08"] 连接符: "-" | "2024-01-08" |
INDEX_OF | 返回指定项第一次出现的索引 | 数组:["2024", "01", "08"] 指定项: "08" | 2 |
时间运算
名称 | 描述 | 示例输入 | 示例输出 |
---|---|---|---|
GET_DATE_TIME | 获取时间点 | 年:2024 月: 1 日: 8 时: 13 分: 14 秒: 0 | 2024-01-08T13:14:00.000+08:00 |
DELTA | 时间的加/减运算 | 时间:13:38:00.000+08:00 运算类型: 加 时: 1 分: 12 秒: 0 | 14:50:00.000+08:00 |
DURATION | 计算两个时间点的间隔 | 开始:2019-12-01 结束: 2024-01-08 时间差转换为: 年 | 5 |
EXTRACT | 获取时间中指定的部分。如果是获取星期几,输出0到6的整数,0 表示星期日 | 时间:13:38:00.000+08:00 单位: 时 | 13 |
💡
- 日期:
2024-01-08
代表年-月-日。 T
是日期和时间的分隔符- 时间:
13:14:00.246046
代表小时:分钟:秒.毫秒
- 时区:
+08:00
代表这个时间是在UTC(协调世界时)基础上加8小时的时区,这通常对应于中国标准时间(CST)。
地理位置
名称 | 描述 | 示例输入 | 示例输出 |
---|---|---|---|
DISTANCE | 计算两个地理位置之间的距离。单位可选择为:米、千米、英里 | 位置1:[120.2934,30.3150] 位置2: [120.2934,31.3150] 单位:千米 | 866 |
GET_VALUE_FROM_GEO_POINT | 从地理位置(经纬度)中获取经度或纬度 | 位置:[120.2934,30.3150] 类型: 纬度 | 30.3150 |
JSON 处理方法
名称 | 描述 | 示例输入 | 示例输出 |
---|---|---|---|
JSON_EXTRACT_PATH | 从json中获取数据 | 输入Json:{"data": {"foo": "bar"}} 路径: data.foo | "bar" |
条件数据
Zion 支持在组件和行为中使用条件数据,允许根据特定条件动态选择和展示数据。条件数据可以用于实现复杂的业务逻辑,例如根据用户角色、状态或其他条件展示不同的内容。
条件数据的配置方式如下:

具体的例子如下:
{
"conditions": [
{
"case": "case1",
"condition": "user.isLoggedIn",
"data": {
"text": "欢迎回来,用户!"
}
},
{
"case": "case2",
"condition": "!user.isLoggedIn",
"data": {
"text": "请登录以继续。"
}
}
]
}
在上述示例中,根据用户是否登录的状态,展示不同的文本内容。
Last updated on