返回列表 发布新帖

表格內開窗後使用hooks校驗並且setErrors,取消勾選後就serErrors失效了

72 4
发表于 2025-5-28 17:37:20 | 查看全部 阅读模式
问答

紧急程度

已完结
本帖最后由 李雅慧 于 2025-5-28 17:50 编辑

業務中台公共基礎 - 维护计量单位信息作業

開窗選擇後會校驗報錯

image.png
此時按鈕不可點擊
image.png
取消勾選再勾選後又可以點擊保存了
image.png



setErrors是綁在單元格control上的

請協助確認是不是BUG?謝謝
image.png
image.png
image.png
image.png
image.png

最佳答案

查看完整内容

问题原因: 经过排查页面开窗栏位设置了数据变化监听的hooks事件,当数据发生变化时,调用接口判断是否满足条件,不满足会设置异常阻止页面提交,但是表格行选中时,没有添加行点击事件再去调用这个字段的规则,目前行选择时,会判断数据之前是否存在规则,如果存在规划会清空规则,所以勾选取消再次勾选时没有读取到规则,所以可以提交 解决方式: 选中表格,在表格中添加行点击的hooks事件,在事件脚本中添加需要校验的字段规则 ...

评论4

翁俊Lv.7 发表于 2025-5-28 17:50:30 | 查看全部
收到问题,排查中
翁俊Lv.7 发表于 2025-5-28 17:56:43 | 查看全部
麻烦私信补充下hooks设置规则的代码以及运行态的账密,需要去排查下
李雅慧楼主Lv.2 发表于 2025-5-28 18:03:33 | 查看全部
翁俊 发表于 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;
}


翁俊Lv.7 发表于 2025-5-28 20:10:30 | 查看全部
问题原因:
经过排查页面开窗栏位设置了数据变化监听的hooks事件,当数据发生变化时,调用接口判断是否满足条件,不满足会设置异常阻止页面提交,但是表格行选中时,没有添加行点击事件再去调用这个字段的规则,目前行选择时,会判断数据之前是否存在规则,如果存在规划会清空规则,所以勾选取消再次勾选时没有读取到规则,所以可以提交

解决方式:
选中表格,在表格中添加行点击的hooks事件,在事件脚本中添加需要校验的字段规则
大家来答
    热门讨论
      精选文章
      数据驱动2.0工作流流程变量说明
      在工作流执行的过程中,我们常常需要先取得一些待处理的数据,并在处理后将结果存放起
      互联中台整合请求安全码(digi-key)说明
      互联中台整合请求中有安全码的设计,用来验证整合请求的合法性。安全码的位置说明如下
      数据比对介绍
       一、数据比对介绍(一)业务场景在项目实施中,预算执行率的准确计算依赖于敏态
      Athena 五大驱动力介绍
                    在数字化转型的浪
      开发不踩雷-数据驱动2.0, 模型栏位异动调整时的注意事项
      场景说明我们在应用开发过程中, 模型的异动是非常常见的一般情况的开发顺序为 模型设
      • 关注公众号
      Copyright © 2025 鼎捷数智股份有限公司 版权所有 All Rights Reserved. Powered by Discuz! X5.0
      关灯 在本版发帖
      即将开放
      返回顶部
      快速回复 返回顶部 返回列表