页面表达式

组件的属性支持设置为一个常量或者一个表达式。

例如:文本组件的“文本”属性设置为一个常量:“详细信息”,设计界面如下图所示

文本组件的源码如下,“文本”属性就是其中的 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(),选择“计算行”的“单价”列作为参数,如下图所示

1727343679756

运行效果如下图所示

1727343813699

  • 其它组件属性中自定义的函数
    • 在 js 文件中定义方法
    • 在表达式编辑器中调用 js 文件中的方法

例如:在 js 文件中定义 calc 方法,返回值为传入参数乘以2,代码如下

    let calc = (num) => {
        return num * 2;
    }

在表达式编辑中,写 calc(),选择“商品”数据组件当前行的“单价”列作为参数,如下图所示

运行效果如下图所示

特别说明

  • Vue 组件使用的方法写在 js 文件中,使用 let 定义一个变量,这个变量是一个方法
  • 平台一些组件使用的方法写在 data.js 文件中

案例位置

桌面-页面-页面-表达式.w

results matching ""

    No results matching ""