| package components | |
| import ( | |
| "fmt" | |
| "html/template" | |
| "strings" | |
| "github.com/GoAdminGroup/go-admin/modules/config" | |
| "github.com/GoAdminGroup/go-admin/modules/language" | |
| "github.com/GoAdminGroup/go-admin/modules/utils" | |
| form2 "github.com/GoAdminGroup/go-admin/plugins/admin/modules/form" | |
| "github.com/GoAdminGroup/go-admin/template/types" | |
| "github.com/GoAdminGroup/go-admin/template/types/form" | |
| ) | |
| type FormAttribute struct { | |
| Name string | |
| Id string | |
| Header template.HTML | |
| Content types.FormFields | |
| ContentList []types.FormFields | |
| Layout form.Layout | |
| TabContents []types.FormFields | |
| TabHeaders []string | |
| Footer template.HTML | |
| Url string | |
| FieldsHTML template.HTML | |
| Method string | |
| PrimaryKey string | |
| Ajax bool | |
| AjaxSuccessJS template.JS | |
| AjaxErrorJS template.JS | |
| HeadWidth int | |
| InputWidth int | |
| HiddenFields map[string]string | |
| Title template.HTML | |
| OperationFooter template.HTML | |
| Prefix string | |
| CdnUrl string | |
| Horizontal bool | |
| types.Attribute | |
| } | |
| func (compo *FormAttribute) SetHeader(value template.HTML) types.FormAttribute { | |
| compo.Header = value | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetPrimaryKey(value string) types.FormAttribute { | |
| compo.PrimaryKey = value | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetHorizontal(value bool) types.FormAttribute { | |
| compo.Horizontal = value | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetContent(value types.FormFields) types.FormAttribute { | |
| compo.Content = value | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetId(id string) types.FormAttribute { | |
| compo.Id = id | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetAjax(successJS, errorJS template.JS) types.FormAttribute { | |
| if successJS != template.JS("") && errorJS != template.JS("") { | |
| compo.Ajax = true | |
| compo.AjaxErrorJS = errorJS | |
| compo.AjaxSuccessJS = successJS | |
| } | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetTabContents(value []types.FormFields) types.FormAttribute { | |
| compo.TabContents = value | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetTabHeaders(value []string) types.FormAttribute { | |
| compo.TabHeaders = value | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetHeadWidth(width int) types.FormAttribute { | |
| if width > 0 { | |
| if width > 12 { | |
| width = 12 | |
| } | |
| compo.HeadWidth = width | |
| } | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetInputWidth(width int) types.FormAttribute { | |
| if width > 0 { | |
| if width > 12 { | |
| width = 12 | |
| } | |
| compo.InputWidth = width | |
| } | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetFieldsHTML(html template.HTML) types.FormAttribute { | |
| compo.FieldsHTML = html | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetFooter(value template.HTML) types.FormAttribute { | |
| compo.Footer = value | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetLayout(layout form.Layout) types.FormAttribute { | |
| compo.Layout = layout | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetPrefix(value string) types.FormAttribute { | |
| compo.Prefix = value | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetUrl(value string) types.FormAttribute { | |
| compo.Url = value | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetHiddenFields(fields map[string]string) types.FormAttribute { | |
| compo.HiddenFields = fields | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetMethod(value string) types.FormAttribute { | |
| compo.Method = value | |
| return compo | |
| } | |
| func (compo *FormAttribute) SetTitle(value template.HTML) types.FormAttribute { | |
| compo.Title = value | |
| return compo | |
| } | |
| func (compo *FormAttribute) GetDefaultBoxHeader(hideBack bool) template.HTML { | |
| if hideBack { | |
| return template.HTML(fmt.Sprintf(`<h3 class="box-title">%s</h3>`, language.GetFromHtml(compo.Title))) | |
| } | |
| return template.HTML(fmt.Sprintf(`<h3 class="box-title">%s</h3> | |
| <div class="box-tools"> | |
| <div class="btn-group pull-right" style="margin-right: 10px"> | |
| <a href='%s' class="btn btn-sm btn-default form-history-back"><i | |
| class="fa fa-arrow-left"></i> %s</a> | |
| </div> | |
| </div>`, language.GetFromHtml(compo.Title), compo.HiddenFields[form2.PreviousKey], language.Get("Back"))) | |
| } | |
| func (compo *FormAttribute) GetDetailBoxHeader(editUrl, deleteUrl string) template.HTML { | |
| var ( | |
| editBtn string | |
| deleteBtn string | |
| ) | |
| if editUrl != "" { | |
| editBtn = fmt.Sprintf(` | |
| <div class="btn-group pull-right" style="margin-right: 10px"> | |
| <a href='%s' class="btn btn-sm btn-primary"><i | |
| class="fa fa-edit"></i> %s</a> | |
| </div>`, editUrl, language.Get("Edit")) | |
| } | |
| if deleteUrl != "" { | |
| deleteBtn = fmt.Sprintf(` | |
| <div class="btn-group pull-right" style="margin-right: 10px"> | |
| <a href='javascript:;' class="btn btn-sm btn-danger delete-btn"><i | |
| class="fa fa-trash"></i> %s</a> | |
| </div>`, language.Get("Delete")) | |
| } | |
| return template.HTML(`<h3 class="box-title">`) + language.GetFromHtml(compo.Title) + template.HTML(`</h3> | |
| <div class="box-tools"> | |
| `+deleteBtn+editBtn+` | |
| <div class="btn-group pull-right" style="margin-right: 10px"> | |
| <a href='`+compo.HiddenFields[form2.PreviousKey]+`' class="btn btn-sm btn-default form-history-back"><i | |
| class="fa fa-arrow-left"></i> `+language.Get("Back")+`</a> | |
| </div> | |
| </div>`) | |
| } | |
| func (compo *FormAttribute) GetBoxHeaderNoButton() template.HTML { | |
| return template.HTML(fmt.Sprintf(`<h3 class="box-title">%s</h3>`, language.GetFromHtml(compo.Title))) | |
| } | |
| func (compo *FormAttribute) SetOperationFooter(value template.HTML) types.FormAttribute { | |
| compo.OperationFooter = value | |
| return compo | |
| } | |
| func (compo *FormAttribute) GetContent() template.HTML { | |
| compo.CdnUrl = config.GetAssetUrl() | |
| if compo.Id == "" { | |
| compo.Id = utils.Uuid(10) | |
| } | |
| if col := compo.Layout.Col(); col > 0 { | |
| compo.ContentList = make([]types.FormFields, col) | |
| index := 0 | |
| for i := 0; i < len(compo.Content); i++ { | |
| ii := index % col | |
| compo.ContentList[ii] = append(compo.ContentList[ii], compo.Content[i]) | |
| if i < len(compo.Content)-1 { | |
| if strings.Contains(compo.Content[i+1].Field, "__goadmin_operator__") { | |
| compo.ContentList[ii] = append(compo.ContentList[ii], compo.Content[i+1]) | |
| i++ | |
| } | |
| } | |
| index++ | |
| } | |
| } | |
| return ComposeHtml(compo.TemplateList, compo.Separation, *compo, "form", | |
| "form/default", "form/file", "form/multi_file", "form/textarea", "form/custom", "form/rate", "form/slider", | |
| "form/selectbox", "form/text", "form/table", "form/radio", "form/switch", "form/checkbox", "form/checkbox_single", | |
| "form/checkbox_stacked", "form/password", "form/code", "form/array", "form/select", "form/singleselect", | |
| "form/richtext", "form/iconpicker", "form/datetime", "form/number", "form/number_range", | |
| "form/email", "form/url", "form/ip", "form/color", "form/currency", "form_components", "form/datetime_range", | |
| "form_layout_default", "form_layout_two_col", "form_layout_tab", "form_components_layout", "form_layout_flow", "form_layout_filter") | |
| } | |