表格內開窗後使用hooks校驗並且setErrors,取消勾選後就serErrors失效了
本帖最后由 李雅慧 于 2025-5-28 17:50 编辑業務中台公共基礎 - 维护计量单位信息作業
開窗選擇後會校驗報錯
此時按鈕不可點擊
取消勾選再勾選後又可以點擊保存了
setErrors是綁在單元格control上的
請協助確認是不是BUG?謝謝
收到问题,排查中
麻烦私信补充下hooks设置规则的代码以及运行态的账密,需要去排查下
翁俊 发表于 2025-5-28 17:56
麻烦私信补充下hooks设置规则的代码以及运行态的账密,需要去排查下
測試區用戶帳密E10603Test001
const control = component.getControl();
//当体积单位为非基本单位时,则必须建立与基本单位的换算关系
//先调用bm.meas_unit.get-查询计量单位,
//入参:单位编号=[当前行.体积单位编号],回参:单位编号、基本单位;
const requestParam = {
"meas_unit": [
{
"unit_no": value
}
]
};
//若回参.基本单位=false,再调用bm.unit_cnv.get,
//入参:换算单位编号=[当前行.体积单位编号],状态=Y.生效,
//若回参不存在,则报错:体积单位与基本单位间未维护换算关系!
const requestParam2 = {
"unit_cnv": [
{
"cnv_unit_no": value
}
],
"search_info": [
{
"search_field": "manage_status",
"search_operator": "equal",
"search_field_path": "unit_cnv",
"search_value": ["Y"]
}
]
};
if (value) {
options.utils.espApi
.getEspByActionId({
actionId: 'bm.meas_unit.get',
parameter: requestParam,
// businessUnit: { eoc_company_id: value },
executeContext: options.context,
})
.subscribe(
(res) => {
const base_unit = res.data.meas_unit[0].base_unit;
if (!base_unit) {
options.utils.espApi
.getEspByActionId({
actionId: 'bm.unit_cnv.get',
parameter: requestParam2,
// businessUnit: { eoc_company_id: value },
executeContext: options.context,
})
.subscribe(
(res) => {
const unit_cnv = res.data.unit_cnv ?? [];
if (!unit_cnv || unit_cnv.length === 0) {
options.utils.translate.setTranslation('zh_CN', { errMsg: '体积单位与基本单位间未维护换算关系!' });
options.utils.translate.setTranslation('zh_TW', { errMsg: '體積單位與基本單位間未維護換算關係!' });
options.utils.translate.setTranslation('en_US', { errMsg: 'The conversion relationship between volume units and basic units is not maintained!' });
const errMsg = options.utils.translate.instant('errMsg');
options.utils.athModalService.error({
nzContent: errMsg
});
control.setErrors({ volUnitErr: true });
return false;
} else {
const errors = control.errors || {};
delete errors['volUnitErr'];
if (Object.keys(errors).length === 0) {
control.setErrors(null); // 沒有其他錯誤才清空
} else {
control.setErrors(errors); // 保留其他錯誤
}
return true;
}
},
() => {
console.log('error');
});
} else {
const errors = control.errors || {};
delete errors['volUnitErr'];
if (Object.keys(errors).length === 0) {
control.setErrors(null); // 沒有其他錯誤才清空
} else {
control.setErrors(errors); // 保留其他錯誤
}
return true;
}
},
() => {
console.log('error');
});
} else {
const errors = control.errors || {};
delete errors['volUnitErr'];
if (Object.keys(errors).length === 0) {
control.setErrors(null); // 沒有其他錯誤才清空
} else {
control.setErrors(errors); // 保留其他錯誤
}
return true;
}
问题原因:
经过排查页面开窗栏位设置了数据变化监听的hooks事件,当数据发生变化时,调用接口判断是否满足条件,不满足会设置异常阻止页面提交,但是表格行选中时,没有添加行点击事件再去调用这个字段的规则,目前行选择时,会判断数据之前是否存在规则,如果存在规划会清空规则,所以勾选取消再次勾选时没有读取到规则,所以可以提交
解决方式:
选中表格,在表格中添加行点击的hooks事件,在事件脚本中添加需要校验的字段规则
页:
[1]