如何使用智能审批JSSDK实现明细行分组合计原创
86次浏览
未经作者许可,禁止转载编辑于2024年04月16日 16:37:17
云之家的明细本身只有合计功能,没有分组合计功能。对于需要拆分上报,汇总计算或汇总控制的场景,或多行明细,领导审核时只关注按照某个类别汇总后的金额等场景时,就需要将明细进行分组求和。
注:能够实现相同效果的方法有很多,以下代码仅供参考。
1、首先需要再增加一个明细,明细内容是分组值和小计值。例如:下图示例中,我按照年度、费用项目将金额汇总。
2、在个性化开发中创建一个个性化卡片
3、先测试获取两个明细的内容,智能审批的数组是由控件ID和控件值组成的,例如:[{"Te_5":"销售费用"},...],Te_5是明细中,【费用项目(文本)】字段的ID
//获取并打印明细值 let items = cf.form.getFieldValue("Dd_0").widgetValue; console.log(items);
或者从代码界面的左侧获取
4、编写正式代码
cf.ready(function(){ //监听明细值的改变,明细中修改任意值,都会触发 let success = cf.form.subscribeFieldValueChange( "Dd_0", function (valueObject) { //获取明细数组 let data = valueObject.widgetValue //使用reduce函数,累计金额。acc初始值是一个空对象{},item是明细行 let result = data.reduce((acc, item) => { //判断【费用项目(文本)】字段不为空 if (item.Te_5 != ""){ //将【预算年度】-【费用项目(文本)】连接起来作为key let key = `${item.Te_0}-${item.Te_5}`; //判断acc中是否存在key if (!acc.hasOwnProperty(key)) { //如果不存在,添加一个对象 key:{年度预算明细行项目}。 //Te_1 预算年度;Te_6 费用项目;Mo_2 预算金额合计 acc[key] = {Te_1: item.Te_0, Te_6: item.Te_5, Mo_2: 0}; } //预算金额累加 acc[key].Mo_2 += Number(item.Mo_1); } //返回对象 return acc; }, {}); // 将结果转换为数组,并且根据预算年度、费用项目排序 var resultArray = Object.values(result).sort((a, b) => a.Te_1 - b.Te_1 || a.Te_6.localeCompare(b.Te_6)); //赋值给年度预算明细 success = cf.form.setFieldValue("Dd_1", resultArray) }) })
推荐阅读