/** * 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);