diff --git a/server/api/v1/sys_menu.go b/server/api/v1/sys_menu.go index 470b728c..ec345ee1 100644 --- a/server/api/v1/sys_menu.go +++ b/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) diff --git a/server/utils/verify.go b/server/utils/verify.go index a9e7c793..4072046e 100644 --- a/server/utils/verify.go +++ b/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) } } }