diff --git a/admincli/cli.go b/admincli/cli.go index fffc318a8..e88d9f2e0 100644 --- a/admincli/cli.go +++ b/admincli/cli.go @@ -337,9 +337,10 @@ import ( "github.com/chenhg5/go-admin/plugins/admin/models" ) -func Get` + strings.Title(table) + `Table() (` + table + `Table models.Table) { +func Get` + strings.Title(table) + `Table() models.Table { - ` + table + `Table.Info.FieldList = []types.Field{` + ` + table + `Table := models.NewDefaultTable("` + driver + `", true, true, true) + ` + table + `Table.GetInfo().FieldList = []types.Field{` for _, model := range columnsModel { content += `{ @@ -355,11 +356,11 @@ func Get` + strings.Title(table) + `Table() (` + table + `Table models.Table) { content += `} - ` + table + `Table.Info.Table = "` + table + `" - ` + table + `Table.Info.Title = "` + strings.Title(table) + `" - ` + table + `Table.Info.Description = "` + strings.Title(table) + `" + ` + table + `Table.GetInfo().Table = "` + table + `" + ` + table + `Table.GetInfo().Title = "` + strings.Title(table) + `" + ` + table + `Table.GetInfo().Description = "` + strings.Title(table) + `" - ` + table + `Table.Form.FormList = []types.Form{` + ` + table + `Table.GetForm().FormList = []types.Form{` for _, model := range columnsModel { @@ -383,14 +384,12 @@ func Get` + strings.Title(table) + `Table() (` + table + `Table models.Table) { content += ` } - ` + table + `Table.Form.Table = "` + table + `" - ` + table + `Table.Form.Title = "` + strings.Title(table) + `" - ` + table + `Table.Form.Description = "` + strings.Title(table) + `" + ` + table + `Table.GetForm().Table = "` + table + `" + ` + table + `Table.GetForm().Title = "` + strings.Title(table) + `" + ` + table + `Table.GetForm().Description = "` + strings.Title(table) + `" - ` + table + `Table.Editable = true - ` + table + `Table.ConnectionDriver = "` + driver + `" - return + return ` + table + `Table }` err := ioutil.WriteFile(outputPath+"/"+table+".go", []byte(content), 0644) diff --git a/plugins/admin/controller/delete.go b/plugins/admin/controller/delete.go index d868dff7a..880de82c5 100644 --- a/plugins/admin/controller/delete.go +++ b/plugins/admin/controller/delete.go @@ -9,7 +9,7 @@ import ( func DeleteData(ctx *context.Context) { prefix := ctx.Query("prefix") - if !models.TableList[prefix].Deletable { + if !models.TableList[prefix].GetDeletable() { ctx.Html(http.StatusNotFound, "page not found") return } diff --git a/plugins/admin/controller/edit.go b/plugins/admin/controller/edit.go index 8bf511a7c..06c21c875 100644 --- a/plugins/admin/controller/edit.go +++ b/plugins/admin/controller/edit.go @@ -17,7 +17,7 @@ import ( func ShowForm(ctx *context.Context) { prefix := ctx.Query("prefix") - if !models.TableList[prefix].Editable { + if !models.TableList[prefix].GetEditable() { ctx.Html(http.StatusNotFound, "page not found") return } @@ -47,7 +47,7 @@ func ShowForm(ctx *context.Context) { // 编辑数据 func EditForm(ctx *context.Context) { prefix := ctx.Query("prefix") - if !models.TableList[prefix].Editable { + if !models.TableList[prefix].GetEditable() { ctx.Html(http.StatusNotFound, "page not found") return } @@ -75,6 +75,19 @@ func EditForm(ctx *context.Context) { } else if prefix == "roles" { // 管理员角色管理编辑 EditRole((*form).Value) } else { + val := (*form).Value + for _, f := range models.TableList[prefix].GetForm().FormList { + if f.Editable { + continue + } + if len(val[f.Field]) > 0 && f.Field != "id"{ + ctx.Json(http.StatusBadRequest, map[string]interface{}{ + "code": 400, + "msg": "字段[" + f.Field + "]不可编辑", + }) + return + } + } models.TableList[prefix].UpdateDataFromDatabase((*form).Value) } diff --git a/plugins/admin/controller/handler.go b/plugins/admin/controller/handler.go index cbf1d9e5a..1a557eae5 100644 --- a/plugins/admin/controller/handler.go +++ b/plugins/admin/controller/handler.go @@ -91,13 +91,13 @@ func GlobalDeferHandler(ctx *context.Context) { buf := template.Excecute(tmpl, tmplName, user, types.Panel{ Content: alert + template.Get(Config.THEME).Form(). SetPrefix(Config.PREFIX). - SetContent(models.GetNewFormList(models.TableList[prefix].Form.FormList)). + SetContent(models.GetNewFormList(models.TableList[prefix].GetForm().FormList)). SetUrl(Config.PREFIX+"/new/"+prefix). SetToken(auth.TokenHelper.AddToken()). SetInfoUrl(Config.PREFIX+"/info/"+prefix+queryParam). GetContent(), - Description: models.TableList[prefix].Form.Description, - Title: models.TableList[prefix].Form.Title, + Description: models.TableList[prefix].GetForm().Description, + Title: models.TableList[prefix].GetForm().Title, }, Config, menu.GetGlobalMenu(user).SetActiveClass(strings.Replace(ctx.Path(), Config.PREFIX, "", 1))) ctx.Html(http.StatusOK, buf.String()) ctx.AddHeader("X-PJAX-URL", Config.PREFIX+"/info/"+prefix+"/new"+queryParam) diff --git a/plugins/admin/controller/menu.go b/plugins/admin/controller/menu.go index f7786a7bc..14399aaf5 100644 --- a/plugins/admin/controller/menu.go +++ b/plugins/admin/controller/menu.go @@ -207,7 +207,7 @@ func GetMenuInfoPanel(ctx *context.Context) { SetUrl(Config.PREFIX + "/menu/new"). SetInfoUrl(Config.PREFIX + "/menu"). SetTitle("New"). - SetContent(models.GetNewFormList(models.TableList["menu"].Form.FormList)). + SetContent(models.GetNewFormList(models.TableList["menu"].GetForm().FormList)). GetContent() col2 := template.Get(Config.THEME).Col().SetSize(map[string]string{"md": "6"}).SetContent(newForm).GetContent() diff --git a/plugins/admin/controller/new.go b/plugins/admin/controller/new.go index 240740a13..0816d99ca 100644 --- a/plugins/admin/controller/new.go +++ b/plugins/admin/controller/new.go @@ -15,7 +15,7 @@ import ( // 显示新建表单 func ShowNewForm(ctx *context.Context) { prefix := ctx.Query("prefix") - if !models.TableList[prefix].CanAdd { + if !models.TableList[prefix].GetCanAdd() { ctx.Html(http.StatusNotFound, "page not found") return } @@ -23,18 +23,22 @@ func ShowNewForm(ctx *context.Context) { user := auth.Auth(ctx) + formList := models.GetNewFormList(models.TableList[prefix].GetForm().FormList) + for i := 0; i < len(formList); i++ { + formList[i].Editable = true + } tmpl, tmplName := template.Get(Config.THEME).GetTemplate(ctx.Headers("X-PJAX") == "true") buf := template.Excecute(tmpl, tmplName, user, types.Panel{ Content: template.Get(Config.THEME).Form(). SetPrefix(Config.PREFIX). - SetContent(models.GetNewFormList(models.TableList[prefix].Form.FormList)). + SetContent(formList). SetUrl(Config.PREFIX + "/new/" + prefix). SetToken(auth.TokenHelper.AddToken()). SetTitle("New"). SetInfoUrl(Config.PREFIX + "/info/" + prefix + params.GetRouteParamStr()). GetContent(), - Description: models.TableList[prefix].Form.Description, - Title: models.TableList[prefix].Form.Title, + Description: models.TableList[prefix].GetForm().Description, + Title: models.TableList[prefix].GetForm().Title, }, Config, menu.GetGlobalMenu(user).SetActiveClass(strings.Replace(ctx.Path(), Config.PREFIX, "", 1))) ctx.Html(http.StatusOK, buf.String()) } @@ -42,7 +46,7 @@ func ShowNewForm(ctx *context.Context) { // 新建数据 func NewForm(ctx *context.Context) { prefix := ctx.Query("prefix") - if !models.TableList[prefix].CanAdd { + if !models.TableList[prefix].GetCanAdd() { ctx.Html(http.StatusNotFound, "page not found") return } diff --git a/plugins/admin/models/generators.go b/plugins/admin/models/generators.go index 8cc81c2a9..05c51407e 100644 --- a/plugins/admin/models/generators.go +++ b/plugins/admin/models/generators.go @@ -12,8 +12,8 @@ import ( ) func GetManagerTable() (ManagerTable Table) { - - ManagerTable.Info.FieldList = []types.Field{ + ManagerTable = NewDefaultTable(config.Get().DATABASE[0].DRIVER, true, true, true) + ManagerTable.GetInfo().FieldList = []types.Field{ { Head: "ID", Field: "id", @@ -76,9 +76,9 @@ func GetManagerTable() (ManagerTable Table) { }, } - ManagerTable.Info.Table = "goadmin_users" - ManagerTable.Info.Title = language.Get("Managers") - ManagerTable.Info.Description = language.Get("Managers") + ManagerTable.GetInfo().Table = "goadmin_users" + ManagerTable.GetInfo().Title = language.Get("Managers") + ManagerTable.GetInfo().Description = language.Get("Managers") var roles, permissions []map[string]string rolesModel, _ := db.Table("goadmin_roles").Select("id", "slug").Where("id", ">", 0).All() @@ -97,7 +97,7 @@ func GetManagerTable() (ManagerTable Table) { }) } - ManagerTable.Form.FormList = []types.Form{ + ManagerTable.GetForm().FormList = []types.Form{ { Head: "ID", Field: "id", @@ -203,18 +203,16 @@ func GetManagerTable() (ManagerTable Table) { }, } - ManagerTable.Form.Table = "goadmin_users" - ManagerTable.Form.Title = language.Get("Managers") - ManagerTable.Form.Description = language.Get("Managers") - - ManagerTable.ConnectionDriver = config.Get().DATABASE[0].DRIVER + ManagerTable.GetForm().Table = "goadmin_users" + ManagerTable.GetForm().Title = language.Get("Managers") + ManagerTable.GetForm().Description = language.Get("Managers") return } func GetPermissionTable() (PermissionTable Table) { - - PermissionTable.Info.FieldList = []types.Field{ + PermissionTable = NewDefaultTable(config.Get().DATABASE[0].DRIVER, true, true, true) + PermissionTable.GetInfo().FieldList = []types.Field{ { Head: "ID", Field: "id", @@ -280,11 +278,11 @@ func GetPermissionTable() (PermissionTable Table) { }, } - PermissionTable.Info.Table = "goadmin_permissions" - PermissionTable.Info.Title = language.Get("Permission Manage") - PermissionTable.Info.Description = language.Get("Permission Manage") + PermissionTable.GetInfo().Table = "goadmin_permissions" + PermissionTable.GetInfo().Title = language.Get("Permission Manage") + PermissionTable.GetInfo().Description = language.Get("Permission Manage") - PermissionTable.Form.FormList = []types.Form{ + PermissionTable.GetForm().FormList = []types.Form{ { Head: "ID", Field: "id", @@ -367,17 +365,16 @@ func GetPermissionTable() (PermissionTable Table) { }, } - PermissionTable.Form.Table = "goadmin_permissions" - PermissionTable.Form.Title = language.Get("Permission Manage") - PermissionTable.Form.Description = language.Get("Permission Manage") + PermissionTable.GetForm().Table = "goadmin_permissions" + PermissionTable.GetForm().Title = language.Get("Permission Manage") + PermissionTable.GetForm().Description = language.Get("Permission Manage") - PermissionTable.ConnectionDriver = config.Get().DATABASE[0].DRIVER return } func GetRolesTable() (RolesTable Table) { - + RolesTable = NewDefaultTable(config.Get().DATABASE[0].DRIVER, true, true, true) var permissions []map[string]string permissionsModel, _ := db.Table("goadmin_permissions").Select("id", "slug").Where("id", ">", 0).All() @@ -388,7 +385,7 @@ func GetRolesTable() (RolesTable Table) { }) } - RolesTable.Info.FieldList = []types.Field{ + RolesTable.GetInfo().FieldList = []types.Field{ { Head: "ID", Field: "id", @@ -436,11 +433,11 @@ func GetRolesTable() (RolesTable Table) { }, } - RolesTable.Info.Table = "goadmin_roles" - RolesTable.Info.Title = language.Get("Roles Manage") - RolesTable.Info.Description = language.Get("Roles Manage") + RolesTable.GetInfo().Table = "goadmin_roles" + RolesTable.GetInfo().Title = language.Get("Roles Manage") + RolesTable.GetInfo().Description = language.Get("Roles Manage") - RolesTable.Form.FormList = []types.Form{ + RolesTable.GetForm().FormList = []types.Form{ { Head: "ID", Field: "id", @@ -513,18 +510,17 @@ func GetRolesTable() (RolesTable Table) { }, } - RolesTable.Form.Table = "goadmin_roles" - RolesTable.Form.Title = language.Get("Roles Manage") - RolesTable.Form.Description = language.Get("Roles Manage") + RolesTable.GetForm().Table = "goadmin_roles" + RolesTable.GetForm().Title = language.Get("Roles Manage") + RolesTable.GetForm().Description = language.Get("Roles Manage") - RolesTable.ConnectionDriver = config.Get().DATABASE[0].DRIVER return } func GetOpTable() (OpTable Table) { - - OpTable.Info.FieldList = []types.Field{ + OpTable = NewDefaultTable(config.Get().DATABASE[0].DRIVER, true, true, true) + OpTable.GetInfo().FieldList = []types.Field{ { Head: "ID", Field: "id", @@ -599,11 +595,11 @@ func GetOpTable() (OpTable Table) { }, } - OpTable.Info.Table = "goadmin_operation_log" - OpTable.Info.Title = language.Get("operation log") - OpTable.Info.Description = language.Get("operation log") + OpTable.GetInfo().Table = "goadmin_operation_log" + OpTable.GetInfo().Title = language.Get("operation log") + OpTable.GetInfo().Description = language.Get("operation log") - OpTable.Form.FormList = []types.Form{ + OpTable.GetForm().FormList = []types.Form{ { Head: "ID", Field: "id", @@ -687,18 +683,17 @@ func GetOpTable() (OpTable Table) { }, } - OpTable.Form.Table = "goadmin_operation_log" - OpTable.Form.Title = language.Get("operation log") - OpTable.Form.Description = language.Get("operation log") + OpTable.GetForm().Table = "goadmin_operation_log" + OpTable.GetForm().Title = language.Get("operation log") + OpTable.GetForm().Description = language.Get("operation log") - OpTable.ConnectionDriver = config.Get().DATABASE[0].DRIVER return } func GetMenuTable() (MenuTable Table) { - - MenuTable.Info.FieldList = []types.Field{ + MenuTable = NewDefaultTable(config.Get().DATABASE[0].DRIVER, true, true, true) + MenuTable.GetInfo().FieldList = []types.Field{ { Head: "ID", Field: "id", @@ -773,9 +768,9 @@ func GetMenuTable() (MenuTable Table) { }, } - MenuTable.Info.Table = "goadmin_menu" - MenuTable.Info.Title = language.Get("Menus Manage") - MenuTable.Info.Description = language.Get("Menus Manage") + MenuTable.GetInfo().Table = "goadmin_menu" + MenuTable.GetInfo().Title = language.Get("Menus Manage") + MenuTable.GetInfo().Description = language.Get("Menus Manage") var roles, parents []map[string]string rolesModel, _ := db.Table("goadmin_roles").Select("id", "slug").Where("id", ">", 0).All() @@ -804,7 +799,7 @@ func GetMenuTable() (MenuTable Table) { "value": "0", }}, parents...) - MenuTable.Form.FormList = []types.Form{ + MenuTable.GetForm().FormList = []types.Form{ { Head: "ID", Field: "id", @@ -902,11 +897,10 @@ func GetMenuTable() (MenuTable Table) { }, } - MenuTable.Form.Table = "goadmin_menu" - MenuTable.Form.Title = language.Get("Menus Manage") - MenuTable.Form.Description = language.Get("Menus Manage") + MenuTable.GetForm().Table = "goadmin_menu" + MenuTable.GetForm().Title = language.Get("Menus Manage") + MenuTable.GetForm().Description = language.Get("Menus Manage") - MenuTable.ConnectionDriver = config.Get().DATABASE[0].DRIVER return } diff --git a/plugins/admin/models/table.go b/plugins/admin/models/table.go index 6ec91bd3f..6798c1ea2 100644 --- a/plugins/admin/models/table.go +++ b/plugins/admin/models/table.go @@ -38,13 +38,27 @@ func SetGenerators(generators map[string]TableGenerator) { } } -type Table struct { - Info types.InfoPanel - Form types.FormPanel - ConnectionDriver string - CanAdd bool - Editable bool - Deletable bool +type Table interface { + GetInfo() *types.InfoPanel + GetForm() *types.FormPanel + GetCanAdd() bool + GetEditable() bool + GetDeletable() bool + GetFiltersMap() []map[string]string + GetDataFromDatabase(path string, params *Parameters) PanelInfo + GetDataFromDatabaseWithId(id string) ([]types.Form, string, string) + UpdateDataFromDatabase(dataList map[string][]string) + InsertDataFromDatabase(dataList map[string][]string) + DeleteDataFromDatabase(id string) +} + +type DefaultTable struct { + info *types.InfoPanel + form *types.FormPanel + connectionDriver string + canAdd bool + editable bool + deletable bool } type PanelInfo struct { @@ -58,9 +72,41 @@ type PanelInfo struct { Deletable bool } -func (tb Table) GetFiltersMap() []map[string]string { +func NewDefaultTable(connectionDriver string, canAdd, editable, deletable bool) Table { + tb := &DefaultTable{ + info: &types.InfoPanel{}, + form: &types.FormPanel{}, + connectionDriver: connectionDriver, + canAdd: canAdd, + editable: editable, + deletable: deletable, + } + return tb +} + +func (tb DefaultTable) GetInfo() *types.InfoPanel { + return tb.info +} + +func (tb DefaultTable) GetForm() *types.FormPanel { + return tb.form +} + +func (tb DefaultTable) GetCanAdd() bool { + return tb.canAdd +} + +func (tb DefaultTable) GetEditable() bool { + return tb.editable +} + +func (tb DefaultTable) GetDeletable() bool { + return tb.deletable +} + +func (tb DefaultTable) GetFiltersMap() []map[string]string { var filters = make([]map[string]string, 0) - for _, value := range tb.Info.FieldList { + for _, value := range tb.info.FieldList { if value.Filter { filters = append(filters, map[string]string{ "title": value.Head, @@ -78,33 +124,36 @@ func (tb Table) GetFiltersMap() []map[string]string { } // GetDataFromDatabase query the data set. -func (tb Table) GetDataFromDatabase(path string, params *Parameters) PanelInfo { +func (tb DefaultTable) GetDataFromDatabase(path string, params *Parameters) PanelInfo { pageInt, _ := strconv.Atoi(params.Page) - title := tb.Info.Title - description := tb.Info.Description + title := tb.info.Title + description := tb.info.Description thead := make([]map[string]string, 0) fields := "" - columnsModel, _ := db.WithDriver(tb.ConnectionDriver).Table(tb.Info.Table).ShowColumns() + columnsModel, _ := db.WithDriver(tb.connectionDriver).Table(tb.info.Table).ShowColumns() - columns := GetColumns(columnsModel, tb.ConnectionDriver) + columns := GetColumns(columnsModel, tb.connectionDriver) var sortable string - for i := 0; i < len(tb.Info.FieldList); i++ { - if tb.Info.FieldList[i].Field != "id" && CheckInTable(columns, tb.Info.FieldList[i].Field) { - fields += tb.Info.FieldList[i].Field + "," + for i := 0; i < len(tb.info.FieldList); i++ { + if tb.info.FieldList[i].Field != "id" && CheckInTable(columns, tb.info.FieldList[i].Field) { + fields += tb.info.FieldList[i].Field + "," + } + if tb.info.FieldList[i].Hide { + continue } sortable = "0" - if tb.Info.FieldList[i].Sortable { + if tb.info.FieldList[i].Sortable { sortable = "1" } thead = append(thead, map[string]string{ - "head": tb.Info.FieldList[i].Head, + "head": tb.info.FieldList[i].Head, "sortable": sortable, - "field": tb.Info.FieldList[i].Field, + "field": tb.info.FieldList[i].Field, }) } @@ -129,7 +178,7 @@ func (tb Table) GetDataFromDatabase(path string, params *Parameters) PanelInfo { // TODO: add left join table relations - res, _ := tb.db().Query("select "+fields+" from "+tb.Info.Table+wheres+" order by "+params.SortField+" "+ + res, _ := tb.db().Query("select "+fields+" from "+tb.info.Table+wheres+" order by "+params.SortField+" "+ params.SortType+" LIMIT ? OFFSET ?", args...) infoList := make([]map[string]template.HTML, 0) @@ -139,17 +188,23 @@ func (tb Table) GetDataFromDatabase(path string, params *Parameters) PanelInfo { // TODO: add object pool tempModelData := make(map[string]template.HTML, 0) + row := res[i] - for j := 0; j < len(tb.Info.FieldList); j++ { - if CheckInTable(columns, tb.Info.FieldList[j].Field) { - tempModelData[tb.Info.FieldList[j].Head] = template.HTML(tb.Info.FieldList[j].ExcuFun(types.RowModel{ - ID: res[i]["id"].(int64), - Value: GetStringFromType(tb.Info.FieldList[j].TypeName, res[i][tb.Info.FieldList[j].Field]), + for j := 0; j < len(tb.info.FieldList); j++ { + if tb.info.FieldList[j].Hide { + continue + } + if CheckInTable(columns, tb.info.FieldList[j].Field) { + tempModelData[tb.info.FieldList[j].Head] = template.HTML(tb.info.FieldList[j].ExcuFun(types.RowModel{ + ID: row["id"].(int64), + Value: GetStringFromType(tb.info.FieldList[j].TypeName, row[tb.info.FieldList[j].Field]), + Row: row, }).(string)) } else { - tempModelData[tb.Info.FieldList[j].Head] = template.HTML(tb.Info.FieldList[j].ExcuFun(types.RowModel{ - ID: res[i]["id"].(int64), + tempModelData[tb.info.FieldList[j].Head] = template.HTML(tb.info.FieldList[j].ExcuFun(types.RowModel{ + ID: row["id"].(int64), Value: "", + Row: row, }).(string)) } } @@ -161,11 +216,11 @@ func (tb Table) GetDataFromDatabase(path string, params *Parameters) PanelInfo { // TODO: use the dialect - total, _ := tb.db().Query("select count(*) from "+tb.Info.Table+wheres, whereArgs...) + total, _ := tb.db().Query("select count(*) from "+tb.info.Table+wheres, whereArgs...) var size int - if tb.ConnectionDriver == "sqlite" { + if tb.connectionDriver == "sqlite" { size = int(total[0]["count(*)"].(int64)) - } else if tb.ConnectionDriver == "postgresql" { + } else if tb.connectionDriver == "postgresql" { size = int(total[0]["count"].(int64)) } else { size = int(total[0]["count(*)"].(int64)) @@ -179,95 +234,99 @@ func (tb Table) GetDataFromDatabase(path string, params *Parameters) PanelInfo { Paginator: paginator, Title: title, Description: description, - CanAdd: tb.CanAdd, - Editable: tb.Editable, - Deletable: tb.Deletable, + CanAdd: tb.canAdd, + Editable: tb.editable, + Deletable: tb.deletable, } } // GetDataFromDatabaseWithId query the single row of data. -func (tb Table) GetDataFromDatabaseWithId(id string) ([]types.Form, string, string) { +func (tb DefaultTable) GetDataFromDatabaseWithId(id string) ([]types.Form, string, string) { fields := make([]string, 0) - columnsModel, _ := db.WithDriver(tb.ConnectionDriver).Table(tb.Form.Table).ShowColumns() - columns := GetColumns(columnsModel, tb.ConnectionDriver) + columnsModel, _ := db.WithDriver(tb.connectionDriver).Table(tb.form.Table).ShowColumns() + columns := GetColumns(columnsModel, tb.connectionDriver) - for i := 0; i < len(tb.Form.FormList); i++ { - if CheckInTable(columns, tb.Form.FormList[i].Field) { - fields = append(fields, tb.Form.FormList[i].Field) + for i := 0; i < len(tb.form.FormList); i++ { + if CheckInTable(columns, tb.form.FormList[i].Field) { + fields = append(fields, tb.form.FormList[i].Field) } } - res, _ := db.WithDriver(tb.ConnectionDriver). - Table(tb.Form.Table).Select(fields...). + res, _ := db.WithDriver(tb.connectionDriver). + Table(tb.form.Table).Select(fields...). Where("id", "=", id). First() idint64, _ := strconv.ParseInt(id, 10, 64) - for i := 0; i < len(tb.Form.FormList); i++ { - if CheckInTable(columns, tb.Form.FormList[i].Field) { - if tb.Form.FormList[i].FormType == "select" || tb.Form.FormList[i].FormType == "selectbox" || tb.Form.FormList[i].FormType == "select_single" { - valueArr := tb.Form.FormList[i].ExcuFun(types.RowModel{ + for i := 0; i < len(tb.form.FormList); i++ { + if CheckInTable(columns, tb.form.FormList[i].Field) { + if tb.form.FormList[i].FormType == "select" || tb.form.FormList[i].FormType == "selectbox" || tb.form.FormList[i].FormType == "select_single" { + valueArr := tb.form.FormList[i].ExcuFun(types.RowModel{ ID: idint64, - Value: GetStringFromType(tb.Form.FormList[i].TypeName, res[tb.Form.FormList[i].Field]), + Value: GetStringFromType(tb.form.FormList[i].TypeName, res[tb.form.FormList[i].Field]), + Row: res, }).([]string) - for _, v := range tb.Form.FormList[i].Options { + for _, v := range tb.form.FormList[i].Options { if modules.InArray(valueArr, v["value"]) { v["selected"] = "selected" } } } else { - tb.Form.FormList[i].Value = tb.Form.FormList[i].ExcuFun(types.RowModel{ + tb.form.FormList[i].Value = tb.form.FormList[i].ExcuFun(types.RowModel{ ID: idint64, - Value: GetStringFromType(tb.Form.FormList[i].TypeName, res[tb.Form.FormList[i].Field]), + Value: GetStringFromType(tb.form.FormList[i].TypeName, res[tb.form.FormList[i].Field]), + Row: res, }).(string) } } else { - if tb.Form.FormList[i].FormType == "select" || tb.Form.FormList[i].FormType == "selectbox" { - valueArr := tb.Form.FormList[i].ExcuFun(types.RowModel{ + if tb.form.FormList[i].FormType == "select" || tb.form.FormList[i].FormType == "selectbox" { + valueArr := tb.form.FormList[i].ExcuFun(types.RowModel{ ID: idint64, - Value: GetStringFromType(tb.Form.FormList[i].TypeName, res[tb.Form.FormList[i].Field]), + Value: GetStringFromType(tb.form.FormList[i].TypeName, res[tb.form.FormList[i].Field]), + Row: res, }).([]string) - for _, v := range tb.Form.FormList[i].Options { + for _, v := range tb.form.FormList[i].Options { if modules.InArray(valueArr, v["value"]) { v["selected"] = "selected" } } } else { - tb.Form.FormList[i].Value = tb.Form.FormList[i].ExcuFun(types.RowModel{ + tb.form.FormList[i].Value = tb.form.FormList[i].ExcuFun(types.RowModel{ ID: idint64, - Value: tb.Form.FormList[i].Field, + Value: tb.form.FormList[i].Field, + Row: res, }).(string) } } } - return tb.Form.FormList, tb.Form.Title, tb.Form.Description + return tb.form.FormList, tb.form.Title, tb.form.Description } // UpdateDataFromDatabase update data. -func (tb Table) UpdateDataFromDatabase(dataList map[string][]string) { - _, _ = db.WithDriver(tb.ConnectionDriver). - Table(tb.Form.Table). +func (tb DefaultTable) UpdateDataFromDatabase(dataList map[string][]string) { + _, _ = db.WithDriver(tb.connectionDriver). + Table(tb.form.Table). Where("id", "=", dataList["id"][0]). Update(tb.getValues(dataList)) } // InsertDataFromDatabase insert data. -func (tb Table) InsertDataFromDatabase(dataList map[string][]string) { - _, _ = db.WithDriver(tb.ConnectionDriver). - Table(tb.Form.Table). +func (tb DefaultTable) InsertDataFromDatabase(dataList map[string][]string) { + _, _ = db.WithDriver(tb.connectionDriver). + Table(tb.form.Table). Insert(tb.getValues(dataList)) } -func (tb Table) getValues(dataList map[string][]string) dialect.H { +func (tb DefaultTable) getValues(dataList map[string][]string) dialect.H { value := make(dialect.H, 0) - columnsModel, _ := db.WithDriver(tb.ConnectionDriver).Table(tb.Form.Table).ShowColumns() + columnsModel, _ := db.WithDriver(tb.connectionDriver).Table(tb.form.Table).ShowColumns() var id = int64(0) if idArr, ok := dataList["id"]; ok { @@ -275,13 +334,13 @@ func (tb Table) getValues(dataList map[string][]string) dialect.H { id = int64(idInt) } - columns := GetColumns(columnsModel, tb.ConnectionDriver) + columns := GetColumns(columnsModel, tb.connectionDriver) var fun types.FieldValueFun for k, v := range dataList { if k != "id" && k != "_previous_" && k != "_method" && k != "_t" && CheckInTable(columns, k) { - for i := 0; i < len(tb.Form.FormList); i++ { - if k == tb.Form.FormList[i].Field { - fun = tb.Form.FormList[i].PostFun + for i := 0; i < len(tb.form.FormList); i++ { + if k == tb.form.FormList[i].Field { + fun = tb.form.FormList[i].PostFun } } if len(v) > 0 { @@ -309,39 +368,39 @@ func (tb Table) getValues(dataList map[string][]string) dialect.H { } // DeleteDataFromDatabase delete data. -func (tb Table) DeleteDataFromDatabase(id string) { +func (tb DefaultTable) DeleteDataFromDatabase(id string) { idArr := strings.Split(id, ",") for _, id := range idArr { - tb.delete(tb.Form.Table, "id", id) + tb.delete(tb.form.Table, "id", id) } - if tb.Form.Table == "goadmin_roles" { + if tb.form.Table == "goadmin_roles" { tb.delete("goadmin_role_users", "role_id", id) tb.delete("goadmin_role_permissions", "role_id", id) tb.delete("goadmin_role_menu", "role_id", id) } - if tb.Form.Table == "goadmin_users" { + if tb.form.Table == "goadmin_users" { tb.delete("goadmin_role_users", "user_id", id) tb.delete("goadmin_user_permissions", "user_id", id) } - if tb.Form.Table == "goadmin_permissions" { + if tb.form.Table == "goadmin_permissions" { tb.delete("goadmin_role_permissions", "permission_id", id) tb.delete("goadmin_user_permissions", "permission_id", id) } - if tb.Form.Table == "goadmin_menu" { + if tb.form.Table == "goadmin_menu" { tb.delete("goadmin_role_menu", "menu_id", id) } } -func (tb Table) delete(table, key, id string) { - _ = db.WithDriver(tb.ConnectionDriver). +func (tb DefaultTable) delete(table, key, id string) { + _ = db.WithDriver(tb.connectionDriver). Table(table). Where(key, "=", id). Delete() } // db is a helper function return db connection. -func (tb Table) db() db.Connection { - return db.GetConnectionByDriver(tb.ConnectionDriver) +func (tb DefaultTable) db() db.Connection { + return db.GetConnectionByDriver(tb.connectionDriver) } func GetNewFormList(old []types.Form) []types.Form { diff --git a/template/adminlte/resource/pages/components/form/password.tmpl b/template/adminlte/resource/pages/components/form/password.tmpl index cf045aa1a..3cb1a4b58 100644 --- a/template/adminlte/resource/pages/components/form/password.tmpl +++ b/template/adminlte/resource/pages/components/form/password.tmpl @@ -1,9 +1,15 @@ {{define "form_password"}}
-
- - -
+ {{if .Editable}} +
+ + +
+ {{else}} +
+
********
+
+ {{end}}
{{end}} \ No newline at end of file diff --git a/template/adminlte/resource/pages/components/form/richtext.tmpl b/template/adminlte/resource/pages/components/form/richtext.tmpl index 58137a6f4..a6b19405e 100644 --- a/template/adminlte/resource/pages/components/form/richtext.tmpl +++ b/template/adminlte/resource/pages/components/form/richtext.tmpl @@ -13,5 +13,8 @@ }; editor.create(); editor.txt.html('{{.Value}}'); + {{if not .Editable}} + editor.$textElem.attr('contenteditable', false); + {{end}} {{end}} \ No newline at end of file diff --git a/template/adminlte/resource/pages/components/form/select.tmpl b/template/adminlte/resource/pages/components/form/select.tmpl index cbc7113e4..62ede375f 100644 --- a/template/adminlte/resource/pages/components/form/select.tmpl +++ b/template/adminlte/resource/pages/components/form/select.tmpl @@ -1,7 +1,7 @@ {{define "form_select"}}
- {{range $key, $v := .Options }} {{end}} diff --git a/template/adminlte/resource/pages/components/form/selectbox.tmpl b/template/adminlte/resource/pages/components/form/selectbox.tmpl index a8c995ffc..50a21aa7b 100644 --- a/template/adminlte/resource/pages/components/form/selectbox.tmpl +++ b/template/adminlte/resource/pages/components/form/selectbox.tmpl @@ -1,7 +1,7 @@ {{define "form_selectbox"}}
- {{range $key, $v := .Options }} {{end}} diff --git a/template/adminlte/resource/pages/components/form/singleselect.tmpl b/template/adminlte/resource/pages/components/form/singleselect.tmpl index 0829ce0be..5ebf9d8f9 100644 --- a/template/adminlte/resource/pages/components/form/singleselect.tmpl +++ b/template/adminlte/resource/pages/components/form/singleselect.tmpl @@ -1,7 +1,7 @@ {{define "form_select_single"}}
- {{range $key, $v := .Options }} {{end}} diff --git a/template/adminlte/resource/pages/components/form/text.tmpl b/template/adminlte/resource/pages/components/form/text.tmpl index 18370638f..636bee171 100644 --- a/template/adminlte/resource/pages/components/form/text.tmpl +++ b/template/adminlte/resource/pages/components/form/text.tmpl @@ -1,9 +1,15 @@ {{define "form_text"}}
-
- - -
+ {{if .Editable}} +
+ + +
+ {{else}} +
+
{{.Value}}
+
+ {{end}}
{{end}} \ No newline at end of file diff --git a/template/adminlte/resource/pages/components/form/textarea.tmpl b/template/adminlte/resource/pages/components/form/textarea.tmpl index 0db1baa75..9ddfebf8b 100644 --- a/template/adminlte/resource/pages/components/form/textarea.tmpl +++ b/template/adminlte/resource/pages/components/form/textarea.tmpl @@ -1,6 +1,6 @@ {{define "form_textarea"}}
- +
{{end}} \ No newline at end of file diff --git a/template/adminlte/resource/pages/components/table.tmpl b/template/adminlte/resource/pages/components/table.tmpl index c3ecf4e6a..7c0dfa010 100644 --- a/template/adminlte/resource/pages/components/table.tmpl +++ b/template/adminlte/resource/pages/components/table.tmpl @@ -37,7 +37,9 @@ {{if eq $Type "data-table"}} + {{if .DeleteUrl}} + {{end}} {{end}} {{range $key2, $head2 := $Thead}} @@ -45,8 +47,10 @@ {{end}} {{if eq $Type "data-table"}} + {{if $EditUrl}} + {{end}} {{end}} @@ -109,8 +113,9 @@ }, success: function (data) { $.pjax.reload('#pjax-container'); - - data = JSON.parse(data); + if(typeof(data) === "string"){ + data = JSON.parse(data); + } if (data.code === 200) { $('#_TOKEN').val(data.data); swal(data.msg, '', 'success'); diff --git a/template/adminlte/resource/pages/components/table/box-header.tmpl b/template/adminlte/resource/pages/components/table/box-header.tmpl index 80d992e66..4c78e5fb6 100644 --- a/template/adminlte/resource/pages/components/table/box-header.tmpl +++ b/template/adminlte/resource/pages/components/table/box-header.tmpl @@ -67,14 +67,15 @@ -->
+ {{if .DeleteUrl}} + {{end}} {{lang "Refresh"}} diff --git a/template/adminlte/tmpl/template.go b/template/adminlte/tmpl/template.go index 2e0256fd4..13719e329 100644 --- a/template/adminlte/tmpl/template.go +++ b/template/adminlte/tmpl/template.go @@ -2443,10 +2443,16 @@ var List = map[string]string{"admin_panel": `{{define "admin_panel"}} {{end}}`, "components/form/password": `{{define "form_password"}}
-
- - -
+ {{if .Editable}} +
+ + +
+ {{else}} +
+
********
+
+ {{end}}
{{end}}`, "components/form/richtext": `{{define "form_rich_text"}} @@ -2463,11 +2469,14 @@ var List = map[string]string{"admin_panel": `{{define "admin_panel"}} }; editor.create(); editor.txt.html('{{.Value}}'); + {{if not .Editable}} + editor.$textElem.attr('contenteditable', false); + {{end}} {{end}}`, "components/form/select": `{{define "form_select"}}
- {{range $key, $v := .Options }} {{end}} @@ -2484,7 +2493,7 @@ var List = map[string]string{"admin_panel": `{{define "admin_panel"}} {{end}}`, "components/form/selectbox": `{{define "form_selectbox"}}
- {{range $key, $v := .Options }} {{end}} @@ -2497,7 +2506,7 @@ var List = map[string]string{"admin_panel": `{{define "admin_panel"}} {{end}}`, "components/form/singleselect": `{{define "form_select_single"}}
- {{range $key, $v := .Options }} {{end}} @@ -2515,15 +2524,21 @@ var List = map[string]string{"admin_panel": `{{define "admin_panel"}} {{end}}`, "components/form/text": `{{define "form_text"}}
-
- - -
+ {{if .Editable}} +
+ + +
+ {{else}} +
+
{{.Value}}
+
+ {{end}}
{{end}}`, "components/form/textarea": `{{define "form_textarea"}}
- +
{{end}}`, "components/form": `{{define "form"}} diff --git a/template/types/types.go b/template/types/types.go index e418c504e..c05213c95 100644 --- a/template/types/types.go +++ b/template/types/types.go @@ -79,6 +79,7 @@ type Form struct { type RowModel struct { ID int64 Value string + Row map[string]interface{} } // FieldValueFun is filter function of data. @@ -93,6 +94,7 @@ type Field struct { JoinTable []Join Sortable bool Filter bool + Hide bool } type Join struct {