李雅慧 发表于 2025-8-5 17:50:38

表格內對某一欄位做全量校驗怎麼寫?

需求是

之前試寫過很多種邏輯但是某些場景就會失靈,
花了兩三天時間了有點內耗
需要支援一下解法
感謝>"<
{
          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:11:56

本帖最后由 翁俊 于 2025-8-5 18:27 编辑

你这属于业务需求了,没有一个规范和样例的

给你一个思路,这种场景不建议使用规则来实现,因为如果是规则会比较复杂,要写多个规则联动触发才能满足场景
建议方式:
使用hooks中的表格change事件,当表格数据发生变化时,获取表格实例,拿到表格所有数据,去获取最后一行数据,就是新增的数据,找到需要判断的栏位值和表格所有数据对比,当不满足条件是,使用hooks中的setError事件给出提示

李雅慧 发表于 2025-8-6 09:00:08

這是定制也可以用hooks嗎?

翁俊 发表于 2025-8-6 09:17:31

本帖最后由 翁俊 于 2025-8-6 09:19 编辑

李雅慧 发表于 2025-8-6 09:00
這是定制也可以用hooks嗎?
定制支持hooks的,有平台文档说明如何接入
平台hooks文档




李雅慧 发表于 2025-8-6 14:52:00

後來解了
某些場景會有問題是因為只觸發了當前行的校驗
所以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]
查看完整版本: 表格內對某一欄位做全量校驗怎麼寫?