| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723 |
- package autocode
- import (
- "fmt"
- systemReq "github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
- "slices"
- "strings"
- "text/template"
- )
- // GetTemplateFuncMap 返回模板函数映射,用于在模板中使用
- func GetTemplateFuncMap() template.FuncMap {
- return template.FuncMap{
- "title": strings.Title,
- "GenerateField": GenerateField,
- "GenerateSearchField": GenerateSearchField,
- "GenerateSearchConditions": GenerateSearchConditions,
- "GenerateSearchFormItem": GenerateSearchFormItem,
- "GenerateTableColumn": GenerateTableColumn,
- "GenerateFormItem": GenerateFormItem,
- "GenerateDescriptionItem": GenerateDescriptionItem,
- "GenerateDefaultFormValue": GenerateDefaultFormValue,
- }
- }
- // 渲染Model中的字段
- func GenerateField(field systemReq.AutoCodeField) string {
- // 构建gorm标签
- gormTag := ``
- if field.FieldIndexType != "" {
- gormTag += field.FieldIndexType + ";"
- }
- if field.PrimaryKey {
- gormTag += "primarykey;"
- }
- if field.DefaultValue != "" {
- gormTag += fmt.Sprintf("default:%s;", field.DefaultValue)
- }
- if field.Comment != "" {
- gormTag += fmt.Sprintf("comment:%s;", field.Comment)
- }
- gormTag += "column:" + field.ColumnName + ";"
- // 对于int类型,根据DataTypeLong决定具体的Go类型,不使用size标签
- if field.DataTypeLong != "" && field.FieldType != "enum" && field.FieldType != "int" {
- gormTag += fmt.Sprintf("size:%s;", field.DataTypeLong)
- }
- requireTag := ` binding:"required"` + "`"
- // 根据字段类型构建不同的字段定义
- var result string
- switch field.FieldType {
- case "enum":
- result = fmt.Sprintf(`%s string `+"`"+`json:"%s" form:"%s" gorm:"%stype:enum(%s);"`+"`",
- field.FieldName, field.FieldJson, field.FieldJson, gormTag, field.DataTypeLong)
- case "picture", "video":
- tagContent := fmt.Sprintf(`json:"%s" form:"%s" gorm:"%s"`,
- field.FieldJson, field.FieldJson, gormTag)
- result = fmt.Sprintf(`%s string `+"`"+`%s`+"`"+``, field.FieldName, tagContent)
- case "file", "pictures", "array":
- tagContent := fmt.Sprintf(`json:"%s" form:"%s" gorm:"%s"`,
- field.FieldJson, field.FieldJson, gormTag)
- result = fmt.Sprintf(`%s datatypes.JSON `+"`"+`%s swaggertype:"array,object"`+"`"+``,
- field.FieldName, tagContent)
- case "richtext":
- tagContent := fmt.Sprintf(`json:"%s" form:"%s" gorm:"%s`,
- field.FieldJson, field.FieldJson, gormTag)
- result = fmt.Sprintf(`%s *string `+"`"+`%stype:text;"`+"`"+``,
- field.FieldName, tagContent)
- case "json":
- tagContent := fmt.Sprintf(`json:"%s" form:"%s" gorm:"%s"`,
- field.FieldJson, field.FieldJson, gormTag)
- result = fmt.Sprintf(`%s datatypes.JSON `+"`"+`%s swaggertype:"object"`+"`"+``,
- field.FieldName, tagContent)
- default:
- tagContent := fmt.Sprintf(`json:"%s" form:"%s" gorm:"%s"`,
- field.FieldJson, field.FieldJson, gormTag)
- // 对于int类型,根据DataTypeLong决定具体的Go类型
- var fieldType string
- if field.FieldType == "int" {
- switch field.DataTypeLong {
- case "1", "2", "3":
- fieldType = "int8"
- case "4", "5":
- fieldType = "int16"
- case "6", "7", "8", "9", "10":
- fieldType = "int32"
- case "11", "12", "13", "14", "15", "16", "17", "18", "19", "20":
- fieldType = "int64"
- default:
- fieldType = "int64"
- }
- } else {
- fieldType = field.FieldType
- }
- result = fmt.Sprintf(`%s *%s `+"`"+`%s`+"`"+``,
- field.FieldName, fieldType, tagContent)
- }
- if field.Require {
- result = result[0:len(result)-1] + requireTag
- }
- // 添加字段描述
- if field.FieldDesc != "" {
- result += fmt.Sprintf(" //%s", field.FieldDesc)
- }
- return result
- }
- // 格式化搜索条件语句
- func GenerateSearchConditions(fields []*systemReq.AutoCodeField) string {
- var conditions []string
- for _, field := range fields {
- if field.FieldSearchType == "" {
- continue
- }
- var condition string
- if slices.Contains([]string{"enum", "pictures", "picture", "video", "json", "richtext", "array"}, field.FieldType) {
- if field.FieldType == "enum" {
- if field.FieldSearchType == "LIKE" {
- condition = fmt.Sprintf(`
- if info.%s != "" {
- db = db.Where("%s LIKE ?", "%%"+ info.%s+"%%")
- }`,
- field.FieldName, field.ColumnName, field.FieldName)
- } else {
- condition = fmt.Sprintf(`
- if info.%s != "" {
- db = db.Where("%s %s ?", info.%s)
- }`,
- field.FieldName, field.ColumnName, field.FieldSearchType, field.FieldName)
- }
- } else {
- condition = fmt.Sprintf(`
- if info.%s != "" {
- // TODO 数据类型为复杂类型,请根据业务需求自行实现复杂类型的查询业务
- }`, field.FieldName)
- }
- } else if field.FieldSearchType == "BETWEEN" || field.FieldSearchType == "NOT BETWEEN" {
- 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])
- }`,
- field.FieldName, field.ColumnName, field.FieldSearchType, 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)
- }`,
- field.FieldName, field.FieldName, field.ColumnName,
- field.FieldSearchType, field.FieldName, field.FieldName)
- }
- } else {
- nullCheck := "info." + field.FieldName + " != nil"
- if field.FieldType == "string" {
- condition = fmt.Sprintf(`
- if %s && *info.%s != "" {`, nullCheck, field.FieldName)
- } else {
- condition = fmt.Sprintf(`
- if %s {`, nullCheck)
- }
- if field.FieldSearchType == "LIKE" {
- condition += fmt.Sprintf(`
- db = db.Where("%s LIKE ?", "%%"+ *info.%s+"%%")
- }`,
- field.ColumnName, field.FieldName)
- } else {
- condition += fmt.Sprintf(`
- db = db.Where("%s %s ?", *info.%s)
- }`,
- field.ColumnName, field.FieldSearchType, field.FieldName)
- }
- }
- conditions = append(conditions, condition)
- }
- return strings.Join(conditions, "")
- }
- // 格式化前端搜索条件
- func GenerateSearchFormItem(field systemReq.AutoCodeField) string {
- // 开始构建表单项
- result := fmt.Sprintf(`<el-form-item label="%s" prop="%s">
- `, field.FieldDesc, field.FieldJson)
- // 根据字段属性生成不同的输入类型
- if field.FieldType == "bool" {
- result += fmt.Sprintf(` <el-select v-model="searchInfo.%s" clearable placeholder="请选择">
- `, field.FieldJson)
- result += ` <el-option key="true" label="是" value="true"></el-option>
- `
- result += ` <el-option key="false" label="否" value="false"></el-option>
- `
- result += ` </el-select>
- `
- } else if field.DictType != "" {
- multipleAttr := ""
- if field.FieldType == "array" {
- multipleAttr = "multiple "
- }
- result += fmt.Sprintf(` <el-select %sv-model="searchInfo.%s" clearable filterable placeholder="请选择" @clear="()=>{searchInfo.%s=undefined}">
- `,
- multipleAttr, field.FieldJson, field.FieldJson)
- result += fmt.Sprintf(` <el-option v-for="(item,key) in %sOptions" :key="key" :label="item.label" :value="item.value" />
- `,
- field.DictType)
- result += ` </el-select>
- `
- } else if field.CheckDataSource {
- multipleAttr := ""
- if field.DataSource.Association == 2 {
- multipleAttr = "multiple "
- }
- result += fmt.Sprintf(` <el-select %sv-model="searchInfo.%s" filterable placeholder="请选择%s" :clearable="%v">
- `,
- multipleAttr, field.FieldJson, field.FieldDesc, field.Clearable)
- result += fmt.Sprintf(` <el-option v-for="(item,key) in dataSource.%s" :key="key" :label="item.label" :value="item.value" />
- `,
- field.FieldJson)
- result += ` </el-select>
- `
- } else if field.FieldType == "float64" || field.FieldType == "int" {
- if field.FieldSearchType == "BETWEEN" || field.FieldSearchType == "NOT BETWEEN" {
- result += fmt.Sprintf(` <el-input class="!w-40" v-model.number="searchInfo.start%s" placeholder="最小值" />
- `, field.FieldName)
- result += ` —
- `
- result += fmt.Sprintf(` <el-input class="!w-40" v-model.number="searchInfo.end%s" placeholder="最大值" />
- `, field.FieldName)
- } else {
- result += fmt.Sprintf(` <el-input v-model.number="searchInfo.%s" placeholder="搜索条件" />
- `, field.FieldJson)
- }
- } else if field.FieldType == "time.Time" {
- if field.FieldSearchType == "BETWEEN" || field.FieldSearchType == "NOT BETWEEN" {
- result += ` <template #label>
- `
- result += ` <span>
- `
- result += fmt.Sprintf(` %s
- `, field.FieldDesc)
- result += ` <el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
- `
- result += ` <el-icon><QuestionFilled /></el-icon>
- `
- result += ` </el-tooltip>
- `
- result += ` </span>
- `
- result += ` </template>
- `
- result += fmt.Sprintf(`<el-date-picker class="!w-380px" v-model="searchInfo.%sRange" type="datetimerange" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"></el-date-picker>`, field.FieldJson)
- } else {
- result += fmt.Sprintf(`<el-date-picker v-model="searchInfo.%s" type="datetime" placeholder="搜索条件"></el-date-picker>`, field.FieldJson)
- }
- } else {
- result += fmt.Sprintf(` <el-input v-model="searchInfo.%s" placeholder="搜索条件" />
- `, field.FieldJson)
- }
- // 关闭表单项
- result += `</el-form-item>`
- return result
- }
- // GenerateTableColumn generates HTML for table column based on field properties
- func GenerateTableColumn(field systemReq.AutoCodeField) string {
- // Add sortable attribute if needed
- sortAttr := ""
- if field.Sort {
- sortAttr = " sortable"
- }
- // Handle different field types
- if field.CheckDataSource {
- result := fmt.Sprintf(`<el-table-column%s align="left" label="%s" prop="%s" width="120">
- `,
- sortAttr, field.FieldDesc, field.FieldJson)
- result += ` <template #default="scope">
- `
- if field.DataSource.Association == 2 {
- result += fmt.Sprintf(` <el-tag v-for="(item,key) in filterDataSource(dataSource.%s,scope.row.%s)" :key="key">
- `,
- field.FieldJson, field.FieldJson)
- result += ` {{ item }}
- `
- result += ` </el-tag>
- `
- } else {
- result += fmt.Sprintf(` <span>{{ filterDataSource(dataSource.%s,scope.row.%s) }}</span>
- `,
- field.FieldJson, field.FieldJson)
- }
- result += ` </template>
- `
- result += `</el-table-column>`
- return result
- } else if field.DictType != "" {
- result := fmt.Sprintf(`<el-table-column%s align="left" label="%s" prop="%s" width="120">
- `,
- sortAttr, field.FieldDesc, field.FieldJson)
- result += ` <template #default="scope">
- `
- if field.FieldType == "array" {
- result += fmt.Sprintf(` <el-tag class="mr-1" v-for="item in scope.row.%s" :key="item"> {{ filterDict(item,%sOptions) }}</el-tag>
- `,
- field.FieldJson, field.DictType)
- } else {
- result += fmt.Sprintf(` {{ filterDict(scope.row.%s,%sOptions) }}
- `,
- field.FieldJson, field.DictType)
- }
- result += ` </template>
- `
- result += `</el-table-column>`
- return result
- } else if field.FieldType == "bool" {
- result := fmt.Sprintf(`<el-table-column%s align="left" label="%s" prop="%s" width="120">
- `,
- sortAttr, field.FieldDesc, field.FieldJson)
- result += fmt.Sprintf(` <template #default="scope">{{ formatBoolean(scope.row.%s) }}</template>
- `, field.FieldJson)
- result += `</el-table-column>`
- return result
- } else if field.FieldType == "time.Time" {
- result := fmt.Sprintf(`<el-table-column%s align="left" label="%s" prop="%s" width="180">
- `,
- sortAttr, field.FieldDesc, field.FieldJson)
- result += fmt.Sprintf(` <template #default="scope">{{ formatDate(scope.row.%s) }}</template>
- `, field.FieldJson)
- result += `</el-table-column>`
- return result
- } else if field.FieldType == "picture" {
- result := fmt.Sprintf(`<el-table-column label="%s" prop="%s" width="200">
- `, field.FieldDesc, field.FieldJson)
- result += ` <template #default="scope">
- `
- result += fmt.Sprintf(` <el-image preview-teleported style="width: 100px; height: 100px" :src="getUrl(scope.row.%s)" fit="cover"/>
- `, field.FieldJson)
- result += ` </template>
- `
- result += `</el-table-column>`
- return result
- } else if field.FieldType == "pictures" {
- result := fmt.Sprintf(`<el-table-column label="%s" prop="%s" width="200">
- `, field.FieldDesc, field.FieldJson)
- result += ` <template #default="scope">
- `
- result += ` <div class="multiple-img-box">
- `
- result += fmt.Sprintf(` <el-image preview-teleported v-for="(item,index) in scope.row.%s" :key="index" style="width: 80px; height: 80px" :src="getUrl(item)" fit="cover"/>
- `, field.FieldJson)
- result += ` </div>
- `
- result += ` </template>
- `
- result += `</el-table-column>`
- return result
- } else if field.FieldType == "video" {
- result := fmt.Sprintf(`<el-table-column label="%s" prop="%s" width="200">
- `, field.FieldDesc, field.FieldJson)
- result += ` <template #default="scope">
- `
- result += ` <video
- `
- result += ` style="width: 100px; height: 100px"
- `
- result += ` muted
- `
- result += ` preload="metadata"
- `
- result += ` >
- `
- result += fmt.Sprintf(` <source :src="getUrl(scope.row.%s) + '#t=1'">
- `, field.FieldJson)
- result += ` </video>
- `
- result += ` </template>
- `
- result += `</el-table-column>`
- return result
- } else if field.FieldType == "richtext" {
- result := fmt.Sprintf(`<el-table-column label="%s" prop="%s" width="200">
- `, field.FieldDesc, field.FieldJson)
- result += ` <template #default="scope">
- `
- result += ` [富文本内容]
- `
- result += ` </template>
- `
- result += `</el-table-column>`
- return result
- } else if field.FieldType == "file" {
- result := fmt.Sprintf(`<el-table-column label="%s" prop="%s" width="200">
- `, field.FieldDesc, field.FieldJson)
- result += ` <template #default="scope">
- `
- result += ` <div class="file-list">
- `
- result += fmt.Sprintf(` <el-tag v-for="file in scope.row.%s" :key="file.uid" @click="onDownloadFile(file.url)">{{ file.name }}</el-tag>
- `, field.FieldJson)
- result += ` </div>
- `
- result += ` </template>
- `
- result += `</el-table-column>`
- return result
- } else if field.FieldType == "json" {
- result := fmt.Sprintf(`<el-table-column label="%s" prop="%s" width="200">
- `, field.FieldDesc, field.FieldJson)
- result += ` <template #default="scope">
- `
- result += ` [JSON]
- `
- result += ` </template>
- `
- result += `</el-table-column>`
- return result
- } else if field.FieldType == "array" {
- result := fmt.Sprintf(`<el-table-column label="%s" prop="%s" width="200">
- `, field.FieldDesc, field.FieldJson)
- result += ` <template #default="scope">
- `
- result += fmt.Sprintf(` <ArrayCtrl v-model="scope.row.%s"/>
- `, field.FieldJson)
- result += ` </template>
- `
- result += `</el-table-column>`
- return result
- } else {
- return fmt.Sprintf(`<el-table-column%s align="left" label="%s" prop="%s" width="120" />
- `,
- sortAttr, field.FieldDesc, field.FieldJson)
- }
- }
- func GenerateFormItem(field systemReq.AutoCodeField) string {
- // 开始构建表单项
- result := fmt.Sprintf(`<el-form-item label="%s:" prop="%s">
- `, field.FieldDesc, field.FieldJson)
- // 处理不同字段类型
- if field.CheckDataSource {
- multipleAttr := ""
- if field.DataSource.Association == 2 {
- multipleAttr = " multiple"
- }
- result += fmt.Sprintf(` <el-select%s v-model="formData.%s" placeholder="请选择%s" filterable style="width:100%%" :clearable="%v">
- `,
- multipleAttr, field.FieldJson, field.FieldDesc, field.Clearable)
- result += fmt.Sprintf(` <el-option v-for="(item,key) in dataSource.%s" :key="key" :label="item.label" :value="item.value" />
- `,
- field.FieldJson)
- result += ` </el-select>
- `
- } else {
- switch field.FieldType {
- case "bool":
- result += fmt.Sprintf(` <el-switch v-model="formData.%s" active-color="#13ce66" inactive-color="#ff4949" active-text="是" inactive-text="否" clearable ></el-switch>
- `,
- field.FieldJson)
- case "string":
- if field.DictType != "" {
- result += fmt.Sprintf(` <el-select v-model="formData.%s" placeholder="请选择%s" style="width:100%%" filterable :clearable="%v">
- `,
- field.FieldJson, field.FieldDesc, field.Clearable)
- result += fmt.Sprintf(` <el-option v-for="(item,key) in %sOptions" :key="key" :label="item.label" :value="item.value" />
- `,
- field.DictType)
- result += ` </el-select>
- `
- } else {
- result += fmt.Sprintf(` <el-input v-model="formData.%s" :clearable="%v" placeholder="请输入%s" />
- `,
- field.FieldJson, field.Clearable, field.FieldDesc)
- }
- case "richtext":
- result += fmt.Sprintf(` <RichEdit v-model="formData.%s"/>
- `, field.FieldJson)
- case "json":
- result += fmt.Sprintf(` // 此字段为json结构,可以前端自行控制展示和数据绑定模式 需绑定json的key为 formData.%s 后端会按照json的类型进行存取
- `, field.FieldJson)
- result += fmt.Sprintf(` {{ formData.%s }}
- `, field.FieldJson)
- case "array":
- if field.DictType != "" {
- result += fmt.Sprintf(` <el-select multiple v-model="formData.%s" placeholder="请选择%s" filterable style="width:100%%" :clearable="%v">
- `,
- field.FieldJson, field.FieldDesc, field.Clearable)
- result += fmt.Sprintf(` <el-option v-for="(item,key) in %sOptions" :key="key" :label="item.label" :value="item.value" />
- `,
- field.DictType)
- result += ` </el-select>
- `
- } else {
- result += fmt.Sprintf(` <ArrayCtrl v-model="formData.%s" editable/>
- `, field.FieldJson)
- }
- case "int":
- result += fmt.Sprintf(` <el-input v-model.number="formData.%s" :clearable="%v" placeholder="请输入%s" />
- `,
- field.FieldJson, field.Clearable, field.FieldDesc)
- case "time.Time":
- result += fmt.Sprintf(` <el-date-picker v-model="formData.%s" type="date" style="width:100%%" placeholder="选择日期" :clearable="%v" />
- `,
- field.FieldJson, field.Clearable)
- case "float64":
- result += fmt.Sprintf(` <el-input-number v-model="formData.%s" style="width:100%%" :precision="2" :clearable="%v" />
- `,
- field.FieldJson, field.Clearable)
- case "enum":
- result += fmt.Sprintf(` <el-select v-model="formData.%s" placeholder="请选择%s" style="width:100%%" filterable :clearable="%v">
- `,
- field.FieldJson, field.FieldDesc, field.Clearable)
- result += fmt.Sprintf(` <el-option v-for="item in [%s]" :key="item" :label="item" :value="item" />
- `,
- field.DataTypeLong)
- result += ` </el-select>
- `
- case "picture":
- result += fmt.Sprintf(` <SelectImage
- v-model="formData.%s"
- file-type="image"
- />
- `, field.FieldJson)
- case "pictures":
- result += fmt.Sprintf(` <SelectImage
- multiple
- v-model="formData.%s"
- file-type="image"
- />
- `, field.FieldJson)
- case "video":
- result += fmt.Sprintf(` <SelectImage
- v-model="formData.%s"
- file-type="video"
- />
- `, field.FieldJson)
- case "file":
- result += fmt.Sprintf(` <SelectFile v-model="formData.%s" />
- `, field.FieldJson)
- }
- }
- // 关闭表单项
- result += `</el-form-item>`
- return result
- }
- func GenerateDescriptionItem(field systemReq.AutoCodeField) string {
- // 开始构建描述项
- result := fmt.Sprintf(`<el-descriptions-item label="%s">
- `, field.FieldDesc)
- if field.CheckDataSource {
- result += ` <template #default="scope">
- `
- if field.DataSource.Association == 2 {
- result += fmt.Sprintf(` <el-tag v-for="(item,key) in filterDataSource(dataSource.%s,detailForm.%s)" :key="key">
- `,
- field.FieldJson, field.FieldJson)
- result += ` {{ item }}
- `
- result += ` </el-tag>
- `
- } else {
- result += fmt.Sprintf(` <span>{{ filterDataSource(dataSource.%s,detailForm.%s) }}</span>
- `,
- field.FieldJson, field.FieldJson)
- }
- result += ` </template>
- `
- } else if field.FieldType != "picture" && field.FieldType != "pictures" &&
- field.FieldType != "file" && field.FieldType != "array" &&
- field.FieldType != "richtext" {
- result += fmt.Sprintf(` {{ detailForm.%s }}
- `, field.FieldJson)
- } else {
- switch field.FieldType {
- case "picture":
- result += fmt.Sprintf(` <el-image style="width: 50px; height: 50px" :preview-src-list="returnArrImg(detailForm.%s)" :src="getUrl(detailForm.%s)" fit="cover" />
- `,
- field.FieldJson, field.FieldJson)
- case "array":
- result += fmt.Sprintf(` <ArrayCtrl v-model="detailForm.%s"/>
- `, field.FieldJson)
- case "pictures":
- result += fmt.Sprintf(` <el-image style="width: 50px; height: 50px; margin-right: 10px" :preview-src-list="returnArrImg(detailForm.%s)" :initial-index="index" v-for="(item,index) in detailForm.%s" :key="index" :src="getUrl(item)" fit="cover" />
- `,
- field.FieldJson, field.FieldJson)
- case "richtext":
- result += fmt.Sprintf(` <RichView v-model="detailForm.%s" />
- `, field.FieldJson)
- case "file":
- result += fmt.Sprintf(` <div class="fileBtn" v-for="(item,index) in detailForm.%s" :key="index">
- `, field.FieldJson)
- result += ` <el-button type="primary" text bg @click="onDownloadFile(item.url)">
- `
- result += ` <el-icon style="margin-right: 5px"><Download /></el-icon>
- `
- result += ` {{ item.name }}
- `
- result += ` </el-button>
- `
- result += ` </div>
- `
- }
- }
- // 关闭描述项
- result += `</el-descriptions-item>`
- return result
- }
- func GenerateDefaultFormValue(field systemReq.AutoCodeField) string {
- // 根据字段类型确定默认值
- var defaultValue string
- switch field.FieldType {
- case "bool":
- defaultValue = "false"
- case "string", "richtext":
- defaultValue = "''"
- case "int":
- if field.DataSource != nil { // 检查数据源是否存在
- defaultValue = "undefined"
- } else {
- defaultValue = "0"
- }
- case "time.Time":
- defaultValue = "new Date()"
- case "float64":
- defaultValue = "0"
- case "picture", "video":
- defaultValue = "\"\""
- case "pictures", "file", "array":
- defaultValue = "[]"
- case "json":
- defaultValue = "{}"
- default:
- defaultValue = "null"
- }
- // 返回格式化后的默认值字符串
- return fmt.Sprintf(`%s: %s,`, field.FieldJson, defaultValue)
- }
- // GenerateSearchField 根据字段属性生成搜索结构体中的字段定义
- func GenerateSearchField(field systemReq.AutoCodeField) string {
- var result string
- if field.FieldSearchType == "" {
- return "" // 如果没有搜索类型,返回空字符串
- }
- if field.FieldSearchType == "BETWEEN" || field.FieldSearchType == "NOT BETWEEN" {
- // 生成范围搜索字段
- // time 的情况
- if field.FieldType == "time.Time" {
- result = fmt.Sprintf("%sRange []time.Time `json:\"%sRange\" form:\"%sRange[]\"`",
- field.FieldName, field.FieldJson, field.FieldJson)
- } else {
- startField := fmt.Sprintf("Start%s *%s `json:\"start%s\" form:\"start%s\"`",
- field.FieldName, field.FieldType, field.FieldName, field.FieldName)
- endField := fmt.Sprintf("End%s *%s `json:\"end%s\" form:\"end%s\"`",
- field.FieldName, field.FieldType, field.FieldName, field.FieldName)
- result = startField + "\n" + endField
- }
- } else {
- // 生成普通搜索字段
- if field.FieldType == "enum" || field.FieldType == "picture" ||
- field.FieldType == "pictures" || field.FieldType == "video" ||
- field.FieldType == "json" || field.FieldType == "richtext" || field.FieldType == "array" {
- result = fmt.Sprintf("%s string `json:\"%s\" form:\"%s\"` ",
- field.FieldName, field.FieldJson, field.FieldJson)
- } else {
- result = fmt.Sprintf("%s *%s `json:\"%s\" form:\"%s\"` ",
- field.FieldName, field.FieldType, field.FieldJson, field.FieldJson)
- }
- }
- return result
- }
|