package datamodel import ( "fmt" "github.com/GoAdminGroup/go-admin/context" "github.com/GoAdminGroup/go-admin/modules/db" form2 "github.com/GoAdminGroup/go-admin/plugins/admin/modules/form" "github.com/GoAdminGroup/go-admin/plugins/admin/modules/table" "github.com/GoAdminGroup/go-admin/template" "github.com/GoAdminGroup/go-admin/template/icon" "github.com/GoAdminGroup/go-admin/template/types" "github.com/GoAdminGroup/go-admin/template/types/action" "github.com/GoAdminGroup/go-admin/template/types/form" selection "github.com/GoAdminGroup/go-admin/template/types/form/select" editType "github.com/GoAdminGroup/go-admin/template/types/table" ) // GetUserTable return the model of table user. func GetUserTable(ctx *context.Context) (userTable table.Table) { userTable = table.NewDefaultTable(ctx, table.Config{ Driver: db.DriverMysql, CanAdd: true, Editable: true, Deletable: true, Exportable: true, Connection: table.DefaultConnectionName, PrimaryKey: table.PrimaryKey{ Type: db.Int, Name: table.DefaultPrimaryKeyName, }, }) info := userTable.GetInfo().SetFilterFormLayout(form.LayoutThreeCol) info.AddField("ID", "id", db.Int).FieldSortable() info.AddField("Name", "name", db.Varchar).FieldEditAble(editType.Text). FieldFilterable(types.FilterType{Operator: types.FilterOperatorLike}) info.AddField("Gender", "gender", db.Tinyint).FieldDisplay(func(model types.FieldModel) interface{} { if model.Value == "0" { return "men" } if model.Value == "1" { return "women" } return "unknown" }).FieldEditAble(editType.Switch).FieldEditOptions(types.FieldOptions{ {Value: "0", Text: "👦"}, {Value: "1", Text: "👧"}, }).FieldFilterable(types.FilterType{FormType: form.SelectSingle}).FieldFilterOptions(types.FieldOptions{ {Value: "0", Text: "men"}, {Value: "1", Text: "women"}, }) info.AddColumn("Personality", func(value types.FieldModel) interface{} { return "handsome" }) info.AddColumnButtons(ctx, "see more", types.GetColumnButton("see more", icon.Info, action.PopUp("/see/more/example", "see more", func(ctx *context.Context) (success bool, msg string, data interface{}) { return true, "ok", "

Detail

balabala

" }))) info.AddField("Phone", "phone", db.Varchar).FieldFilterable() info.AddField("City", "city", db.Varchar).FieldFilterable() info.AddField("Avatar", "avatar", db.Varchar).FieldDisplay(func(value types.FieldModel) interface{} { return template.Default(ctx).Image(). SetSrc(`//quick.go-admin.cn/demo/assets/dist/img/gopher_avatar.png`). SetHeight("120").SetWidth("120").WithModal().GetContent() }) info.AddField("CreatedAt", "created_at", db.Timestamp). FieldFilterable(types.FilterType{FormType: form.DatetimeRange}) info.AddField("UpdatedAt", "updated_at", db.Timestamp).FieldEditAble(editType.Datetime) info.AddActionButton(ctx, "google", action.Jump("https://google.com")) info.AddActionButton(ctx, "Audit", action.Ajax("/admin/audit", func(ctx *context.Context) (success bool, msg string, data interface{}) { fmt.Println("PostForm", ctx.PostForm()) return true, "success", "" })) info.AddActionButton(ctx, "Preview", action.PopUp("/admin/preview", "Preview", func(ctx *context.Context) (success bool, msg string, data interface{}) { return true, "", "

hello world

" })) info.AddButton(ctx, "jump", icon.User, action.JumpInNewTab("/admin/info/authors", "authors")) info.AddButton(ctx, "popup", icon.Terminal, action.PopUp("/admin/popup", "Popup Example", func(ctx *context.Context) (success bool, msg string, data interface{}) { return true, "", "

hello world

