列的使用
InfoPanel内置了很多对于列的操作方法,可以通过这些方法很灵活的操作列数据。

设置列宽

注意需要先设置表格布局类型为fixed
1
info.SetTableFixed()
2
info.AddField("Name", "name", db.Varchar).FieldWidth(100)
Copied!

默认隐藏列

1
info.AddField("Name", "name", db.Varchar).FieldHide()
Copied!

设置为可排序

1
info.AddField("Name", "name", db.Varchar).FieldSortable()
Copied!

设置为固定

1
info.AddField("Name", "name", db.Varchar).FieldFixed()
Copied!

设置为可筛选

1
info.AddField("Name", "name", db.Varchar).FieldFilterable()
Copied!
设置筛选的操作符与操作表单类型:
1
// 设置操作符为like,模糊查询
2
info.AddField("Name", "name", db.Varchar).FieldFilterable(types.FilterType{Operator: types.FilterOperatorLike})
3
4
// 设置为单选类型
5
info.AddField("Gender", "gender", db.Tinyint).
6
FieldFilterable(types.FilterType{FormType: form.SelectSingle}).
7
FieldFilterOptions(types.FieldOptions{
8
{Value: "0", Text: "men"},
9
{Value: "1", Text: "women"},
10
}).FieldFilterOptionExt(map[string]interface{}{"allowClear": true})
11
12
// 设置为时间范围类型,范围查询
13
info.AddField("CreatedAt", "created_at", db.Timestamp).FieldFilterable(types.FilterType{FormType: form.DatetimeRange})
14
15
// 设置过滤字段处理函数
16
info.AddField("Name", "name", db.Varchar).
17
FieldFilterable(types.FilterType{Operator: types.FilterOperatorLike}).
18
FieldFilterProcess(func(s string) string {
19
// 即使前端错误输入带空格,在这里可以过滤空格进行sql查询
20
return strings.TrimSpace(s)
21
})
Copied!

列操作按钮

1
// 第一个参数为标题,第二个参数为对应的操作
2
info.AddActionButton("操作", action.Jump("https://google.com"))
Copied!
操作的类Action为一个接口,如下:
1
type Action interface {
2
// 返回对应的JS
3
Js() template.JS
4
// 获取class
5
BtnClass() template.HTML
6
// 返回按钮的属性
7
BtnAttribute() template.HTML
8
// 返回额外的HTML
9
ExtContent() template.HTML
10
// 设置按钮的ID,供给Js()方法调用
11
SetBtnId(btnId string)
12
// 设置数据
13
SetBtnData(data interface{})
14
// 返回请求节点,包括路由方法和对应控制器方法
15
GetCallbacks() context.Node
16
}
Copied!
可以自己实现一个Action,也可以直接使用框架提供的Action。系统内置提供以下两个Action,一个是popup操作,一个是跳转操作。
1
import (
2
"github.com/GoAdminGroup/go-admin/template/types/action"
3
)
4
5
// 返回一个Jump Action,参数一为url,参数二为额外的html
6
// Jump Action是一个跳转操作。如果需要跳转url中带上id,可以这样写:
7
//
8
action.Jump("/admin/info/manager?id={{.Id}}")
9
//
10
// 其中{{.Id}}为id的占位符
11
action.Jump("/admin/info/manager")
12
action.JumpInNewTab("/admin/info/manager", "管理员")
13
14
// 如果是行中的action,想要取得同行数据作为参数,比如行中有一列叫name,那么可以这样传:
15
action.Jump(`/admin/info/manager?name={{(index .Value "name").Value}}`)
16
17
// 这里 (index .Value "name") 取得的对象是:https://godoc.org/github.com/GoAdminGroup/go-admin/template/types#InfoItem
18
19
// 返回一个PopUp Action,参数一为url,参数二为popup标题,参数三为对应的控制器方法。
20
// 用户点击按钮后会请求对应的方法,带上请求id,请求转发到对应控制器方法后进行处理返回。
21
action.PopUp("/admin/popup", "Popup Example", func(ctx *context.Context) (success bool, msg string, data interface{}) {
22
// 获取参数
23
// ctx.FormValue["id"]
24
// ctx.FormValue["ids"]
25
return true, "", "<h2>hello world</h2>"
26
})
27
28
// 返回一个Ajax Action,参数一为url,参数二为对应的控制器方法。
29
action.Ajax("/admin/ajax",
30
func(ctx *context.Context) (success bool, msg string, data interface{}) {
31
// 获取参数
32
// ctx.FormValue["id"]
33
// ctx.FormValue["ids"]
34
return true, "success", ""
35
})
Copied!

