1. 使用场景
需要获取子表单值的时候,比如当前出库表中的明细表,我们可以按照下面案例来操作获取。
2. 实现功能
2.1. 创建表单
主表成员字段需开启多选模式。
如下图所示:
2.2. 打开 JS 面板,编写代码
如下图所示:
下述代码可以直接复制使用,请注意表单唯一标识的替换!,子表成员单选模式和多选模式的处理方式也不一致。
解释
export function onTableChange({ value, extra }) { const { formGroupId, fieldId, from, changes = {}, tableFieldId } = extra || {}; // 必须,避免使用 updateItemValue 更新子表数据后,再次触发 onChange 陷入死循环 if (from === 'setItemValue') { return }; const tableField = this.$(tableFieldId); // 上述代码必须存在,否则会造成功能异常 // 子表单数值 if (fieldId && fieldId === 'numberField_lbncqnrz') { const sum = value.reduce((prev, cur) => { return prev + (cur.numberField_lbncqnrz || 0); }, 0); this.$('numberField_lbncqns0').setValue(sum); }; // 子表单成员1(单选模式) if (fieldId && fieldId === 'employeeField_lbbn2hsb') { const users1 = value.filter(item => { return item.employeeField_lbbn2hsb; }).map(_item => { return Array.isArray(_item.employeeField_lbbn2hsb) ? _item.employeeField_lbbn2hsb[0] : _item.employeeField_lbbn2hsb }); this.$('employeeField_lbbn2hsd').setValue(_.uniqBy(users1, 'value')); }; // 子表单成员2(多选模式) if (fieldId && fieldId === 'employeeField_li018dw5') { const employeeData = value.filter(item => { return item.employeeField_li018dw5 && item.employeeField_li018dw5.length > 0; }); const users2 = []; for (let i = 0; i < employeeData.length; i++) { for (let j = 0; j < employeeData[i].employeeField_li018dw5.length; j++) { users2.push(employeeData[i].employeeField_li018dw5[j]) } }; this.$('employeeField_li018dwa').setValue(_.uniqBy(users2, 'value')); }; }