mirror of
https://github.com/flipped-aurora/gin-vue-admin.git
synced 2026-10-13 04:39:36 +00:00
新增 GORM clause 支持,优化搜索条件生成
This commit is contained in:
@@ -7,6 +7,11 @@
|
||||
|
||||
{{- if .IsAdd}}
|
||||
|
||||
{{- if NeedsGormClause .Fields }}
|
||||
// service.go import 新增依赖
|
||||
import "gorm.io/gorm/clause"
|
||||
{{- end }}
|
||||
|
||||
// Get{{.StructName}}InfoList 新增搜索语句
|
||||
{{ GenerateSearchConditions .Fields }}
|
||||
// Get{{.StructName}}InfoList 新增排序语句 请自行在搜索语句中添加orderMap内容
|
||||
@@ -41,6 +46,9 @@ import (
|
||||
"{{.Module}}/model/{{.Package}}"
|
||||
{{- if not .IsTree}}
|
||||
{{.Package}}Req "{{.Module}}/model/{{.Package}}/request"
|
||||
{{- if or .NeedSort (NeedsGormClause .Fields) }}
|
||||
"gorm.io/gorm/clause"
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
"{{.Module}}/utils"
|
||||
"errors"
|
||||
@@ -158,7 +166,6 @@ func ({{.Abbreviation}}Service *{{.StructName}}Service)Get{{.StructName}}InfoLis
|
||||
return
|
||||
}
|
||||
{{- if .NeedSort}}
|
||||
var OrderStr string
|
||||
orderMap := make(map[string]bool)
|
||||
{{- if .GvaModel }}
|
||||
orderMap["id"] = true
|
||||
@@ -170,11 +177,10 @@ func ({{.Abbreviation}}Service *{{.StructName}}Service)Get{{.StructName}}InfoLis
|
||||
{{- end}}
|
||||
{{- end}}
|
||||
if orderMap[info.Sort] {
|
||||
OrderStr = info.Sort
|
||||
if info.Order == "descending" {
|
||||
OrderStr = OrderStr + " desc"
|
||||
}
|
||||
db = db.Order(OrderStr)
|
||||
db = db.Order(clause.OrderByColumn{
|
||||
Column: clause.Column{Name: info.Sort},
|
||||
Desc: info.Order == "descending",
|
||||
})
|
||||
}
|
||||
{{- end}}
|
||||
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
|
||||
{{- if .IsAdd}}
|
||||
|
||||
{{- if NeedsGormClause .Fields }}
|
||||
// service.go import 新增依赖
|
||||
import "gorm.io/gorm/clause"
|
||||
{{- end }}
|
||||
|
||||
// Get{{.StructName}}InfoList 新增搜索语句
|
||||
|
||||
{{ GenerateSearchConditions .Fields }}
|
||||
@@ -37,6 +42,9 @@ import (
|
||||
"{{.Module}}/plugin/{{.Package}}/model"
|
||||
{{- if not .IsTree }}
|
||||
"{{.Module}}/plugin/{{.Package}}/model/request"
|
||||
{{- if or .NeedSort (NeedsGormClause .Fields) }}
|
||||
"gorm.io/gorm/clause"
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
"errors"
|
||||
{{- end }}
|
||||
@@ -165,7 +173,6 @@ func (s *{{.Abbreviation}}) Get{{.StructName}}InfoList(ctx context.Context, info
|
||||
return
|
||||
}
|
||||
{{- if .NeedSort}}
|
||||
var OrderStr string
|
||||
orderMap := make(map[string]bool)
|
||||
{{- if .GvaModel }}
|
||||
orderMap["id"] = true
|
||||
@@ -177,11 +184,10 @@ func (s *{{.Abbreviation}}) Get{{.StructName}}InfoList(ctx context.Context, info
|
||||
{{- end}}
|
||||
{{- end}}
|
||||
if orderMap[info.Sort] {
|
||||
OrderStr = info.Sort
|
||||
if info.Order == "descending" {
|
||||
OrderStr = OrderStr + " desc"
|
||||
}
|
||||
db = db.Order(OrderStr)
|
||||
db = db.Order(clause.OrderByColumn{
|
||||
Column: clause.Column{Name: info.Sort},
|
||||
Desc: info.Order == "descending",
|
||||
})
|
||||
}
|
||||
{{- end}}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ func GetTemplateFuncMap() template.FuncMap {
|
||||
"GenerateField": GenerateField,
|
||||
"GenerateSearchField": GenerateSearchField,
|
||||
"GenerateSearchConditions": GenerateSearchConditions,
|
||||
"NeedsGormClause": NeedsGormClause,
|
||||
"GenerateSearchFormItem": GenerateSearchFormItem,
|
||||
"GenerateTableColumn": GenerateTableColumn,
|
||||
"GenerateFormItem": GenerateFormItem,
|
||||
@@ -23,6 +24,20 @@ func GetTemplateFuncMap() template.FuncMap {
|
||||
}
|
||||
}
|
||||
|
||||
// NeedsGormClause 判断生成的搜索条件是否使用 GORM clause 表达式。
|
||||
func NeedsGormClause(fields []*systemReq.AutoCodeField) bool {
|
||||
for _, field := range fields {
|
||||
if field == nil || field.FieldSearchType == "" {
|
||||
continue
|
||||
}
|
||||
if slices.Contains([]string{"pictures", "picture", "video", "json", "richtext", "array"}, field.FieldType) {
|
||||
continue
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// 渲染Model中的字段
|
||||
func GenerateField(field systemReq.AutoCodeField) string {
|
||||
// 构建gorm标签
|
||||
@@ -137,15 +152,21 @@ func GenerateSearchConditions(fields []*systemReq.AutoCodeField) string {
|
||||
if field.FieldSearchType == "LIKE" {
|
||||
condition = fmt.Sprintf(`
|
||||
if info.%s != "" {
|
||||
db = db.Where("%s LIKE ?", "%%"+ info.%s+"%%")
|
||||
db = db.Where(clause.Expr{
|
||||
SQL: "? LIKE ?",
|
||||
Vars: []any{clause.Column{Name: "%s"}, "%%" + info.%s + "%%"},
|
||||
})
|
||||
}`,
|
||||
field.FieldName, field.ColumnName, field.FieldName)
|
||||
} else {
|
||||
condition = fmt.Sprintf(`
|
||||
if info.%s != "" {
|
||||
db = db.Where("%s %s ?", info.%s)
|
||||
db = db.Where(clause.Expr{
|
||||
SQL: "? %s ?",
|
||||
Vars: []any{clause.Column{Name: "%s"}, info.%s},
|
||||
})
|
||||
}`,
|
||||
field.FieldName, field.ColumnName, field.FieldSearchType, field.FieldName)
|
||||
field.FieldName, field.FieldSearchType, field.ColumnName, field.FieldName)
|
||||
}
|
||||
} else {
|
||||
condition = fmt.Sprintf(`
|
||||
@@ -158,16 +179,22 @@ func GenerateSearchConditions(fields []*systemReq.AutoCodeField) string {
|
||||
if field.FieldType == "time.Time" {
|
||||
condition = fmt.Sprintf(`
|
||||
if len(info.%sRange) == 2 {
|
||||
db = db.Where("%s %s ? AND ? ", info.%sRange[0], info.%sRange[1])
|
||||
db = db.Where(clause.Expr{
|
||||
SQL: "? %s ? AND ?",
|
||||
Vars: []any{clause.Column{Name: "%s"}, info.%sRange[0], info.%sRange[1]},
|
||||
})
|
||||
}`,
|
||||
field.FieldName, field.ColumnName, field.FieldSearchType, field.FieldName, field.FieldName)
|
||||
field.FieldName, field.FieldSearchType, field.ColumnName, field.FieldName, field.FieldName)
|
||||
} else {
|
||||
condition = fmt.Sprintf(`
|
||||
if info.Start%s != nil && info.End%s != nil {
|
||||
db = db.Where("%s %s ? AND ? ", *info.Start%s, *info.End%s)
|
||||
db = db.Where(clause.Expr{
|
||||
SQL: "? %s ? AND ?",
|
||||
Vars: []any{clause.Column{Name: "%s"}, *info.Start%s, *info.End%s},
|
||||
})
|
||||
}`,
|
||||
field.FieldName, field.FieldName, field.ColumnName,
|
||||
field.FieldSearchType, field.FieldName, field.FieldName)
|
||||
field.FieldName, field.FieldName, field.FieldSearchType,
|
||||
field.ColumnName, field.FieldName, field.FieldName)
|
||||
}
|
||||
} else {
|
||||
nullCheck := "info." + field.FieldName + " != nil"
|
||||
@@ -181,14 +208,20 @@ func GenerateSearchConditions(fields []*systemReq.AutoCodeField) string {
|
||||
|
||||
if field.FieldSearchType == "LIKE" {
|
||||
condition += fmt.Sprintf(`
|
||||
db = db.Where("%s LIKE ?", "%%"+ *info.%s+"%%")
|
||||
db = db.Where(clause.Expr{
|
||||
SQL: "? LIKE ?",
|
||||
Vars: []any{clause.Column{Name: "%s"}, "%%" + *info.%s + "%%"},
|
||||
})
|
||||
}`,
|
||||
field.ColumnName, field.FieldName)
|
||||
} else {
|
||||
condition += fmt.Sprintf(`
|
||||
db = db.Where("%s %s ?", *info.%s)
|
||||
db = db.Where(clause.Expr{
|
||||
SQL: "? %s ?",
|
||||
Vars: []any{clause.Column{Name: "%s"}, *info.%s},
|
||||
})
|
||||
}`,
|
||||
field.ColumnName, field.FieldSearchType, field.FieldName)
|
||||
field.FieldSearchType, field.ColumnName, field.FieldName)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user