110 lines
3.3 KiB
Go
110 lines
3.3 KiB
Go
package utils
|
|
|
|
import (
|
|
"strings"
|
|
"text/template"
|
|
)
|
|
|
|
// GetTemplateFuncMap 返回模板函数映射,用于在模板中使用
|
|
func GetTemplateFuncMap() template.FuncMap {
|
|
return template.FuncMap{
|
|
"formatGormTag": FormatGormTag,
|
|
"formatFieldTag": FormatFieldTag,
|
|
"formatSearchCondition": FormatSearchCondition,
|
|
"formatBetweenCondition": FormatBetweenCondition,
|
|
"formatLikeCondition": FormatLikeCondition,
|
|
"formatModelField": FormatModelField,
|
|
"formatRequestField": FormatRequestField,
|
|
"indent": Indent,
|
|
}
|
|
}
|
|
|
|
// FormatGormTag 格式化GORM标签
|
|
func FormatGormTag(fieldIndexType, primaryKey, defaultValue, columnName, comment, dataTypeLong string) string {
|
|
var tags []string
|
|
|
|
if fieldIndexType != "" {
|
|
tags = append(tags, fieldIndexType)
|
|
}
|
|
if primaryKey == "true" {
|
|
tags = append(tags, "primarykey")
|
|
}
|
|
if defaultValue != "" {
|
|
tags = append(tags, "default:"+defaultValue)
|
|
}
|
|
tags = append(tags, "column:"+columnName)
|
|
if comment != "" {
|
|
tags = append(tags, "comment:"+comment)
|
|
}
|
|
if dataTypeLong != "" {
|
|
tags = append(tags, "size:"+dataTypeLong)
|
|
}
|
|
|
|
return strings.Join(tags, ";")
|
|
}
|
|
|
|
// FormatFieldTag 格式化字段标签
|
|
func FormatFieldTag(fieldJson string, required bool) string {
|
|
result := `json:"` + fieldJson + `" form:"` + fieldJson + `"`
|
|
if required {
|
|
result += ` binding:"required"`
|
|
}
|
|
return result
|
|
}
|
|
|
|
// FormatSearchCondition 格式化搜索条件
|
|
func FormatSearchCondition(columnName, fieldSearchType, fieldName, fieldType string) string {
|
|
var condition string
|
|
if fieldType == "string" {
|
|
condition = `if info.` + fieldName + ` != nil && *info.` + fieldName + ` != "" {`
|
|
} else {
|
|
condition = `if info.` + fieldName + ` != nil {`
|
|
}
|
|
|
|
var whereClause string
|
|
if fieldSearchType == "LIKE" {
|
|
whereClause = `db = db.Where("` + columnName + ` ` + fieldSearchType + ` ?","%"+*info.` + fieldName + `+"%")`
|
|
} else {
|
|
whereClause = `db = db.Where("` + columnName + ` ` + fieldSearchType + ` ?",*info.` + fieldName + `)`
|
|
}
|
|
|
|
return condition + "\n " + whereClause + "\n}"
|
|
}
|
|
|
|
// FormatBetweenCondition 格式化BETWEEN条件
|
|
func FormatBetweenCondition(columnName, fieldSearchType, fieldName string) string {
|
|
return `if info.Start` + fieldName + ` != nil && info.End` + fieldName + ` != nil {` + "\n" +
|
|
` db = db.Where("` + columnName + ` ` + fieldSearchType + ` ? AND ? ",info.Start` + fieldName + `,info.End` + fieldName + `)` + "\n" +
|
|
`}`
|
|
}
|
|
|
|
// FormatLikeCondition 格式化LIKE条件
|
|
func FormatLikeCondition(columnName, fieldName string) string {
|
|
return `db = db.Where("` + columnName + ` LIKE ?","%"+ *info.` + fieldName + `+"%")`
|
|
}
|
|
|
|
// FormatModelField 格式化模型字段
|
|
func FormatModelField(fieldName, fieldType, fieldJson, gormTag string, fieldDesc string) string {
|
|
result := fieldName + " " + fieldType + " `" + fieldJson + " " + gormTag + "`"
|
|
if fieldDesc != "" {
|
|
result += " //" + fieldDesc
|
|
}
|
|
return result
|
|
}
|
|
|
|
// FormatRequestField 格式化请求字段
|
|
func FormatRequestField(fieldName, fieldType, fieldJson string) string {
|
|
return fieldName + " " + fieldType + " `json:\"" + fieldJson + "\" form:\"" + fieldJson + "\" `"
|
|
}
|
|
|
|
// Indent 缩进文本
|
|
func Indent(text string, indent string) string {
|
|
lines := strings.Split(text, "\n")
|
|
for i, line := range lines {
|
|
if line != "" {
|
|
lines[i] = indent + line
|
|
}
|
|
}
|
|
return strings.Join(lines, "\n")
|
|
}
|