表格內對某一欄位做全量校驗怎麼寫?
需求是之前試寫過很多種邏輯但是某些場景就會失靈,
花了兩三天時間了有點內耗
需要支援一下解法
感謝>"<
{
schema: 'acctg_year',
path: 'tableData',
key: 'custom',
validatorType: 'error',
errorMessage: this.translateService.instant('dj-bmc-会计年度需要连续'),
trigger: {
condition:// eslint-disable-next-line max-len
"(()=>{if(currentControl.parent.parent.controls.length<2){return false;};let result = false;result = !currentControl.parent.parent.controls.every((item,rowIndex)=>rowIndex===0 || (rowIndex>0 && (Number(currentControl.parent.parent.controls.get('acctg_year').value) === Number(currentControl.parent.parent.controls.get('acctg_year').value)+1)));return result;})()",
// 'currentControl.parent.parent.controls.filter((data,index)=> {return index>0 && (Number(currentControl.parent.parent.controls.get("acctg_year").value)+1 !== Number(currentControl.parent.parent.controls.get("acctg_year").value))});',
// 'currentControl.parent.parent.controls.filter((data,index)=> {return index>0 && (Number(currentControl.parent.parent.controls.value.acctg_year)+1 !== Number(data.value.acctg_year))});',
// '!currentControl.parent.parent.controls.every((control, index, array) => {if(array.length<2 || index===0){return true;};if(array.length>1 & index>0){let prev = Number(array.get("acctg_year").value);let curr = Number(control.get("acctg_year").value);return prev + 1 === curr;}})',
type: 'sync',
point: 'default',
},
}
本帖最后由 翁俊 于 2025-8-5 18:27 编辑
你这属于业务需求了,没有一个规范和样例的
给你一个思路,这种场景不建议使用规则来实现,因为如果是规则会比较复杂,要写多个规则联动触发才能满足场景
建议方式:
使用hooks中的表格change事件,当表格数据发生变化时,获取表格实例,拿到表格所有数据,去获取最后一行数据,就是新增的数据,找到需要判断的栏位值和表格所有数据对比,当不满足条件是,使用hooks中的setError事件给出提示
這是定制也可以用hooks嗎?
本帖最后由 翁俊 于 2025-8-6 09:19 编辑
李雅慧 发表于 2025-8-6 09:00
這是定制也可以用hooks嗎?
定制支持hooks的,有平台文档说明如何接入
平台hooks文档
後來解了
某些場景會有問題是因為只觸發了當前行的校驗
所以rules寫
{
schema: 'acctg_year',
path: 'tableData',
key: 'custom',
validatorType: 'error',
errorMessage: this.translateService.instant('dj-bmc-会计年度需要连续'),
trigger: {
condition:
// eslint-disable-next-line max-len
"(()=>{if(currentControl.parent.parent.controls.length<2){return false;};let result = false;result = !currentControl.parent.parent.controls.every((item,rowIndex)=>rowIndex===0 || (rowIndex>0 && (Number(currentControl.parent.parent.controls.get('acctg_year').value) === Number(currentControl.parent.parent.controls.get('acctg_year').value)+1)));return result;})()",
type: 'sync',
point: 'default',
},
},
之外
還要在修改資料的地方forEach觸發這個列的校驗
页:
[1]