fix(shrimp): 修复 multiple 字段类型校验逻辑
This commit is contained in:
@@ -114,21 +114,20 @@ export class ShrimpTableModule<T, P extends ITableCrudProto<T> = ITableCrudProto
|
||||
}
|
||||
}
|
||||
|
||||
// multiple 字段值是数组,类型校验需逐元素进行(与上面 options 校验保持一致);
|
||||
// 非 multiple 则整体校验单值。否则数组会被标量类型分支整体判为类型错误。
|
||||
const checkType = (v: any): boolean => {
|
||||
switch (field.type) {
|
||||
case ShrimpFieldTypes.String:
|
||||
if (typeof value !== 'string') return { t: 'shrimp.fieldTypeError', params: { field: field.label } }
|
||||
break
|
||||
case ShrimpFieldTypes.Number:
|
||||
if (typeof value !== 'number' || Number.isNaN(value)) return { t: 'shrimp.fieldTypeError', params: { field: field.label } }
|
||||
break
|
||||
case ShrimpFieldTypes.Boolean:
|
||||
if (typeof value !== 'boolean') return { t: 'shrimp.fieldTypeError', params: { field: field.label } }
|
||||
break
|
||||
case ShrimpFieldTypes.Date:
|
||||
if (typeof value !== 'number' && !(value instanceof Date) && isNaN(Date.parse(value))) {
|
||||
return { t: 'shrimp.fieldTypeError', params: { field: field.label } }
|
||||
case ShrimpFieldTypes.String: return typeof v === 'string'
|
||||
case ShrimpFieldTypes.Number: return typeof v === 'number' && !Number.isNaN(v)
|
||||
case ShrimpFieldTypes.Boolean: return typeof v === 'boolean'
|
||||
case ShrimpFieldTypes.Date: return typeof v === 'number' || v instanceof Date || !isNaN(Date.parse(v))
|
||||
default: return true // 非内置标量类型(relation/json/自定义等)不在此校验
|
||||
}
|
||||
break
|
||||
}
|
||||
const typeTargets = field.multiple && Array.isArray(value) ? value : [value]
|
||||
for (const v of typeTargets) {
|
||||
if (!checkType(v)) return { t: 'shrimp.fieldTypeError', params: { field: field.label } }
|
||||
}
|
||||
|
||||
if (field.rules) {
|
||||
|
||||
Reference in New Issue
Block a user