uni-app HBuilderX schema2code 时 如果 errorMessage 同时存在 minLength 和 maxLength 时只会生成 minLength 的错误提示

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app HBuilderX schema2code 时 如果 errorMessage 同时存在 minLength 和 maxLength 时只会生成 minLength 的错误提示

操作步骤:

复现步骤

预期结果:

{
    "minLength": 2,
    "errorMessage": "至少填写2个电话号码"
},
{
    "maxLength": 3,
    "errorMessage": "最多填写3个电话号码"
},

实际结果:

{
    "minLength": 2,
    "maxLength": 3,
    "errorMessage": "至少填写2个电话号码"
}

bug描述:

同时填写了 minLengthmaxLength 的错误提示时,生成的校验代码里只有 minLength 的错误提示,例如:

"mobiles": {
    "bsonType": "array",
    "title": "联系电话",
    "minLength": 2,
    "maxLength": 3,
    "pattern": "^\\+?[0-9-]{3,20}$",
    "errorMessage": {
        "required": "联系电话必填",
        "pattern": "电话号码格式有误",
        "minLength": "至少填写2个电话号码",
        "maxLength": "最多填写3个电话号码"
    },
    "componentForEdit": {
        "name": "uni-dynamic-input"
    }
},

生成的校验代码是:

"mobiles": {
    "rules": [
        {
            "required": true,
            "errorMessage": "联系电话必填"
        },
        {
            "format": "array"
        },
        {
            "minLength": 2,
            "maxLength": 3,
            "errorMessage": "至少填写2个电话号码"
        },
        {
            "pattern": "^\\+?[0-9-]{3,20}$",
            "errorMessage": "电话号码格式有误"
        }
    ],
    "title": "联系电话",
    "label": "联系电话"
},

minLengthmaxLength 被合并了,只显示 minLength 的错误提示,如果只填写 maxLength 的错误提示,生成的校验代码是:

{
    "minLength": 2,
    "maxLength": 3,
    "errorMessage": "最多填写3个电话号码"
},

两种提示依然被合并了,只不过只填写 maxLengthminLengthmaxLength 的错误提示都是 maxLength 的,不知道是官方刻意的把这两种校验合并到一起的,还是bug,难道官方是希望合并在一起后,只报一个错误提示:请填写2~3个电话号码?这和官网文档里的示例不一致,另外各个 errorMessage 里面的 {title} 都不能正常解析,而 {minLength} 却能正常解析,目前在4.07和4.08测的都是这样。


2 回复

目前是这样的,minLength或maxLength会合并,后续优化 你可以修改下提示语,电话号码应介于2和3之间


在使用 uni-app 的 HBuilderX 进行 schema2code 时,如果 errorMessage 中同时存在 minLengthmaxLength 的校验规则,默认情况下可能只会生成 minLength 的错误提示。这是因为 schema2code 在处理多个校验规则时,可能只会选择其中一个作为错误提示。

要解决这个问题,可以手动调整生成的代码,确保在 errorMessage 中同时包含 minLengthmaxLength 的错误提示。以下是一个示例:

1. 原始 Schema 定义

假设你的 Schema 定义如下:

{
  "properties": {
    "username": {
      "type": "string",
      "minLength": 6,
      "maxLength": 12,
      "errorMessage": {
        "minLength": "用户名长度不能少于6个字符",
        "maxLength": "用户名长度不能超过12个字符"
      }
    }
  }
}

2. 生成的代码调整

默认生成的代码可能只会包含 minLength 的错误提示,你可以手动调整生成的代码,确保同时包含 minLengthmaxLength 的错误提示。

export default {
  data() {
    return {
      form: {
        username: ''
      },
      rules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' },
          { minLength: 6, message: '用户名长度不能少于6个字符', trigger: 'blur' },
          { maxLength: 12, message: '用户名长度不能超过12个字符', trigger: 'blur' }
        ]
      }
    };
  },
  methods: {
    submitForm() {
      this.$refs.form.validate(valid => {
        if (valid) {
          // 表单验证通过,提交表单
        } else {
          // 表单验证失败
        }
      });
    }
  }
};

3. 自定义错误提示

如果你希望在同一个错误提示中同时包含 minLengthmaxLength 的校验信息,可以手动编写自定义的错误提示逻辑:

export default {
  data() {
    return {
      form: {
        username: ''
      },
      rules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' },
          {
            validator: (rule, value, callback) => {
              if (value.length < 6) {
                callback(new Error('用户名长度不能少于6个字符'));
              } else if (value.length > 12) {
                callback(new Error('用户名长度不能超过12个字符'));
              } else {
                callback();
              }
            },
            trigger: 'blur'
          }
        ]
      }
    };
  },
  methods: {
    submitForm() {
      this.$refs.form.validate(valid => {
        if (valid) {
          // 表单验证通过,提交表单
        } else {
          // 表单验证失败
        }
      });
    }
  }
};
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!