jfgrid.js 107 KB

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