/**
* yvan.grid.js
* @author luoyifan
* 2018-11-29 13:35:00
*/
'use strict';
(function ($) {
var WIDTH_OFFSET = 0;
if (!$.jgrid) {
console.warn('no jqGrid!!');
return;
}
var disFixedTable = false;
//消息处理链条
$.jgrid.chain = {
prepearOption: [],
loadComplete: [],
ondblClickRow: [],
onKeydown: [],
onSelectRow: [],
beforeSelectRow: [],
onReload: []
};
function resizeColumn(newwidth, index) {
var $grid = $(this);
var name = $grid.getGridParam().colModel[index].name;
//找到所有 该列的编辑格
var $editors = $grid.find('[itemId="' + name + '"]');
$editors.each(function (index, target) {
if ($.data(target).hasOwnProperty('textbox')) {
$(target).textbox({ width: newwidth - WIDTH_OFFSET });
}
});
}
function colFormatProcess(colOption) {
//============ 升级编辑器属性
if (colOption.hasOwnProperty('formatter')) {
if ($.type(colOption.formatter) === 'array') {
colOption.editor = {
editable: false,
xtype: 'combobox',
data: colOption.formatter
};
} else if ($.type(colOption.formatter) === 'object') {
$.extend(true, colOption, {
formatter: 'select',
editoptions: {
value: colOption.formatter
}
});
return;
}
}
var editor = colOption.editor;
if (!editor) {
return;
}
//=========== 定义 datetime / combobox / checkbox / numberbox 的映射关系 ===========
if (editor.xtype === 'combobox') {
var convData = {};
var valueField = editor.valueField || $.fn.combobox.defaults.valueField;
var textField = editor.textField || $.fn.combobox.defaults.textField;
for (var i = 0; i < editor.data.length; i++) {
convData[editor.data[i][valueField]] = editor.data[i][textField];
}
$.extend(true, colOption, {
formatter: 'select',
editoptions: {
value: convData
}
});
} else if (editor.xtype === 'checkbox') {
$.extend(true, colOption, {
formatter: 'checkbox',
editoptions: {
value: editor.on + ":" + editor.off
}
});
} else if (editor.xtype === 'numberbox') {
$.extend(true, colOption, {
formatter: 'number',
formatoptions: {
decimalPlaces: editor.precision
}
});
} else if (editor.xtype === 'datetimebox') {
$.extend(true, colOption, {
formatter: 'date',
formatoptions: {
srcformat: 'u',
newformat: 'Y-m-d H:i:s'
}
});
}
}
//将 easyui option 转换为 jqGrid option
function convertEasyuiOption(opts) {
//======== easyui.columns 声明方法, 转换为 colModel 设置方式
if (opts.hasOwnProperty('columns')) {
if (opts.columns.length !== 1) {
console.error('error columns setting!');
return;
}
if (opts.disFixedTable == true) {
disFixedTable = true;
} else {
disFixedTable = false;
}
var columns = opts.columns[0];
var colModel = [];
for (var i = 0; i < columns.length; i++) {
var col = {
sortable: false
};
if (!columns[i].field) {
console.error('error columns no name property!');
return;
}
if (columns[i].hasOwnProperty('hidden')) {
col.hidden = columns[i].hidden;
}
if (columns[i].hasOwnProperty('field')) {
col.name = columns[i].field;
}
if (columns[i].hasOwnProperty('title')) {
col.label = columns[i].title;
}
if (columns[i].hasOwnProperty('align')) {
col.align = columns[i].align;
}
if (columns[i].hasOwnProperty('width')) {
col.width = columns[i].width;
}
if (columns[i].hasOwnProperty('maxWidth')) {
col.maxWidth = columns[i].maxWidth;
}
if (columns[i].hasOwnProperty('minWidth')) {
col.minWidth = columns[i].minWidth;
}
if (columns[i].hasOwnProperty('formatter')) {
col.formatter = columns[i].formatter;
if ($.type(col.formatter) === 'function') {
if (opts.editable) {
console.error('editable 的表格不允许 formatter=function');
}
}
}
if (columns[i].hasOwnProperty('editor')) {
col.editor = columns[i].editor;
if (!col.hasOwnProperty('editable')) {
col.editable = true;
}
}
if (columns[i].hasOwnProperty('sortable')) {
col.sortable = columns[i].sortable;
}
if (columns[i].hasOwnProperty('frozen')) {
col.frozen = columns[i].frozen;
}
col.autowidth = false;
colModel.push(col);
}
delete opts.columns;
opts.colModel = colModel;
}
//======== editable 内嵌编辑器
if (opts.hasOwnProperty('colModel')) {
for (var i = 0; i < opts.colModel.length; i++) {
colFormatProcess(opts.colModel[i]);
}
}
//======== 没有 URL 或不满足 loadCondition 条件就不需要加载数据
if (!opts.url) {
opts.datatype = "local";
} else {
opts.datatype = "json";
if ($.type(opts.loadCondition) === 'function') {
if (!opts.loadCondition(opts, opts.queryParams)) {
opts.datatype = "local";
}
}
}
//======== easyui 的 queryParams 属性
if (opts.hasOwnProperty('queryParams')) {
if ($.type(opts.queryParams) === 'function') {
opts.queryParams = opts.queryParams.call(this, opts);
}
opts.postData = opts.queryParams;
delete opts.queryParams;
}
opts.prmNames = $.extend(
{ search: null, sidx: null, nd: null, },
opts.pagination ? { page: "page", rows: "rows" } : {});
}
function pageCancel(e) {
$.yvan.msg('正在请求中,请不要过于频繁操作');
}
//============ 准备 prepare ============
function prepearOption(item, $grid) {
//============ 默认值
var opts = {
pagination: true,
autowidth: false,
autoheight: false,
autoresizeOnLoad: false,
autoSelectFirst: false,
multiboxonly: true,
height: '50px',
width: '50px',
viewrecords: true,
mtype: 'GET',
datatype: "json",
rownumbers: true,
autoSizeColumns: true,
shrinkToFit: false,
sortable: true,
sortorder: 'asc',
resizeStop: resizeColumn,
loadtext: '正在加载中...',
ajaxGridOptions: {
beforeSend: function (xhr) {
//$grid[0].jqGrid("setGridParam", { "groupHeader": null });
xhr.setRequestHeader("Authorization", $.cookie('auth'));
var $loading = $('#load_' + item.id);
var $pg = $loading.parent().down('gridpager');
var $sd = $pg.down('pageShardow');
if ($sd.length <= 0) {
$sd = $('
');
$pg.append($sd);
$sd.on('click', function () {
$.yvan.msg('正在请求中,请不要过于频繁操作');
});
}
$sd.show();
$loading.show();
},
error: function (event, xhr, options, exc) {
if ($.yvan.hasOwnProperty('ajaxException')) {
$.yvan.ajaxException.apply(this, arguments);
}
},
success: function (data, textStatus) {
if ($.type(opts.dataProcess) === 'function') {
opts.dataProcess.apply(this, arguments);
}
$grid[0].addJSONData(data);
opts.loadComplete.call($grid[0]);
},
complete: function (xhr, textStatus) {
var $loading = $('#load_' + item.id);
$loading.hide();
var $pg = $loading.parent().down('gridpager');
var $sd = $pg.down('pageShardow');
$sd.hide();
}
}
};
//============ 复制
$.extend(opts, item);
//============= 覆盖值
$.extend(opts, {
loadComplete: function () {
var $grid = $(this);
//自动调整列宽度
$grid.autoSizeColumns();
$grid.setSortIcon();
$grid.find('input[type=checkbox]').parent('td').css('text-align', 'center');
if (!$grid.getGridParam('multiselect')) {
//不是多选状态,都要自动选择第一行、或还原之前的选项
var ids = $grid.getDataIDs();
if (ids.length > 0) {
var lastId = $grid.getGridParam('lastRowId');
//还原最后一次选择的行、或默认第一行
// var id = lastId || ids[0];
var id = ids.indexOf(lastId) != -1 ? lastId : ids[0];
if (opts.autoSelectFirst)
{
id=ids[0];
}
$grid.setSelection(id);
}
} else {
//改造表头的勾选框
var $headInput = $('#cb_' + $grid[0].id);
var $domHeadInput = $('\n' +
'\n' +
'
');
$headInput.hide();
$domHeadInput.insertAfter($headInput);
$domHeadInput.on("click", function () {
var checkBoxes = $grid.find('.td_cbox > .yvan-checkbox');
if ($domHeadInput.hasClass('yvan-checked')) {
//全不选
$domHeadInput.removeClass('yvan-checked');
checkBoxes.removeClass('yvan-checked');
if ($.type(opts.onCheckedChange) === 'function') {
var rids = $grid.jqGrid('getDataIDs');
opts.onCheckedChange.call($grid[0], $grid.jqGrid('getDataIDs'), false);
}
} else {
//全选
$domHeadInput.addClass('yvan-checked');
checkBoxes.addClass('yvan-checked');
if ($.type(opts.onCheckedChange) === 'function') {
opts.onCheckedChange.call($grid[0], $grid.jqGrid('getDataIDs'), true);
}
}
});
//改造勾选框
var $input = $grid.find('.td_cbox > input.cbox');
$input.each(function (index, input) {
var $dom = $('\n' +
'\n' +
'
');
$(input).hide();
$dom.insertAfter($(input));
$dom.on("click", function () {
//改变勾选状态
if ($dom.hasClass('yvan-checked')) {
//取消勾选, 同时也取消表头的勾选
$dom.removeClass('yvan-checked');
$domHeadInput.removeClass('yvan-checked');
if ($.type(opts.onCheckedChange) === 'function') {
opts.onCheckedChange.call($grid[0], [$grid.jqGrid('getDataIDs')[index]], false);
}
} else {
//勾选
$dom.addClass('yvan-checked');
//判断下级元素是不是全被勾选
if ($grid.find('.td_cbox > .yvan-checkbox').length ===
$grid.find('.td_cbox > .yvan-checkbox.yvan-checked').length) {
//下级全勾选上了,默认表头勾选上
$domHeadInput.addClass('yvan-checked');
}
if ($.type(opts.onCheckedChange) === 'function') {
opts.onCheckedChange.call($grid[0], [$grid.jqGrid('getDataIDs')[index]], true);
}
}
});
});
for (var i = 0; i < $.jgrid.chain.loadComplete.length; i++) {
$.jgrid.chain.loadComplete[i].apply(this, arguments);
}
}
if ($grid.getGridParam('pagination')) {//设置分页默认当前显示页码
var pagebox = $grid.closest('.ui-jqgrid-view').siblings('.ui-jqgrid-pager').find('.ui-jqgrid-pg-center');
var totalPageBox = $(pagebox.find('td[dir="ltr"]')[0]);
var totalPage = totalPageBox.find('span').html();
if (totalPage == 0) {
totalPageBox.find('input').val('');
}
}
if (item.loadComplete) {
item.loadComplete.apply(this, arguments);
}
},
onSortCol: function(index, colindex, sortorder) {
var $grid = $(this);
var colModel = $grid.jqGrid('getGridParam', 'colModel');
for (var idx = 0; idx < colModel.length; idx++) {
colModel[idx].lso = 'asc-desc';
}
colModel[colindex].lso = sortorder;
if (item.onSortCol) {
item.onSortCol.apply(this, arguments);
}
},
onSelectRow: function (rowid, status) {
//每次选择之后,记住最后一次的选项
var $grid = $(this);
if ($grid.getGridParam('multiselect')) {
if (item.onSelectRow) {
item.onSelectRow.apply(this, arguments);
}
for (var i = 0; i < $.jgrid.chain.onSelectRow.length; i++) {
$.jgrid.chain.onSelectRow[i].apply(this, arguments);
}
var ids = $grid.getDataIDs();
if (ids.length === 1) {
var headerDomInput = $($grid).parents('.ui-jqgrid-view').find('.ui-jqgrid-labels').find('input')[0];
$(headerDomInput).prop("checked", true);
}
return;
}
$grid.setGridParam({ 'lastRowId': rowid });
if (!$grid.getGridParam('multiselect')) {
if (!status) {
//不允许取消选择
setTimeout(function () {
$grid.setSelection(rowid);
});
return;
}
}
if (item.onSelectRow) {
arguments['3'] = arguments['2'];
arguments['2'] = $grid.getGridParam('lastSelectRowId');
item.onSelectRow.apply(this, arguments);
}
for (var i = 0; i < $.jgrid.chain.onSelectRow.length; i++) {
$.jgrid.chain.onSelectRow[i].apply(this, arguments);
}
//带上上次选中的
$grid.setGridParam({ 'lastSelectRowId': rowid });
},
//双击
ondblClickRow: function (rowid, iRow, iCol, e) {
if ($.type(item.ondblClickRow) === 'function') {
item.ondblClickRow.apply(this, arguments);
} else if ($.type(item.onDblClickRow) === 'function') {
item.onDblClickRow.apply(this, arguments);
}
for (var i = 0; i < $.jgrid.chain.ondblClickRow.length; i++) {
$.jgrid.chain.ondblClickRow[i].apply(this, arguments);
}
},
beforeSelectRow: function (rowid, e) {
for (var i = 0; i < $.jgrid.chain.beforeSelectRow.length; i++) {
var r = $.jgrid.chain.beforeSelectRow[i].apply(this, arguments);
if (!r) {
return false;
}
}
if (item.beforeSelectRow) {
var r = item.beforeSelectRow.apply(this, arguments);
if (!r) {
return false;
}
}
var $myGrid = $(this);
if ($myGrid.getGridParam('multiselect')) {
//在多选状态下,"勾选"不影响"选择"状态
var i = $.jgrid.getCellIndex($(e.target).closest('td')[0]),
cm = $myGrid.jqGrid('getGridParam', 'colModel');
return (cm[i].name !== 'cb');
}
return true;
}
});
return opts;
} //end prepearOption
String.prototype.getTextWH = function (style) {//获取字符串宽度及高度
var $span = $("" + this + "");
$span.css($.extend({}, style, { visibility: "hidden" }));
$("body").append($span);
if (!disFixedTable) {
var result = {
"width": $span.width(),
"height": $span.height()
};
} else {
var result = {
};
}
$span.remove();
return result;
};
//============ 构建工具栏 ============
function createToolbar($table, id, opts, toolbar, context) {
var $dom = $table.findBox().find('#t_' + id);
if ($.type(toolbar) === 'function') {
opts.toolbar = opts.toolbar.call(this, $dom, context);
}
if ($.type(toolbar) === 'string') {
$dom.append($(toolbar));
} else if ($.type(toolbar) === 'array') {
$dom.power('renderEach', {
$target: $dom,
items: toolbar,
context: context
});
} else if ($.type(toolbar) === 'object') {
$dom.power('renderDispatch', {
$target: $dom,
item: toolbar,
context: context
});
}
}
$.jgrid.yvanui = '1.0';
$.jgrid.createDom = function ($target, item, context) {
item.id = item.id || $.yvan.createId('grid');
var $table = $('');
$target.append($table);
$table.reset(item, true, context);
return $table;
};
$.jgrid.extend({
getCol: function (col) {
var $grid = $(this);
if ($.type(col) === 'undefined') {
return $grid.jqGrid('getGridParam', 'colModel');
} else if ($.type(col) === 'number') {
return $grid.jqGrid('getGridParam', 'colModel')[col];
}
return $grid.jqGrid('getColProp', col);
},
addRow: function (rowData) {
var $grid = $(this);
var rowId = $.yvan.createId('nr');
if ($grid.getGridParam('multiselect')) {
var rowId = $.yvan.createId('nr');
$grid.addRowData(rowId, rowData, "last");
var $headInput = $('#cb_' + $grid[0].id);
var $domHeadInput = $grid.parents('.ui-jqgrid-bdiv').siblings('.ui-jqgrid-hdiv').find('.jqgh_cbox').find('.yvan-checkbox');
//改造勾选框
var $input = $grid.find('.td_cbox > input.cbox');
$input.each(function (index, input) {
var $dom = $('\n' +
'\n' +
'
');
$(input).hide();
if ($(input).next().hasClass('yvan-checkbox') == false) {
$dom.insertAfter($(input));
}
$dom.on("click", function () {
//改变勾选状态
if ($dom.hasClass('yvan-checked')) {
//取消勾选, 同时也取消表头的勾选
$dom.removeClass('yvan-checked');
$domHeadInput.removeClass('yvan-checked');
} else {
//勾选
$dom.addClass('yvan-checked');
//判断下级元素是不是全被勾选
if ($grid.find('.td_cbox > .yvan-checkbox').length ===
$grid.find('.td_cbox > .yvan-checkbox.yvan-checked').length) {
//下级全勾选上了,默认表头勾选上
$domHeadInput.addClass('yvan-checked');
}
}
});
});
} else {
$grid.addRowData(rowId, rowData, "last");
}
},
moveUp: function (rowid) {
var $grid = $(this);
rowid = rowid || $grid.selrow();
var ids = $grid.getDataIDs();
var rowIndex = $.inArray(rowid, ids);
if (rowIndex <= 0) {
return false;
}
var $from = $grid.find('#' + rowid);
var $target = $grid.find('#' + ids[rowIndex - 1]);
if ($from.length <= 0 || $target.length <= 0) {
return false;
}
$from.insertBefore(
$target
);
return true;
},
// 置顶
moveAllUp: function (rowid) {
var $grid = $(this);
rowid = rowid || $grid.selrow();
var ids = $grid.getDataIDs();
var rowIndex = $.inArray(rowid, ids);
if (rowIndex <= 0) {
return false;
}
var $from = $grid.find('#' + rowid);
var $target = $grid.find('#' + ids[0]);
if ($from.length <= 0 || $target.length <= 0) {
return false;
}
$from.insertBefore(
$target
);
return true;
},
moveDown: function (rowid) {
var $grid = $(this);
rowid = rowid || $grid.selrow();
var ids = $grid.getDataIDs();
var rowIndex = $.inArray(rowid, ids);
if (rowIndex >= ids.length - 1) {
return false;
}
var $from = $grid.find('#' + rowid);
var $target = $grid.find('#' + ids[rowIndex + 1]);
if ($from.length <= 0 || $target.length <= 0) {
return false;
}
$from.insertAfter(
$target
);
return true;
},
// 置尾
moveAllDown: function (rowid) {
var $grid = $(this);
rowid = rowid || $grid.selrow();
var ids = $grid.getDataIDs();
var rowIndex = $.inArray(rowid, ids);
if (rowIndex >= ids.length - 1) {
return false;
}
var $from = $grid.find('#' + rowid);
var $target = $grid.find('#' + ids[ids.length - 1]);
if ($from.length <= 0 || $target.length <= 0) {
return false;
}
$from.insertAfter(
$target
);
return true;
},
//获取被勾选的行id(rowid)
getCheckedIds: function () {
var $grid = $(this);
var rids = $grid.jqGrid('getDataIDs');
var checkBoxes = $grid.find('.td_cbox > .yvan-checkbox');
var checkedIds = [];
checkBoxes.each(function (i, d) {
var $d = $(d);
if ($d.hasClass('yvan-checked')) {
checkedIds.push(rids[i]);
}
});
return checkedIds;
},
//获取被勾选的数据行
checkedData: function () {
var $grid = $(this);
var datas = $grid.jqGrid('getRowData');
if ($grid.getGridParam('editable')) {
datas = $grid.saveEdit();
} else {
datas = $grid.jqGrid('getRowData');
}
var checkBoxes = $grid.find('.td_cbox > .yvan-checkbox');
var checkedIds = [];
checkBoxes.each(function (i, d) {
var $d = $(d);
if ($d.hasClass('yvan-checked')) {
checkedIds.push(datas[i]);
}
});
return checkedIds;
},
//设置某些行不被勾
uncheckIds: function (array) {
var $grid = $(this);
var rids = $grid.jqGrid('getDataIDs');
var checkBoxes = $grid.find('.td_cbox > .yvan-checkbox');
checkBoxes.each(function (i, d) {
if ($.inArray(rids[i], array) >= 0) {
$(d).removeClass('yvan-checked');
}
});
var $headInput = $('#cb_' + $grid[0].id);
var $domHeadInput = $headInput.next();
if ($grid.find('.td_cbox > .yvan-checkbox').length ===
$grid.find('.td_cbox > .yvan-checkbox.yvan-checked').length) {
$domHeadInput.addClass('yvan-checked');
} else {
$domHeadInput.removeClass('yvan-checked');
}
},
//获取 或设置 被勾选的行id(rowid)
//当第一个为 undefined 时,就是获取被勾选的数据行id(rowid)
//当第一个参数为 array 时,就是根据行ID(rowid)勾选行
checkIds: function (array) {
var $grid = $(this);
var rids = $grid.jqGrid('getDataIDs');
var checkBoxes = $grid.find('.td_cbox > .yvan-checkbox');
if ($.type(array) === 'array') {
//根据跟定的参数,设置勾选状态
checkBoxes.each(function (i, d) {
if ($.inArray(rids[i], array) >= 0) {
$(d).addClass('yvan-checked');
}
});
var $headInput = $('#cb_' + $grid[0].id);
var $domHeadInput = $headInput.next();
if ($grid.find('.td_cbox > .yvan-checkbox').length ===
$grid.find('.td_cbox > .yvan-checkbox.yvan-checked').length) {
$domHeadInput.addClass('yvan-checked');
} else {
$domHeadInput.removeClass('yvan-checked');
}
} else if ($.type(array) === 'undefined') {
//获取被勾选的行
var checkedIds = [];
checkBoxes.each(function (i, d) {
var $d = $(d);
if ($d.hasClass('yvan-checked')) {
checkedIds.push(rids[i]);
}
});
return checkedIds;
}
},
checkAll: function () {
//全选
var $grid = $(this);
var $headInput = $('#cb_' + $grid[0].id);
var $domHeadInput = $headInput.next();
$grid.find('.td_cbox > .yvan-checkbox').addClass('yvan-checked');
$domHeadInput.addClass('yvan-checked');
},
uncheckAll: function () {
//全不选
var $grid = $(this);
var $headInput = $('#cb_' + $grid[0].id);
var $domHeadInput = $headInput.next();
$grid.find('.td_cbox > .yvan-checkbox').removeClass('yvan-checked');
$domHeadInput.removeClass('yvan-checked');
},
//获取当前数据量
records: function () {
var $grid = $(this);
return $grid.jqGrid('getGridParam', 'records');
},
//清空当前表格数据
clearData: function () {
var $grid = $(this);
$grid.jqGrid('clearGridData');
},
getData: function () {
var $grid = $(this);
return $grid.jqGrid('getRowData');
},
deleteRow: function (rowid) {
var $grid = $(this);
rowid = rowid || $grid.selrow();
if (rowid) {
return $grid.delRowData(rowid);
}
},
selrow: function (rowid) {
var $grid = $(this);
return $grid.jqGrid('getGridParam', 'selrow');
},
rowData: function (rowid) {
var $grid = $(this);
rowid = rowid || $grid.selrow();
if (rowid) {
return $grid.getRowData(rowid);
}
},
selectedRows: function () {
var $grid = $(this);
return $grid.jqGrid("getGridParam", "selarrrow");
},
setGroupHeader: function () {
var $grid = $(this);
var gh = $grid.getGridParam().YvGroupHeaders;
if (gh) {
$grid.jqGrid('destroyGroupHeader');
if ($.type(gh[0]) === 'array') {
for (var i = 0; i < gh.length; i++) {
$grid.jqGrid('setGroupHeaders', {
useColSpanStyle: true,
groupHeaders: gh[i]
});
}
} else {
$grid.jqGrid('setGroupHeaders', {
useColSpanStyle: true,
groupHeaders: gh
});
}
}
},
//重新读取表格
reload: function (options, resetPage) {
var $grid = $(this);
if (resetPage) {
options = $.extend({ page: 1 }, options);
}
if (options) {
//复制属性
options = $.extend({}, options);
options.url = options.url || $grid.jqGrid('getGridParam', 'url');
options.loadCondition = options.loadCondition || $grid.jqGrid('getGridParam', 'loadCondition');
for (var i = 0; i < $.jgrid.chain.onReload.length; i++) {
$.jgrid.chain.onReload[i].apply(this, arguments);
}
convertEasyuiOption(options);
//有参数,将参数与当前表格参数合并
$grid.jqGrid('setGridParam', options);
}
//刷新
$grid.trigger('reloadGrid');
},
reset: function (opts, firstCreate, context) {
var $grid = $(this);
var pageId;
if (!firstCreate) {
context = $.extend($grid.getGridParam('appContext'), context);
pageId = $grid.closest('form').down('gridpager').attr('id');
$grid.GridUnload();
} else {
//构建form
var $form = $('');
$.yvan.fillCommonProperties($grid, opts);
if (opts.hasOwnProperty('name')) {
$form.attr('name', item.name);
}
$form.insertAfter($grid);
//构建 pager
pageId = $.yvan.createId('gridpager');
var $pager = $('');
$pager.insertAfter($form);
//移动 table
$form.append($grid);
}
opts = prepearOption(opts, $grid);
if (opts.pagination === false) {
$.extend(opts, {
jsonReader: {
pager: undefined,
id: function (obj) {
return $(this).getGridParam().idField;
},
root: function (obj) {
return obj.data;
},
page: function (obj) {
return 1;
},
total: function (obj) {
return 1;
},
records: function (obj) {
return obj.data.length;
}
}
});
} else {
$.extend(opts, {
pager: '#' + pageId,
rowNum: 20,
rowList: [20, 50, 100, 200, 500, 1000],
jsonReader: {
id: function (obj) {
return $(this).getGridParam().idField;
},
root: function (obj) {
return obj.data;
},
page: function (obj) {
return parseInt(obj.pagination.pageNo);
},
total: function (obj) {
return parseInt(obj.pagination.last);
},
records: function (obj) {
return parseInt(obj.pagination.count);
}
}
});
}
convertEasyuiOption(opts);
for (var i = 0; i < $.jgrid.chain.prepearOption.length; i++) {
$.jgrid.chain.prepearOption[i](opts, $grid);
}
//准备构建工具栏
var toolbar = null;
if (opts.toolbar) {
//需要工具栏
toolbar = opts.toolbar;
$.extend(opts, {
toolbar: [true, 'top']
});
}
function moveFocus(plus) {
var $grid = $(this);
var ids = $grid.getDataIDs();
if (ids.length > 0) {
var rowid = $grid.selrow();
if (!rowid) {
$grid.jqGrid('resetSelection')
.jqGrid('setSelection', ids[0], true);
return true;
} else {
var target = $.inArray(rowid, ids);
if (target < 0) return;
target = plus ? target + 1 : target - 1;
if (target >= 0 && target < ids.length) {
$grid.jqGrid('resetSelection')
.jqGrid('setSelection', ids[target], true);
return true;
}
}
}
return false;
}
//快捷键
function onKeydown(e) {
if (e.key === 'Control' || e.key === 'Shift' || e.key === 'Alt') {
return;
}
var success;
if (!success) {
for (var i = 0; i < $.jgrid.chain.onKeydown.length; i++) {
success = $.jgrid.chain.onKeydown[i].apply(this, arguments);
if (success)
break;
}
}
if (!success) {
if (e.key === 'ArrowDown') {
if (moveFocus.call(this, true)) success = true;
} else if (e.key === 'ArrowUp') {
if (moveFocus.call(this, false)) success = true;
}
}
if (!success) {
if (opts.onKeyDown && !success) {
success = opts.onKeyDown.apply(this, arguments);
}
}
if (success) {
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
}
}
var $panel = $grid.parent().parent();
$grid.jqGrid(opts);
if (firstCreate) {
$grid.getGridParam().appContext = context;
}
$grid.getGridParam().YvGroupHeaders = opts.groupHeaders;
$grid.setGroupHeader();
//构建工具栏
if (toolbar) {
createToolbar($grid, $grid.attr('id'), opts, toolbar, context);
}
function resizeMe() {
var $panel = $(this);
for (var i = 0; i < 2; i++) {
var parentHeight = $panel.height();
var parentWidth = $panel.width();
var $box = $grid.findBox();
parentHeight -= $box.find('.ui-state-default.ui-jqgrid-pager.ui-corner-bottom:visible').outerHeight();
parentHeight -= $box.find('.ui-userdata.ui-corner-top:visible').outerHeight();
parentHeight -= $box.find('.ui-corner-top.ui-jqgrid-hdiv:visible').outerHeight();
parentHeight -= $box.find('.ui-corner-top.ui-jqgrid-titlebar:visible').outerHeight();
var param = $grid.jqGrid('getGridParam');
param.height = parentHeight - 3;
param.width = parentWidth - 3;
$grid.jqGrid('setGridWidth', param.width);
$grid.jqGrid('setGridHeight', param.height);
}
}
if ($panel.data().hasOwnProperty('panel')) {
$panel.panel({ onResize: resizeMe });
resizeMe.call($panel[0]);
} else {
console.log('grid 无法自适应大小', $panel);
}
$grid.on('keydown', onKeydown);
},
//找到顶层元素
findBox: function () {
return $($(this).getGridParam().gBox);
},
resizeMe: function () {
var $panel = $(this).findBox().parent().parent();
if ($panel.data().hasOwnProperty('panel')) {
$panel.panel('options').onResize.call($panel[0]);
} else {
console.error('rezieMe 无效');
}
},
autoSizeColumns: function () {
var $grid = $(this);
if (!$grid.jqGrid('getGridParam', 'autoSizeColumns'))
return;
var id = $grid.attr('id');
var td = $('#tdCompute');
var arr = [], temp = [];
$('#gview_' + id + ' .ui-jqgrid-htable tr,#' + id + ' tr:gt(0)').each(function (idx) {
$(this).find('td,th').each(function (idx) {
var _text = $(this).text().trim();
var wh = _text.getTextWH({
"fontSize": "12px",
"fontFamily": "微软雅黑"
});
temp[idx] = Math.max(temp[idx] ? temp[idx] : 0, wh.width);
//arr[idx] = Math.max(arr[idx] ? arr[idx] : 0, td.html($(this).text())[0].style.width);//style.width
});
});
var colModel = $grid.jqGrid('getGridParam', 'colModel');
//设置页头单元格宽度
for (var idx = 0; idx < colModel.length; idx++) {
//$grid.setColWidth(idx, (arr[idx]>temp[idx]?arr[idx]:temp[idx]) + 30);
var width = temp[idx] + 30;
if (width>colModel[idx].maxWidth) {
width = colModel[idx].maxWidth;
} else if (width↑';
} else if (colModel[idx].lso==='desc') {
text=text+'↓';
} else {
text=text+'⇅';
}
}
$('#'+tableId + '_'+colModel[idx].name + ' > span').remove();
$('#'+'jqgh_'+tableId + '_'+colModel[idx].name).html(text);
}
//$grid.resizeMe();
}
});
})(jQuery);