fix(shrimp): 修复 multiple 字段类型校验逻辑

This commit is contained in:
2026-06-15 14:34:36 +08:00
parent 5ecbf2cc01
commit f94a01e0a1
+14 -15
View File
@@ -114,21 +114,20 @@ export class ShrimpTableModule<T, P extends ITableCrudProto<T> = ITableCrudProto
}
}
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 } }
}
break
// multiple 字段值是数组,类型校验需逐元素进行(与上面 options 校验保持一致);
// 非 multiple 则整体校验单值。否则数组会被标量类型分支整体判为类型错误。
const checkType = (v: any): boolean => {
switch (field.type) {
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/自定义等)不在此校验
}
}
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) {