列上开关

在列上做一个简单的开关
1
import "github.com/GoAdminGroup/go-admin/template/types/table"
2
3
info.AddField("显示状态", "show_status", db.Tinyint).FieldEditAble(table.Switch).FieldEditOptions(types.FieldOptions{
4
{Value: "1", Text: "允许"}, // 放在第一个代表 on
5
{Value: "2", Text: "禁止"},
6
})
Copied!
还可以为这个列直接增加搜索功能
1
info.AddField("显示状态", "show_status", db.Tinyint).FieldEditAble(table.Switch).FieldEditOptions(types.FieldOptions{
2
{Value: "1", Text: "允许"}, // 放在第一个代表 on
3
{Value: "2", Text: "禁止"},
4
}).FieldFilterable(types.FilterType{FormType: form.SelectSingle}).FieldFilterOptions(types.FieldOptions{
5
{Value: "1", Text: "允许"},
6
{Value: "2", Text: "禁止"},
7
}).FieldFilterOptionExt(map[string]interface{}{"allowClear": true})
Copied!

帮助方法

字符串操作

限制输出长度
1
info.AddField("Name", "name", db.Varchar).FieldLimit(10)
Copied!
首字母大写
1
info.AddField("Name", "name", db.Varchar).FieldToTitle()
Copied!
去除空格
1
info.AddField("Name", "name", db.Varchar).FieldTrimSpace()
Copied!
字符串截取
1
info.AddField("Name", "name", db.Varchar).FieldSubstr(0, 3)
Copied!
字符串转大写
1
info.AddField("Name", "name", db.Varchar).FieldToUpper()
Copied!
字符串转小写
1
info.AddField("Name", "name", db.Varchar).FieldToLower()
Copied!
如果想要全局进行过滤操作
那么可以调用插件的方法:
1
adminPlugin := admin.NewAdmin(...)
2
3
// 限制输出
4
adminPlugin.AddDisplayFilterLimit(limit int)
5
6
// 去除空格
7
adminPlugin.AddDisplayFilterTrimSpace()
8
9
// 截取字符串
10
adminPlugin.AddDisplayFilterSubstr(start int, end int)
11
12
// 首字母大写
13
adminPlugin.AddDisplayFilterToTitle()
14
15
// 大写
16
adminPlugin.AddDisplayFilterToUpper()
17
18
// 小写
19
adminPlugin.AddDisplayFilterToLower()
20
21
// xss过滤
22
adminPlugin.AddDisplayFilterXssFilter()
23
24
// js过滤
25
adminPlugin.AddDisplayFilterXssJsFilter()
Copied!
如果想要在表格或表单显示层面进行过滤操作
1
info := table.NewDefaultTable(...).GetInfo()
2
3
info.AddLimitFilter(limit int)
4
info.AddTrimSpaceFilter()
5
info.AddSubstrFilter(start int, end int)
6
info.AddToTitleFilter()
7
info.AddToUpperFilter()
8
info.AddToLowerFilter()
9
info.AddXssFilter()
10
info.AddXssJsFilter()
11
12
form := table.NewDefaultTable(...).GetForm()
13
14
form.AddLimitFilter(limit int)
15
form.AddTrimSpaceFilter()
16
form.AddSubstrFilter(start int, end int)
17
form.AddToTitleFilter()
18
form.AddToUpperFilter()
19
form.AddToLowerFilter()
20
form.AddXssFilter()
21
form.AddXssJsFilter()
Copied!
Last modified 1yr ago