基本使用


使用命令行将sql表生成一个数据表格类型,如:

  1. CREATE TABLE `users` (
  2. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  3. `name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  4. `gender` tinyint(4) DEFAULT NULL,
  5. `city` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  6. `ip` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  7. `phone` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  8. `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  9. `updated_at` timestamp NULL DEFAULT NULL,
  10. PRIMARY KEY (`id`)
  11. ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

生成了:

  1. package datamodel
  2. import (
  3. ...
  4. )
  5. func GetUserTable() (userTable table.Table) {
  6. // config the table model.
  7. userTable = table.NewDefaultTable(table.Config{...})
  8. info := userTable.GetInfo()
  9. // set id sortable.
  10. info.AddField("ID", "id", db.Int).FieldSortable(true)
  11. info.AddField("Name", "name", db.Varchar)
  12. ...
  13. // set the title and description of table page.
  14. info.SetTable("users").SetTitle("Users").SetDescription("Users").
  15. SetAction(template.HTML(`<a href="http://google.com"><i class="fa fa-google"></i></a>`)) // custom operation button
  16. ...
  17. }

添加列

  1. // 添加一个字段,字段标题为 ID,字段名为 id,字段类型为 int
  2. info.AddField("ID", "id", db.Int)
  3. // 添加第二个字段,字段标题为 Name,字段名为 name,字段类型为 varchar
  4. info.AddField("Name", "name", db.Varchar)
  5. // 添加第三个字段,一个sql表不存在的字段
  6. info.AddField("Custom", "custom", db.Varchar)

修改显示输出

  1. // 根据字段的值输出对应的内容
  2. info.AddField("Gender", "gender", db.Tinyint).FieldDisplay(func(model types.FieldModel) interface{} {
  3. if model.Value == "0" {
  4. return "men"
  5. }
  6. if model.Value == "1" {
  7. return "women"
  8. }
  9. return "unknown"
  10. })
  11. // 输出html
  12. info.AddField("Name", "name", db.Varchar).FieldDisplay(func(model types.FieldModel) interface{} {
  13. return "<span class='label'>" + model.Value + "</span>"
  14. })

FieldDisplay方法接收的匿名函数绑定了当前行的数据对象,可以在里面调用当前行的其它字段数据

  1. info.AddField("First Name", "first_name", db.Varchar).FieldHide()
  2. info.AddField("Last Name", "last_name", db.Varchar).FieldHide()
  3. // 不存的字段列
  4. info.AddField("Full Name", "full_name", db.Varchar).FieldDisplay(func(model types.FieldModel) interface{} {
  5. return model.Row["first_name"].(string) + " " + model.Row["last_name"].(string)
  6. })

禁用创建按钮

  1. info.HideNewButton()

禁用编辑按钮

  1. info.HideEditButton()

禁用导出按钮

  1. info.HideExportButton()

禁用删除按钮

  1. info.HideDeleteButton()

默认隐藏筛选框

  1. info.HideFilterArea()

预查询

  1. // 字段, 操作符, 参数
  2. info.Where("type", "=", 0)

设置筛选表单布局

  1. info.SetFilterFormLayout(layout form.Layout)

设置默认排序规则

  1. // 顺序
  2. info.SetSortAsc()
  3. // 倒序
  4. info.SetSortDesc()

连表

连表需要设置连表表名与连表字段

  1. // 增加字段名
  2. info.AddField("Role Name", "role_name", db.Varchar).FieldJoin(types.Join{
  3. Table: "role", // 连表的表名
  4. Field: "id", // 要连表的字段
  5. JoinField: "user_id", // 连表的表的字段
  6. })

这将会生成类似这样的sql语句:

  1. select ..., role.`role_name` from users left join role on users.`id` = role.`user_id` where ...

新增按钮

如果您需要新增一些功能按钮,可以调用:

  1. info.AddButton(title template.HTML, icon string, action Action, color ...template.HTML)

其中,title为Button的标题,icon为Button的icon,action为Button的操作,color为背景色与文字颜色。

例如:

  1. import (
  2. ...
  3. "github.com/GoAdminGroup/go-admin/template/icon"
  4. "github.com/GoAdminGroup/go-admin/template/types/action"
  5. ...
  6. )
  7. info.AddButton("今日情况", icon.Save, action.PopUp("/admin/data/analyze", "数据分析"))

添加了一个popup的操作,将会去请求对应路由,对应路由返回的就是popup的内容,「数据分析」为对应popup的标题。