前端表达式(可视化配置)
配合视图设置,可实现基本计算、校验、赋值、页面要素的动态联动效果。
说明
- 常规四则运算,实时赋值、计算、跨模块汇总计算、赋值
- 自定义 JavaScript 脚本支持
- 页面元素动态联动规则设置
一、前端表达式说明
1、常规计算及赋值
普通的加减乘除四则运算
javascript
job_salary + level_salary + basic_salaryjob_salary + level_salary + basic_salary2、自定义函数
为方便计算,前端自定义一些业务中经常使用的函数,表达式可以组合使用。
| 方法 | 说明 | 示例 | 备注 |
|---|---|---|---|
| toArray | 转数组 | toArray(a,b,c) | |
| join(arr: [], separator = '/') | 字符串拼接 join(arr: [], separator = '/') | join([a,b,c],'-') | arr:数组类型,非数组可用 toArray 转换,separator:分隔符,默认'/'连接,可自定义 |
| toFixed(num: any, p = 2) | 数值、金额精度处理 | toFixed(1234.567,2),结果:1234.56 | num:要格式化的数据,p:精度,默认 2 位 |
| dateCalc | 时间间隔计算 | dateCalc(toArray(start_date,end_date)) type 为'date',或者不传(注意 date 要加上单引号) | 使用 dateCalc 函数,时间区间计算,直接使用该函数,多个字段的需要加一个 toArray 函数,该函数会根据两个时间是否带时分去按日期计算还是按时间计算,按日期计算的话会在默认算出的结果加 1,比如 2024-05-31 到 2024-06-01 会算出来 2 天,type 为’date’或者不传,传了‘date’之后不管是否有时分秒,都按日期计算 |
| min | 录入最小值 | min=10 // 最小值为 10 min=pay_money // 最小值为 pay_money | 目前支持的都是在同一个表中 |
| max | 录入最大值 | max=50 // 最小值为 50 或 max=pay_money // 最小值为 pay_money | 目前支持的都是在同一个表中 |
| multiSum | 跨表计算合计 | multiSum(MAIN_BILL_DTO[test_money], BILL_LIST[last_month_amount+current_month_amount]) | MAIN_BILL_DTO[test_money] 参数中以 MAIN_BILL_DTO 为对象名称,英文的[]内是需要计算的字段,可以是单个字段,也可以为简单的表达式(加减乘除)。 |
| setDomVisible(doms,value) | 设置元素的显隐, | doms 数数组,需要隐藏的元素 id,规则是 getattribute+''+field_code,value 是隐藏时的值 | |
| numberPositive(num) | 最小值为 0 | numberPositive(a+b-c) | 若计算结果小于 0,则返回 0 |
【tips:补充说明】手动触发跨表计算调用 create-form-view 组件的 toggleCalc 方法手动触发 跨表计算
javascript
createFormRef?.value?.toggleCalc(getAttribute)createFormRef?.value?.toggleCalc(getAttribute)3、自定义函数
支持基本的 JavaScript 脚本,用于处理特殊情况
javascript
//record为当前行数据;formData为全部表单数据;dataSource为当前表格数据;
function doCalculate(record, formData, dataSource) {
console.log('Hello, world!')
}//record为当前行数据;formData为全部表单数据;dataSource为当前表格数据;
function doCalculate(record, formData, dataSource) {
console.log('Hello, world!')
}参数说明
- formData:全部表单数据对象
- dataSource:当前表格数据对象
注意事项:(1) (2)
二、应该场景示例
一级列表视图
注册事项
- (1)一级列表只支持简单的公式设置,不支持联动规则。
- (2)公式配置入口:【视图字段 》 个性化设置 》 计算表达式】
1、列表字段组合

2、要素字段转译

3、个性化数据显示设置
示例:设置中间列,组合显示:申请人编码、姓名、自定义用途、申请金额 的组件显示。
js
join(toArray(manage_user_code,manage_user_name,'申请费用',approval_money),'-')join(toArray(manage_user_code,manage_user_name,'申请费用',approval_money),'-')二、单据详情中的表达式使用
单据详情中支持公式和联动规则的综合使用
- (1)配置入口:【视图管理 》 配置表达式】
- (2)通用表达式接口:
formula/queryFormulaInfo,返回对应视图的公式配置。 - (3)通用联动规则接口:
viewRuleRelation/queryByViewGroupId,返回视图对应的动态规则配置。
1、直接赋值:
将[申请事由]值,默认赋值给[申请用途],配置如下: 应用字段:设置[申请用途],公式中直接设置取值来源为[申请事由]即可
| 应用字段 | 公式= |
|---|---|
| 申请用途 | 申请事由 |
2、计算赋值
示例:限额= 标准(stard_money) X 人数(person_num)
| 应用字段 | 公式= |
|---|---|
| 限额 | stard_money * person_num |
3、多字段拼接赋值
示例:设置[备注]字段默认值=[申请日期]-[申请事由]-[金额]三个字段组合,用'-'分隔
| 应用字段 | 公式 |
|---|---|
| 备注 | join(toArray(input_date,remark,approval_money) , "-") |
页面效果:
4、multiSum:跨表合计与赋值
multiSum内置函数,支持跨模块汇总计算,主要用于汇总计算多个区块的子表金额汇总,赋值给主单金额。 示例:基本信息[申请金额]=出差明细[金额]合计 + 补助信息[合计金额]汇总
| 应用字段 | 公式 |
|---|---|
| 基本信息[申请金额] | multiSum(BILL_DETAIL_LIST[far_money],TRAVEL_PAY_DETAIL[total_cost]) |
5、自定义javascript脚本
程序支持自定义javascript脚本,来补充个性化的项目需求支撑。
由于vue的响应式原则,通过操作数据,实现界面元素的动态更新
- 参数说明: (1)formData:为全部表单数据 (2)dataSource:为当前表格数据
配置注意事项: (1) 关联字段设置:需要明确指定,哪些字段的变更会触发js脚本的执行。 原因:js脚本存储时作为json串存储,系统无法自动识别要响应的字段,需要手动指定触发字段,确保脚本正确执行。
三、保存校验
保存校验,可以使用javascrpit脚本,返回false:拦截,true时放行
校验级别:
- 【提示】:只提示,不进行数据拦截,
- 【禁止】:提示信息,并阻止数据的提交。
示例:校验师资费,税前金额不大于标准金额,否则禁止保存
