diff --git a/common/group-ratio.go b/common/group-ratio.go index 416ba037..673b447d 100644 --- a/common/group-ratio.go +++ b/common/group-ratio.go @@ -2,6 +2,7 @@ package common import ( "encoding/json" + "errors" ) var GroupRatio = map[string]float64{ @@ -31,3 +32,17 @@ func GetGroupRatio(name string) float64 { } return ratio } + +func CheckGroupRatio(jsonStr string) error { + checkGroupRatio := make(map[string]float64) + err := json.Unmarshal([]byte(jsonStr), &checkGroupRatio) + if err != nil { + return err + } + for name, ratio := range checkGroupRatio { + if ratio < 0 { + return errors.New("group ratio must be not less than 0: " + name) + } + } + return nil +} diff --git a/controller/option.go b/controller/option.go index 65ff4f2a..b6165a88 100644 --- a/controller/option.go +++ b/controller/option.go @@ -82,6 +82,15 @@ func UpdateOption(c *gin.Context) { }) return } + case "GroupRatio": + err = common.CheckGroupRatio(option.Value) + if err != nil { + c.JSON(http.StatusOK, gin.H{ + "success": false, + "message": err.Error(), + }) + return + } } err = model.UpdateOption(option.Key, option.Value) if err != nil { diff --git a/web/src/pages/Setting/Operation/SettingsMagnification.js b/web/src/pages/Setting/Operation/SettingsMagnification.js index ef9a1c21..3c7a3d61 100644 --- a/web/src/pages/Setting/Operation/SettingsMagnification.js +++ b/web/src/pages/Setting/Operation/SettingsMagnification.js @@ -50,10 +50,17 @@ export default function SettingsMagnification(props) { if (res.includes(undefined)) return showError('部分保存失败,请重试'); } + for (let i = 0; i < res.length; i++) { + if (!res[i].data.success) { + return showError(res[i].data.message) + } + } showSuccess('保存成功'); props.refresh(); }) - .catch(() => { + .catch(error => { + console.error('Unexpected error in Promise.all:', error); + showError('保存失败,请重试'); }) .finally(() => {