/** * yvan.yvtreegrid.js * @author luoyifan * 2019-07-18 21:30:00 */ 'use strict'; (function ($) { var filterable = false; var pageable = false; if (!jqxTreeGrid) { console.warn('no jqxTreeGrid!!'); return; } function buildColumns($dom, option) { if (option.filterable == false) { filterable = false; } else { filterable = true; } if (option.pageable == true) { pageable = true; } else { pageable = false; } /*===== Columns ======*/ var columns = option.columns; if ($.type(columns) === 'array' && $.type(columns[0]) === 'array') { //easyui 的设置方法 columns = columns[0]; var columnsNew = []; for (var i = 0; i < columns.length; i++) { if (columns[i].hidden === true) { continue; } var vv = columns[i]; var ret = { dataField: vv.field, text: vv.title, type: vv.type || 'string' }; if (vv.type === 'number') { $.extend(ret, {cellsalign: 'right', cellsformat: 'd'}); } if (vv.align == 'right') { $.extend(ret, {cellsalign: 'right', cellsformat: 'd'}); } if (vv.align == 'center') { $.extend(ret, {cellsalign: 'center', cellsformat: 'd'}); } if ($.type(vv.width) !== 'undefined') { $.extend(ret, {width: vv.width}); } else { if (option.autoSizeColumns) { $.extend(ret, {width: 80}); } } if (vv.type === 'bool') { ret.cellsrenderer = (function (onOffValue) { return function (row, columnfield, value, defaulthtml, columnproperties) { if ($.trim(value) === onOffValue.on) { return '
'; } if ($.trim(value) === onOffValue.off) { return '
'; } return defaulthtml; }; })({on: vv.on, off: vv.off}); } if ($.type(vv.formatter) === 'function') { ret.cellsrenderer = (function (formatter) { return function (row, columnfield, value, defaulthtml, columnproperties) { value = formatter.call(this, value); if (!columnproperties) { columnproperties = {cellsalign: 'left'}; } return '' + value + ''; }; })(vv.formatter); } else if ($.type(vv.formatter) === 'array') { ret.cellsrenderer = (function (formatter) { return function (row, columnfield, value, defaulthtml, columnproperties) { for (var i = 0; i < formatter.length; i++) { if (formatter[i]['id'] === $.trim(value)) { value = formatter[i]['text']; break; } } if (!columnproperties) { columnproperties = {cellsalign: 'left'}; } // 如果formatter中有html标签处理标签之后再赋值到title if (value.indexOf('>') > -1) { return '' + value + ''; } return '' + value + ''; }; })(vv.formatter); } else { ret.cellsrenderer = (function () { return function (row, columnfield, value, defaulthtml, columnproperties) { return '' + value + ''; }; })(vv.formatter); } // 标题居中 if (vv.titleAlign === 'left') { ret.renderer = function (value) { return '
' + value + '
'; } } else if (vv.titleAlign === 'right') { ret.renderer = function (value) { return '
' + value + '
'; } } else { ret.renderer = function (value) { return '
' + value + '
'; } } columnsNew.push(ret); } columns = columnsNew; } if (option.rownumbers) { columns = [{ pinned: true, exportable: false, text: "", columntype: 'number', resizable: false, sortable: false, filterable: filterable, dataField: '__NO__', editable: false, cellsAlign: 'right', align: 'right', cellsrenderer: function (row, column, value) { return '
' + (value + 1) + '
'; }, createEverPresentRowWidget: function (datafield, htmlElement, popup, addCallback) { var editor = $("
*
").appendTo(htmlElement); return editor; }, initEverPresentRowWidget: function (datafield, htmlElement) { }, getEverPresentRowWidgetValue: function (datafield, htmlElement, validate) { }, resetEverPresentRowWidgetValue: function (datafield, htmlElement) { } }].concat(columns); } return columns; } function buildDataSource($dom, easyuiOpt, columns, data, jqxOption) { var dataAdapter, source; //本地直接给数据 if ($.type(data) === 'array') { source = { localdata: data, datatype: "json", id: easyuiOpt.idField, hierarchy: { keyDataField: {name: easyuiOpt.keyDataField}, parentDataField: {name: easyuiOpt.parentDataField} }, //datafields: datafields, //这里不能给定 fields ,给定了就无法动态计算列了 //beforeprocessing: function (root) { //本地数据 不支持分页数 // $dom.jqxGrid('source')._source.totalrecords = root.length; //} }; dataAdapter = new $.jqx.dataAdapter(source); } return dataAdapter; } function init(target) { var state = $.data(target, 'yvtreegrid'); var easyuiOpt = state.options; var $dom = $(target); var columns = buildColumns($dom, easyuiOpt); /*===== 复制新的 option ======*/ var jqxOption = { height: '100%', width: '100%', columnsResize: true, columnsHeight: 36, altRows: true, //sortable: true, enableBrowserSelection: true, checkboxes: easyuiOpt.checkbox, filterable: filterable, filterMode: 'simple', columns: columns, }; /*===== 数据源 ======*/ var dataAdapter = buildDataSource($dom, easyuiOpt, columns, easyuiOpt.data, jqxOption); $.extend(jqxOption, { source: dataAdapter }); delete easyuiOpt.data; /*===== 分页 ======*/ $.extend(jqxOption, { pageable: pageable, }); /*====== 工具栏 ======*/ if (easyuiOpt.hasOwnProperty('toolbar')) { var toolbar = easyuiOpt.toolbar; $.extend(jqxOption, { showtoolbar: true, rendertoolbar: function ($dom) { if ($.type(toolbar) === 'array') { $dom.power('renderEach', { $target: $dom, items: toolbar, }); } else if ($.type(toolbar) === 'object') { $dom.power('renderDispatch', { $target: $dom, item: toolbar, }); } }, }); if (toolbar.hasOwnProperty('height')) { jqxOption.toolbarheight = toolbar.height || 38; } } //execute DOM $dom.jqxTreeGrid(jqxOption); $dom.on('rowDoubleClick', function (event) { if (event.args.row.expanded) { $dom.jqxTreeGrid('collapseRow', event.args.key); } else { $dom.jqxTreeGrid('expandRow', event.args.key); } }); $dom.on('rowClick', function () { if ($.type(easyuiOpt.onRowClick) === 'function') { easyuiOpt.onRowClick.apply(this, arguments); } }); $dom.on('rowSelect', function () { if ($.type(easyuiOpt.onRowSelect) === 'function') { easyuiOpt.onRowSelect.apply(this, arguments); } }); $dom.on('rowCheck', function () { if ($.type(easyuiOpt.onRowCheck) === 'function') { easyuiOpt.onRowCheck.apply(this, arguments); } }); $dom.on('rowUncheck', function () { if ($.type(easyuiOpt.onRowCheck) === 'function') { easyuiOpt.onRowCheck.apply(this, arguments); } }); if (!easyuiOpt.border) { $dom.css({ "border-style": 'none' }); } // function resizeMe() { // var $panel = $(this).parent(); // var d = $panel[0].offsetHeight - 20; // // $dom.css({ // // "height":d+'px' // // }); // // var id = $dom.attr('id'); // // $('#horizontalScrollBar' + id).css({ // // "top":d-16+'px' // // }); // // //d = $('#verticalScrollBar' + id)[0].offsetHeight - 20; // // $('#verticalScrollBar' + id).css({ // // "height":d+'px' // // }); // // //d = $('#content' + id)[0].offsetHeight - 20; // // $('#content' + id).css({ // // "height":d+'px' // // }); // $panel.css({ // "height": d + 'px' // }); // } // var $panel = $dom.parent(); // // if ($panel.data().hasOwnProperty('panel')) { // $panel.panel({onResize: resizeMe}); // resizeMe.call($panel[0]); // } // // var id = 'super_'+$dom.attr('id'); // // var d = $('#'+id)[0].offsetHeight-20; // // $dom.css({ // // "height":d+'px' // // }); return $dom; } $.fn.power.defaults.xtype.yvtreegrid = function ($targetDOM, option, context, id) { var tid = 'toalCount' + id; var $dom = $('
'); $targetDOM.append($dom); $targetDOM.parent().append('
暂无数据
'); return $dom.yvtreegrid(option, context); }; $.fn.yvtreegrid = function (options, param) { if (typeof options == 'string') { var method = $.fn.yvtreegrid.methods[options]; if (method) { var args = [this]; for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); } return method.apply(this, args); } else { console.error('not found method:' + options); } } options = options || {}; return this.each(function () { var state = $.data(this, 'yvtreegrid'); if (state) { $.extend(state.options, options); } else { $.data(this, 'yvtreegrid', { options: $.extend({}, $.fn.yvtreegrid.defaults, options) }); } init(this, param); }); }; /** * 获取指定的行编号的对应数据 * 如果不设置参数就获取当前或被选中的行数据 */ function getSelected($dom) { var selection = $dom.jqxTreeGrid('getSelection'); if (selection && selection.length > 0) { return selection[0]; } return null; } function getCheckedRows($dom) { return $dom.jqxTreeGrid('getCheckedRows'); } $.fn.yvtreegrid.methods = { /** * 获取指定的行编号的对应数据 * 如果不设置参数就获取当前或被选中的行数据 */ rowData: getSelected, currentRowData: getSelected, getSelected: getSelected, /** * 获取被勾选的行 */ getCheckedRows: getCheckedRows, selectRow: function ($dom, value) { $dom.jqxTreeGrid('selectRow', value); }, reload: function (jq, option) { return jq.each(function () { var target = this; var state = $.data(target, 'yvtreegrid'); var $dom = $(target); option = $.extend(state.options, option); var ttt = '暂无数据'; if (option && option.data && option.data.length > 0) { ttt = '共' + option.data.length + '条'; } $('#toalCount' + $(this).attr('id')).html(ttt); var columns = buildColumns($dom, option); var jqxOption = {}; var dataAdapter = buildDataSource($dom, option, columns, option.data, jqxOption); $.extend(jqxOption, { source: dataAdapter }); //console.log('build source queryParams:', option.queryParams); $dom.jqxTreeGrid(jqxOption); delete option.data; }); }, expandAll: function ($dom) { $dom.jqxTreeGrid('expandAll'); } }; $.fn.yvtreegrid.defaults = { width: '100%', height: '90%', checkbox: false, autoSizeColumns: true, columnsHeight: 36, border: false }; //yvtreegrid })(jQuery);