You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:编写签名字段的复杂动态校验逻辑

账户签名字段校验问题解决

需求说明

  • 当chequebook === "NO"且账户类型为Asaan Digital Account或Asaan Digital Remittance Account时,签名字段设为可选;
  • 当chequebook === "YES"且为上述两类账户时,签名字段设为必填;
  • 其余所有账户类型,签名字段默认必填。

当前问题

编写的校验代码未生效,错误地将所有账户的签名字段设为可选,需要编写正确的校验逻辑。

尝试过的代码

第一段尝试代码

const files = [...attachmentType[i].attachments];
const addedFiles = [];
for (var m = 0; m < files.length; m++) {
  const signatureOptional =
    (state.applicantList[0].chequebook === "NO" &&
      account &&
      account.get("product") === "Asaan Digital Account") ||
    (account && account.get("product") === "Asaan Digital Remittance Account")
      ? files[m].value = "SIGNATURE_SCAN"
      : "";
    console.log(signatureOptional, 'hello world');
  if (files[m].files.length === 0 && files[m].value !== "OTHER" && !signatureOptional) {
           
    addedFiles.push({
      primaryText: files[m].primaryText,
      validationResult: files[m].validationRequired,
    });
          
  }
}

第二段误实现代码

const files = [...attachmentType[i].attachments];
const addedFiles = [];
for (var m = 0; m < files.length; m++) {
  if (files[m].files.length === 0 && files[m].value !== "OTHER" && files[m].value !== "SIGNATURE_SCAN") {     
    addedFiles.push({
      primaryText: files[m].primaryText,
      validationResult: files[m].validationRequired,
    });
  }
}
let missingDocument = [...props.invalidType]
missingDocument = missingDocument.filter((data) => data.primaryText !== 'Other documents (optional)' && data.primaryText !== 'Signature Scan')

正确的校验逻辑实现

首先明确核心判断条件:

  1. 先识别当前文件是否为签名字段(value === "SIGNATURE_SCAN")
  2. 再结合账户类型和chequebook状态,决定是否需要强制校验该字段

完整代码示例:

const files = [...attachmentType[i].attachments];
const addedFiles = [];
// 提前提取关键状态,避免重复取值
const chequebookStatus = state.applicantList[0]?.chequebook;
const accountProduct = account?.get("product");
// 统一维护符合可选签名条件的账户类型
const eligibleAccounts = [
  "Asaan Digital Account",
  "Asaan Digital Remittance Account"
];

for (let m = 0; m < files.length; m++) {
  const file = files[m];
  const isSignature = file.value === "SIGNATURE_SCAN";
  const isEligibleAccount = eligibleAccounts.includes(accountProduct);
  const isSignatureOptional = chequebookStatus === "NO" && isEligibleAccount;

  // 校验规则:
  // 1. 文件为空且非OTHER类型时才需要校验
  // 2. 非签名字段默认必填,直接加入错误列表
  // 3. 签名字段仅当不是可选状态时,才加入错误列表
  if (file.files.length === 0 && file.value !== "OTHER") {
    if (!isSignature || (isSignature && !isSignatureOptional)) {
      addedFiles.push({
        primaryText: file.primaryText,
        validationResult: file.validationRequired,
      });
    }
  }
}

// 仅当签名确实为可选状态时,才从缺失文档列表中移除签名项
let missingDocument = [...props.invalidType];
if (isSignatureOptional) {
  missingDocument = missingDocument.filter(data => 
    data.primaryText !== 'Other documents (optional)' && 
    data.primaryText !== 'Signature Scan'
  );
}

代码说明

  • 提前提取chequebookStatus和accountProduct,减少重复操作,提升代码可读性
  • 用数组eligibleAccounts统一管理目标账户类型,后续修改只需调整数组内容
  • 拆分核心判断变量,让校验逻辑更清晰,便于调试和维护
  • 过滤缺失文档列表时,增加前置判断,避免误移除必填的签名字段

内容的提问来源于stack exchange,提问作者Hamza Anis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:35:28