页面表达式
组件的属性支持设置为一个常量或者一个表达式。
例如:文本组件的“文本”属性设置为一个常量:“详细信息”,设计界面如下图所示
文本组件的源码如下,“文本”属性就是其中的 text 属性
<antdpro:Typography.Text id="typographyText0" text="详细信息" xmlns:antdpro="$UI/comp/antdpro/components" />
运行效果如下图所示
文本组件的“文本”属性设置为一个表达式:“抽屉参数.动作”,表示将“抽屉参数”数据组件当前行的“动作”列中的值,作为文本组件的显示内容,设计界面如下图所示
使用表达式编辑器,从“数据”中选择“抽屉参数”的“动作”列,形成“文本”属性的表达式,如下图所示
文本组件的源码如下,“文本”属性就是其中的 text 属性
<antdpro:Typography.Text id="typographyText0" text="{drawerData.current?.action}" xmlns:antdpro="$UI/comp/antdpro/components" />
本例中,新增时会设置“抽屉参数”数据组件当前行的“动作”列为 create,编辑时会设置“抽屉参数”数据组件当前行的“动作”列为 edit,运行效果如下面两张图所示
从源码中 text 属性的值可以看出,表达式是用{}括起来的代码。
表达式 {drawerData.current?.action} 的含义为
- drawerData:数据组件的id
- current: 当前行
- action:数据组件的列名
表达式编辑器
系统提供“表达式编辑器”用来编辑页面表达式,表达式编辑器支持两种模式,一是情景模式,二是高级模式。
情景模式
情景模式支持设置多种情景,类似于 switch case。例如:上例中
- 新增时,不显示 create,显示“新建”;
- 编辑时,不显示 edit,显示“编辑”;
- 其它情况时,不显示 view,显示“查看”
情景设置如下图所示
表达式编辑器生成的源码如下,其中 wx.Util.iif 是系统内置的条件判断函数
{wx.Util.iif(drawerData.current?.action=="create","新建",wx.Util.iif(drawerData.current?.action=="edit","编辑","查看"))}
高级模式
高级模式是不依赖情景模式,开发者自行书写表达式,如下图所示
表达式
表达式由“函数”和“值”组成,表达式支持值、函数、函数嵌套等方式,即函数的参数可以是值,也可以是函数。
系统内置值
在表达式中可以使用的值,显示在表达式编辑器的左上方,根据组件的上下文显示不同的值。
- 一般情况下,显示“常量”和“数据”
- 在表格的列头中,除了显示“常量”和“数据”,还会显示 antd 渲染方法返回的列标题参数、table当前序号、table当前行
- 在表格的列中,除了显示“常量”和“数据”,还会显示 antd 渲染方法返回的列内容参数、table当前序号、table当前行
- 在表格的“过滤条件”属性中,除了显示“常量”和“数据”,还会显示 antd 渲染方法返回的行对象
- 在列表中,除了显示“常量”和“数据”,还会显示 antd 渲染方法返回的列内容参数、list当前序号、list当前行
- 在事件中,除了显示“常量”和“数据”,还会显示事件参数
下面介绍几种常用的表达式的值
数据
选择“数据”下面的数据组件和列,表示使用数据组件“当前行”的列。数据组件加载数据后,默认第一行为当前行,在表格、树或列表等组件中点击某行数据后,会将点击的行切换为数据组件的当前行。也可以调用“前一行”、“下一行”等操作改变数据组件的当前行。
表格当前序号、列表当前序号
在表格或列表中显示序号时使用,table当前序号和list当前序号都从0开始,使用时加1。使用分页组件后,每页的序号都是从0开始的,如果希望序号连续显示,使用数据组件的跨页序号。
表格当前行、列表当前行
table当前行和list当前行都是渲染行,通过它们取到的是组件所在行的行对象。
特别注意:这里的当前行不同于数据组件的当前行。
- 数据组件的当前行:数据组件中无论有多少行数据,都只有一个当前行
- 表格当前行:表格组件用来显示数据组件中的数据,显示的每一行都对应数据组件中的一行,这行数据就是表格当前行,即表格的每一行都有一个表格当前行。表格中的行显示的是表格当前行中的内容,行的事件和行内组件的事件也要使用表格当前行中的内容
- 列表当前行:同表格当前行
事件参数
事件参数是触发这个事件时,系统传入的参数,用于在事件中使用。不同的事件会有不同的参数。
系统内置函数
在表达式中可以使用的函数,显示在表达式编辑器的右上方,如下图所示,里面包括通用函数、数据组件函数、数据列函数、组件提供的函数。
通用函数
通用函数包括:字符串函数、字符串校验函数、日期时间函数、编码函数、其它函数、加密函数、数学函数、集合函数、随机数函数、运行环境函数等。
下面列举几个常用的函数
- 是否为空文件
- 字符串转为时间
- 时间转为字符串
- 服务器时间
- 条件判断
数据组件函数
选择数据下面的某个数据组件,右侧会显示数据组件的函数
下面列举几个常用的函数
- 跨页序号:给数据组件的每一行增加一个序号,序号从1开始且连续
- 当前页号
- 记录数:数据组件里面的记录数
- ID 列表:数据组件所有行的主键,用逗号分隔形成的字符串
- JSON:以 JSON 数组的格式获取到数据组件中的所有数据
数据列函数
选择“数据”下面的某个数据组件的某列,右侧会显示数据列的函数。如果列类型是数值类型,会显示和、最大值、最小值、平均值等函数
下面列举几个常用的函数
- 和:计算数据组件中所有行的和
- 是否只读
序号组件的函数
序号组件用于产生序号,通常设置在数据组件-规则设置-默认值中。
下面列举几个常用的函数
- 根据当前时间获取下个序号(key)
- key 是序号的标识
- 序号由三部分组成:key + 8位日期 + 4位数字
- 例如:根据当前时间获取下个序号("CC")生成序号为:CCimages/page-expression/202404110001
- 获取下个序号(key,format,num)
- key 是序号的标识,format 是 java 字符串格式化的格式,num 表示获取几个序号
- 序号由两部分组成:key + format
- 例如:获取下个序号("DD","%03d",1)生成1个序号:DD001
上下文组件的函数
上下文组件用于获取当前登录用户的组织信息和权限信息。
下面列举几个常用的函数
- 获取当前机构名称:获取当前登录者最近的机构名称
- 获取当前部门名称:获取当前登录者最近的部门名称
- 获取当前人员成员主键全路径:获取当前登录者组织机构表 orgs 中 fid 列的值
- 获取用户属性(列名):获取当前登录者用户表 users 表中某列的值
- users 表中手机号列名为:phoneNumber
- 获取用户手机号写为:获取用户属性("phoneNumber")
- 获取用户扩展属性(列名):获取当前登录者用户扩展表 usersx 中某列的值
- 系统默认不提供用户扩展表,开发者参考《门户定制案例-组织及用户扩展》
- 判断当前人员是否拥有过某个角色(角色编码)
- 是否有界面权限(界面权限编码)
自定义函数
上面的函数都不能满足需求时,可以自定义函数。React 和 Vue 的做法不同
React 自定义函数
- 在 js 文件中定义方法
- 在表达式编辑器中使用 $page 引用 js 文件中的方法
例如:在 js 文件中定义 calc 方法,返回值为传入参数乘以2,代码如下
calc = (num) => {
return num * 2;
}
在表达式编辑中,写 $page.calc(),选择“商品”数据组件当前行的“单价”列作为参数,如下图所示
Vue 自定义函数
- 数据组件规则设置中自定义的函数
- 在 data.js 文件中定义方法
- 在表达式编辑器中使用 $page 引用 data.js 文件中的方法
例如:在 data.js 文件中定义 calc 方法,返回值为传入参数乘以0.5,代码如下
calc = (num) => {
return num * 0.5;
}
在表达式编辑中,写 $page.calc(),选择“计算行”的“单价”列作为参数,如下图所示
运行效果如下图所示
- 其它组件属性中自定义的函数
- 在 js 文件中定义方法
- 在表达式编辑器中调用 js 文件中的方法
例如:在 js 文件中定义 calc 方法,返回值为传入参数乘以2,代码如下
let calc = (num) => {
return num * 2;
}
在表达式编辑中,写 calc(),选择“商品”数据组件当前行的“单价”列作为参数,如下图所示
运行效果如下图所示
特别说明
- Vue 组件使用的方法写在 js 文件中,使用 let 定义一个变量,这个变量是一个方法
- 平台一些组件使用的方法写在 data.js 文件中
案例位置
桌面-页面-页面-表达式.w