返回列表 发布新帖

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

9 4
发表于 前天 17:37 | 查看全部 阅读模式
问答

紧急程度

已解决
本帖最后由 李雅慧 于 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 发表于 前天 17:50 | 查看全部
收到问题,排查中
翁俊Lv.7 发表于 前天 17:56 | 查看全部
麻烦私信补充下hooks设置规则的代码以及运行态的账密,需要去排查下
李雅慧楼主Lv.2 发表于 前天 18:03 | 查看全部
翁俊 发表于 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 发表于 前天 20:10 | 查看全部
问题原因:
经过排查页面开窗栏位设置了数据变化监听的hooks事件,当数据发生变化时,调用接口判断是否满足条件,不满足会设置异常阻止页面提交,但是表格行选中时,没有添加行点击事件再去调用这个字段的规则,目前行选择时,会判断数据之前是否存在规则,如果存在规划会清空规则,所以勾选取消再次勾选时没有读取到规则,所以可以提交

解决方式:
选中表格,在表格中添加行点击的hooks事件,在事件脚本中添加需要校验的字段规则
精选文章
让信息找用户(一)待办工作台表格交互的跃迁
 一、现状与痛点随着企业数字化的不断推进,许多业务流程和交互方式都经历不同的
自适应网格布局组件上线!轻松应对多设备复杂布局需求
一、场景痛点:跨设备布局的通用挑战在企业级应用开发中,不同屏幕尺寸、分辨率的终端
知识封装
 背景服务商品正经历从传统服务模式向 “知识商品” 的深度进化,核心在于
【地调云】稳态第三方系统如何调用雅典娜应用API取得敏态数据
 前言鼎捷雅典娜应用的一大特色为云地集成。也就是云上应用的数据是集成客户家的
WorkFlow集成稳态案例
场景介绍:• 使用数据驱动2.0集成稳态或地端产品。该案例适用于签核集成,将稳
  • 关注公众号
Copyright © 2025 鼎捷数智股份有限公司 版权所有 All Rights Reserved. Powered by Discuz! X5.0
关灯 在本版发帖
即将开放
返回顶部
快速回复 返回顶部 返回列表