uni-app HBuilderX schema2code 时 如果 errorMessage 同时存在 minLength 和 maxLength 时只会生成 minLength 的错误提示
uni-app HBuilderX schema2code 时 如果 errorMessage 同时存在 minLength 和 maxLength 时只会生成 minLength 的错误提示
操作步骤:
复现步骤
预期结果:
{
"minLength": 2,
"errorMessage": "至少填写2个电话号码"
},
{
"maxLength": 3,
"errorMessage": "最多填写3个电话号码"
},
实际结果:
{
"minLength": 2,
"maxLength": 3,
"errorMessage": "至少填写2个电话号码"
}
bug描述:
同时填写了 minLength
和 maxLength
的错误提示时,生成的校验代码里只有 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": "联系电话"
},
minLength
和 maxLength
被合并了,只显示 minLength
的错误提示,如果只填写 maxLength
的错误提示,生成的校验代码是:
{
"minLength": 2,
"maxLength": 3,
"errorMessage": "最多填写3个电话号码"
},
两种提示依然被合并了,只不过只填写 maxLength
时 minLength
和 maxLength
的错误提示都是 maxLength
的,不知道是官方刻意的把这两种校验合并到一起的,还是bug,难道官方是希望合并在一起后,只报一个错误提示:请填写2~3个电话号码?这和官网文档里的示例不一致,另外各个 errorMessage
里面的 {title}
都不能正常解析,而 {minLength}
却能正常解析,目前在4.07和4.08测的都是这样。
目前是这样的,minLength或maxLength会合并,后续优化
你可以修改下提示语,电话号码应介于2和3之间
在使用 uni-app 的 HBuilderX 进行 schema2code
时,如果 errorMessage
中同时存在 minLength
和 maxLength
的校验规则,默认情况下可能只会生成 minLength
的错误提示。这是因为 schema2code
在处理多个校验规则时,可能只会选择其中一个作为错误提示。
要解决这个问题,可以手动调整生成的代码,确保在 errorMessage
中同时包含 minLength
和 maxLength
的错误提示。以下是一个示例:
1. 原始 Schema 定义
假设你的 Schema 定义如下:
{
"properties": {
"username": {
"type": "string",
"minLength": 6,
"maxLength": 12,
"errorMessage": {
"minLength": "用户名长度不能少于6个字符",
"maxLength": "用户名长度不能超过12个字符"
}
}
}
}
2. 生成的代码调整
默认生成的代码可能只会包含 minLength
的错误提示,你可以手动调整生成的代码,确保同时包含 minLength
和 maxLength
的错误提示。
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. 自定义错误提示
如果你希望在同一个错误提示中同时包含 minLength
和 maxLength
的校验信息,可以手动编写自定义的错误提示逻辑:
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 {
// 表单验证失败
}
});
}
}
};