" })) info.AddButton(ctx, "iframe", icon.Tv, action.PopUpWithIframe("/admin/iframe", "Iframe Example", action.IframeData{Src: "/admin/info/authors"}, "900px", "560px")) info.AddButton(ctx, "form", icon.Folder, action.PopUpWithForm(action.PopUpData{ Id: "/admin/popup/form", Title: "Popup Form Example", Width: "900px", Height: "430px", }, func(panel *types.FormPanel) *types.FormPanel { panel.AddField("Name", "name", db.Varchar, form.Text) panel.AddField("Age", "age", db.Int, form.Number) panel.AddField("HomePage", "homepage", db.Varchar, form.Url).FieldDefault("http://google.com") panel.AddField("Email", "email", db.Varchar, form.Email).FieldDefault("xxxx@xxx.com") panel.AddField("Birthday", "birthday", db.Varchar, form.Date).FieldDefault("2010-09-03 18:09:05") panel.AddField("Time", "time", db.Varchar, form.Datetime).FieldDefault("2010-09-05") panel.EnableAjax("Request Success", "Request Failed") return panel }, "/admin/popup/form")) info.AddButton(ctx, "ajax", icon.Android, action.Ajax("/admin/ajax", func(ctx *context.Context) (success bool, msg string, data interface{}) { return true, "success", "" })) info.AddSelectBox(ctx, "gender", types.FieldOptions{ {Value: "0", Text: "men"}, {Value: "1", Text: "women"}, }, action.FieldFilter("gender")) info.SetTable("users").SetTitle("Users").SetDescription("Users") formList := userTable.GetForm() formList.AddField("ID", "id", db.Int, form.Default).FieldDisplayButCanNotEditWhenUpdate().FieldDisableWhenCreate() formList.AddField("Ip", "ip", db.Varchar, form.Text) formList.AddField("Name", "name", db.Varchar, form.Text) formList.AddField("Gender", "gender", db.Tinyint, form.Radio). FieldOptions(types.FieldOptions{ {Text: "men", Value: "0"}, {Text: "women", Value: "1"}, }) formList.AddField("Country", "country", db.Tinyint, form.SelectSingle). FieldOptions(types.FieldOptions{ {Text: "China", Value: "0"}, {Text: "America", Value: "1"}, {Text: "England", Value: "2"}, {Text: "Canada", Value: "3"}, }).FieldDefault("0").FieldOnChooseAjax("city", "/choose/country", func(ctx *context.Context) (bool, string, interface{}) { country := ctx.FormValue("value") var data = make(selection.Options, 0) switch country { case "0": data = selection.Options{ {Text: "Beijing", ID: "beijing"}, {Text: "ShangHai", ID: "shangHai"}, {Text: "GuangZhou", ID: "guangZhou"}, {Text: "ShenZhen", ID: "shenZhen"}, } case "1": data = selection.Options{ {Text: "Los Angeles", ID: "los angeles"}, {Text: "Washington, dc", ID: "washington, dc"}, {Text: "New York", ID: "new york"}, {Text: "Las Vegas", ID: "las vegas"}, } case "2": data = selection.Options{ {Text: "London", ID: "london"}, {Text: "Cambridge", ID: "cambridge"}, {Text: "Manchester", ID: "manchester"}, {Text: "Liverpool", ID: "liverpool"}, } case "3": data = selection.Options{ {Text: "Vancouver", ID: "vancouver"}, {Text: "Toronto", ID: "toronto"}, } default: data = selection.Options{ {Text: "Beijing", ID: "beijing"}, {Text: "ShangHai", ID: "shangHai"}, {Text: "GuangZhou", ID: "guangZhou"}, {Text: "ShenZhen", ID: "shenZhen"}, } } return true, "ok", data }, "", `'phone':$(".phone").val(),`) formList.AddField("Phone", "phone", db.Varchar, form.Custom). FieldCustomContent(` `) formList.AddField("City", "city", db.Varchar, form.SelectSingle). FieldOptionInitFn(func(val types.FieldModel) types.FieldOptions { return types.FieldOptions{ {Value: val.Value, Text: val.Value, Selected: true}, } }).FieldOptions(types.FieldOptions{ {Text: "Beijing", Value: "beijing"}, {Text: "ShangHai", Value: "shanghai"}, {Text: "GuangZhou", Value: "guangzhou"}, {Text: "ShenZhen", Value: "shenzhen"}, }) formList.AddField("Custom Field", "role", db.Varchar, form.Text). FieldPostFilterFn(func(value types.PostFieldModel) interface{} { fmt.Println("user custom field", value) return "" }) formList.AddField("UpdatedAt", "updated_at", db.Timestamp, form.Default).FieldDisableWhenCreate() formList.AddField("CreatedAt", "created_at", db.Timestamp, form.Datetime).FieldDisableWhenCreate() userTable.GetForm().SetTabGroups(types. NewTabGroups("id", "ip", "name", "gender", "country", "city"). AddGroup("phone", "role", "created_at", "updated_at")). SetTabHeaders("profile1", "profile2") formList.SetTable("users").SetTitle("Users").SetDescription("Users") formList.SetPostHook(func(values form2.Values) error { fmt.Println("userTable.GetForm().PostHook", values) return nil }) return }