Просмотр исходного кода

Merge pull request #493 from xixingya/feature/bug-fix

ratio must gte 0
Calcium-Ion 1 год назад
Родитель
Сommit
462c2cc1a1

+ 15 - 0
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
+}

+ 9 - 0
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 {

+ 8 - 1
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(() => {