Переглянути джерело

表单校验工具封装以及使用

QM303176530 4 роки тому
батько
коміт
a18b327923
2 змінених файлів з 60 додано та 8 видалено
  1. 20 5
      server/api/v1/sys_menu.go
  2. 40 3
      server/utils/verify.go

+ 20 - 5
server/api/v1/sys_menu.go

@@ -40,11 +40,6 @@ func GetMenu(c *gin.Context) {
 func GetMenuList(c *gin.Context) {
 	var pageInfo request.PageInfo
 	_ = c.ShouldBindJSON(&pageInfo)
-	verifyMap := make(map[string][]string)
-	verifyMap["PageSize"] = []string{"lt=333"}
-	verifyMap["Page"] = []string{"isBlank"}
-	vErr := utils.Verify(pageInfo, verifyMap)
-	fmt.Println(vErr)
 	err, menuList, total := service.GetInfoList()
 	if err != nil {
 		response.FailWithMessage(fmt.Sprintf("获取数据失败,%v", err), c)
@@ -69,6 +64,26 @@ func GetMenuList(c *gin.Context) {
 func AddBaseMenu(c *gin.Context) {
 	var menu model.SysBaseMenu
 	_ = c.ShouldBindJSON(&menu)
+	MenuVerify := utils.Rules{
+		"Path":      {utils.NotEmpty()},
+		"ParentId":  {utils.NotEmpty()},
+		"Name":      {utils.NotEmpty()},
+		"Component": {utils.NotEmpty()},
+		"Sort":      {utils.Ge("0")},
+	}
+	MenuVerifyErr := utils.Verify(menu, MenuVerify)
+	if MenuVerifyErr != nil {
+		response.FailWithMessage(MenuVerifyErr.Error(), c)
+		return
+	}
+	MetaVerify := utils.Rules{
+		"Title": {utils.NotEmpty()},
+	}
+	MetaVerifyErr := utils.Verify(menu.Meta, MetaVerify)
+	if MetaVerifyErr != nil {
+		response.FailWithMessage(MetaVerifyErr.Error(), c)
+		return
+	}
 	err := service.AddBaseMenu(menu)
 	if err != nil {
 		response.FailWithMessage(fmt.Sprintf("添加失败,%v", err), c)

+ 40 - 3
server/utils/verify.go

@@ -7,8 +7,45 @@ import (
 	"strings"
 )
 
+type Rules map[string][]string
+
+// 非空 不能为其对应类型的0值
+func NotEmpty() string {
+	return "notEmpty"
+}
+
+//小于入参(<) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
+func Lt(mark string) string {
+	return "lt=" + mark
+}
+
+//小于等于入参(<=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
+func Le(mark string) string {
+	return "le=" + mark
+}
+
+//等于入参(==) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
+func Eq(mark string) string {
+	return "eq=" + mark
+}
+
+//不等于入参(!=)  如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
+func Ne(mark string) string {
+	return "ne=" + mark
+}
+
+//大于等于入参(>=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
+func Ge(mark string) string {
+	return "ge=" + mark
+}
+
+//大于入参(>) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
+func Gt(mark string) string {
+	return "gt=" + mark
+}
+
 // 校验方法 接收两个参数  入参实例,规则map
-func Verify(st interface{}, roleMap map[string][]string) (err error) {
+func Verify(st interface{}, roleMap Rules) (err error) {
 	compareMap := map[string]bool{
 		"lt": true,
 		"le": true,
@@ -33,13 +70,13 @@ func Verify(st interface{}, roleMap map[string][]string) (err error) {
 		if len(roleMap[tagVal.Name]) > 0 {
 			for _, v := range roleMap[tagVal.Name] {
 				switch {
-				case strings.Index(v, "isBlank") > -1:
+				case v == "notEmpty":
 					if isBlank(val) {
 						return errors.New(tagVal.Name + "值不能为空")
 					}
 				case compareMap[strings.Split(v, "=")[0]]:
 					if !compareVerify(val, v) {
-						return errors.New(tagVal.Name + "不在范围内")
+						return errors.New(tagVal.Name + "长度或值不在合法范围," + v)
 					}
 				}
 			}