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.
 
 
 
 
 
 

2419 lines
111 KiB

  1. (function ($, learun) {
  2. "use strict";
  3. var $jfgridmove = null;
  4. var cb = ['checkbox_0.png', 'checkbox_1.png', 'checkbox_2.png'];
  5. var imageurl = top.$.rootUrl + '/Content/images/jfgrid/';
  6. // 初始化表头数据
  7. var headDataInit = function (data, parent, headData, cols, frozenCols, running) {
  8. var _left = running.left;
  9. var _frozenleft = running.frozenleft;
  10. var _top = 0;
  11. var _deep = 0;
  12. var _frozen = false;
  13. //var _ishide = false;
  14. if (parent) {
  15. _left = parent.left;
  16. _top = parent.top + 28;
  17. _deep = parent.deep + 1;
  18. _frozen = parent.frozen;
  19. }
  20. var _width = 0;
  21. var len = data.length;
  22. $.each(data, function (_index, _item) {//_item:label 显示列名 /name 字段名 /width 宽度 /align 对齐方式 /frozen 冻结列 /statistics 统计 /isMerge 合并//ishide 是否隐藏 /isInt 是否整型,统计条中数值不显示小数点
  23. if (!_item.ishide) {
  24. //设置列表头数据
  25. var col = {
  26. data: _item,
  27. height: 28,
  28. width: _item.width || 100,
  29. top: _top,
  30. left: _left,
  31. frozen: _frozen,
  32. deep: _deep,
  33. last: true,
  34. parent: parent,
  35. //hide: _item.ishide || _ishide
  36. };
  37. if (!parent && _item.frozen) {
  38. col.frozen = true;
  39. col.left = _frozenleft;
  40. }
  41. headData.push(col);
  42. // 如果有子节点
  43. if (_item.children && _item.children.length > 0) {
  44. col.last = false;
  45. col.width = headDataInit(_item.children, col, headData, cols, frozenCols, running);
  46. }
  47. else {
  48. running.MaxDeep = running.MaxDeep > col.deep ? running.MaxDeep : col.deep;
  49. if (col.frozen) {
  50. frozenCols.push(col);
  51. }
  52. else {
  53. cols.push(col);
  54. }
  55. // 判断是否需要和并行
  56. if (_item.isMerge) {
  57. running.mergeCols.push(col);
  58. }
  59. // 如果有统计列
  60. if (_item.statistics) {
  61. running.isStatistic = true;
  62. }
  63. }
  64. if (!parent) {
  65. if (col.frozen) {
  66. _frozenleft += col.width;
  67. running.frozenleft += col.width;
  68. }
  69. else {
  70. _left += col.width;
  71. running.left += col.width;
  72. }
  73. }
  74. else {
  75. _left += col.width;
  76. }
  77. _width += col.width;
  78. }
  79. else {
  80. running.hideHead = running.hideHead || [];
  81. running.hideHead.push(_item);
  82. }
  83. });
  84. return _width;
  85. };
  86. // 如果整体表格宽度大于所有列之和就调整之后一列的宽度
  87. var setColWidth = function (col, width, isUpdate) {
  88. col._width = col.width + width;
  89. if (isUpdate) {
  90. col.$cell.css({ 'width': col._width });
  91. }
  92. if (col.parent) {
  93. setColWidth(col.parent, width);
  94. }
  95. };
  96. var setLastColWidth = function ($self, op, isUpdate) {
  97. var width = $self.innerWidth();
  98. var colwidth = op.running.headWidth + op.running.leftWidth;
  99. if (op.running.cols.length > 0) {
  100. var col = op.running.cols[op.running.cols.length - 1];
  101. var _width = 0;
  102. var flag = false;
  103. if (width > colwidth) {
  104. _width = width - colwidth + 1;
  105. setColWidth(col, _width, isUpdate);
  106. flag = true;
  107. }
  108. else if (col._width != undefined) {
  109. _width = 1;
  110. setColWidth(col, _width, isUpdate);
  111. flag = true;
  112. }
  113. if (flag) {
  114. $self.find('#jfgrid_head_col_' + op.id).css({ 'width': (op.running.headWidth + _width) });
  115. if (isUpdate) {
  116. $self.find('#jfgrid_body_' + op.id + '>.lr-scroll-box').css({ 'width': (op.running.headWidth + op.running.leftWidth + _width - 1) });
  117. $self.find('#jfgrid_right_' + op.id).css({ 'width': (op.running.headWidth + _width - 1) });
  118. $self.find('#jfgrid_right_' + op.id + '>[colname="' + col.data.name + '"]').css({ 'width': col._width });
  119. }
  120. }
  121. }
  122. };
  123. // 单元格数据格式化
  124. var formatterCell = function (value, item, row, rowItem, op) {
  125. //if (value !== 0) {
  126. // value = value || '';
  127. //}
  128. if (item.formatter) {
  129. var text = item.formatter(value, row, op, rowItem.$cell);
  130. rowItem.text = $('<div>' + (text || '') + '</div>').text();
  131. rowItem.$cell.attr('title', rowItem.text);
  132. var $expend = rowItem.$cell.find('.jfgrid-data-cell-expend');
  133. rowItem.$cell.html(text);
  134. rowItem.$cell.prepend($expend);
  135. if (item.statistics) {// 如果该单元格数据需要统计就进行计算
  136. rowItem.statisticsNum = rowItem.statisticsNum || 0;
  137. op.running.statisticData[item.name] = op.running.statisticData[item.name] || 0;
  138. op.running.statisticData[item.name] += (parseFloat(text || 0) - rowItem.statisticsNum);
  139. rowItem.statisticsNum = parseFloat(text || 0);
  140. //dyy解决单元格数据是整型时取消小数点的显示
  141. if (item.isInt) {
  142. $('#jfgrid_statistic_' + op.id + ' [name="' + item.name + '"]').text(op.running.statisticData[item.name]);
  143. } else {
  144. $('#jfgrid_statistic_' + op.id + ' [name="' + item.name + '"]').text(op.running.statisticData[item.name].toFixed(2));
  145. }
  146. }
  147. $expend = null;
  148. }
  149. else if (item.formatterAsync) {
  150. item.formatterAsync(function (text) {
  151. rowItem.text = $('<div>' + (text || '') + '</div>').text();
  152. rowItem.$cell.attr('title', rowItem.text);
  153. var $expend = rowItem.$cell.find('.jfgrid-data-cell-expend');
  154. rowItem.$cell.html(text);
  155. rowItem.$cell.prepend($expend);
  156. $expend = null;
  157. if (item.statistics) {// 如果该单元格数据需要统计就进行计算
  158. rowItem.statisticsNum = rowItem.statisticsNum || 0;
  159. op.running.statisticData[item.name] = op.running.statisticData[item.name] || 0;
  160. op.running.statisticData[item.name] += (parseFloat(text || 0) - rowItem.statisticsNum);
  161. rowItem.statisticsNum = parseFloat(text || 0);
  162. //dyy解决单元格数据是整型时取消小数点的显示
  163. if (item.isInt) {
  164. $('#jfgrid_statistic_' + op.id + ' [name="' + item.name + '"]').text(op.running.statisticData[item.name]);
  165. } else {
  166. $('#jfgrid_statistic_' + op.id + ' [name="' + item.name + '"]').text(op.running.statisticData[item.name].toFixed(2));
  167. }
  168. }
  169. }, value, row, op, rowItem.$cell);
  170. }
  171. else {
  172. // 如果是编辑单元列
  173. if (item.edit) {
  174. switch (item.edit.type) {
  175. case 'input': // 输入框 文本,数字,密码
  176. break;
  177. case 'select': // 下拉框选择
  178. // 如果有data
  179. if (item.edit.op.data) {
  180. $.each(item.edit.op.data, function (_index, _item) {
  181. if (_item[item.edit.op.value] == value) {
  182. rowItem.text = _item[item.edit.op.text];
  183. rowItem.$cell.attr('title', rowItem.text);
  184. var $expend = rowItem.$cell.find('.jfgrid-data-cell-expend');
  185. rowItem.$cell.html(rowItem.text);
  186. rowItem.$cell.prepend($expend);
  187. $expend = null;
  188. return false;
  189. }
  190. });
  191. return;
  192. }
  193. else {
  194. if (item.edit.datatype === 'dataItem') {
  195. learun.clientdata.getAsync('dataItem', {
  196. key: value,
  197. code: item.edit.code,
  198. rowItem: rowItem,
  199. callback: function (_data, _op) {
  200. _op.rowItem.text = _data.text;
  201. _op.rowItem.$cell.attr('title', _op.rowItem.text);
  202. var $expend = _op.rowItem.$cell.find('.jfgrid-data-cell-expend');
  203. _op.rowItem.$cell.html(_op.rowItem.text);
  204. _op.rowItem.$cell.prepend($expend);
  205. $expend = null;
  206. }
  207. });
  208. return;
  209. }
  210. else if (item.edit.datatype === 'dataSource') {
  211. learun.clientdata.getAsync('sourceData', {
  212. key: value,
  213. keyId: item.edit.op.value,
  214. code: item.edit.code,
  215. rowItem: rowItem,
  216. callback: function (_data, _op) {
  217. _op.rowItem.text = _data[item.edit.op.text];
  218. _op.rowItem.$cell.attr('title', _op.rowItem.text);
  219. var $expend = _op.rowItem.$cell.find('.jfgrid-data-cell-expend');
  220. _op.rowItem.$cell.html(_op.rowItem.text);
  221. _op.rowItem.$cell.prepend($expend);
  222. $expend = null;
  223. }
  224. });
  225. return;
  226. }
  227. }
  228. break;
  229. case 'radio': // 单选
  230. if (item.edit.data) {
  231. $.each(item.edit.data, function (_index, _item) {
  232. if (_item.id == value) {
  233. rowItem.text = _item.text;
  234. rowItem.$cell.attr('title', rowItem.text);
  235. var $expend = rowItem.$cell.find('.jfgrid-data-cell-expend');
  236. rowItem.$cell.html(rowItem.text);
  237. rowItem.$cell.prepend($expend);
  238. $expend = null;
  239. return false;
  240. }
  241. });
  242. return;
  243. }
  244. else {
  245. if (item.edit.datatype === 'dataItem') {
  246. learun.clientdata.getAsync('dataItem', {
  247. key: value,
  248. code: item.edit.code,
  249. rowItem: rowItem,
  250. callback: function (_data, _op) {
  251. _op.rowItem.text = _data.text;
  252. _op.rowItem.$cell.attr('title', _op.rowItem.text);
  253. var $expend = _op.rowItem.$cell.find('.jfgrid-data-cell-expend');
  254. _op.rowItem.$cell.html(_op.rowItem.text);
  255. _op.rowItem.$cell.prepend($expend);
  256. $expend = null;
  257. }
  258. });
  259. return;
  260. }
  261. else if (item.edit.datatype === 'dataSource') {
  262. learun.clientdata.getAsync('sourceData', {
  263. key: value,
  264. keyText: item.edit.op.text,
  265. keyId: item.edit.op.value,
  266. code: item.edit.code,
  267. rowItem: rowItem,
  268. callback: function (_data, _op) {
  269. _op.rowItem.text = _data[_op.keyText];
  270. _op.rowItem.$cell.attr('title', _op.rowItem.text);
  271. var $expend = _op.rowItem.$cell.find('.jfgrid-data-cell-expend');
  272. _op.rowItem.$cell.html(_op.rowItem.text);
  273. _op.rowItem.$cell.prepend($expend);
  274. $expend = null;
  275. }
  276. });
  277. return;
  278. }
  279. }
  280. break;
  281. case 'checkbox': // 多选
  282. if (value != undefined && value != null && value != "") {
  283. if (item.edit.data) {
  284. value = value + '';
  285. var _vlist = value.split(',');
  286. var _vmap = {};
  287. $.each(_vlist, function (_index, _item) {
  288. _vmap[_item] = '1';
  289. });
  290. var _text = [];
  291. $.each(item.edit.data, function (_index, _item) {
  292. if (_vmap[_item.id] == '1') {
  293. _text.push(_item.text);
  294. }
  295. });
  296. rowItem.text = String(_text);
  297. rowItem.$cell.attr('title', rowItem.text);
  298. var $expend = rowItem.$cell.find('.jfgrid-data-cell-expend');
  299. rowItem.$cell.html(rowItem.text);
  300. rowItem.$cell.prepend($expend);
  301. $expend = null;
  302. return;
  303. }
  304. else {
  305. if (item.edit.datatype === 'dataItem') {
  306. learun.clientdata.getAllAsync('dataItem', {
  307. code: item.edit.code,
  308. rowItem: rowItem,
  309. value: value,
  310. callback: function (_dataes, _op) {
  311. var _vlist = _op.value.split(',');
  312. var _vmap = {};
  313. $.each(_vlist, function (_index, _item) {
  314. _vmap[_item] = '1';
  315. });
  316. var _text = [];
  317. $.each(_dataes, function (_index, _item) {
  318. if (_vmap[_item.value] == '1') {
  319. _text.push(_item.text);
  320. }
  321. });
  322. _op.rowItem.text = String(_text);
  323. _op.rowItem.$cell.attr('title', _op.rowItem.text);
  324. var $expend = _op.rowItem.$cell.find('.jfgrid-data-cell-expend');
  325. _op.rowItem.$cell.html(_op.rowItem.text);
  326. _op.rowItem.$cell.prepend($expend);
  327. $expend = null;
  328. }
  329. });
  330. return;
  331. }
  332. else if (item.edit.datatype === 'dataSource') {
  333. learun.clientdata.getAllAsync('sourceData', {
  334. value: value,
  335. keyId: item.edit.op.value,
  336. keyText: item.edit.op.text,
  337. code: item.edit.code,
  338. rowItem: rowItem,
  339. callback: function (_dataes, _op) {
  340. var _vlist = _op.value.split(',');
  341. var _vmap = {};
  342. $.each(_vlist, function (_index, _item) {
  343. _vmap[_item] = '1';
  344. });
  345. var _text = [];
  346. $.each(_dataes, function (_index, _item) {
  347. if (_vmap[_item[_op.keyId]] == '1') {
  348. _text.push(_item[_op.keyText]);
  349. }
  350. });
  351. _op.rowItem.text = String(_text);
  352. _op.rowItem.$cell.attr('title', _op.rowItem.text);
  353. var $expend = _op.rowItem.$cell.find('.jfgrid-data-cell-expend');
  354. _op.rowItem.$cell.html(_op.rowItem.text);
  355. _op.rowItem.$cell.prepend($expend);
  356. $expend = null;
  357. }
  358. });
  359. return;
  360. }
  361. }
  362. }
  363. break;
  364. case 'datatime': // 时间
  365. if (item.edit.dateformat == "0") {
  366. value = learun.formatDate(value, "yyyy-MM-dd");
  367. row[item.name] = value;
  368. }
  369. break;
  370. case 'layer': // 弹层
  371. // 获取下行号
  372. var rownum = rowItem.$cell.attr('rowindex');
  373. var $expend = rowItem.$cell.find('.jfgrid-data-cell-expend');
  374. rowItem.text = value;
  375. rowItem.$cell.attr('title', rowItem.text);
  376. rowItem.$cell.html((value || '') + '<i class="fa fa-ellipsis-h" value="' + rownum + '" ></i>');
  377. rowItem.$cell.prepend($expend);
  378. rowItem.$cell.find('.fa-ellipsis-h')[0].op = item;
  379. rowItem.$cell.find('.fa-ellipsis-h')[0].row = row;
  380. if (item.isRead != '1') {
  381. rowItem.$cell.find('.fa-ellipsis-h').on('click', function () {
  382. var $this = $(this);
  383. var op = $this[0].op;
  384. var _row = $this[0].row;
  385. var rownum = $this.attr('value');
  386. op.edit.init && op.edit.init(_row, $this.parent(), rownum);
  387. top.lrGirdLayerEdit = op;
  388. top.lrGirdLayerEditCallBack = function (data) {
  389. op.edit.change && op.edit.change(_row, rownum, data);
  390. top.lrGirdLayerEdit = null;
  391. top.lrGirdLayerEditCallBack = null;
  392. };
  393. if (item.edit.op) {
  394. learun.layerForm({
  395. id: 'lrgridlayerform',
  396. title: '选择' + item.label,
  397. url: top.$.rootUrl + '/Utility/JfGirdLayerForm',
  398. height: item.edit.op.height || 400,
  399. width: item.edit.op.width || 600,
  400. callBack: function (id) {
  401. var res = top[id].acceptClick(function (data) {
  402. op.edit.change && op.edit.change(_row, rownum, data);
  403. });
  404. top.lrGirdLayerEdit = null;
  405. return res;
  406. }
  407. });
  408. }
  409. return false;
  410. });
  411. }
  412. return;
  413. break;
  414. }
  415. }
  416. var $expend = rowItem.$cell.find('.jfgrid-data-cell-expend');
  417. rowItem.text = value;
  418. rowItem.$cell.attr('title', rowItem.text);
  419. rowItem.$cell.html(rowItem.text);
  420. rowItem.$cell.prepend($expend);
  421. if (item.statistics) {// 如果该单元格数据需要统计就进行计算
  422. rowItem.statisticsNum = rowItem.statisticsNum || 0;
  423. op.running.statisticData[item.name] = op.running.statisticData[item.name] || 0;
  424. op.running.statisticData[item.name] += (parseFloat(rowItem.text || 0) - rowItem.statisticsNum);
  425. rowItem.statisticsNum = parseFloat(rowItem.text || 0);
  426. //dyy解决单元格数据是整型时取消小数点的显示
  427. if (item.isInt) {
  428. $('#jfgrid_statistic_' + op.id + ' [name="' + item.name + '"]').text(op.running.statisticData[item.name]);
  429. } else {
  430. $('#jfgrid_statistic_' + op.id + ' [name="' + item.name + '"]').text(op.running.statisticData[item.name].toFixed(2));
  431. }
  432. }
  433. $expend = null;
  434. }
  435. };
  436. // 调整列宽设置宽度
  437. var setColWidthByMove = function (col, width) {
  438. col.width = col.width + width;
  439. col.$cell.css({ 'width': col.width });
  440. if (col.parent) {
  441. setColWidthByMove(col.parent, width);
  442. }
  443. };
  444. // 初始化编辑单元格
  445. var initEditCell = function ($self, op, col) {
  446. switch (col.data.edit.type) {
  447. case 'input': // 输入框 文本,数字,密码
  448. col.$edit = $('<div class="jfgrid-edit-cell"><input id="jfgrid_edit_' + op.id + '_' + col.data.name + '" /></div>');
  449. if (col.data.edit.inputType) { //数字
  450. col.$edit = $('<div class="jfgrid-edit-cell"><input type="' + col.data.edit.inputType + '" id="jfgrid_edit_' + op.id + '_' + col.data.name + '" /></div>');
  451. }
  452. if (col.frozen) {
  453. $self.find('#jfgrid_left_' + op.id).append(col.$edit);
  454. }
  455. else {
  456. $self.find('#jfgrid_right_' + op.id).append(col.$edit);
  457. }
  458. col.$edit.on("keypress", function (e) {
  459. if (event.keyCode == "13") {
  460. hideEditCell();
  461. }
  462. });
  463. break;
  464. case 'select': // 下拉框选择
  465. col.$edit = $('<div class="jfgrid-edit-cell"><div id="jfgrid_edit_' + op.id + '_' + col.data.name + '" ></div></div>');
  466. if (col.frozen) {
  467. $self.find('#jfgrid_left_' + op.id).append(col.$edit);
  468. }
  469. else {
  470. $self.find('#jfgrid_right_' + op.id).append(col.$edit);
  471. }
  472. col.data.edit.op = col.data.edit.op || {};
  473. col.$edit.find('div').lrselect(col.data.edit.op);
  474. col.data.edit.op.value = col.$edit.find('div')[0]._lrselect.dfop.value;
  475. col.data.edit.op.text = col.$edit.find('div')[0]._lrselect.dfop.text;
  476. if (col.data.edit.datatype == 'dataItem') {
  477. learun.clientdata.getAllAsync('dataItem', {
  478. code: col.data.edit.code,
  479. callback: function (dataes) {
  480. var list = [];
  481. $.each(dataes, function (_index, _item) {
  482. list.push({ id: _item.value, text: _item.text, title: _item.text, k: _index });
  483. });
  484. col.$edit.find('div').lrselectRefresh({ data: list });
  485. }
  486. });
  487. }
  488. else if (col.data.edit.datatype == 'dataSource') {
  489. learun.clientdata.getAllAsync('sourceData', {
  490. code: col.data.edit.code,
  491. callback: function (dataes) {
  492. col.$edit.find('div').lrselectRefresh({
  493. data: dataes
  494. });
  495. }
  496. });
  497. }
  498. break;
  499. case 'radio': // 单选
  500. col.$edit = $('<div class="jfgrid-edit-cell"><div id="jfgrid_edit_' + op.id + '_' + col.data.name + '" class="radio" ></div></div>');
  501. if (col.frozen) {
  502. $self.find('#jfgrid_left_' + op.id).append(col.$edit);
  503. }
  504. else {
  505. $self.find('#jfgrid_right_' + op.id).append(col.$edit);
  506. }
  507. if (col.data.edit.datatype == 'dataItem') {
  508. col.$edit.find('div').lrRadioCheckbox({
  509. type: 'radio',
  510. code: col.data.edit.code
  511. });
  512. }
  513. else if (col.data.edit.datatype == 'dataSource') {
  514. col.$edit.find('div').lrRadioCheckbox({
  515. type: 'radio',
  516. dataType: 'dataSource',
  517. code: col.data.edit.code,
  518. text: col.data.edit.text,
  519. value: col.data.edit.value
  520. });
  521. }
  522. else {
  523. $.each(col.data.edit.data || [], function (id, item) {
  524. var $point = $('<label><input name="jfgrid_edit_' + op.id + '_' + col.data.name + '" value="' + item.id + '"' + (col.data.edit.dfvalue == item.id ? "checked" : "") + ' type="radio">' + item.text + '</label>');
  525. col.$edit.find('div').append($point);
  526. });
  527. }
  528. break;
  529. case 'checkbox': // 多选
  530. col.$edit = $('<div class="jfgrid-edit-cell"><div id="jfgrid_edit_' + op.id + '_' + col.data.name + '" class="checkbox" ></div></div>');
  531. if (col.frozen) {
  532. $self.find('#jfgrid_left_' + op.id).append(col.$edit);
  533. }
  534. else {
  535. $self.find('#jfgrid_right_' + op.id).append(col.$edit);
  536. }
  537. if (col.data.edit.datatype == 'dataItem') {
  538. col.$edit.find('div').lrRadioCheckbox({
  539. type: 'checkbox',
  540. code: col.data.edit.code
  541. });
  542. }
  543. else if (col.data.edit.datatype == 'dataSource') {
  544. col.$edit.find('div').lrRadioCheckbox({
  545. type: 'checkbox',
  546. dataType: 'dataSource',
  547. code: col.data.edit.code,
  548. text: col.data.edit.text,
  549. value: col.data.edit.value
  550. });
  551. }
  552. else {
  553. $.each(col.data.edit.data || [], function (id, item) {
  554. var $point = $('<label><input name="jfgrid_edit_' + op.id + '_' + col.data.name + '" value="' + item.id + '"' + (col.data.edit.dfvalue == item.id ? "checked" : "") + ' type="checkbox">' + item.text + '</label>');
  555. col.$edit.find('div').append($point);
  556. });
  557. }
  558. break;
  559. case 'datatime': // 时间
  560. var dateformat = col.data.edit.dateformat == '0' ? 'yyyy-MM-dd' : 'yyyy-MM-dd HH:mm';
  561. col.$edit = $('<div class="jfgrid-edit-cell"><input id="jfgrid_edit_' + op.id + '_' + col.data.name + '" onClick="WdatePicker({dateFmt:\'' + dateformat + '\',qsEnabled:false,isShowClear:false,isShowOK:false,isShowToday:false,onpicked:function(){$(\'#jfgrid_edit_' + op.id + '_' + col.data.name + '\').trigger(\'change\');}})" type="text" class="form-control" /></div>');
  562. if (col.frozen) {
  563. $self.find('#jfgrid_left_' + op.id).append(col.$edit);
  564. }
  565. else {
  566. $self.find('#jfgrid_right_' + op.id).append(col.$edit);
  567. }
  568. col.$edit.on("keypress", function (e) {
  569. if (event.keyCode == "13") {
  570. hideEditCell();
  571. }
  572. });
  573. break;
  574. case 'layer': // 弹层
  575. break;
  576. }
  577. };
  578. // 单元格编辑项隐藏
  579. var hideEditCell = function () {
  580. $('.jfgrid-layout .jfgrid-edit-cell ').hide();
  581. $('.jfgrid-layout .lr-select-option').slideUp(150);
  582. $('.jfgrid-layout .lr-select').removeClass('lr-select-focus');
  583. };
  584. var _jfgrid = {
  585. init: function ($self, op) {
  586. if (op.url == '' || op.url == null || op.url == undefined) {
  587. op.isPage = false;
  588. }
  589. $self.html('');
  590. $self.addClass('jfgrid-layout');
  591. // 添加一个移动板
  592. if ($jfgridmove === null) {
  593. $jfgridmove = $('<div style="position: fixed;top: 0;left: 0;width: 100%;height: 100%;z-index: 9999;cursor: col-resize;display: none;" ></div>');
  594. $('body').append($jfgridmove);
  595. }
  596. // 整体表格布局
  597. _jfgrid.layout($self, op);
  598. _jfgrid.bind($self, op);
  599. // 渲染头部
  600. _jfgrid.head($self, op);
  601. // 渲染数据
  602. _jfgrid.dataRender($self, op, op.rowdatas);
  603. op = null;
  604. },
  605. layout: function ($self, op) {
  606. if (op.height != undefined && op.height != null && op.height > 0) {
  607. $self.css({ height: op.height });
  608. }
  609. // 头部
  610. var $head = $('<div class="jfgrid-head" id="jfgrid_head_' + op.id + '" ></div>');
  611. $head.append('<div class="jfgrid-border" id="jfgrid_border_' + op.id + '" ></div>');
  612. $head.append('<div class="jfgrid-head-col" id="jfgrid_head_col_' + op.id + '" ></div>');
  613. $self.append($head);
  614. // 数据显示部分
  615. var $body = $('<div class="jfgrid-body" id="jfgrid_body_' + op.id + '" ></div>');
  616. $body.append('<div class="jfgrid-left" id="jfgrid_left_' + op.id + '" ></div>');
  617. $body.append('<div class="jfgrid-right" id="jfgrid_right_' + op.id + '" ></div>');
  618. $self.append($body);
  619. // 底部
  620. var $footer = $('<div class="jfgrid-footer" id="jfgrid_footer_' + op.id + '" ></div>');
  621. $self.append($footer);
  622. // 调整列宽移动条
  623. $self.append('<div class="jfgrid-move-line" id="jfgrid_move_line_' + op.id + '" ></div>');
  624. // 初始化滚动条
  625. $body.lrscroll(function (x, y) {
  626. if (!$self.is(":hidden")) {
  627. $self.find('#jfgrid_left_' + op.id).css('left', x);
  628. $self.find('#jfgrid_head_col_' + op.id).css('left', op.running.leftWidth - x);
  629. if (op.running.isStatistic) {// 添加统计条单元格
  630. $self.find('#jfgrid_statistic_' + op.id + '>.jfgrid-statistic-right').css('left', - x);
  631. }
  632. hideEditCell();
  633. }
  634. });
  635. // 没有数据的时候显示的图片
  636. $self.find('#jfgrid_body_' + op.id).append('<div class="jfgrid-nodata-img" id="jfgrid_nodata_img_' + op.id + '" ><img src="' + top.$.rootUrl + '/Content/images/jfgrid/nodata.jpg"></div>');
  637. // 分页条
  638. if (op.isPage) {// 支持
  639. $self.css({ 'padding-bottom': '35px' });
  640. var $pagebar = $('<div class="jfgrid-page-bar" id="jfgrid_page_bar_' + op.id + '"><div class="jfgrid-page-bar-info" >无显示数据</div>\
  641. <div class="paginations" id="jfgrid_page_bar_nums_'+ op.id + '" style="display:none;" >\
  642. <ul class="pagination pagination-sm"><li><a href="javascript:void(0);" class="pagebtn">首页</a></li></ul>\
  643. <ul class="pagination pagination-sm"><li><a href="javascript:void(0);" class="pagebtn">上一页</a></li></ul>\
  644. <ul class="pagination pagination-sm" id="jfgrid_page_bar_num_' + op.id + '" ></ul>\
  645. <ul class="pagination pagination-sm"><li><a href="javascript:void(0);" class="pagebtn">下一页</a></li></ul>\
  646. <ul class="pagination pagination-sm"><li><a href="javascript:void(0);" class="pagebtn">尾页</a></li></ul>\
  647. <ul class="pagination"><li><span></span></li></ul>\
  648. <ul class="pagination"><li><input type="text" class="form-control"></li></ul>\
  649. <ul class="pagination pagination-sm"><li><a href="javascript:void(0);" class="pagebtn">跳转</a></li></ul>\
  650. </div></div>');
  651. $footer.append($pagebar);
  652. $pagebar.find('#jfgrid_page_bar_num_' + op.id).on('click', _jfgrid.turnPage);
  653. $pagebar.find('#jfgrid_page_bar_nums_' + op.id + ' .pagebtn').on('click', { op: op }, _jfgrid.turnPage2);
  654. $pagebar = null;
  655. }
  656. else if (op.isEdit) {
  657. $self.css({ 'padding-bottom': '29px' });
  658. var $toolbar = $('<div class="jfgrid-toolbar" id="jfgrid_toolbar_' + op.id + '"></div>');
  659. var $add = $('<span><i class="fa fa-plus"></i></span>');
  660. var $minus = $('<span><i class="fa fa-minus"></i></span>');
  661. if (op.isEditWithTip) { //工具栏增加汉字提示
  662. $add = $('<span><i class="fa fa-plus"></i><b>添加</b></span>');
  663. $minus = $('<span><i class="fa fa-minus"></i><b>删除</b></span>');
  664. }
  665. $add.on('click', function () {
  666. var _item = {};
  667. op.rowdatas.push(_item);
  668. op.onAddRow && op.onAddRow(_item, op.rowdatas);
  669. if (op.isTree) {
  670. _jfgrid.rowRender($self, op, { data: _item, childRows: [] }, 0, 1);
  671. }
  672. else {
  673. _jfgrid.rowRender($self, op, _item, 0);
  674. }
  675. $self.find('#jfgrid_nodata_img_' + op.id).hide();
  676. });
  677. $minus.on('click', function () {
  678. // 获取选中行
  679. var flag = false;
  680. var res = true;
  681. if (op.isMultiselect) {
  682. var checklist = [];
  683. $.each(op.running.rowdata, function (_index, _item) {
  684. if (_item['jfcheck'].value == 1) {
  685. res = true;
  686. if (op.beforeMinusRow) {
  687. res = op.beforeMinusRow(_item['jfgridRowData']);
  688. }
  689. if (res) {
  690. op.rowdatas.splice(op.rowdatas.indexOf(_item['jfgridRowData']), 1);
  691. checklist.push(_item['jfgridRowData']);
  692. flag = true;
  693. }
  694. }
  695. });
  696. if (flag) {
  697. op.onMinusRow && op.onMinusRow(checklist, op.rowdatas);
  698. }
  699. }
  700. else {
  701. if (op.running.rowSelected != null) {
  702. res = true;
  703. if (op.beforeMinusRow) {
  704. res = op.beforeMinusRow(op.running.rowSelected['jfgridRowData']);
  705. }
  706. if (res) {
  707. op.rowdatas.splice((op.running.rowSelected['jfnum'].value - 1), 1);
  708. flag = true;
  709. op.onMinusRow && op.onMinusRow(op.running.rowSelected, op.rowdatas);
  710. op.running.rowSelected = null;
  711. }
  712. }
  713. }
  714. if (flag) {
  715. _jfgrid.dataRender($self, op, op.rowdatas);
  716. }
  717. if (op.running.rowdata.length == 0) {
  718. $self.find('#jfgrid_nodata_img_' + op.id).show();
  719. }
  720. });
  721. $toolbar.append($add);
  722. $toolbar.append($minus);
  723. $footer.append($toolbar);
  724. $toolbar = null;
  725. }
  726. $head = null;
  727. $body = null;
  728. $footer = null;
  729. },
  730. bind: function ($self, op) {
  731. // 点击事件
  732. $self.on('click', function (e) {
  733. var $this = $(this);
  734. var op = $this[0].dfop;
  735. var et = e.target || e.srcElement;
  736. var $et = $(et);
  737. if (!$et.hasClass('jfgrid-edit-cell') && $et.parents('.jfgrid-edit-cell').length == 0) {
  738. hideEditCell();
  739. }
  740. if (op.running.isWidhChanging) {// 调整列表宽度
  741. //$.jfGrid.moveHeadWidth(dfop, false);
  742. dfop.isWidhChanging = false;
  743. }
  744. else if ($et.hasClass('jfgrid-head-cell') || $et.parents('.jfgrid-head-cell').length > 0) {// 排序
  745. if (!$et.hasClass('jfgrid-head-cell')) {
  746. $et = $et.parents('.jfgrid-head-cell');
  747. }
  748. _jfgrid.sortCol($this, $et, op);
  749. }
  750. else if ($et.attr('colname') == 'jfgrid_subGrid' || $et.parent().attr('colname') == 'jfgrid_subGrid') {// 展开或关闭子表单
  751. _jfgrid.expandSub($this, $et, op);
  752. }
  753. else if ($et.parent().hasClass('jfgrid-data-cell-expend')) {// 树形结构展开和关闭
  754. _jfgrid.expandTree($et, op);
  755. }
  756. else if ($et.hasClass('jfgrid-data-cell') || $et.parents('.jfgrid-data-cell').length > 0) {// 选中行
  757. _jfgrid.clickRow($this, $et, op);
  758. e.stopPropagation();
  759. }
  760. else if ($et.attr('id') == ('jfgrid_all_cb_' + op.id)) {// 全部勾选
  761. _jfgrid.checkAllRows($this, $et, op);
  762. }
  763. });
  764. // 双击事件
  765. $self.on('dblclick', function (e) {
  766. var $this = $(this);
  767. var op = $this[0].dfop;
  768. var et = e.target || e.srcElement;
  769. var $et = $(et);
  770. if ($et.hasClass('jfgrid-data-cell') || $et.parents('.jfgrid-data-cell').length > 0) {// 选中行
  771. op.dblclick && op.dblclick(op.running.rowSelected['jfgridRowData']);
  772. }
  773. });
  774. // 鼠标移过事件
  775. $self.on('mouseover', function (e) {
  776. var $this = $(this);
  777. $this.find('.jfgrid-data-cell-over').removeClass('jfgrid-data-cell-over');
  778. var et = e.target || e.srcElement;
  779. var $et = $(et);
  780. if ($et.hasClass('jfgrid-data-cell') || $et.parents('.jfgrid-data-cell').length > 0) {
  781. var rowid = $et.attr('rownum');
  782. if (!rowid) {
  783. rowid = $et.parents('.jfgrid-data-cell').attr('rownum');
  784. }
  785. $this.find('[rownum="' + rowid + '"]').addClass('jfgrid-data-cell-over');
  786. }
  787. });
  788. // 监听表格大小变化
  789. $self.resize(function () {
  790. var $this = $(this);
  791. var op = $this[0].dfop;
  792. setLastColWidth($this, op, true);
  793. // 如果有子表格调整宽度
  794. var width = $this.find('#jfgrid_body_' + op.id).width();
  795. $this.find('.jfgrid-sub').css({ 'width': width });
  796. });
  797. // 调整列宽
  798. $self.delegate('.jfgrid-heed-move', 'mousedown', { op: op }, function (e) {
  799. $jfgridmove.show();
  800. var op = e.data.op;
  801. op.running.moveing = true;
  802. op.running.xMousedown = e.pageX;
  803. var $moveline = $('#jfgrid_move_line_' + op.id);
  804. var path = parseInt($(this).parent().attr('path'));
  805. var col = op.running.headData[path];
  806. op.running.moveCol = col;
  807. op.running.moveWidth = col._width || col.width;
  808. op.running.moveLineLeft = col.left + op.running.moveWidth + op.running.leftWidth;
  809. if (col.frozen) {
  810. op.running.moveLineLeft = op.running.moveLineLeft - op.running.frozenleft;
  811. }
  812. $moveline.css({ 'left': op.running.moveLineLeft }).show();
  813. });
  814. top.$(document).on('mousemove', { $obj: $self }, function (e) {
  815. var op = e.data.$obj[0].dfop;
  816. var x = e.pageX;
  817. if (op.running.moveing) {
  818. var $moveline = e.data.$obj.find('#jfgrid_move_line_' + op.id);
  819. var width = op.running.moveWidth + (x - op.running.xMousedown);
  820. width = (width < 40 ? 40 : width);
  821. var left = op.running.moveLineLeft + (width - op.running.moveWidth);
  822. $moveline.css({ 'left': left });
  823. }
  824. }).on('mouseup', { $obj: $self }, function (e) {
  825. var op = e.data.$obj[0].dfop;
  826. if (op.running.moveing) {
  827. op.running.moveing = false;
  828. var x = e.pageX;
  829. if (op.running.moveCol) {
  830. var width = op.running.moveWidth + (x - op.running.xMousedown);
  831. width = (width < 40 ? 40 : width);
  832. var _width = width - op.running.moveWidth;
  833. if (_width != 0) {
  834. setColWidthByMove(op.running.moveCol, _width);
  835. if (op.running.moveCol.frozen) {
  836. op.running.frozenleft += _width;
  837. op.running.leftWidth += _width;
  838. e.data.$obj.find('#jfgrid_head_' + op.id).css({ 'padding-left': op.running.leftWidth });
  839. e.data.$obj.find('#jfgrid_border_' + op.id).css({ 'width': op.running.leftWidth });
  840. e.data.$obj.find('#jfgrid_head_col_' + op.id).css({ 'left': op.running.leftWidth });
  841. e.data.$obj.find('#jfgrid_body_' + op.id + '>.lr-scroll-box').css({ 'padding-left': op.running.leftWidth });
  842. e.data.$obj.find('#jfgrid_left_' + op.id).css({ 'width': op.running.leftWidth });
  843. e.data.$obj.find('#jfgrid_left_' + op.id + '>[colname="' + op.running.moveCol.data.name + '"]').css({ 'width': op.running.moveCol.width });
  844. if (op.running.isStatistic) {
  845. e.data.$obj.find('#jfgrid_statistic_' + op.id).css({ 'padding-left': op.running.leftWidth });
  846. e.data.$obj.find('#jfgrid_statistic_' + op.id + '>.jfgrid-statistic-left').css({ 'width': op.running.leftWidth });
  847. e.data.$obj.find('#jfgrid_statistic_' + op.id + ' [name="' + op.running.moveCol.data.name + '"]').css({ 'width': op.running.moveCol.width });
  848. }
  849. }
  850. else {
  851. op.running.headWidth += _width;
  852. op.running.left += _width;
  853. e.data.$obj.find('#jfgrid_head_col_' + op.id).css({ 'width': op.running.headWidth });
  854. e.data.$obj.find('#jfgrid_right_' + op.id).css({ 'width': op.running.headWidth });
  855. e.data.$obj.find('#jfgrid_right_' + op.id + '>[colname="' + op.running.moveCol.data.name + '"]').css({ 'width': op.running.moveCol.width });
  856. if (op.running.isStatistic) {
  857. e.data.$obj.find('#jfgrid_statistic_' + op.id + '>.jfgrid-statistic-right').css({ 'width': op.running.headWidth });
  858. e.data.$obj.find('#jfgrid_statistic_' + op.id + ' [name="' + op.running.moveCol.data.name + '"]').css({ 'width': op.running.moveCol.width });
  859. }
  860. }
  861. var path = parseInt(op.running.moveCol.$cell.attr('path'));
  862. for (var i = path + 1, l = op.running.headData.length; i < l; i++) {
  863. var col = op.running.headData[i];
  864. if (col.frozen && op.running.moveCol.frozen) {
  865. col.left += _width;
  866. col.$cell.css({ 'left': col.left + op.running.leftWidth - op.running.frozenleft });
  867. e.data.$obj.find('#jfgrid_left_' + op.id + '>[colname="' + col.data.name + '"]').css({ 'left': col.left + op.running.leftWidth - op.running.frozenleft });
  868. if (op.running.isStatistic) {
  869. e.data.$obj.find('#jfgrid_statistic_' + op.id + ' [name="' + col.data.name + '"]').css({ 'left': col.left + op.running.leftWidth - op.running.frozenleft });
  870. }
  871. }
  872. else if (!col.frozen && !op.running.moveCol.frozen) {
  873. col.left += _width;
  874. col.$cell.css({ 'left': col.left });
  875. e.data.$obj.find('#jfgrid_right_' + op.id + '>[colname="' + col.data.name + '"]').css({ 'left': col.left });
  876. if (op.running.isStatistic) {
  877. e.data.$obj.find('#jfgrid_statistic_' + op.id + ' [name="' + col.data.name + '"]').css({ 'left': col.left });
  878. }
  879. }
  880. }
  881. setLastColWidth(e.data.$obj, op, true);
  882. }
  883. op.running.moveCol = null;
  884. }
  885. $jfgridmove.hide();
  886. var $moveline = e.data.$obj.find('#jfgrid_move_line_' + op.id);
  887. $moveline.hide();
  888. }
  889. });
  890. },
  891. head: function ($self, op) {
  892. op.running.MaxDeep = 0;
  893. op.running.headWidth = 0;
  894. op.running.headHeight = 0;
  895. op.running.leftWidth = 0;
  896. op.running.left = 0;
  897. op.running.frozenleft = 0;
  898. op.running.cols = [];
  899. op.running.frozenCols = [];
  900. op.running.mergeCols || [];
  901. op.running.headData = [];
  902. // 列表表头数据初始化
  903. headDataInit(op.headData, false, op.running.headData, op.running.cols, op.running.frozenCols, op.running);
  904. // 判断是否有需要统计
  905. if (op.running.isStatistic) {
  906. op.running.statisticData = {};
  907. // 判断是否加载了底部条
  908. $self.find('#jfgrid_footer_' + op.id).append('<div class="jfgrid-statistic" id="jfgrid_statistic_' + op.id + '"><div class="jfgrid-statistic-left"></div><div class="jfgrid-statistic-right" ></div></div>');
  909. if (op.isPage) {
  910. $self.find('#jfgrid_footer_' + op.id).css({ 'height': 64, 'padding-top': '29px' });
  911. $self.css({ 'padding-bottom': '64px' });
  912. }
  913. else {
  914. $self.find('#jfgrid_footer_' + op.id).css({ 'height': 29 });
  915. $self.css({ 'padding-bottom': '29px' });
  916. }
  917. $self.find('#jfgrid_toolbar_' + op.id).css({ 'width': '50px' });
  918. } else if (op.isEdit) {
  919. $self.find('#jfgrid_toolbar_' + op.id).css({ 'width': '100%' });
  920. }
  921. op.running.headHeight = op.running.MaxDeep * 28 + 28;
  922. op.running.headWidth = op.running.left;
  923. var $border = $self.find('#jfgrid_border_' + op.id);
  924. var $headcol = $self.find('#jfgrid_head_col_' + op.id);
  925. // 判断是否有序号列
  926. if (op.isShowNum) {
  927. $border.append('<div class="jfgrid-border-cell jfgrid-border-num"></div>');
  928. op.running.leftWidth += 60;
  929. }
  930. // 判断是否允许多选
  931. if (op.isMultiselect) {
  932. var $cb = $('<div class="jfgrid-border-cell jfgrid-border-cb"><img id="jfgrid_all_cb_' + op.id + '" src="' + imageurl + cb[0] + '" /></div>')
  933. .css({ 'left': op.running.leftWidth, 'line-height': (op.running.headHeight - 1) + 'px' });
  934. $border.append($cb);
  935. op.running.leftWidth += 60;
  936. }
  937. // 是否有展开
  938. if (op.isSubGrid) {
  939. var $sub = $('<div class="jfgrid-border-cell jfgrid-border-sub"></div>').css('left', op.running.leftWidth);
  940. $border.append($sub);
  941. op.running.leftWidth += 60;
  942. }
  943. op.running.leftWidth += op.running.frozenleft;
  944. $self.css({ 'padding-top': op.running.headHeight });
  945. $self.find('#jfgrid_head_' + op.id).css({ 'padding-top': op.running.headHeight });
  946. $border.css({ 'width': op.running.leftWidth, 'height': op.running.headHeight });
  947. $headcol.css({ 'width': op.running.headWidth, 'height': op.running.headHeight, 'left': op.running.leftWidth });
  948. $self.find('#jfgrid_body_' + op.id + '>.lr-scroll-box').css({ 'padding-left': op.running.leftWidth });
  949. $self.find('#jfgrid_left_' + op.id).css({ 'width': op.running.leftWidth });
  950. // 设置最后一列的宽度
  951. setLastColWidth($self, op, false);
  952. if (op.running.isStatistic) {// 添加统计条单元格
  953. $self.find('#jfgrid_statistic_' + op.id).css({ 'padding-left': op.running.leftWidth });
  954. $self.find('#jfgrid_statistic_' + op.id + '>.jfgrid-statistic-left').css({ 'width': op.running.leftWidth });
  955. }
  956. var _left = 0;
  957. var $sLast = null;// 用来填写合计条的
  958. var _sLastFlag = true;
  959. $.each(op.running.headData, function (_index, _item) {
  960. if (_item.last) {
  961. _item.height = _item.height + (op.running.MaxDeep - _item.deep) * 28;
  962. }
  963. _item.data.height = _item.height;
  964. _item.$cell = $('<div class="jfgrid-head-cell" path="' + _index + '" ><span>' + (_item.data.label || "") + '</span></div>')
  965. .css({ 'top': _item.top, 'left': _item.left, 'width': (_item._width || _item.width), 'height': _item.height, 'line-height': (_item.height - 1) + 'px', 'text-align': (_item.data.align || 'left') });
  966. // 翻译
  967. learun.language.get((_item.data.label || ""), function (text) {
  968. _item.data.label = text;
  969. _item.$cell.find('span').text(text);
  970. });
  971. if (_item.last) {
  972. _item.$cell.append('<div class="jfgrid-heed-sort"><i class="fa fa-caret-up"></i><i class="fa fa-caret-down"></i></div>');
  973. _item.$cell.append('<div class="jfgrid-heed-move"></div>');
  974. // 如果是编辑单元格需要初始化
  975. if (_item.data.edit) {
  976. initEditCell($self, op, _item);
  977. }
  978. if (!_item.frozen) {
  979. _left += (_item._width || _item.width);
  980. }
  981. if (op.running.isStatistic) {// 添加统计条单元格
  982. if (_item.data.statistics && _sLastFlag && $sLast != null) {
  983. $sLast.attr('isText', '1');
  984. $sLast.css({ 'text-align': 'right' });
  985. $sLast.text('合计:');
  986. _sLastFlag = false;
  987. }
  988. $sLast = $('<div class="jfGird-statistic-cell" name="' + _item.data.name + '" ></div>').css({ 'width': (_item._width || _item.width), 'text-align': (_item.data.align || 'left'), 'left': _item.left });
  989. if (_item.frozen) {
  990. $sLast.css({ 'left': (_item.left + op.running.leftWidth - op.running.frozenleft) });
  991. $self.find('#jfgrid_statistic_' + op.id + '>.jfgrid-statistic-left').append($sLast);
  992. }
  993. else {
  994. $self.find('#jfgrid_statistic_' + op.id + '>.jfgrid-statistic-right').append($sLast);
  995. }
  996. }
  997. }
  998. if (_item.frozen) {
  999. _item.$cell.css({ 'left': (_item.left + op.running.leftWidth - op.running.frozenleft) });
  1000. $border.append(_item.$cell);
  1001. }
  1002. else {
  1003. $headcol.append(_item.$cell);
  1004. }
  1005. });
  1006. $self.find('#jfgrid_right_' + op.id).parent().css({ 'width': op.running.leftWidth + _left - 1 });
  1007. $self.find('#jfgrid_right_' + op.id).css({ 'width': _left - 1 });
  1008. if (op.running.isStatistic) {// 添加统计条单元格\
  1009. $self.find('#jfgrid_statistic_' + op.id + '>.jfgrid-statistic-right').css({ 'width': _left - 1 });
  1010. }
  1011. },
  1012. // 渲染行数据
  1013. dataRender: function ($self, op, data, bindex) {
  1014. bindex = bindex || 0;
  1015. op.running.rowdata = [];
  1016. op.running.statisticData = {};
  1017. $self.hide();
  1018. $self.find('#jfgrid_left_' + op.id).find('.jfgrid-data-cell').remove();
  1019. $self.find('#jfgrid_right_' + op.id).find('.jfgrid-data-cell').remove();
  1020. $self.find('#jfgrid_left_' + op.id).find('.jfgrid-sub').remove();
  1021. hideEditCell();
  1022. var isAllCheck = 3;
  1023. if (op.isTree) {
  1024. function _treeRender(_data, deep) {
  1025. $.each(_data, function (_index, _item) {
  1026. _jfgrid.rowRender($self, op, _item, bindex, deep);
  1027. if (_item.childRows.length > 0) {
  1028. _treeRender(_item.childRows, deep + 1);
  1029. }
  1030. });
  1031. };
  1032. var treeList = _jfgrid.listTotree(data, op);
  1033. if (treeList.length > 0) {
  1034. _treeRender(treeList, 1);
  1035. if (op.isTreeClose) {
  1036. setTimeout(function () {
  1037. $.each(treeList, function (_treeIndex, _treeItem) {
  1038. $('.jfgrid-data-cell[rowindex="' + _treeItem._lrindex + '"] .jfgrid-data-cell-expendi').trigger('click');
  1039. });
  1040. });
  1041. }
  1042. }
  1043. else {
  1044. }
  1045. }
  1046. else {
  1047. $.each(data, function (_index, _item) {
  1048. _jfgrid.rowRender($self, op, _item, bindex);
  1049. if (op.multiselectfield && _item[op.multiselectfield] == 1) {
  1050. if (isAllCheck == 0) {
  1051. isAllCheck = 2;
  1052. }
  1053. else if (isAllCheck == 3) {
  1054. isAllCheck = 1;
  1055. }
  1056. }
  1057. else if (op.multiselectfield && _item[op.multiselectfield] == 0) {
  1058. if (isAllCheck == 1) {
  1059. isAllCheck = 2;
  1060. }
  1061. else if (isAllCheck == 3) {
  1062. isAllCheck = 0;
  1063. }
  1064. }
  1065. });
  1066. if (op.isPage) { // 如果是分页,刷新一下分页显示条
  1067. var $pagebar = $('#jfgrid_page_bar_' + op.id);
  1068. var $pagebarBtn = $pagebar.find('#jfgrid_page_bar_num_' + op.id);
  1069. var $pagebarBtns = $pagebar.find('#jfgrid_page_bar_nums_' + op.id);
  1070. var pagebarLabel = '';
  1071. var btnlist = "";
  1072. if (op.rowdatas.length == 0) {
  1073. pagebarLabel = '无显示数据';
  1074. }
  1075. else {
  1076. var pageparam = op.running.pageparam;
  1077. var beginnum = (pageparam.page - 1) * pageparam.rows + 1;
  1078. var endnum = beginnum + op.rowdatas.length - 1;
  1079. pagebarLabel = '显示第 ' + beginnum + ' - ' + endnum + ' 条记录 <span>|</span> 检索到 ' + pageparam.records + ' 条记录';
  1080. if (pageparam.total > 1) {
  1081. var bpage = pageparam.page - 6;
  1082. bpage = bpage < 0 ? 0 : bpage;
  1083. var epage = bpage + 10;
  1084. if (epage > pageparam.total) {
  1085. epage = pageparam.total;
  1086. }
  1087. if ((epage - bpage) < 10) {
  1088. bpage = epage - 10;
  1089. }
  1090. bpage = bpage < 0 ? 0 : bpage;
  1091. for (var i = bpage; i < epage; i++) {
  1092. btnlist += '<li><a href="javascript:void(0);" class=" pagebtn ' + ((i + 1) == pageparam.page ? 'active' : '') + '" >' + (i + 1) + '</a></li>';
  1093. }
  1094. $pagebarBtns.find('span').text('共' + pageparam.total + '页,到');
  1095. $pagebarBtns.show();
  1096. }
  1097. else {
  1098. $pagebarBtns.hide();
  1099. }
  1100. }
  1101. $pagebarBtn.html(btnlist);
  1102. $pagebar.find('.jfgrid-page-bar-info').html(pagebarLabel);
  1103. }
  1104. }
  1105. if (op.isMultiselect) {
  1106. if (isAllCheck == 2 || isAllCheck == 1) {
  1107. $self.find('#jfgrid_all_cb_' + op.id).attr('src', imageurl + cb[isAllCheck]);
  1108. }
  1109. else {
  1110. $self.find('#jfgrid_all_cb_' + op.id).attr('src', imageurl + cb[0]);
  1111. }
  1112. }
  1113. if (op.running.rowdata.length > 0) {
  1114. $self.find('#jfgrid_nodata_img_' + op.id).hide();
  1115. }
  1116. else {
  1117. $self.find('#jfgrid_nodata_img_' + op.id).show();
  1118. //dyy解决列表查询数据为空后统计条的值不能清除的问题
  1119. //有统计列时,如果列表查询数据为空,则将统计条的值赋值为空;
  1120. if (op.running.isStatistic) {
  1121. $.each(op.running.cols, function (_id, col) {
  1122. if (col.data.statistics) {
  1123. $('#jfgrid_statistic_' + op.id + ' [name="' + col.data.name + '"]').text('');
  1124. }
  1125. });
  1126. }
  1127. }
  1128. $self.show();
  1129. },
  1130. rowRender: function ($self, op, _item, bindex, deep) {
  1131. var lastCell = null;
  1132. var rowdata = op.running.rowdata;
  1133. bindex = bindex || 0;
  1134. var $left = $self.find('#jfgrid_left_' + op.id);
  1135. var $right = $self.find('#jfgrid_right_' + op.id);
  1136. var _index = rowdata.length;
  1137. var _top = _index * op.rowHeight;
  1138. var _left = 0;
  1139. var row = {};
  1140. var $expendcell = null;
  1141. if (op.isTree) {
  1142. _item._lrindex = _index;
  1143. row['jfgridRowData'] = _item.data;
  1144. row.childRows = _item.childRows;
  1145. row.jfdeep = deep;
  1146. _item = _item.data;
  1147. $expendcell = $('<div class="jfgrid-data-cell-expend" style="width:' + (deep * 16) + 'px;" ></div>');
  1148. if (row.childRows.length > 0) {
  1149. $expendcell.append('<i class="fa fa-caret-down jfgrid-data-cell-expendi"></i>');
  1150. }
  1151. op.rowdatas[_index] = _item;
  1152. } else {
  1153. row['jfgridRowData'] = _item;
  1154. }
  1155. // 序号
  1156. row['jfnum'] = {
  1157. top: _top,
  1158. left: _left,
  1159. value: _index + 1,
  1160. text: _index + bindex * (op.isPage ? op.running.pageparam.rows : 1) + 1
  1161. };
  1162. if (op.isShowNum) {
  1163. row['jfnum'].$cell = $('<div class="jfgrid-data-cell" rowindex="' + _index + '" rownum="' + op.id + '_' + _index + '" colname="jfgrid_num" >' + (_index + bindex * (op.isPage ? op.running.pageparam.rows : 1) + 1) + '</div>');
  1164. row['jfnum'].$cell.css({ 'top': row['jfnum'].top, 'left': row['jfnum'].left, 'text-align': 'center', 'height': op.rowHeight, 'line-height': (op.rowHeight - 1) + 'px' });
  1165. $left.append(row['jfnum'].$cell);
  1166. _left += op.numRowWitdh;// 30
  1167. }
  1168. // 是否多选
  1169. if (op.isMultiselect) {
  1170. var _colname = op.multiselectfield || 'jfcheck';
  1171. row['jfcheck'] = {
  1172. top: _top,
  1173. left: _left,
  1174. value: _item[_colname] || 0,
  1175. $cell: $('<div class="jfgrid-data-cell" rowindex="' + _index + '" rownum="' + op.id + '_' + _index + '" colname="jfgrid_check" ><img src="' + imageurl + cb[0] + '" /></div>')
  1176. };
  1177. if (row['jfcheck'].value + '' == '1') {
  1178. row['jfcheck'].$cell.find('img').attr('src', imageurl + cb[1]);
  1179. }
  1180. row['jfcheck'].$cell.css({ 'top': row['jfcheck'].top, 'left': row['jfcheck'].left, 'text-align': 'center', 'height': op.rowHeight, 'line-height': (op.rowHeight - 1) + 'px' });
  1181. $left.append(row['jfcheck'].$cell);
  1182. _left += 60;
  1183. }
  1184. // 是否有子表选项
  1185. if (op.isSubGrid) {
  1186. row['jfsubGrid'] = {
  1187. top: _top,
  1188. left: _left,
  1189. value: false,
  1190. $cell: $('<div class="jfgrid-data-cell" rowindex="' + _index + '" rownum="' + op.id + '_' + _index + '" colname="jfgrid_subGrid" ><i class="fa fa-plus" ></i></div>')
  1191. };
  1192. row['jfsubGrid'].$cell.css({ 'top': row['jfsubGrid'].top, 'left': row['jfsubGrid'].left, 'text-align': 'center', 'height': op.rowHeight, 'line-height': (op.rowHeight - 1) + 'px' });
  1193. $left.append(row['jfsubGrid'].$cell);
  1194. _left += 60;
  1195. }
  1196. // 加载固定列数据
  1197. $.each(op.running.frozenCols, function (_id, col) {
  1198. //colData[col.name] = colData[col.name] || {};
  1199. var value = _item[col.data.name];
  1200. var _width = (col.data._width || col.data.width);
  1201. row[col.data.name] = {
  1202. top: _top,
  1203. left: _left,
  1204. value: value,
  1205. $cell: $('<div class="jfgrid-data-cell" rowindex="' + _index + '" rownum="' + op.id + '_' + _index + '" colname="' + col.data.name + '" ></div>')
  1206. };
  1207. formatterCell(value, col.data, _item, row[col.data.name], op);
  1208. row[col.data.name].$cell.css({ 'top': row[col.data.name].top, 'left': row[col.data.name].left, 'text-align': col.data.align, 'width': _width, 'height': op.rowHeight, 'line-height': (op.rowHeight - 1) + 'px' });
  1209. $left.append(row[col.data.name].$cell);
  1210. _left += _width;
  1211. if ($expendcell != null && _id == 0) {
  1212. row[col.data.name].$cell.prepend($expendcell);
  1213. }
  1214. lastCell = row[col.data.name];
  1215. });
  1216. _left = 0;
  1217. // 加载滚动区域列数据
  1218. $.each(op.running.cols, function (_id, col) {
  1219. var value = _item[col.data.name];
  1220. var _width = (col._width || col.width);
  1221. row[col.data.name] = {
  1222. top: _top,
  1223. left: _left,
  1224. value: value,
  1225. $cell: $('<div class="jfgrid-data-cell" rowindex="' + _index + '" rownum="' + op.id + '_' + _index + '" colname="' + col.data.name + '" ></div>')
  1226. };
  1227. formatterCell(value, col.data, _item, row[col.data.name], op);
  1228. row[col.data.name].$cell.css({ 'top': row[col.data.name].top, 'left': row[col.data.name].left, 'text-align': col.data.align, 'width': _width, 'height': op.rowHeight, 'line-height': (op.rowHeight - 1) + 'px' });
  1229. $right.append(row[col.data.name].$cell);
  1230. _left += _width;
  1231. if ($expendcell != null && _id == 0 && op.running.frozenCols.length == 0) {
  1232. row[col.data.name].$cell.prepend($expendcell);
  1233. }
  1234. lastCell = row[col.data.name];
  1235. });
  1236. rowdata.push(row);
  1237. $right.css({ 'height': _top + op.rowHeight - 1 });
  1238. if (op.isAutoHeight) {
  1239. var _ptop = $self.css('padding-top');
  1240. var _pbottom = $self.css('padding-bottom');
  1241. $self.css({ 'height': _top + op.rowHeight + parseInt(_ptop) + parseInt(_pbottom) + 1 });
  1242. }
  1243. if (op.running.rowSelected && lastCell) {
  1244. if (op.running.rowSelected.jfgridRowData[op.mainId]) {
  1245. op.running.rowSelected.jfgridRowData[op.mainId] == row.jfgridRowData[op.mainId] && (lastCell.$cell.trigger('click'));
  1246. }
  1247. else {
  1248. op.running.rowSelected['jfnum'].value == row['jfnum'].value && (lastCell.$cell.trigger('click'));
  1249. }
  1250. }
  1251. },
  1252. updateRow: function (row, op) {
  1253. var map = {};
  1254. $.each(op.running.headData, function (i, col) {
  1255. map[col.data.name] = col.data;
  1256. });
  1257. $.each(row, function (id, _item) {
  1258. if (id != 'jfnum' && id != 'jfcheck' && id != 'jfsubGrid' && id != 'jfgridRowData') {
  1259. if (_item.value != row['jfgridRowData'][id]) {
  1260. _item.value = row['jfgridRowData'][id] || '';
  1261. formatterCell(_item.value, map[id], row['jfgridRowData'], _item, op);
  1262. }
  1263. }
  1264. });
  1265. },
  1266. // 后台数据加载
  1267. reload: function ($self, op, setData={}) {
  1268. op.rowdatas = [];
  1269. if (op.isPage) {
  1270. learun.loading(true, '正在获取数据');
  1271. op.running.pageparam = op.running.pageparam || {
  1272. rows: 100, // 每页行数
  1273. page: 1, // 当前页
  1274. sidx: '', // 排序列
  1275. sord: '', // 排序类型
  1276. records: 0, // 总记录数
  1277. total: 0 // 总页数
  1278. };
  1279. op.running.pageparam.rows = op.rows;
  1280. op.running.pageparam.sidx = op.sidx;
  1281. op.running.pageparam.sord = op.sord;
  1282. op.running.pageparam.page = op.running.pageparam.page || 1;
  1283. op.running.pageparam.records = 0;
  1284. op.running.pageparam.total = 0;
  1285. op.param = op.param || {};
  1286. delete op.param['pagination'];
  1287. var _paramString = JSON.stringify(op.param);
  1288. if (op.running.paramString != _paramString) {
  1289. op.running.paramString = _paramString;
  1290. op.running.pageparam.page = 1;
  1291. }
  1292. if(setData.page)op.running.pageparam.page = setData.page;
  1293. op.param['pagination'] = JSON.stringify(op.running.pageparam);
  1294. learun.httpAsync('GET', op.url, op.param, function (data) {
  1295. learun.loading(false);
  1296. if (data) {
  1297. op.rowdatas = data.rows;
  1298. op.running.pageparam.page = data.page;
  1299. op.running.pageparam.records = data.records;
  1300. op.running.pageparam.total = data.total;
  1301. }
  1302. else {
  1303. op.rowdatas = [];
  1304. op.running.pageparam.page = 1;
  1305. op.running.pageparam.records = 0;
  1306. op.running.pageparam.total = 0;
  1307. }
  1308. op.onRenderBefore && op.onRenderBefore(op.rowdatas);
  1309. _jfgrid.dataRender($self, op, op.rowdatas, (op.running.pageparam.page - 1));
  1310. op.onRenderComplete && op.onRenderComplete(op.rowdatas);
  1311. });
  1312. } else {
  1313. learun.loading(true, '正在获取数据');
  1314. learun.httpAsync('GET', op.url, op.param, function (data) {
  1315. learun.loading(false);
  1316. op.rowdatas = data || [];
  1317. op.onRenderBefore && op.onRenderBefore(op.rowdatas);
  1318. _jfgrid.dataRender($self, op, op.rowdatas, 0);
  1319. op.onRenderComplete && op.onRenderComplete(op.rowdatas);
  1320. });
  1321. }
  1322. //liang解决刷新后选择的行不能清除的问题
  1323. op.running.rowSelected = undefined;
  1324. },
  1325. // 数据转换
  1326. listTotree: function (data, op) {
  1327. // 只适合小数据计算
  1328. var resdata = [];
  1329. var mapdata = {};
  1330. var mIds = {};
  1331. var pIds = {};
  1332. data = data || [];
  1333. for (var i = 0, l = data.length; i < l; i++) {
  1334. var item = data[i];
  1335. mIds[item[op.mainId]] = 1;
  1336. mapdata[item[op.parentId]] = mapdata[item[op.parentId]] || [];
  1337. mapdata[item[op.parentId]].push(item);
  1338. if (mIds[item[op.parentId]] == 1) {
  1339. delete pIds[item[op.parentId]];
  1340. }
  1341. else {
  1342. pIds[item[op.parentId]] = 1;
  1343. }
  1344. if (pIds[item[op.mainId]] == 1) {
  1345. delete pIds[item[op.mainId]];
  1346. }
  1347. }
  1348. for (var id in pIds) {
  1349. _fn(resdata, id);
  1350. }
  1351. function _fn(_data, vparentId) {
  1352. var pdata = mapdata[vparentId] || [];
  1353. for (var j = 0, l = pdata.length; j < l; j++) {
  1354. var _row = {
  1355. data: pdata[j],
  1356. childRows: []
  1357. }
  1358. _fn(_row.childRows, pdata[j][op.mainId]);
  1359. _data.push(_row);
  1360. }
  1361. }
  1362. return resdata;
  1363. },
  1364. // 树形展开或关闭
  1365. expandTree: function ($et, op) {
  1366. var _h = 0;
  1367. var flag = false;
  1368. // 获取当前数据所在行
  1369. var rownum = $et.parents('.jfgrid-data-cell').attr('rownum');
  1370. var rowIndex = parseInt(rownum.replace(op.id + '_', ''));
  1371. var rowItem = op.running.rowdata[rowIndex];
  1372. if ($et.hasClass('fa-caret-down')) {// 关闭s
  1373. rowItem.lrClosedRows = {};
  1374. for (var i = rowIndex + 1, l = op.running.rowdata.length; i < l; i++) {
  1375. var _row = op.running.rowdata[i];
  1376. if (_row.jfdeep > rowItem.jfdeep && !flag) {
  1377. if (!$('[rownum="' + op.id + '_' + i + '"]').is(':hidden')) {
  1378. _h += op.rowHeight;
  1379. $('[rownum="' + op.id + '_' + i + '"]').hide();
  1380. rowItem.lrClosedRows[i] = '1';
  1381. }
  1382. }
  1383. else {
  1384. flag = true;
  1385. var top = parseInt($('[rownum="' + op.id + '_' + i + '"]').eq(0).css('top').replace('px', '')) - _h;
  1386. $('[rownum="' + op.id + '_' + i + '"]').css({ top: top });
  1387. }
  1388. }
  1389. $et.removeClass('fa-caret-down');
  1390. $et.addClass('fa-caret-right');
  1391. }
  1392. else {// 展开
  1393. for (var i = rowIndex + 1, l = op.running.rowdata.length; i < l; i++) {
  1394. var _row = op.running.rowdata[i];
  1395. if (_row.jfdeep > rowItem.jfdeep && !flag) {
  1396. if (rowItem.lrClosedRows[i]) {
  1397. _h += op.rowHeight;
  1398. $('[rownum="' + op.id + '_' + i + '"]').show();
  1399. }
  1400. }
  1401. else {
  1402. flag = true;
  1403. var top = parseInt($('[rownum="' + op.id + '_' + i + '"]').eq(0).css('top').replace('px', '')) + _h;
  1404. $('[rownum="' + op.id + '_' + i + '"]').css({ top: top });
  1405. }
  1406. }
  1407. $et.removeClass('fa-caret-right');
  1408. $et.addClass('fa-caret-down');
  1409. }
  1410. $('#jfgrid_left_' + op.id + ' .jfgrid-selected,#jfgrid_right_' + op.id + ' .jfgrid-selected').removeClass('jfgrid-selected');
  1411. op.running.rowSelected = null;
  1412. },
  1413. // 排序
  1414. sortCol: function ($self, $et, op) {
  1415. var path = $et.attr('path');
  1416. var head = op.running.headData[path];
  1417. if (head.last && !head.data.sort && op.isPage) {
  1418. var isup = true;
  1419. if (op.running.sorthead) {
  1420. op.running.sorthead.$cell.find('.jfgrid-heed-sort').hide();
  1421. if (head == op.running.sorthead) {
  1422. var $i = head.$cell.find('.jfgrid-heed-sort .active');
  1423. $i.removeClass('active');
  1424. if ($i.hasClass('fa-caret-up')) {
  1425. head.$cell.find('.jfgrid-heed-sort .fa-caret-down').addClass('active');
  1426. isup = false;
  1427. }
  1428. else {
  1429. head.$cell.find('.jfgrid-heed-sort .fa-caret-up').addClass('active');
  1430. isup = true;
  1431. }
  1432. head.$cell.find('.jfgrid-heed-sort').show();
  1433. }
  1434. else {
  1435. head.$cell.find('.jfgrid-heed-sort .active').removeClass('active');
  1436. head.$cell.find('.jfgrid-heed-sort .fa-caret-up').addClass('active');
  1437. head.$cell.find('.jfgrid-heed-sort').show();
  1438. isup = true;
  1439. }
  1440. }
  1441. else {
  1442. head.$cell.find('.jfgrid-heed-sort .active').removeClass('active');
  1443. head.$cell.find('.jfgrid-heed-sort .fa-caret-up').addClass('active');
  1444. head.$cell.find('.jfgrid-heed-sort').show();
  1445. isup = true;
  1446. }
  1447. op.running.sorthead = head;
  1448. if (op.isPage) {
  1449. // 调用后台接口
  1450. op.sidx = head.data.name;
  1451. op.sord = isup ? 'ASC' : 'DESC';
  1452. _jfgrid.reload($self, op);
  1453. }
  1454. else {
  1455. // js排序
  1456. }
  1457. }
  1458. },
  1459. // 单击行
  1460. clickRow: function ($self, $et, op) {
  1461. var $cell = $et;
  1462. var rownum = $et.attr('rownum');
  1463. if (!rownum) {
  1464. $cell = $et.parents('.jfgrid-data-cell');
  1465. rownum = $cell.attr('rownum');
  1466. }
  1467. var rowIndex = parseInt(rownum.replace(op.id + '_', ''));
  1468. // 获取当前行数据
  1469. var rowItem = op.running.rowdata[rowIndex];
  1470. if (rowItem) {
  1471. var rowData = rowItem['jfgridRowData'];
  1472. }
  1473. // 判断当前单元格是否是可编辑
  1474. var colname = $cell.attr('colname');
  1475. var isEdit = false;
  1476. $.each(op.running.headData, function (i, col) {
  1477. if (col.data.name == colname) {
  1478. if (col.data.edit && col.$edit && col.data.edit.type != 'layer' && col.data.isRead != '1' && rowData.lrnotedit != '1') {
  1479. isEdit = true;
  1480. var _top = $cell.css('top');
  1481. var _left = $cell.css('left');
  1482. var _width = $cell.css('width');
  1483. col.$edit.css({ 'top': _top, 'left': _left, 'width': _width, 'height': op.rowHeight }).show();
  1484. var $edit = col.$edit.find('#jfgrid_edit_' + op.id + '_' + col.data.name);
  1485. $edit.unbind('change');
  1486. col.data.edit.init && col.data.edit.init(rowData, $edit);
  1487. switch (col.data.edit.type) {
  1488. case 'input': // 输入框 文本,数字,密码
  1489. $edit.unbind('input propertychange');
  1490. var texttmp = rowData[colname]
  1491. if (texttmp == null || texttmp == undefined) {
  1492. texttmp = ''
  1493. }
  1494. $edit.val(texttmp);
  1495. formatterCell(texttmp, col.data, rowData, rowItem[col.data.name], op);
  1496. $edit.select();
  1497. $edit.on("input propertychange", function (e) {
  1498. var value = $(this).val();
  1499. rowData[colname] = value;
  1500. col.data.edit.change && col.data.edit.change(rowData, rowIndex);
  1501. value = rowData[colname];
  1502. $(this).val(value);
  1503. formatterCell(value, col.data, rowData, rowItem[col.data.name], op);
  1504. });
  1505. break;
  1506. case 'select': // 下拉框选择
  1507. if (rowData[colname] == 0) {
  1508. $edit.lrselectSet(rowData[colname]);
  1509. }
  1510. else {
  1511. $edit.lrselectSet(rowData[colname] || '');
  1512. }
  1513. $edit.on('change', function () {
  1514. var $this = $(this);
  1515. var value = $this.lrselectGet();
  1516. var item = $this.lrselectGetEx();
  1517. rowData[colname] = value;
  1518. col.data.edit.change && col.data.edit.change(rowData, rowIndex, item);
  1519. formatterCell(value, col.data, rowData, rowItem[col.data.name], op);
  1520. });
  1521. break;
  1522. case 'radio': // 单选
  1523. $edit.find('input').unbind('click');
  1524. $edit.find('input[value="' + (rowData[colname] || '') + '"]').trigger('click');
  1525. $edit.find('input').on('click', function () {
  1526. var value = $(this).val();
  1527. if (rowData[colname] != value) {
  1528. rowData[colname] = value;
  1529. col.data.edit.change && col.data.edit.change(rowData, rowIndex);
  1530. formatterCell(value, col.data, rowData, rowItem[col.data.name], op);
  1531. }
  1532. });
  1533. if ((rowData[colname] == '' || rowData[colname] == null || rowData[colname] == undefined) && col.data.edit.dfvalue) {
  1534. $edit.find('input[value="' + col.data.edit.dfvalue + '"]').trigger('click');
  1535. }
  1536. break;
  1537. case 'checkbox': // 多选
  1538. $edit.find('input').unbind('click');
  1539. var _oldv = rowData[colname] || '';
  1540. var _cbmap = {};
  1541. var _cbValue = rowData[colname] || col.data.edit.dfvalue || '';
  1542. _cbValue += '';
  1543. rowData[colname] = _cbValue;
  1544. var _cbValueList = _cbValue.split(',');
  1545. $.each(_cbValueList, function (_index, _item) {
  1546. _cbmap[_item] = '1';
  1547. });
  1548. $edit.find('input').each(function () {
  1549. var $this = $(this);
  1550. var _v = $this.val();
  1551. if ($this.is(':checked') && !_cbmap[_v]) {
  1552. $this.trigger('click');
  1553. }
  1554. else if (!$this.is(':checked') && _cbmap[_v]) {
  1555. $this.trigger('click');
  1556. }
  1557. $this = null;
  1558. });
  1559. if (_oldv != rowData[colname]) {
  1560. col.data.edit.change && col.data.edit.change(rowData, rowIndex);
  1561. formatterCell(rowData[colname], col.data, rowData, rowItem[col.data.name], op);
  1562. }
  1563. $edit.find('input').on('click', function () {
  1564. var $this = $(this);
  1565. var value = $this.val();
  1566. var _v = rowData[colname].split(',');
  1567. var _vmap = {};
  1568. var v = [];
  1569. $.each(_v, function (_index, _item) {
  1570. if (_item !== '' && _item !== undefined && _item !== null) {
  1571. _vmap[_item] = _index;
  1572. v.push(_item);
  1573. }
  1574. });
  1575. if ($this.is(':checked')) {
  1576. if (_vmap[value] == undefined) {
  1577. v.push(value);
  1578. }
  1579. }
  1580. else {
  1581. if (_vmap[value] != undefined) {
  1582. v.splice(_vmap[value], 1);
  1583. }
  1584. }
  1585. rowData[colname] = String(v);
  1586. col.data.edit.change && col.data.edit.change(rowData, rowIndex);
  1587. formatterCell(rowData[colname], col.data, rowData, rowItem[col.data.name], op);
  1588. });
  1589. break;
  1590. case 'datatime': // 时间
  1591. $edit.unbind('change');
  1592. $edit.val(rowData[colname] || '');
  1593. $edit.select();
  1594. $edit.on("change", function (e) {
  1595. var value = $(this).val();
  1596. rowData[colname] = value;
  1597. col.data.edit.change && col.data.edit.change(rowData, rowIndex);
  1598. formatterCell(value, col.data, rowData, rowItem[col.data.name], op);
  1599. });
  1600. break;
  1601. case 'layer': // 弹层
  1602. break;
  1603. }
  1604. }
  1605. return false;
  1606. }
  1607. });
  1608. if (!isEdit) {
  1609. if (op.isMultiselect) {
  1610. var _cbValue = rowItem['jfcheck'].value;
  1611. if ((_cbValue + '') == '1') {
  1612. rowItem['jfcheck'].$cell.find('img').attr('src', imageurl + cb[0]);
  1613. rowItem['jfcheck'].value = 0;
  1614. op.multiselectfield && (rowData[op.multiselectfield] = 0);
  1615. op.onSelectRow && op.onSelectRow(rowData, false);
  1616. if (!op.running.checkAlling) {
  1617. var _flag = false;
  1618. $.each(op.running.rowdata, function (_index, _item) {
  1619. if (_item['jfcheck'].value + '' == '1') {
  1620. _flag = true;
  1621. return false;
  1622. }
  1623. });
  1624. if (_flag) {
  1625. $self.find('#jfgrid_all_cb_' + op.id).attr('src', imageurl + cb[2]);
  1626. }
  1627. else {
  1628. $self.find('#jfgrid_all_cb_' + op.id).attr('src', imageurl + cb[0]);
  1629. }
  1630. }
  1631. }
  1632. else {
  1633. rowItem['jfcheck'].$cell.find('img').attr('src', imageurl + cb[1]);
  1634. rowItem['jfcheck'].value = 1;
  1635. op.multiselectfield && (rowData[op.multiselectfield] = 1);
  1636. op.onSelectRow && op.onSelectRow(rowData, true);
  1637. if (!op.running.checkAlling) {
  1638. var _flag = false;
  1639. $.each(op.running.rowdata, function (_index, _item) {
  1640. if (_item['jfcheck'].value + '' == '0') {
  1641. _flag = true;
  1642. return false;
  1643. }
  1644. });
  1645. if (_flag) {
  1646. $self.find('#jfgrid_all_cb_' + op.id).attr('src', imageurl + cb[2]);
  1647. }
  1648. else {
  1649. $self.find('#jfgrid_all_cb_' + op.id).attr('src', imageurl + cb[1]);
  1650. }
  1651. }
  1652. }
  1653. }
  1654. else {
  1655. $self.find('#jfgrid_left_' + op.id + ' .jfgrid-selected,#jfgrid_right_' + op.id + ' .jfgrid-selected').removeClass('jfgrid-selected');
  1656. $self.find('[rownum="' + rownum + '"]').addClass('jfgrid-selected');
  1657. op.onSelectRow && op.onSelectRow(rowData);
  1658. op.running.rowSelected = rowItem;
  1659. }
  1660. }
  1661. else {
  1662. $self.find('#jfgrid_left_' + op.id + ' .jfgrid-selected,#jfgrid_right_' + op.id + ' .jfgrid-selected').removeClass('jfgrid-selected');
  1663. op.running.rowSelected = null;
  1664. }
  1665. },
  1666. // 选中所有行
  1667. checkAllRows: function ($self, $et, op) {
  1668. // 判断当前是否是选中还是不选中
  1669. var imgsrc = $et.attr('src').replace(imageurl, '');
  1670. var ischecked = false;
  1671. if (imgsrc == cb[1]) {
  1672. ischecked = true;
  1673. $et.attr('src', imageurl + cb[0]);
  1674. }
  1675. else {
  1676. $et.attr('src', imageurl + cb[1]);
  1677. }
  1678. op.running.checkAlling = true;
  1679. $.each(op.running.rowdata, function (_index, _item) {
  1680. if (_item['jfcheck'].value + '' == '0' && !ischecked) {
  1681. _item['jfcheck'].$cell.trigger('click');
  1682. }
  1683. else if (_item['jfcheck'].value + '' == '1' && ischecked) {
  1684. _item['jfcheck'].$cell.trigger('click');
  1685. }
  1686. });
  1687. op.running.checkAlling = false;
  1688. },
  1689. // 展开子表区域
  1690. expandSub: function ($self, $et, op) {
  1691. var $cell = $et;
  1692. var rownum = $et.attr('rownum');
  1693. if (!rownum) {
  1694. $cell = $et.parents('.jfgrid-data-cell');
  1695. rownum = $cell.attr('rownum');
  1696. }
  1697. var rowIndex = parseInt(rownum.replace(op.id + '_', ''));
  1698. // 获取当前行数据
  1699. var rowItem = op.running.rowdata[rowIndex];
  1700. var rowData = rowItem['jfgridRowData'];
  1701. //
  1702. var $body = $self.find('#jfgrid_body_' + op.id);
  1703. var $left = $self.find('#jfgrid_left_' + op.id);
  1704. var $right = $self.find('#jfgrid_right_' + op.id);
  1705. $left.hide();
  1706. $right.hide();
  1707. var subid = op.id + '_sub_' + rowIndex;
  1708. var height = $('#' + op.id + '_sub_' + (op.running.rowdata.length - 1)).height() + op.running.rowdata[op.running.rowdata.length - 1]['jfsubGrid'].top + op.rowHeight;
  1709. if (rowItem['jfsubGrid'].value) {
  1710. rowItem['jfsubGrid'].value = false;
  1711. var $sub = $('#' + subid);
  1712. $sub.remove();
  1713. rowItem['jfsubGrid'].$cell.html('<i class="fa fa-plus" ></i>');
  1714. // 调整单元格位置
  1715. for (var i = rowIndex + 1, l = op.running.rowdata.length; i < l; i++) {
  1716. var item = op.running.rowdata[i];
  1717. $.each(item, function (_index, _item) {
  1718. if (_item.top != undefined) {
  1719. _item.top = _item.top - op.subGridHeight;
  1720. _item.$cell.css({ 'top': _item.top });
  1721. }
  1722. });
  1723. var _$subid = $('#' + op.id + '_sub_' + i);
  1724. if (_$subid.length > 0) {
  1725. _$subid.css({ top: item['jfsubGrid'].top + op.rowHeight });
  1726. }
  1727. }
  1728. $left.css({ 'height': height - op.subGridHeight });
  1729. $right.css({ 'height': height - op.subGridHeight });
  1730. }
  1731. else {
  1732. rowItem['jfsubGrid'].value = true;
  1733. var width = $body.width();
  1734. rowItem['jfsubGrid'].$cell.html('<i class="fa fa-minus" ></i>');
  1735. var subContentId = learun.newGuid();
  1736. var $sub = $('<div class="jfgrid-sub" id="' + subid + '" ><div id="' + subContentId + '" ></div></div>').css({ 'left': 0, 'top': rowItem['jfsubGrid'].top + op.rowHeight, 'height': op.subGridHeight, 'width': width });
  1737. // 调整单元格位置
  1738. for (var i = rowIndex + 1, l = op.running.rowdata.length; i < l; i++) {
  1739. var item = op.running.rowdata[i];
  1740. $.each(item, function (_index, _item) {
  1741. if (_item.top != undefined) {
  1742. _item.top += op.subGridHeight;
  1743. _item.$cell.css({ 'top': _item.top });
  1744. }
  1745. });
  1746. //
  1747. var _$subid = $('#' + op.id + '_sub_' + i);
  1748. if (_$subid.length > 0) {
  1749. _$subid.css({ top: item['jfsubGrid'].top + op.rowHeight });
  1750. }
  1751. }
  1752. $left.append($sub);
  1753. $left.css({ 'height': height + op.subGridHeight });
  1754. $right.css({ 'height': height + op.subGridHeight });
  1755. op.subGridExpanded && op.subGridExpanded(subContentId, rowItem['jfgridRowData']);
  1756. }
  1757. $left.show();
  1758. $right.show();
  1759. },
  1760. // 获取选中行
  1761. getCheckRow: function ($self, op) {
  1762. var res = [];
  1763. $.each(op.running.rowdata, function (_index, _item) {
  1764. if (_item['jfcheck'].value == 1) {
  1765. res.push(_item['jfgridRowData']);
  1766. }
  1767. });
  1768. return res;
  1769. },
  1770. // 上移
  1771. moveUp: function ($self, op, index) {
  1772. if (index > 0) {
  1773. var flag = true;
  1774. var _item = op.rowdatas[index];
  1775. if (op.isTree) {
  1776. flag = false;
  1777. if (op.running.rowdata[index].jfdeep <= op.running.rowdata[index - 1].jfdeep) {
  1778. for (var i = index - 1; i >= 0; i--) {
  1779. if (op.running.rowdata[index].jfdeep == op.running.rowdata[i].jfdeep) {
  1780. flag = true;
  1781. op.rowdatas[index] = op.rowdatas[i];
  1782. op.rowdatas[i] = _item;
  1783. break;
  1784. }
  1785. }
  1786. }
  1787. }
  1788. else {
  1789. op.rowdatas[index] = op.rowdatas[index - 1];
  1790. op.rowdatas[index - 1] = _item;
  1791. }
  1792. _jfgrid.dataRender($self, op, op.rowdatas);
  1793. return true;
  1794. }
  1795. return false;
  1796. },
  1797. // 下移
  1798. moveDown: function ($self, op, index) {
  1799. if (index < op.rowdatas.length - 1) {
  1800. var flag = true;
  1801. var _item = op.rowdatas[index];
  1802. if (op.isTree) {
  1803. flag = false;
  1804. for (var i = index + 1, l = op.rowdatas.length; i < l; i++) {
  1805. if (op.running.rowdata[index].jfdeep > op.running.rowdata[i].jfdeep) {
  1806. break;
  1807. }
  1808. if (op.running.rowdata[index].jfdeep == op.running.rowdata[i].jfdeep) {
  1809. flag = true;
  1810. op.rowdatas[index] = op.rowdatas[i];
  1811. op.rowdatas[i] = _item;
  1812. break;
  1813. }
  1814. }
  1815. }
  1816. else {
  1817. op.rowdatas[index] = op.rowdatas[index + 1];
  1818. op.rowdatas[index + 1] = _item;
  1819. }
  1820. _jfgrid.dataRender($self, op, op.rowdatas);
  1821. return true;
  1822. }
  1823. return false;
  1824. },
  1825. turnPage: function (e) {
  1826. var $this = $(this);
  1827. var $self = $('#' + $this.attr('id').replace('jfgrid_page_bar_num_', ''));
  1828. var op = $self[0].dfop;
  1829. var et = e.target || e.srcElement;
  1830. var $et = $(et);
  1831. if ($et.hasClass('pagebtn')) {
  1832. var page = parseInt($et.text());
  1833. if (page != op.running.pageparam.page) {
  1834. $this.find('.active').removeClass('active');
  1835. $et.addClass('active');
  1836. op.running.pageparam.page = page;
  1837. _jfgrid.reload($self, op);
  1838. }
  1839. }
  1840. },
  1841. turnPage2: function (e) {
  1842. var $this = $(this);
  1843. var op = e.data.op;
  1844. var name = $this.text();
  1845. var $pagenum = $('#jfgrid_page_bar_num_' + op.id);
  1846. var page = parseInt($pagenum.find('.active').text());
  1847. var falg = false;
  1848. switch (name) {
  1849. case '首页':
  1850. if (page != 1) {
  1851. op.running.pageparam.page = 1;
  1852. falg = true;
  1853. }
  1854. break;
  1855. case '上一页':
  1856. if (page > 1) {
  1857. op.running.pageparam.page = page - 1;
  1858. falg = true;
  1859. }
  1860. break;
  1861. case '下一页':
  1862. if (page < op.running.pageparam.total) {
  1863. op.running.pageparam.page = page + 1;
  1864. falg = true;
  1865. }
  1866. break;
  1867. case '尾页':
  1868. if (page != op.running.pageparam.total) {
  1869. op.running.pageparam.page = op.running.pageparam.total;
  1870. falg = true;
  1871. }
  1872. break;
  1873. case '跳转':
  1874. var text = $this.parents('#jfgrid_page_bar_nums_' + op.id).find('input').val();
  1875. if (!!text) {
  1876. var p = parseInt(text);
  1877. if (String(p) != 'NaN') {
  1878. if (p < 1) {
  1879. p = 1;
  1880. }
  1881. if (p > op.running.pageparam.total) {
  1882. p = op.running.pageparam.total;
  1883. }
  1884. op.running.pageparam.page = p;
  1885. falg = true;
  1886. }
  1887. }
  1888. break;
  1889. }
  1890. if (falg) {
  1891. _jfgrid.reload($('#' + op.id), op);
  1892. }
  1893. },
  1894. // 打印处理
  1895. print: function ($self) {
  1896. var dfop = $self[0].dfop;
  1897. var $table = $('<table border="1" style=""></table>');
  1898. // 获取表头数据
  1899. var thlist = [];
  1900. function cTh(_data, _index) {
  1901. var res = _data.length;
  1902. $.each(_data, function (id, item) {
  1903. thlist[_index] = thlist[_index] || $('<tr></tr>');
  1904. var $th = $('<th>' + item.label + '</th>');
  1905. if (!!item.children && item.children.length > 0) {
  1906. var num = cTh(item.children, _index + 1);
  1907. res = res + num - 1;
  1908. $th.attr('colspan', num);
  1909. }
  1910. var _row = item.height / 28;
  1911. $th.attr('rowspan', _row);
  1912. $th.css('text-align', item.align);
  1913. thlist[_index].append($th);
  1914. });
  1915. return res;
  1916. }
  1917. cTh(dfop.headData, 0);
  1918. $.each(thlist, function (id, item) {
  1919. $table.append(item);
  1920. });
  1921. $.each(dfop.rowdatas, function (index, item) {
  1922. var $tr = $('<tr></tr>');
  1923. $self.find('[rownum="' + dfop.id + '_' + index + '"]').each(function () {
  1924. var $cell = $(this);
  1925. var colname = $cell.attr('colname');
  1926. if (!!colname && colname != 'jfgrid_num' && colname != 'jfgrid_multiselect' && colname != 'jfgrid_subGrid') {
  1927. var $td = $('<td>' + $cell.html() + '</td>');
  1928. $td.css('text-align', $cell.css('text-align'));
  1929. $tr.append($td);
  1930. }
  1931. });
  1932. $table.append($tr);
  1933. });
  1934. dfop = null;
  1935. return $table;
  1936. }
  1937. };
  1938. $.fn.jfGrid = function (op) {
  1939. var $self = $(this);
  1940. if (!$self[0] || $self[0].dfop) {
  1941. return $self;
  1942. }
  1943. var id = $self.attr('id');
  1944. if (id == null || id == undefined || id == '') {
  1945. id = "jfgrid" + new Date().getTime();
  1946. $self.attr('id', id);
  1947. }
  1948. var dfop = {
  1949. url: '', // 数据服务地址
  1950. param: {}, // 请求参数
  1951. rowdatas: [], // 列表数据
  1952. headData: [], // 列数据
  1953. isShowNum: true, // 是否显示序号
  1954. isMultiselect: false, // 是否允许多选
  1955. multiselectfield: '', // 多选绑定字段
  1956. isSubGrid: false, // 是否有子表
  1957. subGridExpanded: false, // 子表展开后调用函数
  1958. subGridHeight: 300,
  1959. onSelectRow: false, // 选中一行后回调函数
  1960. dblclick: false,
  1961. onRenderComplete: false, // 表格加载完后调用
  1962. onRenderBefore: false, // 渲染表单前执行
  1963. onAddRow: false, // 添加一行数据后执行
  1964. onMinusRow: false, // 删除一行数据后执行
  1965. beforeMinusRow: false, // 删除一行数据前执行
  1966. isPage: false, // 是否分页默认是不分页(目前只支持服务端分页)
  1967. rows: 30,
  1968. sidx: '',
  1969. sord: 'ASC',
  1970. isTreeClose: false, // 默认打开
  1971. isTree: false, // 是否树形显示(没有分页的情况下才支持) (只有在数据不多情况下才建议使用)
  1972. mainId: 'id', // 关联的主键
  1973. parentId: 'parentId', // 树形关联字段
  1974. isEdit: false, // 是否允许增删行
  1975. isAutoHeight: false, // 自动适应表格高度
  1976. height: 0,
  1977. rowHeight: 28, // 行高
  1978. numRowWitdh: 60 // 序号列宽度
  1979. };
  1980. if (!!op) {
  1981. $.extend(dfop, op);
  1982. }
  1983. dfop.id = id;
  1984. $self[0].dfop = dfop;
  1985. dfop.running = {};
  1986. if (dfop.isMultiselect) {
  1987. for (var i = 0; i < 3; i++) {
  1988. var im = new Image();
  1989. im.src = imageurl + cb[i];
  1990. }
  1991. }
  1992. _jfgrid.init($self, dfop);
  1993. dfop = null;
  1994. return $self;
  1995. };
  1996. $.fn.jfGridSet = function (name, data, setData) {
  1997. setData = setData || {}
  1998. var $self = $(this);
  1999. if (!$self[0]) {
  2000. return null;
  2001. }
  2002. var dfop = $self[0].dfop;
  2003. if (!dfop) {
  2004. return null;
  2005. }
  2006. switch (name) {
  2007. case 'reload': // 重新加载一边数据
  2008. if (data == undefined || data == null) {
  2009. _jfgrid.reload($self, dfop, setData);
  2010. }
  2011. else {
  2012. data = data || dfop.param || {};
  2013. dfop.param = data.param || data;
  2014. _jfgrid.reload($self, dfop, setData);
  2015. }
  2016. break;
  2017. case 'reloadall'://重新加载所有数据
  2018. dfop.rows = 1000000;
  2019. data = data || dfop.param || {};
  2020. dfop.param = data.param || data;
  2021. dfop.running.pageparam.page = 1;
  2022. _jfgrid.reload($self, dfop, setData);
  2023. break;
  2024. case 'refresh':
  2025. break;
  2026. case 'refreshdata':
  2027. if (data) {
  2028. dfop.rowdatas = data.rowdatas || data;
  2029. }
  2030. _jfgrid.dataRender($self, dfop, dfop.rowdatas);
  2031. //liang解决刷新后选择的行不能清除的问题
  2032. $self.find('#jfgrid_left_' + dfop.id + ' .jfgrid-selected,#jfgrid_right_' + dfop.id + ' .jfgrid-selected').removeClass('jfgrid-selected');
  2033. dfop.running.rowSelected = undefined;
  2034. break;
  2035. case 'addRow':
  2036. dfop.rowdatas.push(data || {});
  2037. _jfgrid.rowRender($self, dfop, data || {}, 0);
  2038. $self.find('#jfgrid_nodata_img_' + dfop.id).hide();
  2039. break;
  2040. case 'removeRow':
  2041. $.each(dfop.rowdatas, function (_index, _item) {
  2042. if (dfop.mainId && data) {
  2043. if (_item[dfop.mainId] == data) {
  2044. dfop.rowdatas.splice(_index, 1);
  2045. return false;
  2046. }
  2047. }
  2048. else {
  2049. if (_item == dfop.running.rowSelected.jfgridRowData) {
  2050. dfop.rowdatas.splice(_index, 1);
  2051. return false;
  2052. }
  2053. }
  2054. });
  2055. var _$self = $self;
  2056. setTimeout(function () {
  2057. _jfgrid.dataRender(_$self, _$self[0].dfop, _$self[0].dfop.rowdatas, 0);
  2058. _$self = null;
  2059. }, 100);
  2060. break;
  2061. case 'nocheck':
  2062. if (dfop.isMultiselect) {
  2063. $.each(dfop.running.rowdata, function (_index, _item) {
  2064. if (_item['jfgridRowData'][dfop.mainId] == data) {
  2065. if (_item['jfcheck'].value == 1) {
  2066. _item['jfcheck'].$cell.trigger('click');
  2067. }
  2068. return false;
  2069. }
  2070. });
  2071. }
  2072. break;
  2073. case 'setcheck':
  2074. if (dfop.isMultiselect) {
  2075. $.each(dfop.running.rowdata, function (_index, _item) {
  2076. if (_item['jfgridRowData'][dfop.mainId] == data) {
  2077. if (_item['jfcheck'].value == 0) {
  2078. _item['jfcheck'].$cell.trigger('click');
  2079. }
  2080. return false;
  2081. }
  2082. });
  2083. }
  2084. break;
  2085. case 'updateRow':
  2086. if (dfop.running.rowdata[data]) {
  2087. _jfgrid.updateRow(dfop.running.rowdata[data], dfop);
  2088. }
  2089. else if (dfop.running.rowSelected) {
  2090. _jfgrid.updateRow(dfop.running.rowSelected, dfop);
  2091. }
  2092. break;
  2093. case 'moveUp':
  2094. return _jfgrid.moveUp($self, dfop, data);
  2095. break;
  2096. case 'moveDown':
  2097. return _jfgrid.moveDown($self, dfop, data);
  2098. break;
  2099. }
  2100. dfop = null;
  2101. $self = null;
  2102. };
  2103. $.fn.jfGridGet = function (name) {
  2104. var $self = $(this);
  2105. var op = $self[0].dfop;
  2106. if (!op) {
  2107. return null;
  2108. }
  2109. switch (name) {
  2110. case 'rowdata':
  2111. if (op.isMultiselect) {
  2112. return _jfgrid.getCheckRow($self, op);
  2113. }
  2114. else {
  2115. if (op.running.rowSelected) {
  2116. if (op.running.rowdata[op.running.rowSelected.jfnum.value - 1] && op.running.rowSelected.jfgridRowData == op.running.rowdata[op.running.rowSelected.jfnum.value - 1].jfgridRowData) {
  2117. return op.running.rowSelected['jfgridRowData'];
  2118. }
  2119. else {
  2120. op.running.rowSelected = null;
  2121. return {};
  2122. }
  2123. }
  2124. else {
  2125. return {};
  2126. }
  2127. }
  2128. break;
  2129. case 'rowdatas':
  2130. return op.rowdatas;
  2131. break;
  2132. case 'rowdatasByArray':
  2133. break;
  2134. case 'settingInfo':
  2135. return op;
  2136. break;
  2137. case 'headData':
  2138. break;
  2139. case 'showData':
  2140. var res = [];
  2141. $.each(op.running.rowdata, function (_index, _item) {
  2142. var point = {};
  2143. $.each(_item, function (_jindex, _jitem) {
  2144. if (_jindex != 'jfgridRowData' && _jindex != 'jfnum' && _jindex != 'jfcheck' && _jindex != 'jfsubGrid') {
  2145. point[_jindex] = _jitem.text;
  2146. }
  2147. });
  2148. if (op.running.hideHead) {
  2149. $.each(op.running.hideHead, function (_hindex, _hitem) {
  2150. point[_hitem.name] = _item.jfgridRowData[_hitem.name];
  2151. });
  2152. }
  2153. res.push(point);
  2154. });
  2155. return res;
  2156. break;
  2157. }
  2158. op = null;
  2159. };
  2160. $.fn.jfGridValue = function (name) {
  2161. var $self = $(this);
  2162. var op = $self[0].dfop;
  2163. if (!op) {
  2164. return null;
  2165. }
  2166. if (op.isMultiselect) {
  2167. var res = [];
  2168. var list = _jfgrid.getCheckRow($self, op);
  2169. $.each(list, function (_index, _item) {
  2170. res.push(_item[name]);
  2171. });
  2172. return String(res);
  2173. }
  2174. else {
  2175. if (op.running.rowSelected) {
  2176. if (op.running.rowdata[op.running.rowSelected.jfnum.value - 1] && op.running.rowSelected.jfgridRowData == op.running.rowdata[op.running.rowSelected.jfnum.value - 1].jfgridRowData) {
  2177. return op.running.rowSelected['jfgridRowData'][name];
  2178. }
  2179. else {
  2180. op.running.rowSelected = null;
  2181. return '';
  2182. }
  2183. }
  2184. else {
  2185. return '';
  2186. }
  2187. }
  2188. };
  2189. // 打印处理
  2190. $.fn.jfGridPrint = function () {
  2191. var $self = $(this);
  2192. return _jfgrid.print($self);
  2193. }
  2194. })(window.jQuery, top.learun);