diff --git a/server/internal/library/hggen/views/curd_generate_input.go b/server/internal/library/hggen/views/curd_generate_input.go index 77eb1c6..978e403 100644 --- a/server/internal/library/hggen/views/curd_generate_input.go +++ b/server/internal/library/hggen/views/curd_generate_input.go @@ -3,23 +3,27 @@ // @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// package views import ( "bytes" "context" "fmt" + "hotgo/internal/model/input/sysin" + + "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/text/gstr" "github.com/olekukonko/tablewriter" - "hotgo/internal/model/input/sysin" ) const ( - InputTypeListInp = 1 // 列表输入 - InputTypeListModel = 2 // 列表输出 - InputTypeExportModel = 3 // 列表导出 + InputTypeListInp = 1 // 列表输入 + InputTypeListModel = 2 // 列表输出 + InputTypeExportModel = 3 // 列表导出 + InputTypeEditInpValidator = 4 // 添加&编辑验证器 + + EditInpValidatorGenerally = "if err := g.Validator().Rules(\"%s\").Data(in.%s).Messages(\"%s\").Run(ctx); err != nil {\n\t\treturn err.Current()\n\t}\n" ) func (l *gCurd) inputTplData(ctx context.Context, in *CurdPreviewInput) (data g.Map, err error) { @@ -27,6 +31,7 @@ func (l *gCurd) inputTplData(ctx context.Context, in *CurdPreviewInput) (data g. data["listInpColumns"] = l.generateInputListColumns(ctx, in, InputTypeListInp) data["listModelColumns"] = l.generateInputListColumns(ctx, in, InputTypeListModel) data["exportModelColumns"] = l.generateInputListColumns(ctx, in, InputTypeExportModel) + data["editInpValidator"] = l.generateInputListColumns(ctx, in, InputTypeEditInpValidator) return } @@ -117,10 +122,63 @@ func (l *gCurd) generateStructFieldDefinition(field *sysin.GenCodesColumnListMod result = append(result, " #"+field.GoType) result = append(result, " #"+fmt.Sprintf(tagKey+`json:"%s"`, field.TsName)) result = append(result, " #"+fmt.Sprintf(`dc:"%s"`+tagKey, descriptionTag)) - + case InputTypeEditInpValidator: + if !field.IsEdit { + return nil + } + if !field.Required && (field.FormRole == "none" || field.FormRole == "") { + return nil + } + rule := "// 验证" + field.GoName + "\n" + if field.Required && (field.FormRole == FormRoleNone || field.FormRole == "") { + field.FormRole = "required" + } + if err, s := makeValidatorFunc(field); err != nil { + return nil + } else { + rule += s + } + result = []string{rule} default: panic("inputType is invalid") } return result } + +func makeValidatorFunc(field *sysin.GenCodesColumnListModel) (err error, rule string) { + if field.FormRole == "required" { + rule = fmt.Sprintf(EditInpValidatorGenerally, "required", field.GoName, field.Dc+"不能为空") + } else if field.FormRole == FormRoleIp { + rule = fmt.Sprintf(EditInpValidatorGenerally, "ip", field.GoName, field.Dc+"必须为IPV4或IPV6") + } else if field.FormRole == FormRolePercentage { + rule = fmt.Sprintf(EditInpValidatorGenerally, "min:0|max:100", field.GoName, field.Dc+"必须0-100之间") + } else if field.FormRole == FormRoleTel { + rule = fmt.Sprintf(EditInpValidatorGenerally, "phone", field.GoName, field.Dc+"不是手机号码") + } else if field.FormRole == FormRolePhone { + rule = fmt.Sprintf(EditInpValidatorGenerally, "telephone", field.GoName, field.Dc+"不是座机号码") + } else if field.FormRole == FormRoleQq { + rule = fmt.Sprintf(EditInpValidatorGenerally, "qq", field.GoName, field.Dc+"不是QQ号码") + } else if field.FormRole == FormRoleEmail { + rule = fmt.Sprintf(EditInpValidatorGenerally, "email", field.GoName, field.Dc+"不是邮箱地址") + } else if field.FormRole == FormRoleIdCard { + rule = fmt.Sprintf(EditInpValidatorGenerally, "resident-id", field.GoName, field.Dc+"不是身份证号码") + } else if field.FormRole == FormRoleNum { + rule = fmt.Sprintf(EditInpValidatorGenerally, "min:1", field.GoName, field.Dc+"必须大于0") + } else if field.FormRole == FormRoleBankCard { + rule = fmt.Sprintf(EditInpValidatorGenerally, "bank-card", field.GoName, field.Dc+"不是银行卡号") + } else if field.FormRole == FormRoleWeibo { + rule = fmt.Sprintf(EditInpValidatorGenerally, "regex:^[0-9a-zA-Z\\u4e00-\\u9fa5_-]*$", field.GoName, field.Dc+"不是微博号") + } else if field.FormRole == FormRoleUserName { + rule = fmt.Sprintf(EditInpValidatorGenerally, "regex:^[0-9a-zA-Z]{6,16}$", field.GoName, field.Dc+"必须为6-16位由字母和数字组成") + } else if field.FormRole == FormRoleAccount { + rule = fmt.Sprintf(EditInpValidatorGenerally, "regex:^[\\w_\\d]{6,16}$", field.GoName, field.Dc+"必须为6-16位由字母、数字或下划线组成") + } else if field.FormRole == FormRolePassword { + rule = fmt.Sprintf(EditInpValidatorGenerally, "regex:^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,18}$", field.GoName, field.Dc+"必须包含6-18为字母和数字") + } else if field.FormRole == FormRoleAmount { + rule = fmt.Sprintf(EditInpValidatorGenerally, "regex:(^[0-9]{1,10}$)|(^[0-9]{1,10}[\\\\.]{1}[0-9]{1,2}$)", field.GoName, field.Dc+"最多允许输入10位整数及2位小数") + } else { + err = gerror.New("not support") + } + return +} diff --git a/server/internal/library/hggen/views/curd_generate_web_model.go b/server/internal/library/hggen/views/curd_generate_web_model.go index c12b351..de3f9a3 100644 --- a/server/internal/library/hggen/views/curd_generate_web_model.go +++ b/server/internal/library/hggen/views/curd_generate_web_model.go @@ -142,7 +142,7 @@ func (l *gCurd) generateWebModelRules(ctx context.Context, in *CurdPreviewInput) if field.FormRole == "" || field.FormRole == FormRoleNone { buffer.WriteString(fmt.Sprintf(" %s: {\n required: %v,\n trigger: ['blur', 'input'],\n type: '%s',\n message: '请输入%s',\n },\n", field.TsName, field.Required, field.TsType, field.Dc)) } else { - buffer.WriteString(fmt.Sprintf(" %s: {\n required: %v,\n trigger: ['blur', 'input'],\n type: '%s',\n message: '请输入%s',\n validator: validate.%v,\n },\n", field.TsName, field.Required, field.TsType, field.Dc, field.FormRole)) + buffer.WriteString(fmt.Sprintf(" %s: {\n required: %v,\n trigger: ['blur', 'input'],\n type: '%s',\n validator: validate.%v,\n },\n", field.TsName, field.Required, field.TsType, field.FormRole)) } } buffer.WriteString("};\n") diff --git a/server/resource/generate/default/curd/input.go.template b/server/resource/generate/default/curd/input.go.template index 7085715..79b526f 100644 --- a/server/resource/generate/default/curd/input.go.template +++ b/server/resource/generate/default/curd/input.go.template @@ -27,6 +27,7 @@ type @{.varName}EditInp struct { } func (in *@{.varName}EditInp) Filter(ctx context.Context) (err error) { +@{.editInpValidator} return }