12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199 |
- /**
- * 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 = $('<div xtype="pageShardow" style="position: absolute;display: block;float: right;width: 300px;height: 30px;top: 0;"></div>');
- $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 = $('<div class="yvan-checkbox" tabindex="0" lay-skin="primary">\n' +
- '<i class="fa fa-check"></i>\n' +
- '</div>');
- $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 = $('<div class="yvan-checkbox" tabindex="0" lay-skin="primary">\n' +
- '<i class="fa fa-check"></i>\n' +
- '</div>');
- $(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 = $("<span>" + this + "</span>");
- $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 = $('<table></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 = $('<div class="yvan-checkbox" tabindex="0" lay-skin="primary">\n' +
- '<i class="fa fa-check"></i>\n' +
- '</div>');
- $(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 = $('<form></form>');
- $.yvan.fillCommonProperties($grid, opts);
- if (opts.hasOwnProperty('name')) {
- $form.attr('name', item.name);
- }
- $form.insertAfter($grid);
- //构建 pager
- pageId = $.yvan.createId('gridpager');
- var $pager = $('<div xtype="gridpager" id="' + pageId + '"></div>');
- $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<colModel[idx].minWidth) {
- width = colModel[idx].minWidth;
- }
- $grid.setColWidth(idx, width);
- }
- //$('#gview_' + id + ' th').each(function (idx) {
- // var $th = $(this);
- // if ($th.is('.jqgh_rn')) return; //序号列,不调整
- // if ($th.is('.jqgh_cbox')) return; //复选框,不调整
- // $grid.setColWidth(idx, arr[idx] + 15);
- //});
- $grid.resizeMe();
- /*
- //设置页头单元格宽度
- $('#gview_' + id + ' th').each(function (idx) {
- if ($(this).is('.jqgh_cbox')) return; //复选框,不调整
- this.style.width = (arr[idx] + 15) + 'px';
- });
- //设置内容表格中控制单元格宽度的单元格,在第一行
- $('#' + id + ' tr:eq(0) td').each(function (idx) {
- if ($(this).is('.td_cbox')) return; //复选框,不调整
- this.style.width = (arr[idx] + 15) + 'px';
- });
- */
- },
- getEditStatus: function() {
- var $grid = $(this);
- if ($grid.getGridParam('beEdited'))
- {
- return true;
- }
- return false;
- },
- setSortIcon: function () {
- var $grid = $(this);
- var colModel = $grid.jqGrid('getGridParam', 'colModel');
- var tableId = $grid.jqGrid('getGridParam', 'id');
- for (var idx = 0; idx < colModel.length; idx++) {
- var text = colModel[idx].label;
- if (colModel[idx].sortable) {
- if (colModel[idx].lso==='asc') {
- text=text+'<span style="color: green"><b>↑</b></span>';
- } else if (colModel[idx].lso==='desc') {
- text=text+'<span style="color: #ff8038"><b>↓</b></span>';
- } else {
- text=text+'<span style="color: #1076ff"><b>⇅</b></span>';
- }
- }
- $('#'+tableId + '_'+colModel[idx].name + ' > span').remove();
- $('#'+'jqgh_'+tableId + '_'+colModel[idx].name).html(text);
- }
- //$grid.resizeMe();
- }
- });
- })(jQuery);
|