beego for Datatables 数据

工具 tools/datatables.go

package tools

import (
	"fmt"
	"github.com/astaxie/beego/context"
	"github.com/astaxie/beego/orm"
	"strconv"
)

/*
 * aColumns []string `SQL Columns to display`
 * thismodel interface{} `SQL model to use`
 * ctx *context.Context `Beego ctx which contains httpcontext`
 * maps []orm.Params `return result in a interface map as []orm.Params`
 * count int64 `return iTotalDisplayRecords`
 * counts int64 `return iTotalRecords`
 *
 */
func Datatables(aColumns []string, thismodel interface{}, Input *context.BeegoInput, where interface{}) (maps []orm.Params, count int64, counts int64) {
	/*
	 * Paging
	 * 分页请求
	 */
	iDisplayStart, _ := strconv.Atoi(Input.Query("iDisplayStart"))
	iDisplayLength, _ := strconv.Atoi(Input.Query("iDisplayLength"))
	/*
	 * Ordering
	 * 排序请求
	 */
	querysOrder := []string{}
	if iSortCol_0, _ := strconv.Atoi(Input.Query("iSortCol_0")); iSortCol_0 > -1 {
		ranges, _ := strconv.Atoi(Input.Query("iSortingCols"))
		for i := 0; i < ranges; i++ {
			istring := strconv.Itoa(i)
			if iSortcol := Input.Query("bSortable_" + Input.Query("iSortCol_"+istring)); iSortcol == "true" {
				sordir := Input.Query("sSortDir_" + istring)
				thisSortCol, _ := strconv.Atoi(Input.Query("iSortCol_" + istring))
				if sordir == "asc" {
					querysOrder = append(querysOrder, aColumns[thisSortCol])
				} else {
					querysOrder = append(querysOrder, "-"+aColumns[thisSortCol])
				}
			}
		}
	}
	/*
	 * Filtering
	 * 快速过滤器
	 */
	//querysFilter := []string{}
	cond := orm.NewCondition()
	if len(Input.Query("sSearch")) > 0 {
		for i := 0; i < len(aColumns); i++ {
			cond = cond.Or(aColumns[i]+"__icontains", Input.Query("sSearch"))
		}

	}
	/* Individual column filtering */
	for i := 0; i < len(aColumns); i++ {
		if Input.Query("bSearchable_"+strconv.Itoa(i)) == "true" && len(Input.Query("sSearch_"+strconv.Itoa(i))) > 0 {
			cond = cond.And(aColumns[i]+"__icontains", Input.Query("sSearch"))
		}
	}

	//where条件
	wheres, ok := where.(map[string]interface{})
	if ok {
		for k, v := range wheres {
			fmt.Println(k, v)
			cond = cond.And(k, v)
		}
	}
	fmt.Println(where)
	//用户管理GID
	gid := Input.Query("gid")
	if gid != "" {
		gid2, _ := strconv.Atoi(gid)
		cond = cond.And("gid", int64(gid2))
	}

	//客服管理
	accountid := Input.Query("aid")
	fmt.Println(accountid)
	if accountid != "" {
		aid, _ := strconv.Atoi(accountid)
		cond = cond.And("accountid", int64(aid))
	}
	/*
	 * GetData
	 * 数据请求
	 */
	o := orm.NewOrm()
	qs := o.QueryTable(thismodel)
	counts, _ = qs.Count()
	qs = qs.Limit(iDisplayLength, iDisplayStart)
	qs = qs.SetCond(cond)
	for _, v := range querysOrder {
		qs = qs.OrderBy(v)
	}
	qs.Values(&maps)
	count, _ = qs.Count()
	return maps, count, counts
}



使用方法

/*
* 显示datatables列表页数据
 */
func (this *UserController) List() {

	aColumns := []string{
		"Id",
		"Username",
		"Realname",
		"Status",
		"Gid",
	}

	var where = make(map[string]interface{})

	err := this.CheckRule("isUserAll")
	if err != nil {
		where["gid"] = this.GetUserGid()
	}

	fmt.Println(where)

	maps, count, counts := d.Datatables(aColumns, user, this.Ctx.Input, where)

	var output = make([][]interface{}, len(maps))
	for i, m := range maps {
		for _, v := range aColumns {
			if v == "Lasttime" {
				output[i] = append(output[i], m[v].(time.Time).Format("2006-01-02 15:04:05"))
			} else {
				output[i] = append(output[i], m[v])
			}
		}
	}

	data := make(map[string]interface{}, count)
	data["sEcho"] = this.GetString("sEcho")
	data["iTotalRecords"] = counts
	data["iTotalDisplayRecords"] = count
	data["aaData"] = output

	this.Data["json"] = data
	this.ServeJson()

}



前端databases

//datatables显示列表
var table = $('#datatables');//表格对象
	table.dataTable( {
	  "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",//定义DataTable布局的一个强大属性
	  "sPaginationType": "bootstrap",//分页样式使用bootstrap
	  "oLanguage": {//语言设置
			  "sLengthMenu": "每页显示  _MENU_ 条记录",  
			  "sInfo": "从 _START_ 到 _END_ /共 _TOTAL_ 条数据",
			  "oPaginate": {
				  "sFirst": "首页",
				  "sPrevious": "前一页",
				  "sNext": "后一页",
				  "sLast": "尾页"
				  },
			  "sZeroRecords": "抱歉, 没有找到",
			  "sInfoEmpty": "没有数据"
			},
	 "bProcessing": true, //当datatable获取数据时候是否显示正在处理提示信息。
	 "bServerSide": true, //客户端处理分页
	 "sAjaxSource": "/rule/list", //ajax请求地址
	 'bStateSave': true, //开关,是否打开客户端状态记录功能。这个数据是记录在cookies中的,打开了这个记录后,即使刷新一次页面,或重新打开浏览器,之前的状态都是保存下来的
	 "aoColumnDefs": [{ //给每个单独的列设置不同的填充,或者使用aoColumns也行
					  "aTargets": [3],
					  "mData": null,
					  "bSortable": false,
					  "bSearchable": false,
					  "mRender": function (data, type, full) {
						  if(full[3] == 1){
							 return "路由规则"  
						  }else if(full[3] == 2){
							 return "普通规则" 
						  }
					  }
				  },{
					  "aTargets": [4],
					  "mData": null,
					  "bSortable": false,
					  "bSearchable": false,
					  "mRender": function (data, type, full) {
						  return '<a data-toggle="modal" data-target="#myModal"  data-title="' + full[0] + '"  class="btn btn-success" href="#"><i class="icon-edit icon-white"></i>修改</a>' +'&nbsp;&nbsp;'+'<a data-title="' + full[0] + '"  class="btn btn-danger" href="#' + full[0] + '"><i class="icon-user icon-white"></i>删除</a>';
					  }
				  }]
	
	});



你可能感兴趣的:(beego for Datatables 数据)