Browse Source

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

main
QM303176530 5 years ago
parent
commit
a18b327923
  1. 25
      server/api/v1/sys_menu.go
  2. 43
      server/utils/verify.go

25
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)

43
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)
}
}
}

Loading…
Cancel
Save