1. 使用场景
在提交订单、入库等场景,需要在子表单多列选择组合是一样的时候去重,可参考本文档实现方式。
2. 单字段校验
2.1 表单设计
1.创建子表单,在里面添加一个组件
这里以“单行文本”组件演示
2.2 添加自定义校验规则
function validateRule(value) {
const tableFieldId = '子表单ID'
const fieldId = '组件ID'
const tableValue = this.$(tableFieldId).getValue()
.map(item => item[fieldId])
.filter(item => !item == "")
const valueSet = new Set(tableValue)
return tableValue.length === valueSet.size
}
3. 多字段组合校验
2.1 表单设计
1.创建子表单,在里面添加自己要使用的列
这里我添加两个下拉单选做演示
2.2 添加自定义校验规则
TIP:每一个参与组合校验的子表单组件都要设置自定义校验函数,同一份代码复制粘贴即可。
1.选中要参与组合校验的列组件,右下角勾选“自定义函数”,点击按钮打开编辑框。
2.在编辑框粘贴下面的代码,并替换代码中的idList
和tableId
为自己表单上的值。
function validateRule(value) {
const tableId = 'tableField_l9nmw8iy'
const idList = ['textField_l9nmw8iz', 'numberField_l9nmw8j0']
const tableValue = this.$(tableId).getValue()
.filter(row => {
// 多字段任意一个为空则跳过行
for (const id of idList) {
if ('' + row[id] === '') {
return false
}
}
return true
})
.map(row => {
//当前行要校验的值拼接一个字符串
let str = ''
idList.forEach(id => str += row[id])
return str
})
//利用Set去重
const valueSet = new Set(tableValue)
// console.log(tableValue)
// console.log(valueSet)
//如果长度相等则证明没有重复的
return tableValue.length === valueSet.size
}

发表评论 取消回复