编辑此页

列的使用


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

设置列宽

注意需要先设置表格布局类型为fixed

info.SetTableFixed()
info.AddField("Name", "name", db.Varchar).FieldWidth(100)

默认隐藏列

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

设置为可排序

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

设置为固定

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

设置为可筛选

info.AddField("Name", "name", db.Varchar).FieldFilterable()

设置筛选的操作符与操作表单类型:

// 设置操作符为like,模糊查询
info.AddField("Name", "name", db.Varchar).FieldFilterable(types.FilterType{Operator: types.FilterOperatorLike})

// 设置为单选类型
info.AddField("Gender", "gender", db.Tinyint).
    FieldFilterable(types.FilterType{FormType: form.SelectSingle}).
    FieldFilterOptions(types.FieldOptions{
      {Value: "0", Text: "men"},
      {Value: "1", Text: "women"},
    }).FieldFilterOptionExt(map[string]interface{}{"allowClear": true})

// 设置为时间范围类型,范围查询
info.AddField("CreatedAt", "created_at", db.Timestamp).FieldFilterable(types.FilterType{FormType: form.DatetimeRange})

// 设置过滤字段处理函数
info.AddField("Name", "name", db.Varchar).
FieldFilterable(types.FilterType{Operator: types.FilterOperatorLike}).
FieldFilterProcess(func(s string) string {
    // 即使前端错误输入带空格,在这里可以过滤空格进行sql查询
    return strings.TrimSpace(s)
})

列操作按钮

// 第一个参数为标题,第二个参数为对应的操作
info.AddActionButton("操作", action.Jump("https://google.com"))

操作的类Action为一个接口,如下:

type Action interface {
    // 返回对应的JS
    Js() template.JS
    // 获取class
    BtnClass() template.HTML
    // 返回按钮的属性
    BtnAttribute() template.HTML
    // 返回额外的HTML
    ExtContent() template.HTML
    // 设置按钮的ID,供给Js()方法调用
    SetBtnId(btnId string)
    // 设置数据
    SetBtnData(data interface{})
    // 返回请求节点,包括路由方法和对应控制器方法
    GetCallbacks() context.Node
}

可以自己实现一个Action,也可以直接使用框架提供的Action。系统内置提供以下两个Action,一个是popup操作,一个是跳转操作。

import (
    "github.com/GoAdminGroup/go-admin/template/types/action"
)

// 返回一个Jump Action,参数一为url,参数二为额外的html
// Jump Action是一个跳转操作。如果需要跳转url中带上id,可以这样写:
//
action.Jump("/admin/info/manager?id={{.Id}}")
//
// 其中{{.Id}}为id的占位符
action.Jump("/admin/info/manager")
action.JumpInNewTab("/admin/info/manager", "管理员")

// 如果是行中的action,想要取得同行数据作为参数,比如行中有一列叫name,那么可以这样传:
action.Jump(`/admin/info/manager?name={{(index .Value "name").Value}}`)

// 这里 (index .Value "name") 取得的对象是:https://godoc.org/github.com/GoAdminGroup/go-admin/template/types#InfoItem

// 返回一个PopUp Action,参数一为url,参数二为popup标题,参数三为对应的控制器方法。
// 用户点击按钮后会请求对应的方法,带上请求id,请求转发到对应控制器方法后进行处理返回。
action.PopUp("/admin/popup", "Popup Example", func(ctx *context.Context) (success bool, msg string, data interface{}) {
    // 获取参数
    // ctx.FormValue["id"]
    // ctx.FormValue["ids"]
    return true, "", "<h2>hello world</h2>"
})

// 返回一个Ajax Action,参数一为url,参数二为对应的控制器方法。
action.Ajax("/admin/ajax",
func(ctx *context.Context) (success bool, msg string, data interface{}) {
    // 获取参数
    // ctx.FormValue["id"]
    // ctx.FormValue["ids"]
    return true, "success", ""
})

列上开关

在列上做一个简单的开关

import "github.com/GoAdminGroup/go-admin/template/types/table"

info.AddField("显示状态", "show_status", db.Tinyint).FieldEditAble(table.Switch).FieldEditOptions(types.FieldOptions{
        {Value: "1", Text: "允许"}, // 放在第一个代表 on
        {Value: "2", Text: "禁止"},
    })

还可以为这个列直接增加搜索功能

info.AddField("显示状态", "show_status", db.Tinyint).FieldEditAble(table.Switch).FieldEditOptions(types.FieldOptions{
        {Value: "1", Text: "允许"}, // 放在第一个代表 on
        {Value: "2", Text: "禁止"},
    }).FieldFilterable(types.FilterType{FormType: form.SelectSingle}).FieldFilterOptions(types.FieldOptions{
        {Value: "1", Text: "允许"},
        {Value: "2", Text: "禁止"},
    }).FieldFilterOptionExt(map[string]interface{}{"allowClear": true})

帮助方法

字符串操作

限制输出长度

info.AddField("Name", "name", db.Varchar).FieldLimit(10)

首字母大写

info.AddField("Name", "name", db.Varchar).FieldToTitle()

去除空格

info.AddField("Name", "name", db.Varchar).FieldTrimSpace()

字符串截取

info.AddField("Name", "name", db.Varchar).FieldSubstr(0, 3)

字符串转大写

info.AddField("Name", "name", db.Varchar).FieldToUpper()

字符串转小写

info.AddField("Name", "name", db.Varchar).FieldToLower()

如果想要全局进行过滤操作

那么可以调用插件的方法:

adminPlugin := admin.NewAdmin(...)

// 限制输出
adminPlugin.AddDisplayFilterLimit(limit int)

// 去除空格
adminPlugin.AddDisplayFilterTrimSpace()

// 截取字符串
adminPlugin.AddDisplayFilterSubstr(start int, end int)

// 首字母大写
adminPlugin.AddDisplayFilterToTitle()

// 大写
adminPlugin.AddDisplayFilterToUpper()

// 小写
adminPlugin.AddDisplayFilterToLower()

// xss过滤
adminPlugin.AddDisplayFilterXssFilter()

// js过滤
adminPlugin.AddDisplayFilterXssJsFilter()

如果想要在表格或表单显示层面进行过滤操作

info := table.NewDefaultTable(...).GetInfo()

info.AddLimitFilter(limit int)
info.AddTrimSpaceFilter()
info.AddSubstrFilter(start int, end int)
info.AddToTitleFilter()
info.AddToUpperFilter()
info.AddToLowerFilter()
info.AddXssFilter()
info.AddXssJsFilter()

form := table.NewDefaultTable(...).GetForm()

form.AddLimitFilter(limit int)
form.AddTrimSpaceFilter()
form.AddSubstrFilter(start int, end int)
form.AddToTitleFilter()
form.AddToUpperFilter()
form.AddToLowerFilter()
form.AddXssFilter()
form.AddXssJsFilter()