You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1789 lines
78 KiB

  1. /*
  2. *名称:jfGrid
  3. *版本号: V1.0.0
  4. *日期:2017.03.04
  5. *作者: JFine开发团队
  6. *描述:世界上最好用的表格,您的使用是对我们最大的支持!
  7. *
  8. *coldata:label,name,width,align,sortable,formatter
  9. */
  10. (function ($) {
  11. "use strict";
  12. $.jfGrid = $.jfGrid || {};
  13. $.extend($.jfGrid, {
  14. /*绘制表格*/
  15. render: function ($self) {
  16. var dfop = $self[0].dfop;
  17. $self.html('');
  18. $self.addClass('jfgrid-layout');
  19. $.jfGrid.renderHead($self);
  20. $.jfGrid.renderBorder($self);
  21. $.jfGrid.renderLeft($self);
  22. $.jfGrid.renderScorllArea($self);
  23. $.jfGrid.renderPageBarinit($self);
  24. $.jfGrid.renderFooterrow($self);
  25. $.jfGrid.renderToolBar($self);
  26. $self.append('<div class="jfgrid-move-line" id="jfgrid_move_line_' + $self[0].dfop.id + '" ></div>');// 调整宽度线条
  27. $self.append('<div class="jfgrid-nodata-img" id="jfgrid_nodata_img_' + $self[0].dfop.id + '" ></div>');// 调整宽度线条
  28. $self.append('<div class="jfgrid-loading" id="jfgrid_loading_' + $self[0].dfop.id + '" ><div class="bg"></div><div class="img">正在拼命加载列表数据…</div></div>');// 调整宽度线条
  29. // 注册整体事件
  30. $self.on('mousedown', $.jfGrid.bindmdown);
  31. $self.on('click', $.jfGrid.bindClick);
  32. $self.mousemove($.jfGrid.bindmmove);
  33. $self.on('mouseover', $.jfGrid.bindmover);
  34. // 加载数据
  35. if (!!dfop.rowdatas && !dfop.url) {
  36. if (dfop.isEidt && dfop.rowdatas.length == 0) {
  37. dfop.rowdatas.push({});//
  38. }
  39. $.jfGrid.renderData($self);
  40. }
  41. $self.css({ 'min-height': dfop.minheight });
  42. if (dfop.height > 0) {
  43. $self.css({ 'height': dfop.height });
  44. }
  45. dfop = null;
  46. return;
  47. },
  48. renderHead: function ($self) {// 渲染表格头部
  49. var dfop = $self[0].dfop;
  50. dfop._headWidth = 0;
  51. dfop._leftWidth = 0;
  52. dfop._headHeight = 0;
  53. dfop._colModel = [];
  54. dfop._colFrozenModel = [];
  55. var $head = $('<div class="jfgrid-head" id="jfgrid_head_' + dfop.id + '" ></div>');
  56. var $border = $('<div class="jfgrid-border" id="jfgrid_border_' + dfop.id + '" ></div>');
  57. var $borderCol = $('<div class="jfgrid-border-col" id="jfgrid_border_col_' + dfop.id + '" ></div>');
  58. var len = dfop.headData.length;
  59. for (var i = 0; i < len; i++) {
  60. var cell = dfop.headData[i];
  61. var left = cell.frozen ? dfop._leftWidth : dfop._headWidth;
  62. cell.height = 28;
  63. var $cell = $('<div class="jfgrid-head-cell jfgrid-heed-rownum_0" path="' + i + '" >' + (cell.label || "") + '</div>');
  64. cell.obj = $cell;
  65. cell.path = i;
  66. if (!!cell.children) {// 如果有子列
  67. if (cell.frozen) {
  68. $.jfGrid.renderSubHead($borderCol, cell, dfop, dfop._leftWidth, 1, true, i);
  69. }
  70. else {
  71. $.jfGrid.renderSubHead($head, cell, dfop, dfop._headWidth, 1, false, i);
  72. }
  73. }
  74. else {
  75. $cell.attr('jfgrid-heed-cellrender', 'ok');
  76. $cell.append('<div class="jfgrid-heed-sort"><i class="fa fa-caret-up"></i><i class="fa fa-caret-down"></i></div>');
  77. $cell.append('<div class="jfgrid-heed-move"></div>');
  78. if (cell.frozen) {
  79. dfop._colFrozenModel[dfop._colFrozenModel.length] = cell;
  80. } else {
  81. dfop._colModel[dfop._colModel.length] = cell;
  82. }
  83. cell.type = 'datacol';
  84. }
  85. cell.left = left;
  86. $cell.css({ 'width': ((cell.width || 100) + 'px'), 'text-align': (cell.align || 'left'), 'left': (left + 'px') });
  87. dfop._headHeight = dfop._headHeight > cell.height ? dfop._headHeight : cell.height;
  88. if (cell.frozen) {
  89. dfop._leftWidth += cell.width;
  90. $borderCol.append($cell);
  91. } else {
  92. dfop._headWidth += cell.width;
  93. $head.append($cell);
  94. }
  95. }
  96. if (dfop._headHeight > 28) {
  97. $head.find('.jfgrid-heed-rownum_0[jfgrid-heed-cellrender="ok"]').css({
  98. 'height': (dfop._headHeight + 'px'),
  99. 'line-height': ((dfop._headHeight - 1) + 'px')
  100. });
  101. $borderCol.find('.jfgrid-heed-rownum_0[jfgrid-heed-cellrender="ok"]').css({
  102. 'height': (dfop._headHeight + 'px'),
  103. 'line-height': ((dfop._headHeight - 1) + 'px')
  104. });
  105. for (var j = 0; j < len; j++) {
  106. var cell = dfop.headData[j];
  107. if (!!cell.children && cell.height < dfop._headHeight) {
  108. if (!!cell.children) {
  109. $.jfGrid.renderSubHeadToo(cell.children, dfop._headHeight - cell.height);
  110. }
  111. else {
  112. cell.obj.css({
  113. 'height': (dfop._headHeight - cell.height + 28 + 'px'),
  114. 'line-height': ((dfop._headHeight - cell.height + 27) + 'px')
  115. });
  116. }
  117. }
  118. }
  119. }
  120. $border.append($borderCol);
  121. $self.append($border);
  122. $self.append($head);
  123. dfop = null;
  124. },
  125. renderSubHead: function ($head, parentCell, dfop, left, level, frozen, path) {// 渲染子表头
  126. parentCell.width = 0;
  127. var chs = parentCell.children;
  128. var len = chs.length;
  129. var _height = 28;
  130. for (var i = 0; i < len; i++) {
  131. var cell = chs[i];
  132. cell.height = 28;
  133. cell.parent = parentCell;
  134. var $cell = $('<div class="jfgrid-head-cell jfgrid-heed-rownum_' + level + '" path="' + path + '.' + i + '" >' + (cell.label || "") + '</div>');
  135. cell.obj = $cell;
  136. cell.path = i;
  137. if (!!cell.children) {// 如果有子列
  138. $.jfGrid.renderSubHead($head, cell, dfop, left + parentCell.width, level + 1, frozen, path + '.' + i);
  139. }
  140. else {
  141. $cell.attr('jfgrid-heed-cellrender', 'ok');
  142. $cell.append('<div class="jfgrid-heed-sort"><i class="fa fa-caret-up"></i><i class="fa fa-caret-down"></i></div>');
  143. $cell.append('<div class="jfgrid-heed-move"></div>');
  144. if (frozen) {
  145. cell.frozen = true;
  146. dfop._colFrozenModel[dfop._colFrozenModel.length] = cell;
  147. } else {
  148. dfop._colModel[dfop._colModel.length] = cell;
  149. }
  150. cell.type = 'datacol';
  151. }
  152. cell.left = left + parentCell.width;
  153. $cell.css({
  154. 'width': ((cell.width || 100) + 'px'),
  155. 'text-align': (cell.align || left),
  156. 'left': (left + parentCell.width + 'px'),
  157. 'top': (level * 28 + 'px')
  158. });
  159. parentCell.width += cell.width;
  160. _height = cell.height > _height ? cell.height : _height;
  161. $head.append($cell);
  162. }
  163. if (_height > 28) {
  164. $head.find('.jfgrid-heed-rownum_' + level + '[jfgrid-heed-cellrender="ok"]').css({
  165. 'height': (_height + 'px'),
  166. 'line-height': ((_height - 1) + 'px')
  167. });
  168. }
  169. parentCell.height += _height;
  170. },
  171. renderSubHeadToo: function (children, height) {
  172. var l = children.length;
  173. for (var i = 0; i < l; i++) {
  174. var $obj = children[i].obj;
  175. if (!!children[i].children) {
  176. $.jfGrid.renderSubHeadToo(children[i].children, height);
  177. }
  178. else {
  179. $obj.css({
  180. 'height': (height + children[i].height + 'px'),
  181. 'line-height': ((children[i].height + height - 1) + 'px')
  182. });
  183. }
  184. }
  185. },
  186. renderBorder: function ($self) {// 渲染表格交界处
  187. var dfop = $self[0].dfop;
  188. // 头部和左侧交界部分
  189. var $border = $self.find('#jfgrid_border_' + dfop.id);
  190. var $head = $self.find('#jfgrid_head_' + dfop.id);
  191. var _width = 0;
  192. if (dfop.isShowNum) {
  193. var $num = $('<div class="jfgrid-border-cell jfgrid-border-num"></div>');
  194. $border.prepend($num);
  195. _width += 30;
  196. }
  197. if (dfop.isMultiselect) {
  198. var $cb = $('<div class="jfgrid-border-cell jfgrid-border-cb"><input role="checkbox" id="jfgrid_all_cb_' + dfop.id + '" type="checkbox"></div>')
  199. .css('left', _width + 'px').css('line-height', (dfop._headHeight - 1) + 'px');
  200. $border.prepend($cb);
  201. _width += 30;
  202. }
  203. if (dfop.isSubGrid) {
  204. var $sub = $('<div class="jfgrid-border-cell jfgrid-border-sub"></div>').css('left', _width + 'px');
  205. $border.prepend($sub);
  206. _width += 30;
  207. }
  208. dfop._borderLeftPadding = _width;
  209. dfop._leftWidth += _width;
  210. //dfop._headWidth -= _width;
  211. $border.css({
  212. 'width': (dfop._leftWidth + 'px'),
  213. 'height': (dfop._headHeight + 'px'),
  214. 'padding-left': (_width + 'px')
  215. });
  216. $head.css({
  217. 'width': (dfop._headWidth + 'px'),
  218. 'height': (dfop._headHeight + 'px'),
  219. 'left': (dfop._leftWidth + 'px')
  220. });
  221. $self.css({
  222. 'padding-left': (dfop._leftWidth + 'px'),
  223. 'padding-top': (dfop._headHeight + 'px')
  224. });
  225. dfop = null;
  226. },
  227. renderLeft: function ($self) {
  228. var dfop = $self[0].dfop;
  229. var $left = $('<div class="jfgrid-left" id="jfgrid_left_' + dfop.id + '" ></div>');
  230. $left.css({ 'width': (dfop._leftWidth + 'px'), 'top': (dfop._headHeight + 'px') });
  231. $self.append($left);
  232. dfop = null;
  233. },
  234. renderScorllArea: function ($self) {
  235. var dfop = $self[0].dfop;
  236. // 滚动显示区域
  237. var $scrollArea = $('<div class="jfgrid-scrollarea" id="jfgrid_scrollarea_' + dfop.id + '" ><div class="jfgrid-scrollarea-content" id="jfgrid_scrollarea_content_' + dfop.id + '" style="width:' + dfop._headWidth + 'px;" ></div></div>');
  238. $self.append($scrollArea);
  239. $scrollArea.mCustomScrollbar({ // 优化滚动条
  240. axis: "xy",
  241. setLeft: 0,
  242. callbacks: {
  243. whileScrolling: function () {
  244. var dfop = $(this.mcs.content)[0].jfGridDfop;
  245. if (!!dfop) {
  246. $('#jfgrid_left_' + dfop.id).css('top', (dfop._headHeight + this.mcs.top) + 'px');
  247. $('#jfgrid_head_' + dfop.id).css('left', (dfop._leftWidth + this.mcs.left) + 'px');
  248. $('#jfgrid_statistics_' + dfop.id).css('left', (dfop._leftWidth + this.mcs.left) + 'px');
  249. }
  250. },
  251. onOverflowYNone: function (e) {
  252. if (!!this.mcs) {
  253. var dfop = $(this.mcs.content)[0].jfGridDfop;
  254. $('#jfgrid_left_' + dfop.id).css('top', dfop._headHeight + 'px');
  255. }
  256. },
  257. onOverflowXNone: function (e) {
  258. if (!!this.mcs) {
  259. var dfop = $(this.mcs.content)[0].jfGridDfop;
  260. $('#jfgrid_head_' + dfop.id).css('left', dfop._leftWidth + 'px');
  261. $('#jfgrid_statistics_' + dfop.id).css('left', dfop._leftWidth + 'px');
  262. }
  263. },
  264. onUpdate: function () {
  265. if (!!this.mcs) {
  266. var dfop = $(this.mcs.content)[0].jfGridDfop;
  267. $('#jfgrid_scrollarea_' + dfop.id).mCustomScrollbar("scrollTo", "left", {
  268. scrollInertia: 0,
  269. timeout: 0
  270. });
  271. }
  272. }
  273. }
  274. });
  275. $scrollArea.find('#jfgrid_scrollarea_content_' + dfop.id).parent()[0].jfGridDfop = dfop;
  276. dfop = null;
  277. },
  278. renderPageBarinit: function ($self) {
  279. var dfop = $self[0].dfop;
  280. if (dfop.isPage && dfop.url) {
  281. $self.css({ 'padding-bottom': '35px' });
  282. var $pagebar = $('<div class="jfgrid-page-bar" id="jfgrid_page_bar_' + dfop.id + '"><div class="jfgrid-page-bar-info" >无显示数据</div>\
  283. <div class="paginations" id="jfgrid_page_bar_nums_'+ dfop.id + '" style="display:none;" >\
  284. <ul class="pagination pagination-sm"><li><a href="javascript:void(0);" class="pagebtn">首页</a></li></ul>\
  285. <ul class="pagination pagination-sm"><li><a href="javascript:void(0);" class="pagebtn">上一页</a></li></ul>\
  286. <ul class="pagination pagination-sm" id="jfgrid_page_bar_num_' + dfop.id + '" ></ul>\
  287. <ul class="pagination pagination-sm"><li><a href="javascript:void(0);" class="pagebtn">下一页</a></li></ul>\
  288. <ul class="pagination pagination-sm"><li><a href="javascript:void(0);" class="pagebtn">尾页</a></li></ul>\
  289. <ul class="pagination"><li><span></span></li></ul>\
  290. <ul class="pagination"><li><input type="text" class="form-control"></li></ul>\
  291. <ul class="pagination pagination-sm"><li><a href="javascript:void(0);" class="pagebtn">跳转</a></li></ul>\
  292. </div></div>');
  293. $self.append($pagebar);
  294. var $pagebarBtn = $pagebar.find('#jfgrid_page_bar_num_' + dfop.id);
  295. $pagebarBtn.on('click', $.jfGrid.reloadPage);
  296. $('#jfgrid_page_bar_nums_' + dfop.id + ' .pagebtn').on('click', { op: dfop }, $.jfGrid.reloadPage2);
  297. }
  298. dfop = null;
  299. },
  300. renderPageBar: function ($self) {
  301. var dfop = $self[0].dfop;
  302. var $pagebar = $('#jfgrid_page_bar_' + dfop.id);
  303. var $pagebarBtn = $pagebar.find('#jfgrid_page_bar_num_' + dfop.id);
  304. var $pagebarBtns = $pagebar.find('#jfgrid_page_bar_nums_' + dfop.id);
  305. var pagebarLabel = '';
  306. var btnlist = "";
  307. if (dfop.rowdatas.length == 0) {
  308. pagebarLabel = '无显示数据';
  309. }
  310. else {
  311. var pageparam = dfop.pageparam;
  312. var beginnum = (pageparam.page - 1) * pageparam.rows + 1;
  313. var endnum = beginnum + dfop.rowdatas.length - 1;
  314. pagebarLabel = '显示第 ' + beginnum + ' - ' + endnum + ' 条记录 <span>|</span> 检索到 ' + pageparam.records + ' 条记录';
  315. if (pageparam.total > 1) {
  316. var bpage = pageparam.page - 6;
  317. bpage = bpage < 0 ? 0 : bpage;
  318. var epage = bpage + 10;
  319. if (epage > pageparam.total) {
  320. epage = pageparam.total;
  321. }
  322. if ((epage - bpage) < 10) {
  323. bpage = epage - 10;
  324. }
  325. bpage = bpage < 0 ? 0 : bpage;
  326. for (var i = bpage; i < epage; i++) {
  327. btnlist += '<li><a href="javascript:void(0);" class=" pagebtn ' + ((i + 1) == pageparam.page ? 'active' : '') + '" >' + (i + 1) + '</a></li>';
  328. }
  329. $pagebarBtns.find('span').text('共' + pageparam.total + '页,到');
  330. $pagebarBtns.show();
  331. }
  332. else {
  333. $pagebarBtns.hide();
  334. }
  335. }
  336. $pagebarBtn.html(btnlist);
  337. $pagebar.find('.jfgrid-page-bar-info').html(pagebarLabel);
  338. dfop = null;
  339. },
  340. renderFooterrow: function ($self) {
  341. var dfop = $self[0].dfop;
  342. if (dfop.footerrow && !dfop.isPage) {
  343. $self.css({ 'padding-bottom': '29px' });
  344. var $footerrow = $('<div class="jfgrid-footerrow" id="jfgrid_footerrow_' + dfop.id + '"></div>');
  345. $self.append($footerrow);
  346. }
  347. dfop = null;
  348. },
  349. renderToolBar: function ($self) {
  350. var dfop = $self[0].dfop;
  351. if (dfop.isEidt) {
  352. var $toolbar = $('<div class="jfgrid-toolbar" id="jfgrid_toolbar_' + dfop.id + '"></div>');
  353. var $add = $('<span><i class="fa fa-plus"></i></span>');
  354. var $minus = $('<span><i class="fa fa-minus"></i></span>');
  355. $add.on('click', function () {
  356. dfop.rowdatas.push({});
  357. $.jfGrid.renderData($self);
  358. });
  359. $minus.on('click', function () {
  360. var iMap = {};
  361. var flag = false;
  362. $self.find('.jfgrid_selected_' + dfop.id + '[datapath]').each(function () {
  363. var _index = $(this).attr('datapath');
  364. iMap[_index] = '1';
  365. flag = true;
  366. });
  367. if (flag) {
  368. var _rows = [];
  369. for (var i = 0, l = dfop.rowdatas.length; i < l; i++) {
  370. if (!iMap[i]) {
  371. _rows.push(dfop.rowdatas[i]);
  372. }
  373. }
  374. if (_rows.length == 0) {
  375. _rows.push({});
  376. }
  377. dfop.rowdatas = _rows;
  378. $.jfGrid.renderData($self);
  379. }
  380. else {
  381. top.learun.alert.warning('请选择需要删除的行!');
  382. }
  383. });
  384. $toolbar.append($add);
  385. $toolbar.append($minus);
  386. $self.append($toolbar);
  387. }
  388. },
  389. // 合计条
  390. renderStatistics: function ($self) {
  391. var dfop = $self[0].dfop;
  392. if (dfop.isStatistics) {
  393. var $footerrow = $self.find('#jfgrid_footerrow_' + dfop.id);
  394. var $statistics = $footerrow.find('#jfgrid_statistics_' + dfop.id);
  395. if ($statistics.length == 0) {
  396. $statistics = $('<div class="jfgrid-statistics" id="jfgrid_statistics_' + dfop.id + '" ></div>');
  397. $footerrow.append($statistics);
  398. $statistics.css({
  399. 'width': (dfop._headWidth + 'px'),
  400. 'left': (dfop._leftWidth + 'px')
  401. });
  402. }
  403. $statistics.html("");
  404. var sindex = -1;
  405. var $dcell;
  406. for (var n = 0, nl = dfop._colModel.length; n < nl; n++) {
  407. var col = dfop._colModel[n];
  408. var vaule = 0;
  409. if (col.statistics) {
  410. if (sindex == -1) {
  411. sindex = 0;
  412. if (!!$dcell) {
  413. $dcell.html('合计:');
  414. }
  415. }
  416. for (var i = 0, l = dfop.rowdatas.length; i < l; i++) {
  417. var item = dfop.rowdatas[i];
  418. if (item[col.name] != undefined && item[col.name] != null && item[col.name] != "") {
  419. vaule += parseFloat(item[col.name]);
  420. }
  421. }
  422. }
  423. $dcell = $('<div class="jfgrid-data-cell" colname="' + col.name + '" style="width:' + col.width + 'px;text-align:' + col.align + ';" ></div>');
  424. if (col.statistics) {
  425. $dcell.html(vaule);
  426. $dcell.attr('title', col.label);
  427. }
  428. $statistics.append($dcell);
  429. }
  430. }
  431. dfop = null;
  432. },
  433. renderStatisticsOne: function ($self, name) {
  434. var dfop = $self[0].dfop;
  435. if (dfop.isStatistics) {
  436. var $statistics = $self.find('#jfgrid_statistics_' + dfop.id);
  437. var vaule = 0;
  438. for (var i = 0, l = dfop.rowdatas.length; i < l; i++) {
  439. var item = dfop.rowdatas[i];
  440. if (item[name] != undefined && item[name] != null && item[name] != "") {
  441. vaule += parseFloat(item[name]);
  442. }
  443. }
  444. $statistics.find('[colname="' + name + '"]').html(vaule);
  445. }
  446. dfop = null;
  447. },
  448. /*刷新方法*/
  449. reload: function ($self) {
  450. var dfop = $self[0].dfop;
  451. dfop.rowdatas = [];
  452. if (dfop.isPage) {
  453. dfop.pageparam.page = dfop.pageparam.page || 1;
  454. dfop.pageparam.records = 0;
  455. dfop.pageparam.total = 0;
  456. dfop.param['pagination'] = JSON.stringify(dfop.pageparam);
  457. $.jfGrid.ajaxLoad($self, dfop.url, dfop.param, function (res) {
  458. if (res.code == 200) {
  459. dfop.rowdatas = res.data.rows;
  460. dfop.pageparam.page = res.data.page;
  461. dfop.pageparam.records = res.data.records;
  462. dfop.pageparam.total = res.data.total;
  463. }
  464. else {
  465. dfop.rowdatas = [];
  466. dfop.pageparam.page = 1;
  467. dfop.pageparam.records = 0;
  468. dfop.pageparam.total = 0;
  469. }
  470. $.jfGrid.renderData($self);
  471. if (!!dfop.onRenderComplete) {
  472. dfop.onRenderComplete(res.data.rows);
  473. }
  474. });
  475. } else {
  476. $.jfGrid.ajaxLoad($self, dfop.url, dfop.param, function (res) {
  477. if (res.code == 200) {
  478. dfop.rowdatas = res.data;
  479. }
  480. else {
  481. dfop.rowdatas = [];
  482. }
  483. $.jfGrid.renderData($self);
  484. if (!!dfop.onRenderComplete) {
  485. dfop.onRenderComplete(dfop.rowdatas);
  486. }
  487. });
  488. }
  489. },
  490. reloadPage: function (e) {
  491. var $this = $(this);
  492. var $self = $('#' + $this.attr('id').replace('jfgrid_page_bar_num_', ''));
  493. var dfop = $self[0].dfop;
  494. var et = e.target || e.srcElement;
  495. var $et = $(et);
  496. if ($et.hasClass('pagebtn')) {
  497. var page = parseInt($et.text());
  498. if (page != dfop.pageparam.page) {
  499. $this.find('.active').removeClass('active');
  500. $et.addClass('active');
  501. dfop.pageparam.page = page;
  502. dfop.param['pagination'] = JSON.stringify(dfop.pageparam);
  503. $.jfGrid.ajaxLoad($self, dfop.url, dfop.param, function (res) {
  504. if (res.code == 200) {
  505. dfop.rowdatas = res.data.rows;
  506. dfop.pageparam.page = res.data.page;
  507. dfop.pageparam.records = res.data.records;
  508. dfop.pageparam.total = res.data.total;
  509. }
  510. $.jfGrid.renderData($self);
  511. });
  512. }
  513. }
  514. },
  515. reloadPage2: function (e) {
  516. var $this = $(this);
  517. var dfop = e.data.op;
  518. var name = $this.text();
  519. var $pagenum = $('#jfgrid_page_bar_num_' + dfop.id);
  520. var page = parseInt($pagenum.find('.active').text());
  521. var falg = false;
  522. switch (name) {
  523. case '首页':
  524. if (page != 1) {
  525. dfop.pageparam.page = 1;
  526. falg = true;
  527. }
  528. break;
  529. case '上一页':
  530. if (page > 1) {
  531. dfop.pageparam.page = page - 1;
  532. falg = true;
  533. }
  534. break;
  535. case '下一页':
  536. if (page < dfop.pageparam.total) {
  537. dfop.pageparam.page = page + 1;
  538. falg = true;
  539. }
  540. break;
  541. case '尾页':
  542. if (page != dfop.pageparam.total) {
  543. dfop.pageparam.page = dfop.pageparam.total;
  544. falg = true;
  545. }
  546. break;
  547. case '跳转':
  548. var text = $this.parents('#jfgrid_page_bar_nums_' + dfop.id).find('input').val();
  549. if (!!text) {
  550. var p = parseInt(text);
  551. if (String(p) != 'NaN') {
  552. if (p < 1) {
  553. p = 1;
  554. }
  555. if (p > dfop.pageparam.total) {
  556. p = dfop.pageparam.total;
  557. }
  558. dfop.pageparam.page = p;
  559. falg = true;
  560. }
  561. }
  562. break;
  563. }
  564. if (falg) {
  565. dfop.param['pagination'] = JSON.stringify(dfop.pageparam);
  566. $.jfGrid.ajaxLoad($('#' + dfop.id), dfop.url, dfop.param, function (res) {
  567. if (res.code == 200) {
  568. dfop.rowdatas = res.data.rows;
  569. dfop.pageparam.page = res.data.page;
  570. dfop.pageparam.records = res.data.records;
  571. dfop.pageparam.total = res.data.total;
  572. }
  573. $.jfGrid.renderData($('#' + dfop.id));
  574. });
  575. }
  576. },
  577. renderData: function ($self) {
  578. var dfop = $self[0].dfop;
  579. if (dfop.isPage) {
  580. /*做一下分页数据的处理*/
  581. $.jfGrid.renderRowData($self, dfop.rowdatas);
  582. $.jfGrid.renderPageBar($self);
  583. }
  584. else if (dfop.isTree) {
  585. /*做一下树形数据的处理*/
  586. if (dfop.datatype != 'tree') {
  587. dfop.rowdatas = $.jfGrid.listTotree(dfop.rowdatas, dfop.parentId, dfop.mainId, dfop);
  588. }
  589. $.jfGrid.renderTreeRowData($self, dfop.rowdatas);
  590. }
  591. else {
  592. $.jfGrid.renderRowData($self, dfop.rowdatas);
  593. }
  594. $.jfGrid.renderStatistics($self);
  595. dfop = null;
  596. },
  597. renderRowData: function ($self, data) {
  598. var dfop = $self[0].dfop;
  599. var $letf = $self.find('#jfgrid_left_' + dfop.id);
  600. var $scrollareaContent = $self.find('#jfgrid_scrollarea_content_' + dfop.id);
  601. var $bgimg = $self.find('#jfgrid_nodata_img_' + dfop.id);
  602. $bgimg.hide();
  603. /*当前选中项*/
  604. var selectedRow;
  605. if (dfop.reloadSelected && !dfop.isMultiselect) {
  606. selectedRow = $.jfGrid.getSelectedRow($self);
  607. }
  608. $letf.html("");
  609. $scrollareaContent.html("");
  610. data = data || [];
  611. var len = data.length;
  612. for (var i = 0; i < len; i++) {//行循环
  613. var _row = data[i];
  614. var $lastCell = null;
  615. var rownum = 'rownum_' + dfop.id + '_' + i;
  616. $letf.append('<div class="jfgrid-data-cell jfgrid-hide-cell" rownum="' + rownum + '" datapath="' + i + '" ></div>');
  617. if (dfop.isShowNum) {
  618. var $dcell = $('<div class="jfgrid-data-cell jfgrid-tool-cell" rownum="' + rownum + '" colname="jfgrid_rownum" >' + (i + 1) + '</div>');
  619. $letf.append($dcell);
  620. $lastCell = $dcell;
  621. }
  622. if (dfop.isMultiselect) {
  623. // 如果是多选绑定字段
  624. var ck = '';
  625. //if (!!dfop.multiselectfield && parseInt(_row[dfop.multiselectfield]) == 1) {
  626. // ck = 'checked';
  627. //}
  628. var $dcell = $('<div class="jfgrid-data-cell jfgrid-tool-cell" rownum="' + rownum + '" colname="jfgrid_multiselect" ><input role="checkbox" type="checkbox" ></div>');
  629. $letf.append($dcell);
  630. $lastCell = $dcell;
  631. }
  632. if (dfop.isSubGrid) {
  633. var $dcell = $('<div class="jfgrid-data-cell jfgrid-tool-cell" rownum="' + rownum + '" colname="jfgrid_subGrid"><i class="fa fa-plus jfgrid_expend" rownum="' + rownum + '" ></i></div>');
  634. $letf.append($dcell);
  635. $lastCell = $dcell;
  636. }
  637. for (var m = 0, ml = dfop._colFrozenModel.length; m < ml; m++) {// 左侧固定列
  638. var $dcell = $('<div class="jfgrid-data-cell" rownum="' + rownum + '" colname="' + dfop._colFrozenModel[m].name + '" style="width:' + dfop._colFrozenModel[m].width + 'px;text-align:' + dfop._colFrozenModel[m].align + ';" title="' + (_row[dfop._colFrozenModel[m].name] || "") + '" ></div>');
  639. if (m == ml - 1) {
  640. $lastCell = $dcell;
  641. }
  642. $.jfGrid.getCellHtml(dfop._colFrozenModel[m], _row, dfop, $dcell, i)
  643. $letf.append($dcell);
  644. }
  645. if (!!$lastCell) {
  646. $lastCell.addClass('jfgrid-data-cell-last');
  647. }
  648. for (var n = 0, nl = dfop._colModel.length; n < nl; n++) {// 右侧滚动显示区域
  649. var $dcell = $('<div class="jfgrid-data-cell" rownum="' + rownum + '" colname="' + dfop._colModel[n].name + '" style="width:' + dfop._colModel[n].width + 'px;text-align:' + dfop._colModel[n].align + ';" title="' + (_row[dfop._colModel[n].name] || "") + '" ></div>');
  650. if (n == nl - 1) {
  651. $dcell.addClass('jfgrid-data-cell-last');
  652. }
  653. $.jfGrid.getCellHtml(dfop._colModel[n], _row, dfop, $dcell, i)
  654. $scrollareaContent.append($dcell);
  655. }
  656. // 是否刷新被选中
  657. if (dfop.reloadSelected && !dfop.isMultiselect && !!selectedRow && _row[dfop.mainId] == selectedRow[dfop.mainId]) {
  658. $self.find('.jfgrid-data-cell[rownum="' + rownum + '"]').addClass('jfgrid-head-cell-selected').addClass('jfgrid_selected_' + dfop.id);
  659. }
  660. if (!!dfop.multiselectfield && parseInt(_row[dfop.multiselectfield]) == 1) {
  661. $self.find('.jfgrid-data-cell[rownum="' + rownum + '"][colname="jfgrid_multiselect"] input').trigger('click');
  662. }
  663. }
  664. if (len == 0) {// 没有数据显示背景图片
  665. $bgimg.show();
  666. }
  667. else {
  668. if (dfop.isAutoHeight) {
  669. var _height = 28 * len;
  670. var _top = $self.css('padding-top');
  671. if (dfop.footerrow && !dfop.isPage) {
  672. _height = parseInt(_height) + 29;
  673. }
  674. $self.css({ 'height': (parseInt(_height) + parseInt(_top) + 2) });
  675. }
  676. }
  677. dfop = null;
  678. },//刷新数据
  679. renderTreeRowData: function ($self, data) {
  680. var dfop = $self[0].dfop;
  681. var $letf = $self.find('#jfgrid_left_' + dfop.id);
  682. var $scrollareaContent = $self.find('#jfgrid_scrollarea_content_' + dfop.id);
  683. var $bgimg = $self.find('#jfgrid_nodata_img_' + dfop.id);
  684. /*当前选中项*/
  685. var selectedRow;
  686. if (dfop.reloadSelected && !dfop.isMultiselect) {
  687. selectedRow = $.jfGrid.getSelectedRow($self);
  688. }
  689. var rownum = 0;
  690. $bgimg.hide();
  691. $letf.html("");
  692. $scrollareaContent.html("");
  693. data = data || [];
  694. if (data.length > 0) {
  695. _fn(data, 1, '');
  696. }
  697. else {
  698. $bgimg.show();
  699. }
  700. function _fn(_data, deep, path) {
  701. for (var j = 0, l = _data.length; j < l; j++) {
  702. var _row = _data[j];
  703. var $expendcell = $('<div class="jfgrid-data-cell-expend" style="width:' + (deep * 16) + 'px;" ></div>');
  704. _row["jfgrid_rownum"] = rownum;
  705. var rownumindex = 'rownum_' + dfop.id + '_' + rownum;
  706. var $lastCell = null;
  707. $letf.append('<div class="jfgrid-data-cell jfgrid-hide-cell" rownum="' + rownumindex + '" datapath="' + path + j + '" ></div>');
  708. if (dfop.isShowNum) {
  709. var $dcell = $('<div class="jfgrid-data-cell jfgrid-tool-cell" rownum="' + rownumindex + '" colname="jfgrid_rownum" >' + (rownum + 1) + '</div>');
  710. $letf.append($dcell);
  711. $lastCell = $dcell;
  712. }
  713. if (dfop.isMultiselect) {
  714. // 如果是多选绑定字段
  715. var ck = '';
  716. //if (!!dfop.multiselectfield && parseInt(_row[dfop.multiselectfield]) == 1) {
  717. // ck = 'checked';
  718. //}
  719. var $dcell = $('<div class="jfgrid-data-cell jfgrid-tool-cell" rownum="' + rownumindex + '" colname="jfgrid_multiselect" ><input role="checkbox" type="checkbox" ></div>');
  720. $letf.append($dcell);
  721. $lastCell = $dcell;
  722. }
  723. if (dfop.isSubGrid) {
  724. var $dcell = $('<div class="jfgrid-data-cell jfgrid-tool-cell" rownum="' + rownumindex + '" colname="jfgrid_subGrid"><i class="fa fa-plus jfgrid_expend" rownum="' + rownumindex + '" ></i></div>');
  725. $letf.append($dcell);
  726. $lastCell = $dcell;
  727. }
  728. for (var m = 0, ml = dfop._colFrozenModel.length; m < ml; m++) {// 左侧固定列
  729. var $dcell = $('<div class="jfgrid-data-cell" rownum="' + rownumindex + '" colname="' + dfop._colFrozenModel[m].name + '" style="width:' + dfop._colFrozenModel[m].width + 'px;text-align:' + dfop._colFrozenModel[m].align + ';" title="' + (_row[dfop._colFrozenModel[m].name] || "") + '" >' + (_row[dfop._colFrozenModel[m].name] || "") + '</div>');
  730. $.jfGrid.getCellHtml(dfop._colFrozenModel[m], _row, dfop, $dcell, j)
  731. if (m == 0) {
  732. $dcell.prepend($expendcell);
  733. }
  734. if (m == ml - 1) {
  735. $lastCell = $dcell;
  736. }
  737. $letf.append($dcell);
  738. }
  739. if (!!$lastCell) {
  740. $lastCell.addClass('jfgrid-data-cell-last');
  741. }
  742. for (var n = 0, nl = dfop._colModel.length; n < nl; n++) {// 右侧滚动显示区域
  743. var $dcell = $('<div class="jfgrid-data-cell" rownum="' + rownumindex + '" colname="' + dfop._colModel[n].name + '" style="width:' + dfop._colModel[n].width + 'px;text-align:' + dfop._colModel[n].align + ';" title="' + (_row[dfop._colModel[n].name] || "") + '" >' + (_row[dfop._colModel[n].name] || "") + '</div>');
  744. $.jfGrid.getCellHtml(dfop._colModel[n], _row, dfop, $dcell, j);
  745. if (n == 0 && dfop._colFrozenModel.length == 0) {
  746. $dcell.prepend($expendcell);
  747. }
  748. if (n == nl - 1) {
  749. $dcell.addClass('jfgrid-data-cell-last');
  750. }
  751. $scrollareaContent.append($dcell);
  752. }
  753. // 是否刷新被选中
  754. if (dfop.reloadSelected && !dfop.isMultiselect && !!selectedRow && _row[dfop.mainId] == selectedRow[dfop.mainId]) {
  755. $self.find('.jfgrid-data-cell[rownum="' + rownumindex + '"]').addClass('jfgrid-head-cell-selected').addClass('jfgrid_selected_' + dfop.id);
  756. }
  757. if (!!dfop.multiselectfield && parseInt(_row[dfop.multiselectfield]) == 1) {
  758. $self.find('.jfgrid-data-cell[rownum="' + rownum + '"][colname="jfgrid_multiselect"] input').trigger('click');
  759. }
  760. rownum++;
  761. if (_row.jfGrid_ChildRows.length > 0) {
  762. $expendcell.append('<i class="fa fa-caret-down jfgrid-data-cell-expendi"></i>');
  763. _fn(_row.jfGrid_ChildRows, deep + 1, path + j + '.');
  764. }
  765. }
  766. };
  767. dfop = null;
  768. },
  769. renderPage: function (dfop) {// 刷新分页
  770. var $pagebar = $('#jfgrid_page_bar_' + dfop.id);
  771. if (!!dfop._pagination && dfop._pagination.total > 1) {
  772. var $previous = $('<li title="上一页" ><a href="#" aria-label="上一页"><span aria-hidden="true">&laquo;</span></a></li>');
  773. var $next = $('<li title="下一页"><a href="#" aria-label="下一页"><span aria-hidden="true">&raquo;</span></a></li>');
  774. }
  775. },
  776. getCellHtml: function (node, row, dfop, $dcell, rownum) {
  777. var res = '';
  778. var value = row[node.name];
  779. if (!!node.editType) {
  780. switch (node.editType) {
  781. case 'input':
  782. var $input = $('<input type="text" class="form-control" />').val(value || '');
  783. $input.css({ 'text-align': node.align });
  784. $input.on('input propertychange', function () {
  785. var _$input = $(this);
  786. row[node.name] = _$input.val();
  787. if (node.statistics) {
  788. $.jfGrid.renderStatisticsOne($('#' + dfop.id), node.name);
  789. }
  790. if (!!node.editOp && !!node.editOp.callback) {
  791. node.editOp.callback(rownum, row);
  792. $.jfGrid.renderData($('#' + dfop.id));
  793. $('[rownum="rownum_' + dfop.id + '_' + rownum + '"][colname="' + node.name + '"]>input').focus();
  794. }
  795. });
  796. $dcell.html($input);
  797. if (!!node.formatter) {
  798. node.formatter(value, row, dfop, $dcell);
  799. }
  800. break;
  801. case 'label':
  802. var $label = $('<span class="form-label" >' + (value || '') + '</span>');
  803. $label.css({ 'text-align': node.align });
  804. $dcell.html($label);
  805. break;
  806. case 'select':
  807. var $label = $('<div class="form-select" >' + (value || '') + '<i class="fa fa-ellipsis-h"></i></div>');
  808. $label.css({ 'text-align': node.align });
  809. $label.find('.fa-ellipsis-h')[0]._node = node;
  810. $label.find('.fa-ellipsis-h').on('click', function () {
  811. var _node = $(this)[0]._node;
  812. $.jfGrid.layer({
  813. html: '<div class="jfgird-select"><div class="jfgird-select-tool"><div class="jfgird-select-tool-item"><input id="jfgird_select_keyword" style="width:200px;" type="text" class="form-control" placeholder="请输入要查询关键字"></div><div class="jfgird-select-tool-item"><a id="jfgird_select_search" class="btn btn-primary btn-sm"><i class="fa fa-search"></i>&nbsp;查询</a></div></div><div id="jfgird_select"></div></div>',
  814. width: _node.editOp.width || 400,
  815. height: _node.editOp.height || 400
  816. },
  817. function ($html) {
  818. $html.find('#jfgird_select').jfGrid({
  819. headData: _node.editOp.colData,
  820. url: _node.editOp.url,
  821. onRenderComplete: function (rowdatas) {
  822. _node.editOp.rowdatas = rowdatas;
  823. },
  824. onSelectRow: function (rowdata) {
  825. if (!!_node.editOp.callback) {
  826. _node.editOp.callback(rowdata, rownum, row, _node.editOp.selectData);
  827. }
  828. $html.remove();
  829. $.jfGrid.renderData($('#' + dfop.id));
  830. }
  831. });
  832. if (!!_node.editOp.rowdatas) {
  833. $html.find('#jfgird_select').jfGridSet('refreshdata', { rowdatas: _node.editOp.rowdatas });
  834. }
  835. else {
  836. $html.find('#jfgird_select').jfGridSet('reload', { param: _node.editOp.param });
  837. }
  838. $('#jfgird_select_search').on('click', function () {
  839. var data = [];
  840. var keyword = $('#jfgird_select_keyword').val();
  841. if (!!keyword) {
  842. for (var i = 0, l = _node.editOp.rowdatas.length; i < l; i++) {
  843. var item = _node.editOp.rowdatas[i];
  844. for (var j = 0, jl = _node.editOp.colData.length; j < jl; j++) {
  845. if (item[_node.editOp.colData[j].name].indexOf(keyword) != -1) {
  846. data.push(item);
  847. break;
  848. }
  849. }
  850. }
  851. $('#jfgird_select').jfGridSet('refreshdata', { rowdatas: data });
  852. }
  853. else {
  854. $('#jfgird_select').jfGridSet('refreshdata', { rowdatas: _node.editOp.rowdatas });
  855. }
  856. });
  857. });
  858. });
  859. $dcell.html($label);
  860. break;
  861. case 'checkbox':
  862. var $input = $('<div style="position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: #fff;" ><input type="checkbox" style="margin:0;margin-top:7px;" /></div>');
  863. if (value == 1 || value == '1') {
  864. $input.find('input').trigger('click');
  865. }
  866. $input.find('input').on('click', function () {
  867. if ($(this).is(':checked')) {
  868. row[node.name] = 1;
  869. }
  870. else {
  871. row[node.name] = 0;
  872. }
  873. });
  874. $dcell.html($input);
  875. break;
  876. case 'layerselect':
  877. var $label = $('<div class="form-select" >' + (value || '') + '<i class="fa fa-ellipsis-h"></i></div>');
  878. $label.css({ 'text-align': node.align });
  879. $label.find('.fa-ellipsis-h').on('click', function () {
  880. node.formatter(value, row, dfop, $dcell);
  881. });
  882. $dcell.html($label);
  883. break;
  884. }
  885. }
  886. else {
  887. if (!!node.formatter) {
  888. res = node.formatter(value, row, dfop, $dcell);
  889. $dcell.html(res);
  890. }
  891. else if (node.formatterAsync) {
  892. node.formatterAsync(function (text) {
  893. text = text || '';
  894. $dcell.html(text);
  895. }, value, row, dfop, $dcell);
  896. }
  897. else {
  898. res = value;
  899. if (value == null || value == undefined || value == 'null' || value == 'undefined') {
  900. res = '';
  901. }
  902. $dcell.html(res);
  903. }
  904. }
  905. },
  906. /*绑定事件*/
  907. bindClick: function (e) {
  908. var $this = $(this);
  909. var dfop = $this[0].dfop;
  910. var et = e.target || e.srcElement;
  911. var $et = $(et);
  912. if (dfop.isHeadWidhChange) {// 调整表头宽
  913. $.jfGrid.moveHeadWidth(dfop, false);
  914. dfop.isHeadWidhChange = false;
  915. }
  916. else if ($et.hasClass('jfgrid-head-cell')) {// 排序
  917. $.jfGrid.sortCol($et, dfop);
  918. }
  919. else if (($et.hasClass('jfgrid_expend') && $et.parent().hasClass('jfgrid-data-cell')) || ($et.hasClass('jfgrid-data-cell') && $et.find('.jfgrid_expend').length > 0)) {// 展开或关闭子表单
  920. $.jfGrid.expandSubGrid($et, dfop);
  921. }
  922. else if ($et.hasClass('jfgrid-data-cell-expendi')) {// 树形结构展开和关闭
  923. $.jfGrid.expandTree($et, dfop);
  924. }
  925. else if ($et.hasClass('jfgrid-data-cell') || $et.parents('.jfgrid-data-cell').length > 0) {// 选中行
  926. $.jfGrid.selectRow($this, $et, dfop);
  927. e.stopPropagation();
  928. //return false;
  929. }
  930. else if ($et.attr('id') == ('jfgrid_all_cb_' + dfop.id)) {// 全部勾选
  931. $.jfGrid.selectAllRow($this, $et, dfop);
  932. }
  933. },
  934. bindmdown: function (e) {
  935. var $this = $(this);
  936. var dfop = $this[0].dfop;
  937. var et = e.target || e.srcElement;
  938. var $et = $(et);
  939. if ($et.hasClass('jfgrid-heed-move')) {
  940. var path = $et.parent().attr('path');
  941. var $moveline = $('#jfgrid_move_line_' + dfop.id);
  942. dfop._currentMoveCell = $.jfGrid.getHeadCell(path, dfop.headData);
  943. dfop._currentMoveCell.pageX = e.pageX;
  944. dfop._currentMoveLeft = 0;
  945. if (dfop._currentMoveCell.frozen) {
  946. dfop._currentMoveLeft = dfop._borderLeftPadding + dfop._currentMoveCell.left + dfop._currentMoveCell.width;
  947. }
  948. else {
  949. var _leftWidth = parseInt($('#jfgrid_head_' + dfop.id).css('left').replace(/px/g, ""));
  950. dfop._currentMoveLeft = _leftWidth + dfop._currentMoveCell.left + dfop._currentMoveCell.width;
  951. }
  952. dfop._currentMoveWidth = dfop._currentMoveCell.width;
  953. $moveline.css('left', dfop._currentMoveLeft + 'px');
  954. $moveline.show();
  955. dfop.isHeadWidhChange = true;
  956. }
  957. },
  958. bindmmove: function (e) {
  959. var $this = $(this);
  960. var dfop = $this[0].dfop;
  961. if (dfop.isHeadWidhChange) {
  962. $.jfGrid.moveHeadWidth(dfop, true, e.pageX);
  963. }
  964. dfop = null;
  965. },
  966. bindmover: function (e) {
  967. var $this = $(this);
  968. $this.find('.jfgrid-data-cell-over').removeClass('jfgrid-data-cell-over');
  969. var et = e.target || e.srcElement;
  970. var $et = $(et);
  971. if ($et.hasClass('jfgrid-data-cell') || $et.parents('.jfgrid-data-cell').length > 0) {
  972. var rowid = $et.attr('rownum');
  973. if (!rowid) {
  974. rowid = $et.parents('.jfgrid-data-cell').attr('rownum');
  975. }
  976. $this.find('[rownum="' + rowid + '"]').addClass('jfgrid-data-cell-over');
  977. }
  978. },
  979. /*处理方法*/
  980. moveHeadWidth: function (dfop, ismove, pageX) {// 处理表头宽度调整方法
  981. var $moveline = $('#jfgrid_move_line_' + dfop.id);
  982. if (ismove) {
  983. var width = dfop._currentMoveCell.width + (pageX - dfop._currentMoveCell.pageX);
  984. width = (width < 40 ? 40 : width);
  985. var left = dfop._currentMoveLeft + (width - dfop._currentMoveCell.width);
  986. dfop._currentMoveWidth = width;
  987. $moveline.css('left', left + 'px');
  988. }
  989. else {
  990. if (dfop._currentMoveWidth != dfop._currentMoveCell.width) {
  991. var _width = dfop._currentMoveWidth - dfop._currentMoveCell.width;
  992. dfop._currentMoveCell.width = dfop._currentMoveWidth;
  993. dfop._currentMoveCell.obj.css('width', dfop._currentMoveCell.width + 'px');
  994. var p = dfop._currentMoveCell.parent;
  995. var c = dfop._currentMoveCell;
  996. $.jfGrid.refreshHead(c.frozen, dfop, p, c, _width);
  997. }
  998. $moveline.hide();
  999. }
  1000. },
  1001. getHeadCell: function (path, data) {
  1002. var paths = path.split('.');
  1003. var r = data;
  1004. for (var i = 0, l = paths.length; i < l; i++) {
  1005. if (i == l - 1) {
  1006. return r[paths[i]];
  1007. }
  1008. r = r[paths[i]].children;
  1009. }
  1010. },
  1011. refreshHead: function (frozen, dfop, p, c, width) {
  1012. // 调整自己孩子的位置
  1013. function setChildLeft(chs) {
  1014. for (var i = 0, l = chs.length; i < l; i++) {
  1015. var item = chs[i];
  1016. item.left = item.left + width;
  1017. item.obj.css('left', item.left + 'px');
  1018. if (!!item.children) {
  1019. setChildLeft(item.children);
  1020. }
  1021. }
  1022. }
  1023. // 调整单元格所在集合的位置和大小
  1024. while (p) {
  1025. // 移动自己的兄弟
  1026. for (var i = c.path + 1, l = p.children.length; i < l; i++) {
  1027. var item = p.children[i];
  1028. item.left = item.left + width;
  1029. item.obj.css('left', item.left + 'px');
  1030. if (!!item.children) {
  1031. setChildLeft(item.children);
  1032. }
  1033. }
  1034. p.width = p.width + width;
  1035. p.obj.css('width', p.width + 'px');
  1036. c = p;
  1037. p = p.parent;
  1038. }
  1039. // 刷新单元格右侧的位置
  1040. for (var i = c.path + 1, l = dfop.headData.length; i < l; i++) {
  1041. var item = dfop.headData[i];
  1042. if (item.frozen == frozen) {
  1043. item.left = item.left + width;
  1044. item.obj.css('left', item.left + 'px');
  1045. if (!!item.children) {
  1046. setChildLeft(item.children);
  1047. }
  1048. }
  1049. }
  1050. // 刷新单元承载容器
  1051. var $jfGrid = $('#' + dfop.id);
  1052. var $head = $jfGrid.find('#jfgrid_head_' + dfop.id);
  1053. if (!!frozen) {
  1054. var $border = $jfGrid.find('#jfgrid_border_' + dfop.id);
  1055. var $left = $jfGrid.find('#jfgrid_left_' + dfop.id);
  1056. dfop._leftWidth = dfop._leftWidth + width;
  1057. $jfGrid.css('padding-left', dfop._leftWidth + 'px');
  1058. $border.css('width', dfop._leftWidth + 'px');
  1059. $left.css('width', dfop._leftWidth + 'px');
  1060. $head.css('left', dfop._leftWidth + 'px');
  1061. }
  1062. else {
  1063. dfop._headWidth = dfop._headWidth + width;
  1064. $head.css('width', dfop._headWidth + 'px');
  1065. var $scrollareaContent = $jfGrid.find('#jfgrid_scrollarea_content_' + dfop.id);
  1066. $scrollareaContent.css('width', dfop._headWidth - 10 + 'px');
  1067. if (width < 0) {
  1068. $jfGrid.css('width', '10000px');
  1069. $('#jfgrid_scrollarea_' + dfop.id).mCustomScrollbar("update");
  1070. $jfGrid.css('width', '100%');
  1071. }
  1072. $scrollareaContent.css('width', dfop._headWidth + 'px');
  1073. $('#jfgrid_scrollarea_' + dfop.id).mCustomScrollbar("update");
  1074. }
  1075. //移动表格对应数据的单元格列宽度
  1076. $jfGrid.find('.jfgrid-data-cell[colname="' + dfop._currentMoveCell.name + '"]').css('width', dfop._currentMoveCell.width + 'px');
  1077. },
  1078. selectRow: function ($this, $et, dfop) {
  1079. var $selfcell = $et;
  1080. var rowid = $et.attr('rownum');
  1081. if (!rowid) {
  1082. $selfcell = $et.parents('.jfgrid-data-cell');
  1083. rowid = $selfcell.attr('rownum');
  1084. }
  1085. var classid = '.jfgrid_selected_' + dfop.id;
  1086. if (dfop.isMultiselect) {
  1087. if ($et.attr('role') == 'checkbox') {
  1088. var datapath = $this.find('[rownum="' + rowid + '"][datapath]').attr('datapath');
  1089. var rowItem = $.jfGrid.getRowDataByPath(dfop, datapath);
  1090. console.log(rowItem[dfop.multiselectfield]);
  1091. if ($selfcell.hasClass('jfgrid-head-cell-selected')) {
  1092. $this.find(classid + '[rownum="' + rowid + '"]').removeClass('jfgrid-head-cell-selected').removeClass('jfgrid_selected_' + dfop.id);
  1093. if ($('#jfgrid_all_cb_' + dfop.id).is(':checked')) {
  1094. dfop._cancelallcb = true;
  1095. $('#jfgrid_all_cb_' + dfop.id).trigger('click');
  1096. }
  1097. dfop.multiselectfield && (rowItem[dfop.multiselectfield] = 0);
  1098. dfop.checkRow && dfop.checkRow(rowItem, false);
  1099. }
  1100. else {
  1101. $this.find('[rownum="' + rowid + '"]').addClass('jfgrid-head-cell-selected').addClass('jfgrid_selected_' + dfop.id);
  1102. dfop.multiselectfield && (rowItem[dfop.multiselectfield] = 1);
  1103. dfop.checkRow && dfop.checkRow(rowItem, true);
  1104. }
  1105. }
  1106. //else {
  1107. // $this.find('.jfgrid-tool-cell[rownum="' + rowid + '"] input[role="checkbox"]').trigger('click');
  1108. //}
  1109. }
  1110. else {
  1111. $this.find(classid).removeClass('jfgrid-head-cell-selected').removeClass('jfgrid_selected_' + dfop.id);
  1112. $this.find('[rownum="' + rowid + '"]').addClass('jfgrid-head-cell-selected').addClass('jfgrid_selected_' + dfop.id);
  1113. }
  1114. if (dfop.onSelectRow) {
  1115. dfop.onSelectRow($.jfGrid.getSelectedRow($this));
  1116. }
  1117. },
  1118. selectAllRow: function ($this, $et, dfop) {
  1119. if ($et.is(':checked')) {
  1120. $this.find('.jfgrid-tool-cell [role="checkbox"]').not(':checked').trigger('click');
  1121. }
  1122. else {
  1123. if (!dfop._cancelallcb) {
  1124. $this.find('.jfgrid-tool-cell [role="checkbox"]:checked').trigger('click');
  1125. }
  1126. dfop._cancelallcb = false;
  1127. }
  1128. },
  1129. sortCol: function ($et, dfop) {
  1130. var path = $et.attr('path');
  1131. var cell = $.jfGrid.getHeadCell(path, dfop.headData);
  1132. if (cell.type == 'datacol' && cell.sort && dfop.isPage) {
  1133. var isup = true;
  1134. if (!!dfop.sortcell) {
  1135. dfop.sortcell.obj.find('.jfgrid-heed-sort').hide();
  1136. if (cell == dfop.sortcell) {
  1137. var $i = dfop.sortcell.obj.find('.jfgrid-heed-sort .active');
  1138. $i.removeClass('active');
  1139. if ($i.hasClass('fa-caret-up')) {
  1140. dfop.sortcell.obj.find('.jfgrid-heed-sort .fa-caret-down').addClass('active');
  1141. isup = false;
  1142. }
  1143. else {
  1144. dfop.sortcell.obj.find('.jfgrid-heed-sort .fa-caret-up').addClass('active');
  1145. isup = true;
  1146. }
  1147. dfop.sortcell.obj.find('.jfgrid-heed-sort').show();
  1148. }
  1149. else {
  1150. cell.obj.find('.jfgrid-heed-sort .active').removeClass('active');
  1151. cell.obj.find('.jfgrid-heed-sort .fa-caret-up').addClass('active');
  1152. cell.obj.find('.jfgrid-heed-sort').show();
  1153. isup = true;
  1154. }
  1155. }
  1156. else {
  1157. cell.obj.find('.jfgrid-heed-sort .active').removeClass('active');
  1158. cell.obj.find('.jfgrid-heed-sort .fa-caret-up').addClass('active');
  1159. cell.obj.find('.jfgrid-heed-sort').show();
  1160. isup = true;
  1161. }
  1162. dfop.sortcell = cell;
  1163. // 排序调用后台数据
  1164. var $self = $('#' + dfop.id);
  1165. dfop.pageparam.sidx = cell.name;
  1166. dfop.pageparam.sord = isup ? 'ASC' : 'DESC';
  1167. $.jfGrid.reload($self);
  1168. }
  1169. },
  1170. expandSubGrid: function ($et, dfop) {
  1171. var $this = $et;
  1172. if (!$et.hasClass('jfgrid_expend')) {
  1173. $this = $et.find('.jfgrid_expend');
  1174. }
  1175. /*获取当前的行号*/
  1176. var rowId = $et.attr('rownum');
  1177. var $scrollareaContent = $('#jfgrid_scrollarea_content_' + dfop.id);
  1178. var $left = $('#jfgrid_left_' + dfop.id);
  1179. var $lastcolr = $scrollareaContent.find('.jfgrid-data-cell-last[rownum="' + rowId + '"]');
  1180. var $lastcoll = $left.find('.jfgrid-data-cell-last[rownum="' + rowId + '"]');
  1181. if ($lastcoll.next().find('.jfgrid_chlidgird').length > 0) {
  1182. $lastcoll.next().remove();
  1183. $lastcolr.next().remove();
  1184. $this.removeClass('fa-minus');
  1185. $this.addClass('fa-plus');
  1186. }
  1187. else {
  1188. $this.removeClass('fa-plus');
  1189. $this.addClass('fa-minus');
  1190. var subid = 'jfgrid_chlidgird_content_' + dfop.id + '_' + rowId;
  1191. var _html = '<div class="jfgrid-subgird-cell" for-rownum="rowId" style="width:' + dfop._leftWidth + 'px;height:' + dfop.subGridHeight + 'px;" >';
  1192. _html += '<div class="jfgrid_chlidgird" style="width:' + ($('#jfgrid_scrollarea_' + dfop.id).width() + dfop._leftWidth) + 'px;padding-left:' + dfop._borderLeftPadding + 'px;" ><div class="jfgrid_subgird_left" style="width:' + dfop._borderLeftPadding + 'px;" ></div>';
  1193. _html += '<div class="jfgrid-chlidgird-content" id="' + subid + '"></div>'
  1194. _html += '</div></div>';
  1195. $lastcoll.after(_html);
  1196. $lastcolr.after('<div class="jfgrid-data-cell" for-rownum="rowId" style="width:' + dfop._headWidth + 'px;height:' + dfop.subGridHeight + 'px;" ></div>');
  1197. if (!!dfop.subGridRowExpanded) {
  1198. var datapath = $('#' + dfop.id).find('.jfgrid-hide-cell[rownum="' + rowId + '"]').attr('datapath');
  1199. var rowdata = $.jfGrid.getRowDataByPath(dfop, datapath);
  1200. dfop.subGridRowExpanded(subid, rowdata);
  1201. }
  1202. }
  1203. },
  1204. expandTree: function ($et, dfop) {
  1205. var $jfgrid = $('#' + dfop.id);
  1206. var rownum = $et.parent().parent().attr('rownum');
  1207. var datapath = $jfgrid.find('.jfgrid-hide-cell[rownum="' + rownum + '"]').attr('datapath');
  1208. var rowdata = $.jfGrid.getRowDataByPath(dfop, datapath);
  1209. if ($et.hasClass('fa-caret-down')) {// 关闭
  1210. rowdata._isclosed = true;
  1211. hideRow($jfgrid, rowdata.jfGrid_ChildRows);
  1212. $et.removeClass('fa-caret-down');
  1213. $et.addClass('fa-caret-right');
  1214. }
  1215. else {// 展开
  1216. rowdata._isclosed = false;
  1217. showRow($jfgrid, rowdata.jfGrid_ChildRows);
  1218. $et.removeClass('fa-caret-right');
  1219. $et.addClass('fa-caret-down');
  1220. }
  1221. function showRow($jfgrid, data) {
  1222. var dfop = $jfgrid[0].dfop;
  1223. for (var i = 0, l = data.length; i < l; i++) {
  1224. var rownumindex = 'rownum_' + dfop.id + '_' + data[i].jfgrid_rownum;
  1225. $jfgrid.find('[rownum="' + rownumindex + '"]').not('.jfgrid-hide-cell').show();
  1226. if (data[i].jfGrid_ChildRows.length > 0 && !data[i]._isclosed) {
  1227. var _data = data[i].jfGrid_ChildRows;
  1228. showRow($jfgrid, _data);
  1229. }
  1230. }
  1231. }
  1232. function hideRow($jfgrid, data) {
  1233. for (var i = 0, l = data.length; i < l; i++) {
  1234. var rownumindex = 'rownum_' + dfop.id + '_' + data[i].jfgrid_rownum;
  1235. $jfgrid.find('[rownum="' + rownumindex + '"]').hide();
  1236. if (data[i].jfGrid_ChildRows.length > 0 && !data[i]._isclosed) {
  1237. var _data = data[i].jfGrid_ChildRows;
  1238. hideRow($jfgrid, _data);
  1239. }
  1240. }
  1241. }
  1242. },
  1243. /*数据转换*/
  1244. listTotree: function (data, parentId, mainId, dfop) {
  1245. // 只适合小数据计算
  1246. var resdata = [];
  1247. var mapdata = {};
  1248. var mIds = {};
  1249. var pIds = {};
  1250. dfop._maprowdatas = {};
  1251. data = data || [];
  1252. for (var i = 0, l = data.length; i < l; i++) {
  1253. var item = data[i];
  1254. mIds[item[mainId]] = 1;
  1255. mapdata[item[parentId]] = mapdata[item[parentId]] || [];
  1256. mapdata[item[parentId]].push(item);
  1257. if (mIds[item[parentId]] == 1) {
  1258. delete pIds[item[parentId]];
  1259. }
  1260. else {
  1261. pIds[item[parentId]] = 1;
  1262. }
  1263. if (pIds[item[mainId]] == 1) {
  1264. delete pIds[item[mainId]];
  1265. }
  1266. }
  1267. for (var id in pIds) {
  1268. _fn(resdata, id);
  1269. }
  1270. function _fn(_data, vparentId) {
  1271. var pdata = mapdata[vparentId] || [];
  1272. for (var j = 0, l = pdata.length; j < l; j++) {
  1273. var _item = pdata[j];
  1274. _item.jfGrid_ChildRows = [];
  1275. _fn(_item.jfGrid_ChildRows, _item[mainId]);
  1276. _data.push(_item);
  1277. dfop._maprowdatas[_item[mainId]] = _item;
  1278. }
  1279. }
  1280. return resdata;
  1281. },
  1282. treeTolist: function (data) {
  1283. var res = [];
  1284. _fn(data);
  1285. function _fn(_data) {
  1286. for (var i = 0, l = _data.length; i < l; i++) {
  1287. var point = {};
  1288. for (var _id in _data[i]) {
  1289. if (_id != 'jfGrid_ChildRows') {
  1290. point[_id] = _data[i][_id];
  1291. }
  1292. }
  1293. res.push(point);
  1294. if (_data[i].jfGrid_ChildRows.length > 0) {
  1295. _fn(_data[i].jfGrid_ChildRows);
  1296. }
  1297. }
  1298. }
  1299. return res;
  1300. },
  1301. /*获取数据*/
  1302. getSelectedRow: function ($self) {
  1303. var dfop = $self[0].dfop;
  1304. var res;
  1305. var resArray = [];
  1306. $self.find('.jfgrid_selected_' + dfop.id + '[datapath]').each(function () {
  1307. var datapath = $(this).attr('datapath');
  1308. if (!!datapath) {
  1309. res = $.jfGrid.getRowDataByPath(dfop, datapath);
  1310. resArray.push(res);
  1311. }
  1312. });
  1313. if (resArray.length > 1) {
  1314. return resArray;
  1315. }
  1316. else {
  1317. return res;
  1318. }
  1319. },
  1320. getRowDataByPath: function (dfop, datapath) {
  1321. var datapaths = datapath.split('.');
  1322. var p = dfop.rowdatas;
  1323. var rowdataone = null;
  1324. for (var i = 0, l = datapaths.length; i < l; i++) {
  1325. rowdataone = p[datapaths[i]];
  1326. if (!rowdataone) {
  1327. return null;
  1328. }
  1329. p = rowdataone.jfGrid_ChildRows;
  1330. }
  1331. return rowdataone;
  1332. },
  1333. /*设置数据*/
  1334. addTreeRow: function ($self, dfop) {
  1335. var row = dfop.row;
  1336. row.jfGrid_ChildRows = [];
  1337. dfop.rowdatas = dfop.rowdatas || [];
  1338. dfop._maprowdatas = dfop._maprowdatas || {};
  1339. if (dfop._maprowdatas[row[dfop.parentId]]) {
  1340. dfop._maprowdatas[row[dfop.parentId]].jfGrid_ChildRows.push(row);
  1341. }
  1342. else {
  1343. dfop.rowdatas.push(row);
  1344. }
  1345. dfop._maprowdatas[row[dfop.mainId]] = row;
  1346. $.jfGrid.renderTreeRowData($self, dfop.rowdatas);
  1347. },
  1348. addRow: function ($self, dfop) {
  1349. var dfop = $self[0].dfop;
  1350. var row = dfop.row;
  1351. dfop.rowdatas.push(row);
  1352. $.jfGrid.renderRowData($self, dfop.rowdatas);
  1353. dfop = null;
  1354. },
  1355. // 更新行数据
  1356. updateRow: function ($self, dfop) {
  1357. var data = $.jfGrid.getSelectedRow($self);
  1358. if (!!data) {
  1359. $.extend(data, dfop.row);
  1360. if (!dfop.isPage && dfop.isTree) {
  1361. $.jfGrid.renderTreeRowData($self, dfop.rowdatas);
  1362. }
  1363. else {
  1364. $.jfGrid.renderRowData($self, dfop.rowdatas);
  1365. }
  1366. }
  1367. },
  1368. // 删除行数据
  1369. removeRow: function ($self, dfop) {
  1370. var datapath = $($self.find('.jfgrid-head-cell-selected[datapath]')[0]).attr('datapath');
  1371. if (!!datapath) {
  1372. var datapaths = datapath.split('.');
  1373. var p = dfop.rowdatas;
  1374. for (var i = 0, l = datapaths.length; i < l; i++) {
  1375. if (i == (l - 1)) {
  1376. p.splice(datapaths[i], 1);
  1377. break;
  1378. }
  1379. else {
  1380. p = p[datapaths[i]].jfGrid_ChildRows;
  1381. }
  1382. }
  1383. if (!dfop.isPage && dfop.isTree) {
  1384. $.jfGrid.renderTreeRowData($self, dfop.rowdatas);
  1385. }
  1386. else {
  1387. $.jfGrid.renderRowData($self, dfop.rowdatas);
  1388. }
  1389. }
  1390. },
  1391. // 弹层
  1392. layer: function (op, callback) {
  1393. var $layerwarp = $('<div class="jfgrid-layer"><div class="jfgrid-layer-bg"></div><div class="jfgrid-layer-content" style="width:' + op.width + 'px;height:' + op.height + 'px;margin:-' + (op.height / 2) + 'px 0 0 -' + (op.width / 2) + 'px;">' + op.html + '<span id="jfgridlayerremove" class="jfgrid-layer-remove" title="关闭"><i class="fa fa-times"></i></span></div></div>');
  1394. $('body').append($layerwarp);
  1395. $layerwarp.find('#jfgridlayerremove').on('click', function () {
  1396. $layerwarp.remove();
  1397. });
  1398. if (!!callback) {
  1399. callback($layerwarp);
  1400. }
  1401. },
  1402. loading: function ($self, isShow) {
  1403. var dfop = $self[0].dfop;
  1404. var $loading = $('#jfgrid_loading_' + dfop.id);
  1405. if (isShow) {
  1406. $loading.show();
  1407. }
  1408. else {
  1409. $loading.hide();
  1410. }
  1411. dfop = null;
  1412. },
  1413. ajaxLoad: function ($self, url, param, callback) {
  1414. $.jfGrid.loading($self, true);
  1415. // 从服务端加载数据
  1416. $.ajax({
  1417. url: url,
  1418. data: param,
  1419. type: "GET",
  1420. dataType: "json",
  1421. async: true,
  1422. cache: false,
  1423. success: function (data) {
  1424. callback(data);
  1425. $.jfGrid.loading($self, false);
  1426. },
  1427. error: function (XMLHttpRequest, textStatus, errorThrown) {
  1428. callback({ code: 500 });
  1429. },
  1430. beforeSend: function () {
  1431. },
  1432. complete: function () {
  1433. $.jfGrid.loading($self, false);
  1434. }
  1435. });
  1436. },
  1437. // 打印处理
  1438. print: function ($self) {
  1439. var dfop = $self[0].dfop;
  1440. console.log(dfop);
  1441. var $table = $('<table border="1" style=""></table>');
  1442. // 获取表头数据
  1443. var thlist = [];
  1444. function cTh(_data, _index) {
  1445. var res = _data.length;
  1446. $.each(_data, function (id, item) {
  1447. thlist[_index] = thlist[_index] || $('<tr></tr>');
  1448. var $th = $('<th>' + item.label + '</th>');
  1449. if (!!item.children && item.children.length > 0) {
  1450. var num = cTh(item.children, _index + 1);
  1451. res = res + num - 1;
  1452. $th.attr('colspan', num);
  1453. }
  1454. var _row = parseInt(item.obj.css('height')) / 28;
  1455. $th.attr('rowspan', _row);
  1456. $th.css('text-align', item.align);
  1457. thlist[_index].append($th);
  1458. });
  1459. return res;
  1460. }
  1461. cTh(dfop.headData, 0);
  1462. $.each(thlist, function (id, item) {
  1463. $table.append(item);
  1464. });
  1465. $.each(dfop.rowdatas, function (index, item) {
  1466. var $tr = $('<tr></tr>');
  1467. $self.find('[rownum="rownum_' + dfop.id + '_' + index + '"]').each(function () {
  1468. var $cell = $(this);
  1469. var colname = $cell.attr('colname');
  1470. if (!!colname && colname != 'jfgrid_rownum' && colname != 'jfgrid_multiselect' && colname != 'jfgrid_subGrid') {
  1471. var $td = $('<td>' + $cell.html() + '</td>');
  1472. $td.css('text-align', $cell.css('text-align'));
  1473. $tr.append($td);
  1474. }
  1475. });
  1476. $table.append($tr);
  1477. });
  1478. dfop = null;
  1479. return $table;
  1480. }
  1481. });
  1482. // 构造方法
  1483. $.fn.jfGrid = function (op) {
  1484. var $self = $(this);
  1485. if (!$self[0] || $self[0].dfop) {
  1486. return $self;
  1487. }
  1488. var id = $self.attr('id');
  1489. if (id == null || id == undefined || id == '') {
  1490. id = "jfgrid" + new Date().getTime();
  1491. $self.attr('id', id);
  1492. }
  1493. var dfop = {
  1494. url: '', // 数据服务地址
  1495. param: {}, // 请求参数
  1496. rowdatas: [], // 列表数据
  1497. datatype: 'array', // 数据类型
  1498. headData: [], // 列数据
  1499. isShowNum: true, // 是否显示序号
  1500. isMultiselect: false, // 是否允许多选
  1501. multiselectfield: '', // 多选绑定字段
  1502. isSubGrid: false, // 是否有子表
  1503. subGridRowExpanded: false, // 子表展开后调用函数
  1504. subGridHeight: 300,
  1505. onSelectRow: false, // 选中一行后回调函数
  1506. onRenderComplete: false, // 表格加载完后调用
  1507. isPage: false, // 是否分页默认是不分页(目前只支持服务端分页)
  1508. pageparam: {
  1509. rows: 50, // 每页行数
  1510. page: 1, // 当前页
  1511. sidx: '', // 排序列
  1512. sord: '', // 排序类型
  1513. records: 0, // 总记录数
  1514. total: 0 // 总页数
  1515. },
  1516. sidx: '',
  1517. sord: 'ASC',
  1518. isTree: false, // 是否树形显示(没有分页的情况下才支持) (只有在数据不多情况下才建议使用)
  1519. mainId: 'id', // 关联的主键
  1520. parentId: 'parentId', // 树形关联字段
  1521. reloadSelected: false, // 刷新后是否还选择之前选中的,只支持单选
  1522. isAutoHeight: false, // 自动适应表格高度
  1523. footerrow: false, // 底部合计条
  1524. isEidt: false,
  1525. minheight: 0,
  1526. height: 0,
  1527. isStatistics: false // 统计条
  1528. };
  1529. if (!!op) {
  1530. $.extend(dfop, op);
  1531. }
  1532. dfop.id = id;
  1533. $self[0].dfop = dfop;
  1534. dfop.pageparam.sidx = dfop.sidx;
  1535. dfop.pageparam.sord = dfop.sord;
  1536. $.jfGrid.render($self);
  1537. dfop = null;
  1538. return $self;
  1539. };
  1540. // 设置方法
  1541. $.fn.jfGridSet = function (name, op) {
  1542. var $self = $(this);
  1543. var id = $self.attr('id');
  1544. if (id == null || id == undefined || id == '') {
  1545. return null;
  1546. }
  1547. var dfop = $self[0].dfop;
  1548. if (!dfop) {
  1549. return null;
  1550. }
  1551. if (!!op) {
  1552. $.extend(dfop, op);
  1553. }
  1554. switch (name) {
  1555. case 'reload':
  1556. $.jfGrid.reload($self);
  1557. break;
  1558. case 'refreshdata':
  1559. $.jfGrid.renderData($self);
  1560. break;
  1561. case 'addRow':
  1562. if (!dfop.isPage && dfop.isTree) {
  1563. $.jfGrid.addTreeRow($self, dfop);
  1564. }
  1565. else {
  1566. $.jfGrid.addRow($self, dfop);
  1567. }
  1568. break;
  1569. case 'updateRow':
  1570. $.jfGrid.updateRow($self, dfop);
  1571. break;
  1572. case 'removeRow':
  1573. $.jfGrid.removeRow($self, dfop);
  1574. break;
  1575. }
  1576. dfop = null;
  1577. };
  1578. function getHeadData(data, res) {
  1579. $.each(data, function (_index, _item) {
  1580. var point = {
  1581. label: _item.label,
  1582. name: _item.name
  1583. };
  1584. res.push(point);
  1585. if (_item.children) {
  1586. point.children = [];
  1587. getHeadData(_item.children, point.children);
  1588. }
  1589. });
  1590. }
  1591. $.fn.jfGridGet = function (name) {
  1592. var $self = $(this);
  1593. var id = $self.attr('id')
  1594. if (id == null || id == undefined || id == '') {
  1595. return null;
  1596. }
  1597. var dfop = $self[0].dfop;
  1598. if (!dfop) {
  1599. return null;
  1600. }
  1601. switch (name) {
  1602. case 'rowdata':
  1603. return $.jfGrid.getSelectedRow($self);
  1604. break;
  1605. case 'rowdatas':
  1606. return dfop.rowdatas;
  1607. break;
  1608. case 'rowdatasByArray':
  1609. return $.jfGrid.treeTolist(dfop.rowdatas);
  1610. break;
  1611. case 'settingInfo':
  1612. return dfop;
  1613. break;
  1614. case 'headData':
  1615. var headData = dfop.headData;
  1616. var res = [];
  1617. getHeadData(headData, res);
  1618. return res;
  1619. break;
  1620. case 'showData':
  1621. var resData = [];
  1622. $.each(dfop.rowdatas, function (index, item) {
  1623. resData[index] = {};
  1624. $self.find('[rownum="rownum_' + id + '_' + index + '"]').each(function () {
  1625. var $cell = $(this);
  1626. var colname = $cell.attr('colname');
  1627. if (!!colname && colname != 'jfgrid_rownum') {
  1628. resData[index][colname] = $cell.text();
  1629. }
  1630. });
  1631. });
  1632. return resData;
  1633. break;
  1634. }
  1635. dfop = null;
  1636. };
  1637. $.fn.jfGridValue = function (rowId) {
  1638. var $self = $(this);
  1639. var id = $self.attr('id')
  1640. if (id == null || id == undefined || id == '') {
  1641. return null;
  1642. }
  1643. var dfop = $self[0].dfop;
  1644. if (!dfop) {
  1645. return null;
  1646. }
  1647. var _rowdata = $.jfGrid.getSelectedRow($self);
  1648. if (!!_rowdata) {
  1649. var res = "";
  1650. if (_rowdata.length > 0) {
  1651. $.each(_rowdata, function (id, item) {
  1652. if (res != "") {
  1653. res += ',';
  1654. }
  1655. res += item[rowId] || '';
  1656. });
  1657. return res;
  1658. }
  1659. else {
  1660. return _rowdata[rowId] || '';
  1661. }
  1662. }
  1663. else {
  1664. return '';
  1665. }
  1666. };
  1667. // 打印处理
  1668. $.fn.jfGridPrint = function () {
  1669. var $self = $(this);
  1670. return $.jfGrid.print($self);
  1671. }
  1672. })(window.jQuery)