Mini.Crm/Mini.Web/wwwroot/Scripts/op/jquery.tablegrid.js

368 lines
17 KiB
JavaScript

$(function () {
var tablepage_methods = {
};
$.fn.tablepage = function (settings, n1) {
var _gridid = $(this).attr("id");
if (_gridid == null)
return;
var pageControl = $(".datagrid-pager:[tableid='" + _gridid + "']");
if (pageControl.length == 0)
return;
if (settings == null) {
$(pageControl).find("a:.l-btn-plain:not(.l-btn-disabled )").live("click", function () {
var methods = JSON.parse($(pageControl).attr("pagination"));
switch ($(this).attr("id")) { //{"rows":15,"page":1,"order":"id","sort":null,"totalRows":16,"totalPages":2}
case "page_first":
methods.page = 1;
break;
case "page_prev":
methods.page = methods.page - 1;
break;
case "page_next":
methods.page = methods.page + 1;
break;
case "page_last":
methods.page = methods.totalPages;
break;
default: break;
}
$("#" + _gridid).tablegrid("Load", methods);
});
$(pageControl).find(".pagination-num").change(function () {
var te = /^[1-9]+[0-9]*]*$/;
var methods = JSON.parse($(pageControl).attr("pagination"));
if (!te.test($(this).val())) {
$(this).val(1);
methods.page = 1;
} else {
var pageNumber = parseInt($(this).val());
if (pageNumber <= 1)
methods.page = 1;
else if (pageNumber >= methods.totalPages)
methods.page = methods.totalPages;
else
methods.page = pageNumber;
}
$("#" + _gridid).tablegrid("Load", methods);
pagination_state_load(methods);
});
$(pageControl).find(".pagination-page-list").change(function () {
var methods = JSON.parse($(pageControl).attr("pagination"));
methods.rows = $(this).val();
methods.page = 1;
$("#" + _gridid).tablegrid("Load", methods);
pagination_state_load(methods);
});
} else if (settings == "getPagination") {
var methods = JSON.parse($(pageControl).attr("pagination"));
return methods;
} else if (settings == "setPagination") {
pagination_state_load(n1);
}
function pagination_state_load(methods) {
methods = $.extend($("#" + _gridid).tablepage("getPagination"), methods);
$("[tableid='" + _gridid + "'] .pagination-num").val(methods.page);
$(pageControl).find("[nid='ofPage']").html("of " + methods.totalPages);
$(pageControl).find(".pagination-info").html(function () {
return "从 " + ((methods.page - 1) * methods.rows + 1) + " 到 " + ((methods.page * methods.rows > methods.totalRows ? methods.totalRows : methods.page * methods.rows)) + " 共 " + methods.totalRows + " 条数据";
});
if (methods.page <= 1) {
$("[tableid='" + _gridid + "'] .pagination-first").parent().parent().parent().addClass("l-btn-disabled");
$("[tableid='" + _gridid + "'] .pagination-prev").parent().parent().parent().addClass("l-btn-disabled");
}
else {
$("[tableid='" + _gridid + "'] .pagination-first").parent().parent().parent().removeClass("l-btn-disabled");
$("[tableid='" + _gridid + "'] .pagination-prev").parent().parent().parent().removeClass("l-btn-disabled");
}
if (methods.page >= methods.totalPages) {
$("[tableid='" + _gridid + "'] .pagination-next").parent().parent().parent().addClass("l-btn-disabled");
$("[tableid='" + _gridid + "'] .pagination-last").parent().parent().parent().addClass("l-btn-disabled");
} else {
$("[tableid='" + _gridid + "'] .pagination-next").parent().parent().parent().removeClass("l-btn-disabled");
$("[tableid='" + _gridid + "'] .pagination-last").parent().parent().parent().removeClass("l-btn-disabled");
}
$(pageControl).attr("pagination", JSON.stringify(methods));
}
}
$.fn.tablegrid = function (settings, n1) {
var _gridid = $(this).attr("id");
if (_gridid == null)
return;
var parames = {
url: '',//地址
data: {},//参数
height: 0,//高度
isCheckMore: false,//是否可以多选
isRotating30: true,//是否为转动30s自动关闭转动
//page: 1,//当前第几页
//rows: 15,//每页行数
//order: "",//排序方式
//sort: "",//排序列
loadNow: false//是否立马更新数据
}
var qutype = typeof (settings);
if (qutype == "string" || qutype == null) {
if (settings == null) {//啥都不传,重新样式
datagrid_style_load();
}
else if (settings == "getSelected") {
var selected = {};
var index = 0;
$("#" + _gridid + " .tr_onclick td:[field]").each(function (i, n) {
var _html = $.trim($(n).text());
selected[$(n).attr("field")] = (_html == "&nbsp;" ? "" : _html);
index++;
});
if (index == 0)
return null;
else
return selected;
} else if (settings == "getHead") {
var head = [];
var index = 0;
$("#" + _gridid + " th[field]:not(:hidden)").each(function (i, n) {
head[i] = { field: $(n).attr("field"), title: $(n).text() };
index++;
});
if (index == 0)
return null;
else
return head;
} else if (settings == "getAllHead") {
var head = [];
var index = 0;
$("#" + _gridid + " th[field]").each(function (i, n) {
head[i] = { field: $(n).attr("field"), title: $(n).text() };
index++;
});
if (index == 0)
return null;
else
return head;
} else if (settings == "getSelections") {
var selections = new Array();
var index = 0;
$("#" + _gridid + " .tr_onclick").each(function (i, n) {
var row = {};
$(n).find("td:[field]").each(function (j, m) {
var _html = $(m).html()
row[$(m).attr("field")] = (_html == "&nbsp;" ? "" : _html);
});
selections[i] = row;
index++;
});
return selections;
} else if (settings == "getAllRows") {
var selections = new Array();
var index = 0;
$("#" + _gridid + " tr:gt(0)").each(function (i, n) {
var row = {};
$(n).find("td:[field]").each(function (j, m) {
var _html = $(m).html()
row[$(m).attr("field")] = (_html == "&nbsp;" ? "" : _html);
});
selections[i] = row;
index++;
});
return selections;
} else if (settings == "getOptions") {
return JSON.parse($("#" + _gridid).attr("gridParames"));
}
else if (settings == "Load") {
if (n1 == null)
n1 = $("#" + _gridid).tablepage("getPagination");
datagrid_getData(n1);
} else if (settings == "Search") {
if (n1 == null)
n1 = $("#" + _gridid).tablepage("getPagination");
datagrid_getData($.extend(n1, { page: 1 }));
} else if (settings == "Clear") {
$("#" + _gridid).tablepage("setPagination", { page: "1", totalRows: "0", totalPages: "0" });
$("#" + _gridid + " tbody").html("");
}
else if (settings == "resize") {
if (parseInt(n1.height) < 200)
n1.height == 200;
$("#" + _gridid).parent().height(n1.height);
$("#" + _gridid).parent().parent().height(n1.height + 70);
}
} else if (qutype == "object") {
$.extend(parames, settings);
$("#" + _gridid).tablepage();//加载分页
$("#" + _gridid).attr("gridParames", JSON.stringify(parames));//存储table参数信息
//给委托赋值
funcLoad();
$("#" + _gridid + " .tablegrid_sort").click(function () {//排序操作的绑定
if ($(this).hasClass("tablegrid_sort_desc"))//有过有升序
{
$("#" + _gridid + " .tablegrid_sort_asc").removeClass("tablegrid_sort_asc");//移除所有效果
$("#" + _gridid + " .tablegrid_sort_desc").removeClass("tablegrid_sort_desc");
$(this).addClass("tablegrid_sort_asc");
} else {
$("#" + _gridid + " .tablegrid_sort_asc").removeClass("tablegrid_sort_asc");//移除所有效果
$("#" + _gridid + " .tablegrid_sort_desc").removeClass("tablegrid_sort_desc");
$(this).addClass("tablegrid_sort_desc");
}
$("#" + _gridid).tablegrid("Load");//重新加载数据
});
if (parames.loadNow) {
var pagemessage = $("#" + _gridid).tablepage("getPagination");//获取分页信息
if (pagemessage != null) {
parames.page = pagemessage.page;
parames.rows = pagemessage.rows;
parames.orders = pagemessage.orders;
parames.sorts = pagemessage.sorts;
n1 = pagemessage;
}
datagrid_getData(parames);//加载数据
if (pagemessage != null) {
$("#" + _gridid).tablepage("setPagination", n1);
}
}
datagrid_style_load();
}
function datagrid_getData(params) {
var orderCloumn = $("#" + _gridid + " .tablegrid_sort_asc");//排序列
if (orderCloumn.length > 0) {
params.sort = $(orderCloumn).attr("field");
params.order = "asc";
} else {
orderCloumn = $("#" + _gridid + " .tablegrid_sort_desc");//排序列
if (orderCloumn.length > 0) {
params.sort = $(orderCloumn).attr("field");
params.order = "desc";
}
}
var gridParames = JSON.parse($("#" + _gridid).attr("gridParames"));
var allCanshu = $.extend({ columns: $("#" + _gridid).attr("columns") }, params);
allCanshu = $.extend(allCanshu, gridParames);
var canshu = {
order: allCanshu.order,
page: allCanshu.page,
rows: allCanshu.rows,
sort: allCanshu.sort,
totalPages: allCanshu.totalPages,
totalRows: allCanshu.totalRows,
columns: allCanshu.columns
};
var dataType = typeof (tablepage_methods[_gridid]["data"]);
if (dataType == "function") {
canshu = $.extend(canshu, tablepage_methods[_gridid]["data"]());
} else if (dataType = "object") {
canshu = $.extend(canshu, tablepage_methods[_gridid]["data"]);
} else { }
var r_ajax_position = {
url: gridParames.url,
type: "Post",
data: $.extend(canshu, GetParams()),
dataType: "json",
async: true,//异步请求
loading: true,
success: function (data) {
if ($("#" + _gridid).find("thead").length > 0)
$("#" + _gridid + " tbody").html("");
else
$("#" + _gridid + " tr:gt(0)").remove();
if (data.errorMessag && data.errorMessag != "") {
$.messageBoxAuto('提示', data.errorMessag);
}
else {
$("#" + _gridid + " tbody").append(data.rowsList);
if (data.foot != null) {
if ($("#" + _gridid + " tfoot").length == 0)
$("#" + _gridid).append("<tfoot>" + data.foot + "</tfoot>");
else {
$("#" + _gridid + " tfoot").html("");
$("#" + _gridid + " tfoot").append(data.foot);
}
}
if (n1 != null) {
n1.totalPages = data.totalPages;
n1.totalRows = data.totalRows;
}
datagrid_style_load();
$("#" + _gridid).tablepage("setPagination", n1);
evalFunc("onLoadSuccess", data);//成功执行
}
}, error: function (xx) {
evalFunc("onLoadError");//成功执行
}
}
$.r_ajax(r_ajax_position);
}
//事件绑定
function datagrid_event_bind() {
if ($("#" + _gridid).attr("state") == "true")
return;
var gridParames = JSON.parse($("#" + _gridid).attr("gridParames"));
if (!gridParames.isCheckMore)
$("#" + _gridid + " [ntype='checkAll']").remove();
else {
$("#" + _gridid + " [ntype='checkAll']").click(function () {
if ($(this).attr("checked") == "checked")
$("#" + _gridid + " tr:gt(0)").not(":has(input:disabled)").addClass("tr_onclick").find("input:checkbox").attr("checked", "checked");
else
$("#" + _gridid + " tr:gt(0)").not(":has(input:disabled)").removeClass("tr_onclick").find("input:checked").removeAttr("checked");
});
}
$("#" + _gridid + " tbody tr").live("mouseover", function () {
$(this).addClass("tr_onmouser_over");
}).live("mouseout", function () {
$(this).removeClass("tr_onmouser_over");
}).live("click", function () {
if (!gridParames.isCheckMore) {
$("#" + _gridid + " .tr_onclick").removeClass("tr_onclick").find("input:checked").removeAttr("checked");//单选模式
$(this).addClass("tr_onclick").find(":checkbox").attr("checked", "checked");
} else {
var checkbox = $(this).find(":checkbox");
if ($(checkbox).attr("disabled") == null) {
$(this).toggleClass("tr_onclick");
if ($(this).hasClass("tr_onclick")) {
$(checkbox).attr("checked", "checked");
} else {
$(checkbox).removeAttr("checked");
}
}
}
});
if (gridParames.height == 0)
gridParames.height = $(window).height() - 140;
$("#" + _gridid).parent().height(gridParames.height);
$("#" + _gridid).parent().parent().height(gridParames.height + 70);
$("#" + _gridid).attr("state", "true");//已经加载完事件绑定
}
function datagrid_style_load() {
$("#" + _gridid + " tr:gt(0):even").addClass("bas_datagrid_tr_even");
datagrid_event_bind();
}
function funcLoad() {
tablepage_methods[_gridid] = {
onLoadSuccess: settings.onLoadSuccess,
onLoadError: settings.onLoadError,
data: settings.data
};
}
function evalFunc(manager, data) {
if (tablepage_methods[_gridid][manager] != null)
tablepage_methods[_gridid][manager](data);
}
}
});