1、问题
公司要替换一个前端表格插件,最后选择了DataTable,中文官方文档地址:http://datatables.club/manual/
2、解决
2.1、需要引入样式文件和JS文件
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="http://cdn.datatables.net/1.10.15/js/jquery.dataTables.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.20/js/dataTables.bootstrap.min.js"></script>
2.1、页面布局
<div data-options="region:'center',border:false">
@* 动态显示显示或隐藏列,注:data-column 是第N列对应的数字 *@
<div style="margin: -12px 0 15px -13px;">
显示 / 隐藏列:
<a class="toggle-vis" data-column="2">订单单号</a> -
<a class="toggle-vis" data-column="3">采购客户</a> -
<a class="toggle-vis" data-column="4">所属办事处</a> -
<a class="toggle-vis" data-column="11">创建时间</a>
</div>
<table id="SaleOrder"></table>
</div>
2.3、JS绘制加载表格
var toggleTable = $('#SaleOrder').DataTable({
searching: false, //禁用原生搜索
processing: true, //隐藏加载提示,自行处理
deferRender: true, //延迟渲染可以提高Datatables的加载速度
autoWidth: false, //禁用自动调整列宽
serverSide: true, //启用服务器端分页
stateSave: false, //状态保存,再次加载页面时还原表格状态
ordering: false, //排序总开关,是否开启排序功能
order: [], //取消默认排序查询,否则复选框一列会出现小箭头
orderMulti: true, //启用多列排序
orderable: true,
renderer: "bootstrap", //渲染样式:Bootstrap和jquery-ui
stripeClasses: ["odd", "even"], //为奇偶行加上样式,兼容不支持CSS伪类的场合
//scrollY: 300, //表格的固定高
//scrollCollapse: true, //开启滚动条(需要配合表格的固定高)
paginate: true, //分页总开关
paging: true, //表格分页
pageLength: 20, //首次加载的数据条数
dom: '<t><lfip>', //分页显示位置
lengthChange: true, //是否允许用户改变表格每页显示的记录数
lengthMenu: [10, 15, 20, 30, 100, -1],//[[10, 15, 20, 30, 100, -1], [10, 15, 20, 30, 100, "全部"]], //每页多少项,第一个数组是表示的值,第二个数组用来显示
pagingType: "full_numbers", //分页样式:simple,simple_numbers,full,full_numbers
ajax: function (data, callback, settings) {
//封装请求参数
searchdata.rows = data.length; //页面显示记录条数,在页面显示每页显示多少项的时候
searchdata.start = data.start; //开始的记录序号
searchdata.page = (data.start / data.length) + 1; //当前页码
//console.log("searchdata:" + JSON.stringify(searchdata));
//ajax请求数据
$.ajax({
url: UrlGetSelloffOrderPage,
type: "POST",
cache: false,
data: searchdata,
//dataType: "json",
//contentType: 'application/json;charset=utf-8',
//beforeSend: function (request) {
// request.setRequestHeader("token", localStorage.token);
//},
success: function (result) {
//console.log("result:" + JSON.stringify(result));
//封装返回数据
//var returnData = {};
//returnData.draw = data.draw; //这里直接自行返回了draw计数器,应该由后台返回
//returnData.recordsTotal = result.total; //返回数据全部记录
//returnData.recordsFiltered = result.total; //后台不实现过滤功能,每次查询均视作全部结果
//returnData.data = result.data; //重新封装返回的数据列表
//var list = result.rows;
//for (i = 0; i < list.length; i++) {
// returnData.data[i] = {};
// returnData.data[i].OrderID = list[i].OrderID;
// returnData.data[i].OrderNo = list[i].OrderNo;
// returnData.data[i].OrderUser = list[i].OrderUser;
// returnData.data[i].DepartmentName = list[i].DepartmentName;
// returnData.data[i].TotalAmount = list[i].TotalAmount;
// returnData.data[i].OrderStatus = list[i].OrderStatus;
// returnData.data[i].PayStatus = list[i].PayStatus;
// returnData.data[i].PlantPayStatus = list[i].PlantPayStatus;
// returnData.data[i].PlatPayStatus = list[i].PlatPayStatus;
// returnData.data[i].OrderReturnStatus = list[i].OrderReturnStatus;
// returnData.data[i].CreateTime = list[i].CreateTime;
//}
//console.log('returnData:' + JSON.stringify(returnData))
//console.log('returnData:');
//调用DataTables提供的callback方法,代表数据已封装完成并传回DataTables进行渲染
//此时的数据需确保正确无误,异常判断应在执行此回调前自行处理完毕
console.log(JSON.stringify(result))
callback(result);
}
})
},
columnDefs: [
{
targets: [0,12],
sortable: false
},
{
targets: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
sortable: true
}
],
columns: [
{
title: '序号', width: '56px', className: 'text-center whiteSpace',
render: function (data, type, row, meta) {
return meta.row + 1 + meta.settings._iDisplayStart;
}
},
{ title: '订单id', data: "OrderID", "visible": false, width: 60, align: "center"},
{ title: '订单单号', data: 'OrderNo', width: 100, align: "center" },
{ title: '采购客户', data: 'OrderUser', width: 60, align: "center" },
{ title: '所属办事处', data: 'DepartmentName', width: 150, align: "center" },
{
title: '订单总金额', data: 'TotalAmount', width: 60, align: "center",
render: function (data, type, row, meta) {
return data.toFixed(2);
}
},
{
title: '订单状态', data: 'OrderStatus', width: 60, align: "center",
render: function (data, type, row, meta) {
var result = "";
if (!comboxObj) return result;
return comboxObj.BindStatus("OrderStatus", data + "", true);
}
},
{
title: '客户订单支付状态', data: 'PayStatus', width: 100, align: "center",
render: function (data, type, row, meta) {
var result = "";
if (!comboxObj) return result;
return comboxObj.BindStatus("PayAmountStatus", data + "", true);
}
},
{
title: '办事处代销品支付状态', data: 'PlantPayStatus', width: 120, align: "center",
render: function (data, type, row, meta) {
var result = "";
if (!comboxObj) return result;
return comboxObj.BindStatus("PayAmountStatus", data + "", true);
}
},
{
title: '平台代销品支付状态', data: 'PlatPayStatus', width: 120, align: "center",
render: function (data, type, row, meta) {
var result = "";
if (!comboxObj) return result;
return comboxObj.BindStatus("PayAmountStatus", data + "", true);
}
},
{
title: '客户退货状态', data: 'OrderReturnStatus', width: 80, align: "center",
render: function (data, type, row, meta) {
var result = "-";
if (!comboxObj) return result;
return comboxObj.BindStatus("GoodsReturnStatus", data + "", true);
}
},
{
title: '创建时间', data: 'CreateTime', width: 80, align: "center",
render: function (data, type, row, meta) {
if (data == null || data == '') {
return '';
}
var dt = parseToDate(data);
return dt.format("yyyy-MM-dd hh:mm:ss");
}
},
{
title: '操作', width: '40px',
render: function (data, type, row, meta) {
var buttonRightCodes = getRightCodes();
return '<a href="javascript:void(0)" rightcode="570301" style="dispaly:none;" onclick="parent.open(\'代销销售订单详情\',\'/PlantSaleOrder/Detail?id=' + row.OrderID + '\',\'' + buttonRightCodes + '\')">查看详情</a>';
}
}
],
language: {
"sProcessing": "处理中...",
"buttons.copy": "复制",
"buttons.print": "打印",
"sLengthMenu": "_MENU_",
"sZeroRecords": "没有匹配结果",
"sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
"sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
"sInfoFiltered": "(由 _MAX_ 项结果过滤)",
"sInfoPostFix": "",
"sSearch": "搜索:",
"sUrl": "",
"sEmptyTable": "表中数据为空",
"sLoadingRecords": "载入中...",
"sInfoThousands": ",",
"oPaginate": {
"sFirst": "首页",
"sPrevious": "上页",
"sNext": "下页",
"sLast": "末页"
},
"oAria": {
"sSortAscending": ": 以升序排列此列",
"sSortDescending": ": 以降序排列此列"
}
}
});
//动态显示或隐藏列,
$('a.toggle-vis').on('click', function (e) {
e.preventDefault();
//获取列API对象
var column = toggleTable.column($(this).attr('data-column'));
//切换或隐藏
column.visible(!column.visible());
});
3、总结
部分属性说明可参考官方文档