填报校验

在数量的单元格加了编辑结束事件:用于判断当任务状态为2时,数量不能小于当前已完成数量,否则会出现弹框,这一步对了。但是我需要就是在web属性的校验提交前再加一个判断,就是 如果存在上面那种情况 ,就无法真正提交,但是现在就是点了提交之后会报错,还是能提交入库100.png

--单元格编辑结束

// 1. 获取 O6 输入值、状态(I 列)、当前完成数量(AK 列)

var num = this.getValue(); // O6 输入值

num = parseFloat(num) || 0; // 转为数字,空值设为 0

var location = this.options.location;

var cr = FR.cellStr2ColumnRow(location);

var col = cr.col;

var row = cr.row;

var status = _g().getCellValue(0, col - 6, row); // I 列(状态列)值

status = parseInt(status) || 0; // 转为数字,空值设为 0

var completeNum = _g().getCellValue(0, col + 22, row); // AK 列(完成数量列)值

completeNum = parseFloat(completeNum) || 0; // 转为数字,空值设为 0

// 2. 核心校验:状态为 2 且 O6 < 完成数量

if (status === 2 && num < completeNum) {

    FR.Msg.alert("输入错误", "进行中的任务数量修改不能小于当前完成数量,请重新输入!");

    this.setValue(""); // 清空错误输入

    //this.focus(); // 聚焦回 O6,方便重输

    _g().setAttribute("isO6Valid", false); // 标记 O6 校验失败

} else {

    _g().setAttribute("isO6Valid", true); // 标记 O6 校验通过

}

---提交前

function checkSubmit() {

    // 1. 获取 O6 校验状态

    var isO6Valid = _g().getAttribute("isO6Valid");

    

    // 2. 若 O6 校验失败,阻止提交

    if (isO6Valid === false) {

        FR.Msg.alert("提交失败", "O6 单元格数据不合法,无法提交!");

        return false; // 阻止提交

    }

    

    // (可选)可在此添加其他单元格的校验逻辑...

    

    return true; // 所有校验通过,允许提交

}

// 绑定提交前校验函数

return checkSubmit();

FineReport Kennethq 发布于 前天 10:57
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
snrtuemcLv8专家互助
发布于前天 11:00

这边增加else判断

image.png

function checkSubmit() {

    // 1. 获取 O6 校验状态

    var isO6Valid = _g().getAttribute("isO6Valid");

    

    // 2. 若 O6 校验失败,阻止提交

    if (isO6Valid === false) {

        FR.Msg.alert("提交失败", "O6 单元格数据不合法,无法提交!");

        return false; // 阻止提交

    }

    

    // (可选)可在此添加其他单元格的校验逻辑...

   else

   { 

    return true; // 所有校验通过,允许提交

         }

}

  • Kennethq Kennethq(提问者) 它提示_g().getAttribute is not a function
    2025-09-08 11:05 
  • snrtuemc snrtuemc 回复 Kennethq(提问者) 那是其他语句还有问题,你的目前是checkSubmit()函数,if判断return false ;但是后面还是 return true; 所以增加else语句,if判断return false ;后跳过return true;,你看看是不是加错语句和{}了
    2025-09-08 11:07 
最佳回答
0
ScyalcireLv7高级互助
发布于前天 11:02(编辑于 前天 11:05

看下这个勾选了没

image.png

------------其次再试下JS

// 在编辑结束事件中
if (status === 2 && num < completeNum) {
    FR.Msg.alert("输入错误", "进行中的任务数量修改不能小于当前完成数量,请重新输入!");
    this.setValue("");
    _g().setAttribute("isO6Valid", false);
} else {
    _g().setAttribute("isO6Valid", true);
}
// 提交前校验
function checkSubmit() {
    var isO6Valid = _g().getAttribute("isO6Valid");
    if (isO6Valid === false) {
        FR.Msg.alert("提交失败", "存在不合法的数据,无法提交!");
        return false; // 关键:必须返回false才能阻止提交
    }
    return true;
}
// 确保正确绑定到提交事件
_g().verifyAndWriteReport = function() {
    if (!checkSubmit()) {
        return false;
    }
    return this.writeReport();
};

  • Kennethq Kennethq(提问者) 我隐藏了_g().setAttribute 不会报错 现在就是提交的时候他不管对不对都会提交 能帮忙看看吗
    2025-09-08 11:12 
  • Scyalcire Scyalcire 回复 Kennethq(提问者) 直接进入「模板 > 报表填报属性 > 数据校验」
    添加校验规则呢? I6 == 2 && O6 >= AK6
    2025-09-08 11:19 
最佳回答
0
ID1208Lv6高级互助
发布于前天 11:05

_g().setAttribute("isO6Valid", false);    

这个是做什么的,不支持这种写法吧

把这个隐藏了,看看报不报错

  • Kennethq Kennethq(提问者) 对 我隐藏了就不报错了 现在就是提交的时候他不管对不对都会提交 能帮忙看看吗
    2025-09-08 11:11 
  • ID1208 ID1208 回复 Kennethq(提问者) isO6Valid 这个变量的值,alert看看,前面的get和set都是无效的,看看是不是跳过了判断
    2025-09-08 11:17 
  • 4关注人数
  • 30浏览人数
  • 最后回答于:前天 11:05
    请选择关闭问题的原因
    确定 取消
    返回顶部