feat: 支持数据类型完善

This commit is contained in:
tbphp
2025-07-03 19:58:39 +08:00
parent 0dd1f97f7d
commit 45337d9b80

View File

@@ -97,10 +97,17 @@ func DefaultSystemSettings() SystemSettings {
if fieldValue.CanSet() { if fieldValue.CanSet() {
switch fieldValue.Kind() { switch fieldValue.Kind() {
case reflect.Int: case reflect.Int:
if val, err := strconv.ParseInt(defaultTag, 10, 64); err == nil { if intVal, err := strconv.ParseInt(defaultTag, 10, 64); err == nil {
fieldValue.SetInt(val) fieldValue.SetInt(int64(intVal))
}
case reflect.String:
if strVal, ok := interfaceToString(defaultTag); ok {
fieldValue.SetString(strVal)
}
case reflect.Bool:
if boolVal, ok := interfaceToBool(defaultTag); ok {
fieldValue.SetBool(boolVal)
} }
// Add cases for other types like string, bool if needed
} }
} }
} }
@@ -345,13 +352,23 @@ func (sm *SystemSettingsManager) mapToStruct(m map[string]string, s *SystemSetti
} }
} }
for key, valStr := range m { for key, val := range m {
if fieldName, ok := jsonToField[key]; ok { if fieldName, ok := jsonToField[key]; ok {
fieldValue := v.FieldByName(fieldName) fieldValue := v.FieldByName(fieldName)
if fieldValue.IsValid() && fieldValue.CanSet() { if fieldValue.IsValid() && fieldValue.CanSet() {
// 假设所有字段都是 int 类型 switch fieldValue.Kind() {
if intVal, err := strconv.Atoi(valStr); err == nil { case reflect.Int:
fieldValue.SetInt(int64(intVal)) if intVal, err := interfaceToInt(val); err == nil {
fieldValue.SetInt(int64(intVal))
}
case reflect.String:
if strVal, ok := interfaceToString(val); ok {
fieldValue.SetString(strVal)
}
case reflect.Bool:
if boolVal, ok := interfaceToBool(val); ok {
fieldValue.SetBool(boolVal)
}
} }
} }
} }