fweditgrid.js 78 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905
  1. (function($) {
  2. /**
  3. * 生成一行数据。
  4. * @param options 多记录表参数
  5. * @param startRow 起始行号,不分页时取1,分页上页最大行号+1
  6. * @param fixTable 固定表数据区域对象
  7. * @param extTable 扩展表数据区域对象
  8. * @param rowNum 行索引
  9. * @param rowsData 行数据
  10. */
  11. function genOneRow(options,headers,startRow,rowNum,rowsData){
  12. function inputFun (input){
  13. var rowId = rowNum + parseInt($(input).attr('rw'));
  14. $(input).attr('rw',rowId);
  15. if(input.type=='checkbox' || input.type=='radio'){
  16. //处理checkbox或者radiobox的情况
  17. //判断后台记录是否存在,有则设置对应的值,没有则清空
  18. var value = (rowsData[rowId]||{})[$(input).attr('nd')];
  19. if(value==null){
  20. value = '' ;
  21. }
  22. if(input.name != $(input).attr('nd')){
  23. input.name=(rowId).toString(10)+$(input).attr('nd');
  24. }
  25. //设置选中状态
  26. //input.checked=(input.value == value);
  27. $(input).val(value);
  28. //只读设置
  29. if(options.disableMap[$(input).attr('nd')]){
  30. input.disabled=true;
  31. }
  32. }else if(/.*_CMB/.test($(input).attr('nd'))){
  33. //处理字典控件
  34. var value = (rowsData[rowId]||{})['_DIC_' + $(input).attr('nd').substr(0,$(input).attr('nd').length-4)];
  35. if(value == null){
  36. value = '';
  37. }
  38. $(input).val(value);
  39. //只读设置
  40. if(options.disableMap[$(input).attr('nd').substr(0,$(input).attr('nd').length-4)]){
  41. input.disabled=true;
  42. }
  43. }else{
  44. //处理一般控件
  45. var value = (rowsData[rowId]||{})[$(input).attr('nd')];
  46. if(value==null){
  47. value = '' ;
  48. }
  49. $(input).val(value);
  50. //只读设置
  51. if(options.disableMap[$(input).attr('nd')]){
  52. input.disabled=true;
  53. }
  54. }
  55. CFW.oGt._fnObjInit(input);
  56. }
  57. function labelFun(label){
  58. //判断后台记录是否存在,有则设置对应的值,没有则清空
  59. var rowId = rowNum + parseInt($(label).attr('rw'));
  60. var labelValue = null;
  61. //先看看有没有对应的字典项
  62. labelValue = (rowsData[rowId]||{})['_DIC_' + $(label).attr('nd')];
  63. //如果没有则只用列的实际值
  64. if(labelValue == null){
  65. labelValue = (rowsData[rowId]||{})[$(label).attr('nd')] ;
  66. }
  67. if(labelValue == null){
  68. labelValue = '';
  69. }
  70. var value = (rowsData[rowId]||{})[$(label).attr('nd')];
  71. if(value == null){
  72. value = '';
  73. }
  74. //label.value = value;
  75. $(label).val(value);
  76. $(label).attr('rw',rowId);
  77. // label.rw = rowId;
  78. $(label)[0].innerHTML=labelValue;
  79. }
  80. var tr = options.tr.cloneNode(true);
  81. var t=document.createElement('TR');
  82. t= tr;
  83. //$(t).html($(tr).html());
  84. //设置rowIndex
  85. $(t).attr('fweditgrid-row-index',rowNum);
  86. //设置序号列
  87. //t.firstChild /*td*/.innerHTML = startRow+rowNum;
  88. $(t).children().first()[0].innerHTML = startRow+rowNum;
  89. //输入控件一个个的遍历
  90. var set = t.getElementsByTagName('INPUT');
  91. for ( var i = 0, len = set.length; i < len; i++) {inputFun(set[i]);}
  92. //label控件一个个处理
  93. set = t.getElementsByTagName('LABEL');
  94. for ( var i = 0, len = set.length; i < len; i++) {labelFun(set[i]);}
  95. return t;
  96. }
  97. /**
  98. * 装载数据到列表中
  99. */
  100. function loadData(target, data) {
  101. var id=$(target).attr('id');
  102. if($.browser.msie&&(document.documentMode==null||document.documentMode=='5')){
  103. }else{
  104. $('#'+id+'_table').floatThead('destroy');
  105. }
  106. // var startTime = new Date();
  107. var grid = $.data(target, 'fweditgrid').grid;
  108. var opts = $.data(target, 'fweditgrid').options;
  109. var view = $.data(target, 'fweditgrid').view;
  110. var headers = data.headers;
  111. var total = data.total;
  112. var rows = data.rows;
  113. var sValue ="";
  114. var table = view.children('table')[0];
  115. var ViewBody = table.tBodies[0];
  116. $(ViewBody).remove();
  117. var iPageNum = 0;
  118. // 计算当前页的起始行号
  119. iPageNum = (parseInt(opts.pageNumber<=0?1:opts.pageNumber, 10) - 1) * parseInt(opts.pageSize, 10);
  120. opts.total = total;
  121. opts.data = null;
  122. opts.data = data;
  123. opts.rowxh = iPageNum + 1;
  124. var frag = document.createDocumentFragment();
  125. // 循环每一行的数据
  126. // var startTime = new Date();
  127. for ( var i = 0; i < rows.length; i++) {
  128. var tr = genOneRow(opts,headers,iPageNum+1,i,rows);
  129. frag.appendChild(tr);
  130. }//for
  131. //
  132. var tbody=document.createElement('TBODY');
  133. tbody.appendChild(frag);
  134. table.appendChild(tbody);
  135. setAlt(target);
  136. if($.browser.msie&&(document.documentMode==null||document.documentMode=='5')){
  137. }else{
  138. $('#'+id+'_table').floatThead({
  139. scrollContainer:function($table){
  140. return $table.closest('.fweditgrid-view');
  141. }
  142. });
  143. }
  144. // showErrMsg('loadData:'+(new Date()-startTime),5);
  145. }
  146. /**
  147. * 单击上下页时获取数据库的多记录数据
  148. */
  149. function request(target,pageNumber,pageSize,callFun) {
  150. var grid = $.data(target, 'fweditgrid').grid;
  151. var opts = $.data(target, 'fweditgrid').options;
  152. var pager=$.data(target, 'fweditgrid').pager;
  153. var wrap=$.data(target, 'fweditgrid').view.parent();
  154. var param;
  155. var where = opts.whereCls;
  156. var confid = opts.confid;
  157. var dsId = opts.dsId;
  158. var dynDictWhereCls = JSON.stringify(opts.dynDictWhereCls);
  159. if(pageNumber==null){
  160. pageNumber = 1;
  161. }else if(pageNumber<=0){
  162. if(pageNumber==-1){
  163. pageNumber = opts.pageNumber;
  164. }else{
  165. pageNumber=1;
  166. }
  167. }
  168. var rowstart = (pageNumber - 1) * pageSize + 1;
  169. var pSize = pageSize;
  170. if(_ENCRYPT_WHERE){
  171. if(where!=null&&where!='null'&&where!=''&&where!='undefined'){
  172. where=stringToHex(encrypt(WHEREKEY,where));
  173. }
  174. }
  175. var param = $.extend({}, {
  176. 'confid' : confid,
  177. 'dynDictWhereCls' : dynDictWhereCls,
  178. 'dsId' : dsId,
  179. 'rowstart' : rowstart,
  180. 'pageSize' : pSize,
  181. 'whereCls' : where
  182. });
  183. if (!opts.url)return;
  184. setLoadStatus(target, true);
  185. var mask = $('<div class="fweditgrid-mask"></div>').css({
  186. display : 'block',
  187. width : wrap.width(),
  188. height : wrap.height()
  189. }).appendTo(wrap);
  190. var mask_msg = $('<div class="fweditgrid-mask-msg">'+opts.loadMsg+'</div>').appendTo(wrap);
  191. mask_msg.css(
  192. {display : 'block',
  193. left : (wrap.width() - mask_msg.outerWidth()) / 2,
  194. top : (wrap.height() - mask_msg.outerHeight()) / 2
  195. });
  196. $.ajax({
  197. type : opts.method,
  198. url : opts.url,
  199. data : param,
  200. dataType : 'json',
  201. cache : false,
  202. success : function(data) {
  203. if(data!=null && data[headtoken]!=null){
  204. token=data[headtoken];//更新全局变量token标志
  205. }
  206. if("1"!=data.FHZ){//出错了,弹出错误提醒
  207. if("CSRF" == data.FHZ){
  208. showMsg(data.MSG||'',3);
  209. }else if("-1" == data.FHZ){
  210. _FW.oFtl.fnAlert(data.MSG||'');
  211. }
  212. pager.find('a[icon=fweditgrid-load]').find('.fweditgrid-load').removeClass('fweditgrid-loading');
  213. mask_msg.remove();
  214. mask.remove();
  215. return ;
  216. }
  217. if (callFun != null && typeof(callFun) === "function"){
  218. callFun();
  219. }
  220. opts.loading = false;
  221. pager.find('a[icon=fweditgrid-load]').find('.fweditgrid-load').removeClass('fweditgrid-loading');
  222. mask.remove();
  223. mask_msg.remove();
  224. // var startTime = new Date();
  225. loadData(target, data);
  226. setProperties(target);
  227. setSize(target);
  228. // showErrMsg('loadData:'+(new Date()-startTime),5);
  229. createMsg(target);
  230. showInfo(target);
  231. $.data(target, 'fweditgrid').view.scrollTop(0);
  232. if (opts.onLoadSuccess) {
  233. opts.onLoadSuccess.apply(this, arguments);
  234. }
  235. },
  236. error : function(XMLHttpRequest, textStatus, errorThrown) {
  237. opts.loading = false;
  238. mask.remove();
  239. mask_msg.remove();
  240. var tipMsg = XMLHttpRequest.responseText;
  241. pager.find('a[icon=fweditgrid-load]')
  242. .find('.fweditgrid-load').removeClass('fweditgrid-loading');
  243. if (opts.onLoadError) {
  244. opts.onLoadError.apply(this, arguments);
  245. }else{
  246. CFW.oWin.fnAlert("错误信息:" + tipMsg);
  247. }
  248. },
  249. beforeSend:function(XMLHttpRequest ){
  250. var cToken = $.cookie(headtoken) || token;XMLHttpRequest.setRequestHeader(headtoken,cToken);
  251. }
  252. });
  253. }
  254. function createMsg(target) {
  255. /*
  256. var grid = $.data(target, 'fweditgrid').grid;
  257. var opts = $.data(target, 'fweditgrid').options;
  258. var rows = opts.data.rows;
  259. $('.fweditgrid-mask', grid).remove();
  260. $('.fweditgrid-mask-msg2', grid).remove();
  261. if (rows.length == 0) {
  262. var wrap = $('.fweditgrid-wrap', grid);
  263. $('<div class="fweditgrid-mask"></div>').css({
  264. display : 'block',
  265. width : wrap.width(),
  266. height : wrap.height()
  267. }).appendTo(wrap);
  268. $('<div class="fweditgrid-mask-msg2"></div>').html(opts.tipMsg).appendTo(wrap).css({
  269. display : 'block',
  270. left : (wrap.width() - $('.fweditgrid-mask-msg2', grid).outerWidth()) / 2,
  271. top : (wrap.height() - $('.fweditgrid-mask-msg2', grid).outerHeight()) / 2
  272. });
  273. }
  274. */
  275. }
  276. // 设置分页栏的信息
  277. function buildPage(target) {
  278. var opts = $.data(target, 'fweditgrid').options;
  279. var grid = $.data(target, 'fweditgrid').grid;
  280. var pager =$.data(target, 'fweditgrid').pager;
  281. var expbtn = opts.expbtn;
  282. if (!opts.hasPage && $.trim(expbtn).length == 0) {
  283. return true;
  284. }
  285. if(opts.data.total>1){opts.total = opts.data.total;}
  286. var tableStr='<table cellspacing="0" cellpadding="0" border="0"><tr>';
  287. if (opts.hasPage) {
  288. tableStr+='<td><input class="fweditgrid-page-list" maxlength=3 value="'+opts.pageSize+'"></td>';
  289. tableStr+='<td><div class="fweditgrid-btn-separator"></div></td>';
  290. tableStr+='<td><a href=\"javascript:void(0)\" icon=\"fweditgrid-first\"></a></td>';
  291. tableStr+='<td><a href=\"javascript:void(0)\" icon=\"fweditgrid-prev\"></a></td>';
  292. tableStr+='<td><div class=\"fweditgrid-btn-separator\"></div></td>';
  293. tableStr+='<td><span style=\"padding-left:6px;\">'+opts.beforePageText+'</span></td>';
  294. tableStr+='<td><input class=\"fweditgrid-num\" type=\"text\" value=\"1\" size=\"5\"></td>';
  295. tableStr+='<td><span style=\"padding-right:6px;\"></span></td>';
  296. tableStr+='<td><div class=\"fweditgrid-btn-separator\"></div></td>';
  297. tableStr+='<td><a href=\"javascript:void(0)\" icon=\"fweditgrid-next\"></a></td>';
  298. tableStr+='<td><a href=\"javascript:void(0)\" icon=\"fweditgrid-last\"></a></td>';
  299. tableStr+='<td><div class=\"fweditgrid-btn-separator\"></div></td>';
  300. tableStr+='<td><a href=\"javascript:void(0)\" icon=\"fweditgrid-load\"></a></td>';
  301. tableStr+='<td><div class=\"fweditgrid-btn-separator\"></div></td>';
  302. if(expbtn.indexOf('NEW')!=-1){
  303. tableStr+='<td><a href=\"javascript:void(0)\" class=\"fweditgrid-new\">新增一行</a></td>';
  304. }
  305. }
  306. tableStr+='</tr></table>';
  307. pager[0].innerHTML=tableStr+'<div class=fweditgrid-info></div>'+'<div style=\"clear:both\"></div>';
  308. $("a[icon^=fweditgrid]", pager).linkbutton({
  309. plain : true
  310. });
  311. // var startTime = new Date();
  312. if (opts.hasPage) {
  313. showInfo(target);
  314. pager.find('a[class=fweditgrid-new]').bind('click.fweditgrid', function(){
  315. $(target).fweditgrid("addRows",{});
  316. });
  317. pager.find('a[icon=fweditgrid-first]').unbind('.fweditgrid').bind('click.fweditgrid', function() {
  318. if (opts.pageNumber > 1)selectPage(target, 1);
  319. });
  320. pager.find('a[icon=fweditgrid-prev]').unbind('.fweditgrid').bind('click.fweditgrid', function() {
  321. if (opts.pageNumber > 1)selectPage(target, opts.pageNumber - 1);
  322. });
  323. pager.find('a[icon=fweditgrid-next]').unbind('.fweditgrid').bind('click.fweditgrid', function() {
  324. var pageCount = Math.ceil(opts.total / opts.pageSize);
  325. if (opts.pageNumber < pageCount) selectPage(target, opts.pageNumber + 1);
  326. });
  327. pager.find('a[icon=fweditgrid-last]').unbind('.fweditgrid').bind('click.fweditgrid', function(){
  328. var pageCount = Math.ceil(opts.total / opts.pageSize);
  329. if (opts.pageNumber < pageCount)selectPage(target, pageCount);
  330. });
  331. pager.find('a[icon=fweditgrid-load]').unbind('.fweditgrid').bind('click.fweditgrid', function(){
  332. selectPage(target, opts.pageNumber);
  333. });
  334. pager.find('input.fweditgrid-num').unbind('.fweditgrid').bind('keydown.fweditgrid',function(e) {
  335. if (event.keyCode == 8 || event.keyCode == 9
  336. || event.keyCode == 46) {
  337. return true;
  338. }
  339. if (e.keyCode == 13) {
  340. var pageNumber = parseInt($(this).val()) || 1;
  341. selectPage(target, pageNumber);
  342. }
  343. // 小键盘的数字区
  344. if (e.keyCode >= 96 && e.keyCode <= 105) {
  345. return true;
  346. }
  347. // 键盘的数字区
  348. if ((e.keyCode >= 48 && e.keyCode <= 57
  349. && e.ctrlKey == false && e.shiftKey == false)) {
  350. return true;
  351. }
  352. return false;
  353. });
  354. pager.find('.fweditgrid-page-list').unbind('.fweditgrid').bind('keydown',function(e) {
  355. if (event.keyCode == 8 || event.keyCode == 9
  356. || event.keyCode == 46) {
  357. return true;
  358. }
  359. // 小键盘的数字区
  360. if (e.keyCode >= 96 && e.keyCode <= 105) {
  361. return true;
  362. }
  363. // 键盘的数字区
  364. if ((e.keyCode >= 48 && e.keyCode <= 57
  365. && e.ctrlKey == false && e.shiftKey == false)) {
  366. return true;
  367. }
  368. return false;
  369. });
  370. $('.fweditgrid-page-list', pager).each(function() {
  371. this.value = opts.pageSize;
  372. });
  373. pager.find('.fweditgrid-page-list').unbind('.fweditgrid').bind(
  374. 'change.fweditgrid', function() {
  375. if($(this).val()>200){
  376. CFW.oWin.fnAlert("每页显示的行数不能大于200!");
  377. return true;
  378. }
  379. opts.pageSize = $(this).val();
  380. if (opts.pageSize == 0) {
  381. opts.pageSize = 1;
  382. this.value = 1;
  383. }
  384. // 这里处理的目的是当列表的表头和表尾都有分页栏时,同步两个分页栏的框显示一致。
  385. $('.fweditgrid-page-list', pager).each(function() {
  386. this.value = opts.pageSize;
  387. });
  388. var pageCount = Math.ceil(opts.total / opts.pageSize);
  389. selectPage(target, opts.pageNumber);
  390. });
  391. }
  392. // showErrMsg('buildPage:'+(new Date()-startTime),5);
  393. }
  394. // 显示页码
  395. function showInfo(target) {
  396. var opts = $.data(target, 'fweditgrid').options;
  397. var pager = $.data(target, 'fweditgrid').pager;
  398. var total = parseInt(opts.total, 10); // 总共的行数
  399. var pageCount = Math.ceil(opts.total / opts.pageSize);
  400. var num = pager.find('input.fweditgrid-num');
  401. num.val(opts.pageNumber);
  402. num.parent().next().find('span').html(opts.afterPageText.replace(/{pages}/, pageCount));
  403. var pinfo = opts.displayMsg;
  404. pinfo = pinfo.replace(/{from}/, opts.pageSize * (opts.pageNumber - 1) + 1);
  405. pinfo = pinfo.replace(/{to}/, Math.min(opts.pageSize * (opts.pageNumber), opts.total));
  406. pinfo = pinfo.replace(/{total}/, opts.total);
  407. pager.find('div.fweditgrid-info').html(pinfo);
  408. $('a[icon=fweditgrid-first],a[icon=fweditgrid-prev]', pager).linkbutton({
  409. disabled : (opts.pageNumber == 1)
  410. });
  411. $('a[icon=fweditgrid-next],a[icon=fweditgrid-last]', pager).linkbutton({
  412. disabled : (opts.pageNumber >= pageCount)
  413. });
  414. if (opts.loading) {
  415. pager.find('a[icon=fweditgrid-load]').find('.fweditgrid-load').addClass('fweditgrid-loading');
  416. } else {
  417. pager.find('a[icon=fweditgrid-load]').find('.fweditgrid-load').removeClass('fweditgrid-loading');
  418. }
  419. }
  420. function setLoadStatus(target, loading) {
  421. var opts = $.data(target, 'fweditgrid').options;
  422. var grid = $.data(target, 'fweditgrid').grid;
  423. var pager = $.data(target, 'fweditgrid').pager;
  424. if (!opts.hasPage) {
  425. return true;
  426. }
  427. opts.loading = loading;
  428. if (opts.loading) {
  429. pager.find('a[icon=fweditgrid-load]').find('.fweditgrid-load').addClass('fweditgrid-loading');
  430. } else {
  431. pager.find('a[icon=fweditgrid-load]').find('.fweditgrid-load').removeClass('fweditgrid-loading');
  432. }
  433. return true;
  434. }
  435. // 选择一页
  436. function selectPage(target, page) {
  437. //取响应的函数。
  438. var beforePageFun = $.data(target,'beforePage');
  439. if (beforePageFun != null && $.isFunction(beforePageFun)
  440. && !beforePageFun.call(target)) {
  441. //响应函数如果返回非true,那么不处理翻页
  442. return;
  443. }
  444. var opts = $.data(target, 'fweditgrid').options;
  445. var pageCount = Math.ceil(opts.total / opts.pageSize);
  446. var pageNumber = page;
  447. if(pageCount ==0){
  448. pageCount = 1;
  449. }
  450. if (page < 1)
  451. pageNumber = 1;
  452. if (page > pageCount)
  453. pageNumber = pageCount;
  454. request(target,pageNumber,opts.pageSize,function(){
  455. opts.pageNumber = pageNumber;
  456. });
  457. }
  458. /**
  459. * 获取固定区和扩展区中的行各列的对齐和高度
  460. */
  461. function getHeaderStyle(target) {
  462. var opts = $.data(target, 'fweditgrid').options;
  463. return $('.fweditgrid-view table', target).find('td[lastRowIndex]')
  464. .map(function(){
  465. return {
  466. 'style' : this.parentNode['_al'],
  467. 'width' : $(this).outerWidth()
  468. };
  469. }).get();
  470. }
  471. /**
  472. * 设置大小 列宽等
  473. */
  474. // 设置大小 列宽等
  475. function setSize(target) {
  476. // var startTime = new Date();
  477. var grid = $.data(target, 'fweditgrid').grid;
  478. var opts = $.data(target, 'fweditgrid').options;
  479. var qView = $.data(target, 'fweditgrid').view;
  480. qView.width(20);
  481. if (opts.fit == true) {
  482. var p = grid.parent();
  483. opts.width = p.width();
  484. opts.height = p.height();
  485. }
  486. var tmp = opts.width + '';
  487. var iPos = tmp.indexOf('%');
  488. if (iPos != -1) {
  489. opts.width = 'auto';
  490. }
  491. if (opts.width != 'auto') {
  492. opts.width = parseInt(opts.width, 10);
  493. }
  494. var gridWidth = opts.width;
  495. if (gridWidth == 'auto') {
  496. if($.browser.msie){
  497. gridWidth = qView.closest('.fweditgrid').outerWidth();
  498. }else{
  499. gridWidth = qView.closest('.fweditgrid').outerWidth()-2;
  500. }
  501. }
  502. var innerWidth = gridWidth - grid.outerWidth() + grid.width();
  503. //修复:每次单击分页栏的刷新按钮时框体会自动撑大一点的问题
  504. if( innerWidth - qView.width() < 20){
  505. innerWidth = qView.width();
  506. }
  507. var containWidth=qView.parent().parent().width();
  508. if( innerWidth < containWidth){
  509. innerWidth=containWidth;
  510. }
  511. qView.width(innerWidth)//div.fwdatagrid-view
  512. .parent().width(innerWidth);//div.fwdatagrid-wrap
  513. var tmp = opts.height + '';
  514. var iPos = tmp.indexOf('%');
  515. // 凡是包含有100%的都设成自动高度否则会报错
  516. if (iPos != -1) {
  517. opts.height = 'auto';
  518. }
  519. if (opts.height != 'auto') {
  520. opts.height = parseInt(opts.height, 10);
  521. }
  522. qView.height(opts.height);
  523. if(opts.height=='auto'){
  524. var table=$('table',qView);
  525. if(table.width()>=qView.width()){
  526. qView.css({'overflow-y':'hidden','overflow-x':'auto','height':table.height()+18});
  527. }else{
  528. qView.css({'overflow-x':'hidden','height':table.height()});//隐藏横向滚动条 避免滚动条遮住最后一行
  529. }
  530. }
  531. }
  532. /**
  533. *初始化多记录表表头的checkbox事件
  534. */
  535. function initHeaderCheckbox(target){
  536. var grid = $.data(target, 'fweditgrid').grid;
  537. var view = $.data(target, 'fweditgrid').view;
  538. //定义响应函数
  539. var checkFun = function(){
  540. //取得本checkbox所代表的列的索引
  541. var index = parseInt($(this).parent().attr('lastRowIndex'))-1;
  542. //取得列别名
  543. var opts = $.data(target, 'fweditgrid').options;
  544. var alias = opts.data.headers[index];
  545. var inputs = target.getElementsByTagName('input');
  546. for(var i=0;i<inputs.length;i++){
  547. if(inputs[i].name===alias){
  548. //找到别名相同的就根据表头checkbox的状态设置选中状态
  549. inputs[i].checked=this.checked;
  550. }
  551. }
  552. };
  553. //绑定函数
  554. view.find('table thead').find('input.fweditgrid-header-check').click(checkFun);
  555. var headCheck=grid.find('table thead').find('input.fweditgrid-header-check');
  556. if($(headCheck).length>0){
  557. $(headCheck).attr("checked",false);
  558. }
  559. }
  560. /**
  561. * set the common properties
  562. */
  563. function setProperties(target) {
  564. var grid = $.data(target, 'fweditgrid').grid;
  565. var opts = $.data(target, 'fweditgrid').options;
  566. var view = $.data(target, 'fweditgrid').view;
  567. var data = opts.data;
  568. var headers = data.headers;
  569. var icol = 1;
  570. setAlt(target);
  571. var body = view.children('table')[0];
  572. if (opts.nowrap == false) {
  573. $(body[0]).find('td').css('white-space','normal');
  574. }
  575. // var startTime = new Date();
  576. // showErrMsg('nowrap:'+(new Date()-startTime),5);
  577. initHeaderCheckbox(target);
  578. }
  579. /**
  580. * 设置间隔行的不同颜色
  581. */
  582. function setAlt(target){
  583. var opts = $.data(target, 'fweditgrid').options;
  584. var grid = $.data(target, 'fweditgrid').grid;
  585. var view = $.data(target, 'fweditgrid').view;
  586. var trs = view.children('table')[0].getElementsByTagName('TBODY')[0].getElementsByTagName('TR');
  587. //生成各行不同颜色的效果
  588. for ( var i = 0, l = trs.length; i < l; i++ ) {
  589. var thisTr = trs[i];
  590. if(thisTr['fweditgrid-row-index']==undefined){
  591. continue;
  592. }
  593. var className = ' '+thisTr.className+' ';
  594. var pair=[' fweditgrid-row-alt ',' fweditgrid-row '];
  595. if(parseInt(thisTr['fweditgrid-row-index'])%2!=0){
  596. pair=[' fweditgrid-row ',' fweditgrid-row-alt '];
  597. }
  598. //删除可能的class
  599. className = className.replace(pair[0],' ');
  600. //添加新的class
  601. if(className.indexOf(pair[1])<0){
  602. className+=pair[1];
  603. }
  604. thisTr.className=$.trim(className);
  605. }
  606. // var startTime = new Date();
  607. // showErrMsg('thisInput:'+(new Date()-startTime),5);
  608. }
  609. /**
  610. * 键盘单击上键时移动 下拉框的选项
  611. */
  612. function selectPrev(target,input,combox){
  613. var panelbody = $('.gltcombox-panel-body',combox);
  614. var item = panelbody.find('div.gltcombox-item-selected');
  615. if (item.length){
  616. var prev = item.prev(':visible');
  617. if (prev.length){
  618. item = prev;
  619. }else{
  620. item = panelbody.find('div.gltcombox-item:visible:last');
  621. }
  622. } else {
  623. item = panelbody.find('div.gltcombox-item:visible:last');
  624. }
  625. var value = item.attr('value');
  626. var tx = item.attr('text');
  627. setValue(target,combox,input,$.trim(tx),value);
  628. if (item.position().top <= 0){
  629. var h = panelbody.scrollTop() + item.position().top;
  630. panelbody.scrollTop(h);
  631. } else if (item.position().top + item.outerHeight() > panelbody.height()){
  632. var h = panelbody.scrollTop() + item.position().top + item.outerHeight() - panelbody.height();
  633. panelbody.scrollTop(h);
  634. }
  635. }
  636. /**
  637. * 键盘单击下键时移动 下拉框的选项
  638. */
  639. function selectNext(target,input,combox){
  640. var panelbody = $('.gltcombox-panel-body',combox);
  641. var item = panelbody.find('div.gltcombox-item-selected');
  642. if (item.length){
  643. var next = item.next(':visible');
  644. if (next.length){
  645. item = next;
  646. }else{
  647. item = panelbody.find('div.gltcombox-item:visible:first');
  648. }
  649. } else {
  650. item = panelbody.find('div.gltcombox-item:visible:first');
  651. }
  652. var value = item.attr('value');
  653. var tx = item.attr('text');
  654. setValue(target,combox,input,$.trim(tx),value);
  655. if (item.position().top <= 0){
  656. var h = $(combox).scrollTop() + item.position().top;
  657. panelbody.scrollTop(h);
  658. } else if (item.position().top + item.outerHeight() > panelbody.height()){
  659. var h = panelbody.scrollTop() + item.position().top + item.outerHeight() - panelbody.height();
  660. panelbody.scrollTop(h);
  661. }
  662. }
  663. function selectCur(target,input,combox){
  664. var panelbody = $('.gltcombox-panel-body',combox);
  665. var item = panelbody.find('div.gltcombox-item-selected');
  666. //没有选项就不处理
  667. if(item.length==0)return;
  668. var value = item.attr('value');
  669. var tx = item.attr('text');
  670. setValue(target,combox,input,$.trim(tx),value,true);
  671. }
  672. /**
  673. * 设置该值 HIDDEN input 保存字典值
  674. */
  675. function setValue(target,combox,input,text,value,confirm){
  676. var panelbody = $('.gltcombox-panel-body',combox);
  677. panelbody.find('div.gltcombox-item-selected').removeClass('gltcombox-item-selected');
  678. panelbody.find('div.gltcombox-item[value=' + value + ']').addClass('gltcombox-item-selected');
  679. if(confirm){
  680. var obj=getComHidden(target,input);
  681. $(input).val(text);
  682. $(obj).val(value);
  683. var fun = window[input.doselect];
  684. if(fun){
  685. fun(input,{AAA102:value,AAA103:text});
  686. }
  687. }
  688. }
  689. /**
  690. * 获取下拉字典项保存字典值的HIDDEN input 对象
  691. */
  692. function getComHidden(target,input){
  693. var obj;
  694. var nd = $(input).attr('nd').replace(/_CMB/gi, "");;
  695. var rw =$(input).attr('rw');
  696. $('input[nd='+nd+'][rw='+rw+'][class^=gltcom]',target).each(function(){
  697. obj = this;
  698. return false;
  699. });
  700. return obj;
  701. }
  702. /**
  703. * 初始化下拉框
  704. * @param input 录入控件
  705. * @param comname 下拉字典的名称
  706. * @return 无
  707. */
  708. function setComBox(target,combox,input){
  709. var panel = $('.gltcombox-panel-body',combox);
  710. $('.gltcombox-item', panel).unbind('hover');
  711. $('.gltcombox-item', panel).unbind('click');
  712. $('.gltcombox-item', panel).hover(
  713. function(){$(this).addClass('gltcombox-item-hover');},
  714. function(){$(this).removeClass('gltcombox-item-hover');}
  715. ).click(function(){
  716. var item = $(this);
  717. $(combox).css({
  718. display:'none'
  719. });
  720. setValue(target,combox,input,$.trim(item.attr('text')),item.attr('value'),true);
  721. });
  722. panel.find('div.gltcombox-item').each(function(){
  723. var item = $(this);
  724. item.show();
  725. });
  726. //鼠标点击其他地方就隐藏列表
  727. $(document).bind('mousedown', function(e){
  728. var hidden=getComHidden(target,input);
  729. if(hidden!=null&&hidden.value==''){
  730. setValue(target,combox,input,'','',true)
  731. }
  732. if(e.target!=input){
  733. $(combox).hide();
  734. }else{
  735. $(combox).show();
  736. }
  737. });
  738. //鼠标移动到上面屏蔽掉
  739. panel.bind('mousedown', function(e){
  740. return false;
  741. });
  742. jQuery(input).bind('mousedown', function(e){
  743. return true;
  744. });
  745. //当录入框第一次获取录入焦点,初始话该控件的事件
  746. if($.data(input, 'input') == null){
  747. $(input).data('input', {});
  748. //单击ENTER键失去焦点时
  749. $(input).bind('keydown',function(e){
  750. if(e.keyCode==13||e.keyCode==9){
  751. $(combox).css({
  752. display:'none'
  753. });
  754. selectCur(target,input,combox);
  755. }
  756. });
  757. //按上下左右键时选择下拉框的内容
  758. $(input).bind('keyup', function(e){
  759. switch(e.keyCode){
  760. case 37: // left
  761. case 38: // up
  762. selectPrev(target,input,combox);
  763. break;
  764. case 39: // right
  765. case 40: // down
  766. selectNext(target,input,combox);
  767. break;
  768. case 16://shift
  769. return true;
  770. break;
  771. case 17://ctrl
  772. return true;
  773. break;
  774. case 18://atl
  775. return true;
  776. break;
  777. case 32://空格
  778. return true;
  779. break;
  780. default:
  781. if(!input.readOnly){
  782. setTimeout(function(){
  783. filter(target,combox,input);
  784. },1000*0.3); //延迟两秒处理
  785. }
  786. }
  787. });
  788. }
  789. }
  790. /**
  791. * 过滤下拉框的内容
  792. */
  793. function filter(target,combox,input){
  794. var query = input.value;
  795. var panel = $('div.gltcombox-panel-body',combox);
  796. var hidden = getComHidden(target,input);
  797. hidden.value =""; //原来的值
  798. panel.find('div.gltcombox-item').each(function(){
  799. var item = $(this);
  800. if (item.text().indexOf(query) == 0){
  801. item.show();
  802. if (item.text() == query){
  803. item.addClass('gltcombox-item-selected');
  804. hidden.value = item.attr('value');
  805. }
  806. }else if(item.attr('text').indexOf(query) == 0){//若是跟下拉列表内比较不成功,则跟隐藏的比较
  807. if(item.attr('text') == query){
  808. item.addClass('gltcombox-item-selected');
  809. hidden.value = item.attr('value');
  810. }
  811. }else{
  812. item.hide();
  813. }
  814. });
  815. }
  816. /**
  817. * 生成下拉框的DIV
  818. */
  819. function iniDicts(target){
  820. var opts = $.data(target, 'fweditgrid').options;
  821. var dicts = opts.data.dicts;
  822. var confid = opts.confid;
  823. var div ="";
  824. var dt;
  825. for(key in dicts){
  826. var dts = dicts[key];
  827. var div = "<DIV id=\""+confid+"_"+key+"\" class=\"gltcombox-panel\" style=\"width:134px; display:none;\">";
  828. div += "<div style=\"height:200px\" class=gltcombox-panel-body>";
  829. for(ky in dts){
  830. div += "<div class=gltcombox-item value=\""+ky+"\" text=\""+dts[ky]+"\">"+ky+"-"+dts[ky]+"</div>";
  831. }
  832. div += "<div class=\"gltcombox-item gltcombox-item-selected\" value=\"\" text=\"\">&nbsp;</div>";
  833. div += " </div> ";
  834. div += " </DIV> ";
  835. $(div).appendTo('body');
  836. }
  837. }
  838. /**
  839. * 生成下拉框的DIV
  840. */
  841. function reSetDict(target,dname,dictdata){
  842. var opts = $.data(target, 'fweditgrid').options;
  843. var dicts = opts.data.dicts;
  844. dicts[dname]=dictdata;
  845. var confid = opts.confid;
  846. var div ="";
  847. var dt;
  848. $('#'+confid+'_'+dname).remove();
  849. var dts = dictdata;
  850. div = "<DIV id=\""+confid+"_"+dname+"\" class=\"gltcombox-panel\" style=\"width:134px; display:none;\">";
  851. div += "<div style=\"height:200px\" class=gltcombox-panel-body>";
  852. for(ky in dts){
  853. div += "<div class=gltcombox-item value=\""+ky+"\" text=\""+dts[ky]+"\">"+ky+"-"+dts[ky]+"</div>";
  854. }
  855. div += "<div class=\"gltcombox-item gltcombox-item-selected\" value=\"\" text=\"\">&nbsp;</div>";
  856. div += " </div> ";
  857. div += " </DIV> ";
  858. $(div).appendTo('body');
  859. }
  860. /**
  861. *修改行号以及序号等
  862. *因为每次删除后 行号以及序号等都会发生变化
  863. */
  864. function modifyRowAttr(target){
  865. var grid = $.data(target, 'fweditgrid').grid;
  866. var opts = $.data(target, 'fweditgrid').options;
  867. var view = $.data(target, 'fweditgrid').view;
  868. var table = view.children('table')[0];
  869. var xh =parseInt(opts.rowxh,10);
  870. $.each(table.tBodies[0].rows,function(indexInArray){
  871. this['fweditgrid-row-index']=indexInArray;
  872. $('input',this).each(function(){this['rw']=indexInArray;});
  873. this.cells[0].innerHTML=xh+indexInArray;
  874. });
  875. }
  876. function storeRow(target){
  877. var grid = $.data(target, 'fweditgrid').grid;
  878. var opts = $.data(target, 'fweditgrid').options;
  879. var view = $.data(target, 'fweditgrid').view;
  880. var table = view.children('table')[0];
  881. if(table.tBodies[0].rows.length==0)return;
  882. opts.tr = table.tBodies[0].rows[0].cloneNode(true);
  883. //如果没数据,那么删除掉模板行,如果还没初始化,那么先不删除
  884. var rows = $.data(target, 'fweditgrid').options.data.rows;
  885. if((!rows||rows.length==0)){
  886. var row = table.tBodies[0].removeChild(table.tBodies[0].rows[0]);
  887. }
  888. opts.rowxh = 1;
  889. }
  890. /**
  891. * 重新刷新记录表的内容
  892. * 修改了WHERE条件后,重新执行查询
  893. */
  894. function ReLoadData(target, where, pageNum) {
  895. var opts = $.data(target, 'fweditgrid').options;
  896. opts.whereCls = where;
  897. request(target,pageNum,opts.pageSize,function(){
  898. if(pageNum==null){
  899. opts.pageNumber = 1;
  900. }else if(pageNum!=-1){
  901. opts.pageNumber = pageNum;
  902. }
  903. });
  904. }
  905. /**
  906. * 多记录表的成员函数
  907. */
  908. var methods = {
  909. /**
  910. * 设置并获取某行某列的值
  911. * @param rowIndices
  912. * 指定更新的列,可以有三个类型true,整形和整形数组。
  913. * 表示更新多记录表所有的行中的数据,
  914. * 单个整形值表示更新多记录表中某行的对应别名中的值,
  915. * 整形数组表示更新多记录表中指定行中对应别名的值
  916. * @param fieldName
  917. * 字段别名
  918. * @param newValue 新的值,可以是当个值,也可以是值数组。
  919. * 不设置该值时表示获取列操作,设置值时表示设置列操作。
  920. * 每个值需要{fieldName:fieldValue}格式,如果是字典项,
  921. * 需要增加'_DIC_'+fieldName这个属性,传入对应的字典中文值
  922. * 可能的使用情况:
  923. * $.fweditgrid('field',true,String,Object) return jQuery例子$('#test_glt').fweditgrid('field',true,'XB',{'XB':1,'_DIC_XB':'男'})
  924. * 设置多记录表中所有行中性别列的值,代码值为1,中文显示为“男”,返回原jQuery集合对象
  925. * $.fweditgrid('field',true,String) return Array 例子$('#test_glt').fweditgrid('field',true,'XB')
  926. * 获取多记录表中所有行中性别列的值,返回数组,数组中包含每行对应列中别名为'XB'对应的值,
  927. * 如果值是字典列,那么同时返回中文,可能的结果是:[{'XB':1,'_DIC_XB':'男'},{'XB':1,'_DIC_XB':'男'}]
  928. *
  929. * $.fweditgrid('field',Integer,String,Object) return jQuery例子$('#test_glt').fweditgrid('field',0,'XB',{'XB':1,'_DIC_XB':'男'})
  930. * 设置多记录表中第一行中性别列的值,代码值为1,中文显示为“男”,返回原jQuery集合对象
  931. * $.fweditgrid('field',Integer,String) return Array 例子$('#test_glt').fweditgrid('field',0,'XB')
  932. * 获取多记录表中第一行中性别列的值,返回数组,数组中包含每行对应列中别名为'XB'对应的值,
  933. * 如果值是字典列,那么同时返回中文,可能的结果是:[{'XB':1,'_DIC_XB':'男'}]
  934. *
  935. * $.fweditgrid('field',Array,String,Object) return jQuery例子$('#test_glt').fweditgrid('field',[0,1],'XB',{'XB':1,'_DIC_XB':'男'})
  936. * 设置多记录表中第1、2行中性别列的值,代码值为1,中文显示为“男”,返回原jQuery集合对象
  937. * $.fweditgrid('field',Array,String) return Array 例子$('#test_glt').fweditgrid('field',[0,1],'XB')
  938. * 获取多记录表中第1、2行中性别列的值,返回数组,数组中包含每行对应列中别名为'XB'对应的值,
  939. * 如果值是字典列,那么同时返回中文,可能的结果是:[{'XB':1,'_DIC_XB':'男'},{'XB':1,'_DIC_XB':'男'}]
  940. *
  941. * $.fweditgrid('field',Array,String,Array) return jQuery例子$('#test_glt').fweditgrid('field',[0,1],'XB',[{'XB':1,'_DIC_XB':'男'},{'XB':2,'_DIC_XB':'女'])
  942. * 分别设置多记录表中第1、2行中性别列的值,第一行代码值为1,中文显示为“男”,第二行代码值为1,中文显示为“女”,返回原jQuery集合对象
  943. *
  944. */
  945. field:function(rowIndices,fieldName,newValue){
  946. //入参校验,rowIndices必须为true,整形数值,或者整形数组
  947. if (rowIndices == undefined || rowIndices == null
  948. || (typeof rowIndices != 'boolean'
  949. && typeof rowIndices != 'number'
  950. && !$.isArray(rowIndices))) {
  951. CFW.oWin.fnAlert('rowIndices入参有误,只能是true,整形数值,或者整形数组');
  952. return null;
  953. }
  954. if(newValue==undefined){
  955. //读别名列处理
  956. return this.map(function(){
  957. var vRowIndices = null;//存放待更新的行的行索引
  958. var rows = $.data(this, 'fweditgrid').options.data.rows;
  959. var dicts = $.data(this, 'fweditgrid').dicts;
  960. var opts = $.data(this, 'fweditgrid').options;
  961. var view = $.data(this, 'fweditgrid').view;
  962. if (rowIndices == true && typeof rowIndices=='boolean') {
  963. // 更新所有行,那么获取所有行的行索引
  964. vRowIndices = [];
  965. for (var i=0;i<rows.length;i++) {
  966. vRowIndices.push(parseInt(i,10));
  967. }
  968. }else if($.isArray(rowIndices)){
  969. vRowIndices=rowIndices;
  970. }else{
  971. vRowIndices=[rowIndices];
  972. }
  973. var rst = [];
  974. //预先初始化,避免checkbox或者radiobox一项都没选中时,导致undefined的问题
  975. for (var i=0;i<vRowIndices.length;i++) {
  976. rst[i]={};
  977. rst[i][fieldName] = null;
  978. }
  979. $('input[nd="'+fieldName+'"]', view).each(function(){
  980. var pos = $.inArray(parseInt(this.rw,10),vRowIndices);
  981. if(pos == -1){
  982. return ;
  983. }
  984. //只提取所需的行的数据
  985. if(this.type=='checkbox'||this.type=='radio'){
  986. //单选按钮和多选按钮只记录选中行的值
  987. if(this.checked){
  988. rst[pos][fieldName]=this.value;
  989. }
  990. }else{
  991. //普通按钮直接记录其值
  992. rst[pos][fieldName]=this.value;
  993. }
  994. });
  995. var dicFieldName = '_DIC_' + fieldName;//准备别名对应字典的名称
  996. //判断该别名是否字典项
  997. if (dicts[fieldName] != undefined) {
  998. //获取字典项
  999. var dict = dicts[fieldName]||{};
  1000. //结果集增加字典项中文列
  1001. for(var i=0;i<rst.length;i++){
  1002. var codeValue=rst[i][fieldName];
  1003. if(codeValue==null){
  1004. rst[i][dicFieldName] = null;
  1005. }else{
  1006. rst[i][dicFieldName]=(dict[codeValue] == null)?null:dict[codeValue];
  1007. }
  1008. }
  1009. }
  1010. return rst;
  1011. }).get();
  1012. }else{
  1013. //写别名列处理
  1014. return this.each(function(){
  1015. var vRowIndices = null;//存放待更新的行的行索引
  1016. var rows = $.data(this, 'fweditgrid').options.data.rows;
  1017. var dicts = $.data(this, 'fweditgrid').dicts;
  1018. var opts = $.data(this, 'fweditgrid').options;
  1019. var view = $.data(this, 'fweditgrid').view;
  1020. if (rowIndices == true && typeof rowIndices=='boolean') {
  1021. // 更新所有行,那么获取所有行的行索引
  1022. vRowIndices = [];
  1023. for (var i=0;i<rows.length;i++) {
  1024. vRowIndices.push(parseInt(i,10));
  1025. }
  1026. }else if($.isArray(rowIndices)){
  1027. vRowIndices=rowIndices;
  1028. }else{
  1029. vRowIndices=[rowIndices];
  1030. }
  1031. var vNewValue = null;//存放待更新的行对应列的值
  1032. if(newValue != undefined||newValue != null){
  1033. if($.isArray(newValue)){
  1034. vNewValue = newValue;
  1035. }else{
  1036. vNewValue = [];
  1037. for (var i=0;i<rows.length;i++) {
  1038. vNewValue.push(newValue);
  1039. }
  1040. }
  1041. }
  1042. var isDict = false;//默认认为不是字典项
  1043. var dict = null;
  1044. //判断该别名是否字典项
  1045. if (dicts!= undefined && dicts[fieldName] != undefined) {
  1046. isDict = true;
  1047. dict = dicts[fieldName]||{};
  1048. }
  1049. $('[nd='+fieldName+']', view).each(function(){
  1050. var pos = $.inArray(parseInt(this.rw,10),vRowIndices);
  1051. if(pos == -1){
  1052. return ;
  1053. }
  1054. //只处理所需的行的数据
  1055. if(this.type=='checkbox'||this.type=='radio'){
  1056. //更新模型的数据
  1057. rows[parseInt(this.rw)][fieldName]= vNewValue[pos][fieldName];
  1058. //单选按钮和多选按钮值不相符的都取消选中状态
  1059. if(this.value!=vNewValue[pos][fieldName]){
  1060. this.checked=false;
  1061. }else{
  1062. this.checked=true;
  1063. }
  1064. }else if(this.type=='hidden'){
  1065. //隐藏控件先修改成新的值,后修改关联控件的值
  1066. var code = vNewValue[pos][fieldName];
  1067. if(code == null){
  1068. code = "";
  1069. }
  1070. this.value = code;
  1071. rows[parseInt(this.rw)][fieldName] = code;
  1072. if(this.className.indexOf('gltcom')==-1){
  1073. //一般只读控件的处理,修改label值
  1074. //准备显示的值
  1075. var showValue = this.value;
  1076. if(isDict){
  1077. showValue = (dict[this.value]==null)?'':dict[this.value];
  1078. }
  1079. var labelNode = this.previousSibling;
  1080. while(labelNode!=null&&labelNode.nodeName!='LABEL'){
  1081. labelNode = labelNode.previousSibling;
  1082. }
  1083. if(labelNode){
  1084. labelNode.innerHTML=showValue;
  1085. }
  1086. }else{
  1087. //字典项处理
  1088. if(isDict){
  1089. var showValue = (dict[this.value]==null)?'':dict[this.value];
  1090. //获取字典控件
  1091. var comboxNode = this.previousSibling;
  1092. while(comboxNode!=null&&comboxNode.nodeName!='INPUT'){
  1093. comboxNode = comboxNode.previousSibling;
  1094. }
  1095. comboxNode.value=showValue;
  1096. }
  1097. }
  1098. } else if (this.nodeName =="LABEL") {
  1099. //隐藏控件先修改成新的值,后修改关联控件的值
  1100. var code = vNewValue[pos][fieldName];
  1101. if(code == null){
  1102. code = "";
  1103. }
  1104. this.value = code;
  1105. rows[parseInt(this.rw)][fieldName] = code;
  1106. //字典项处理
  1107. if(isDict){
  1108. var showValue = (dict[this.value]==null)?'':dict[this.value];
  1109. //获取字典控件
  1110. var comboxNode = this.previousSibling;
  1111. while(comboxNode!=null&&comboxNode.nodeName!='INPUT'){
  1112. comboxNode = comboxNode.previousSibling;
  1113. }
  1114. comboxNode.value=showValue;
  1115. } else {
  1116. this.innerHTML = code;
  1117. }
  1118. } else{
  1119. //普通录入直接修改成新的值
  1120. var code = vNewValue[pos][fieldName];
  1121. if(code == null){
  1122. code = "";
  1123. }
  1124. this.value = code;
  1125. rows[parseInt(this.rw)][fieldName] = code;
  1126. }
  1127. });
  1128. });
  1129. }
  1130. },
  1131. /**
  1132. * 设置多记录表某列控件只读(该函数只能对多记录表中配置了可编辑的列有效,对不可编辑列无效)
  1133. * @param fields 需要控制只读的列,可以是字符串,表示某列;可以是数组,表示某些列;可以是值true,表示所有列
  1134. * @param flag boolean值,可选值为true或者false,true时,表示设置fields对应的列为只读,false时表示设置对应的列为非只读。
  1135. */
  1136. disable:function(fields,flag){
  1137. if (arguments.length == 0 ||arguments.length >2) {
  1138. CFW.oWin.fnAlert('disable函数,要求传入一个或两个参数');
  1139. return this;
  1140. }else if(arguments.length==1){
  1141. flag = fields;
  1142. fields=true;//传入两个表示对所有列操作
  1143. }
  1144. //校验flag的参数类型
  1145. if(flag!=true&&flag!=false){
  1146. CFW.oWin.fnAlert('disable函数的flag参数必需是true或者false');
  1147. return this;
  1148. }
  1149. //校验fields的参数类型
  1150. if(typeof fields == 'string'){
  1151. //先转为数组
  1152. fields = [fields];
  1153. }else if(!$.isArray(fields)&&fields!==true){
  1154. CFW.oWin.fnAlert('disable函数的fields参数必需是字符串、数组或者true');
  1155. return this;
  1156. }
  1157. return this.each(function(){
  1158. //每个多记录表单独处理
  1159. var opts = $.data(this, 'fweditgrid').options;
  1160. var grid = $.data(this, 'fweditgrid').grid;
  1161. var headers = opts.data.headers;
  1162. var v_fields;
  1163. if (fields == true) {
  1164. // true用headers替换
  1165. v_fields = headers;
  1166. } else {
  1167. v_fields = fields;
  1168. }
  1169. // 数组转成map
  1170. var v_map = {};
  1171. for (var index=0;index<v_fields.length;index++) {
  1172. v_map[v_fields[index]] = flag;
  1173. }
  1174. //合并原来的disableMap
  1175. $.extend(opts.disableMap,v_map);
  1176. if(!opts.mywin){
  1177. //如果窗口还没初始化,那么不处理,交给loadData处理
  1178. return ;
  1179. }
  1180. //获取所有控件
  1181. $('.fweditgrid-view tbody input', grid).each(function() {
  1182. //不处理hidden
  1183. if(this.type=='hidden')return;
  1184. var nd = this.nd.replace(/_CMB$/gi, "");
  1185. if (opts.disableMap[nd]) {
  1186. // 记录为只读的列,必需设置为只读
  1187. if (this.className.indexOf('readOnly')==-1) {// 只处理需要处理的
  1188. CFW.oGt.fnToDisabledObj(this);
  1189. }
  1190. } else {
  1191. // 未记录的列,或者记录为false的列,取消只读
  1192. if (this.className.indexOf('readOnly')!=-1) {// 只处理需要处理的
  1193. CFW.oGt.fnReObjReadOnly(this);
  1194. //如果是字典控件,那么需要将readOnly设置回去
  1195. if (this.nd != nd) {
  1196. this.readOnly = true;
  1197. }
  1198. }
  1199. }
  1200. });
  1201. });
  1202. },
  1203. /**
  1204. * 保存录入数据到DATA对象并返回多记表的数据集
  1205. */
  1206. getRows : function(){
  1207. return this.first().map(function(){
  1208. var grid = $.data(this, 'fweditgrid').grid;
  1209. var opts = $.data(this, 'fweditgrid').options;
  1210. var view = $.data(this, 'fweditgrid').view;
  1211. var headers = opts.data.headers;
  1212. var rows = opts.data.rows;
  1213. var emptyRow = {};
  1214. //准备一个模板空行
  1215. for(var i=0;i<opts.columns;i++){
  1216. emptyRow[headers[i]]=null;
  1217. }
  1218. //清空行数据
  1219. for(var i=0;i<rows.length;i++){
  1220. rows[i] = $.extend(rows[i],emptyRow);
  1221. }
  1222. //获取有行标识的记录
  1223. $('tbody [rw]', view)
  1224. .filter(':checkbox:checked,:radio:checked').each(function(){
  1225. if(parseInt(this.rw)>=rows.length){
  1226. return;
  1227. }
  1228. rows[this.rw][this.nd]=this.value;
  1229. }).end()
  1230. .not(':checkbox,:radio').each(function(){
  1231. if(parseInt(this.rw)>=rows.length){
  1232. return;
  1233. }
  1234. rows[this.rw][this.nd]=this.value;
  1235. });
  1236. opts.data.rows = rows;
  1237. var rows2= $.extend(true,[],rows);
  1238. return rows2;
  1239. }).get();
  1240. },
  1241. /**
  1242. * 增加一行或多行的行数据(只作用于jQuery集合中的第一个多记录表)
  1243. * @param newRows 新的一行或多行数据,可以是object单行数据或array多行数据
  1244. * @returns int 添加后当前页面的总行数
  1245. */
  1246. addRows: function(newRows){
  1247. var rowsData = [];
  1248. // 获取新增行的数据,如果是单值,那么用数组包装,如果是数组那个直接赋值
  1249. // 如果参数个数不对,那么报错处理
  1250. if (arguments.length == 0) {
  1251. $.error('addRows函数,要求传入一个参数');
  1252. } else if (arguments.length == 1) {
  1253. if ($.isArray(newRows)) {
  1254. rowsData = newRows;
  1255. } else {
  1256. rowsData = [ newRows ];
  1257. }
  1258. } else {
  1259. $.error('addRows函数,要求传入一个参数');
  1260. }
  1261. // 如果没有新增数据,那么什么都不用该处理
  1262. if (rowsData.length == 0) {
  1263. return this;
  1264. }
  1265. return this.first().map(function(){
  1266. var target=this;
  1267. var id=$(target).attr('id');
  1268. if($.browser.msie&&(document.documentMode==null||document.documentMode=='5')){
  1269. }else{
  1270. $('#'+id+'_table').floatThead('destroy');
  1271. }
  1272. // 获取本多记录表已经有的行数据
  1273. var opts = $.data(this, 'fweditgrid').options;
  1274. var view = $.data(this, 'fweditgrid').view;
  1275. var table = view.children('table')[0];
  1276. var grid = $.data(this, 'fweditgrid').grid;
  1277. var data = opts.data;
  1278. var rows = data.rows || [];
  1279. var startRow = rows.length;
  1280. // 增加行数据
  1281. rows = rows.concat(rowsData);
  1282. data.rows = rows;
  1283. // 增加总计
  1284. data.total += rowsData.length;
  1285. var iPageNum = (parseInt(opts.pageNumber, 10) - 1) * parseInt(opts.pageSize, 10);
  1286. //逐行处理
  1287. var frag = document.createDocumentFragment();
  1288. for(var iRow = startRow,len=rows.length;iRow<len;iRow++){
  1289. var tr = genOneRow(opts, opts.data.headers,iPageNum+1,iRow, rows);
  1290. frag.appendChild(tr);
  1291. }
  1292. table.tBodies[0].appendChild(frag);
  1293. view[0].scrollTop = view[0].scrollHeight;
  1294. //调整底部的颜色
  1295. setAlt(this);
  1296. createMsg(this);
  1297. if($.browser.msie&&(document.documentMode==null||document.documentMode=='5')){
  1298. }else{
  1299. $('#'+id+'_table').floatThead({
  1300. scrollContainer:function($table){
  1301. return $table.closest('.fweditgrid-view');
  1302. }
  1303. });
  1304. }
  1305. return rows.length;
  1306. }).get(0);
  1307. },
  1308. /**
  1309. * 删除一行的数据
  1310. */
  1311. removeRows : function(options){
  1312. var rowIndices = new Array();
  1313. // 获取删除行的索引数据,如果是单值,那么用数组包装,如果是数组那个直接赋值
  1314. if (arguments.length == 0) {
  1315. rowIndices = null;
  1316. } else if (arguments.length == 1) {
  1317. if ($.isArray(options)) {
  1318. rowIndices = options;
  1319. } else {
  1320. rowIndices = [ options ];
  1321. }
  1322. } else {
  1323. $.error('removeRows函数,要求最多传入一个参数');
  1324. }
  1325. // 如果传入的是空串,那么不处理
  1326. if (rowIndices && rowIndices.length == 0) {
  1327. return this;
  1328. }
  1329. return this.each(function(){
  1330. var grid = $.data(this, 'fweditgrid').grid;
  1331. var opts = $.data(this, 'fweditgrid').options;
  1332. var view = $.data(this, 'fweditgrid').view;
  1333. var data = opts.data;
  1334. var rows = data.rows || [];
  1335. var table = view.children('table')[0];
  1336. // 如果本来就没数据,那么什么都不做
  1337. if (!rows || rows.length == 0)
  1338. return;
  1339. // 删除行数据
  1340. // 如果是不传入行数据,那么删除所有
  1341. if (rowIndices == null) {
  1342. //全部删除处理
  1343. rows = [];
  1344. //删除所有行的数据
  1345. $(table.tBodies[0]).empty();
  1346. createMsg(this);
  1347. } else {//部分删除处理
  1348. // 根据索引删除现有数据,从后到前删除行数据
  1349. rowIndices.sort(function(a, b) {
  1350. return a - b;
  1351. }).reverse();
  1352. //删除数据模型(由后向前删除)
  1353. for (var i=0;i<rowIndices.length;i++) {
  1354. var k = parseInt(rowIndices[i],10);
  1355. rows.splice(k, 1);
  1356. }
  1357. //删除ui相关的东西
  1358. for(var index=0;index<rowIndices.length;index++){
  1359. var k = parseInt(rowIndices[index],10);
  1360. $('tr[fweditgrid-row-index='+k+']',table).remove();
  1361. }
  1362. createMsg(this);
  1363. //重新排序
  1364. modifyRowAttr(this);
  1365. //调整底部的颜色
  1366. setAlt(this);
  1367. if(rows.length>0){
  1368. //保持同样的滚动偏移量
  1369. view.scrollTop(view.scrollTop());
  1370. }
  1371. }
  1372. data.rows = rows;
  1373. // 减少总计
  1374. data.total = rows.length;
  1375. createMsg(this);
  1376. });
  1377. },
  1378. /**
  1379. * 更新行数据
  1380. *
  1381. * @param options
  1382. * 可选,如果不传任何数据,默认表示刷新本多记录表,如果传入新的列表数据
  1383. * ,那么直接替换原来的多记录表的数据,同时刷新界面展示
  1384. * @returns jQuery
  1385. */
  1386. updateRows : function(options) {
  1387. var rowsData = null;
  1388. // 获取新行的数据,如果是单值,那么用数组包装,如果是数组那个直接赋值
  1389. // 如果参数个数不对,那么报错处理
  1390. if (arguments.length == 0) {
  1391. } else if (arguments.length == 1) {
  1392. if ($.isArray(options)) {
  1393. rowsData = options;
  1394. } else {
  1395. rowsData = [ options ];
  1396. }
  1397. } else {
  1398. $.error('updateRows函数,要求传入一个参数');
  1399. }
  1400. return this.each(function() {
  1401. // 获取本多记录表已经有的行数据
  1402. var opts = $.data(this, 'fweditgrid').options;
  1403. var data = opts.data;
  1404. var rows = data.rows || [];
  1405. // 如果有传入新的行数据,那么全部用新记录替换旧记录
  1406. if (rowsData) {
  1407. data.rows = rowsData;
  1408. } else {
  1409. // 没有的话,当作刷新页面数据处理
  1410. }
  1411. loadData(this, data);
  1412. createMsg(this);
  1413. showInfo(this);
  1414. });
  1415. },
  1416. /**
  1417. * 显示下拉框
  1418. * @param input 录入控件
  1419. * @param comname 下拉字典的名称
  1420. * @returns 无
  1421. */
  1422. showComBox : function(input,comname){
  1423. return this.each(function(){
  1424. var opts = $.data(this, 'fweditgrid').options;
  1425. var zIndex = opts.zIndex;
  1426. var iLeft = $(input).offset().left;
  1427. var iTop = $(input).offset().top + 20;
  1428. var combox = $('#'+comname);
  1429. var comobj;
  1430. comobj=eval('document.all.'+comname);
  1431. setComBox(this,comobj,input);
  1432. var hidden = getComHidden(this,input);
  1433. $(comobj).css("width",$(input).width());//div宽度建议跟多记录表中对应列宽度一致
  1434. var panel = $(comobj).find('div.gltcombox-panel-body');
  1435. panel.find('div.gltcombox-item-selected').removeClass('gltcombox-item-selected');
  1436. panel.find('div.gltcombox-item[value=' + hidden.value + ']').addClass('gltcombox-item-selected');
  1437. var ind = parseInt(combox.css('zIndex'),10);
  1438. if(isNaN(ind)){
  1439. ind=0;
  1440. }
  1441. if(zIndex>ind){
  1442. ind = zIndex;
  1443. };
  1444. //下拉框在fwwindow内需要根据当前input的zindex重置panel的index保证下拉框在最前
  1445. var inputZIndex = 0;
  1446. $(input).parents().each(function(){
  1447. inputZIndex+=parseInt($(this).css('z-index'));
  1448. });
  1449. if(inputZIndex>ind){
  1450. ind=inputZIndex+1;
  1451. }
  1452. combox.css({
  1453. display:'block',
  1454. left:iLeft,
  1455. top:iTop,
  1456. zIndex:ind
  1457. });
  1458. });
  1459. },
  1460. reSetDict:function(dictname,dictdata){
  1461. return this.each(function(){
  1462. reSetDict(this,dictname,dictdata);
  1463. });
  1464. },
  1465. /**
  1466. * 初始化可编辑多记录表单
  1467. */
  1468. init : function(options) {
  1469. options = options || {};
  1470. return this.each(function() {
  1471. var state = $.data(this, 'fweditgrid');
  1472. var opts;
  1473. if (state) {
  1474. opts = $.extend(state.options, options);
  1475. state.options = opts;
  1476. } else {
  1477. opts = $.extend({}, $.fn.fweditgrid.defaults, {fit:$(this).attr('fit') == 'true'}, options);
  1478. $(this).css('width', null).css('height', null)
  1479. .addClass('fwresize').bind('fwresize',function(){setSize(this);});
  1480. var view = $(this).children().children().children('.fweditgrid-view');//主数据区域
  1481. var pager = view.siblings('.fweditgrid-pager');//分页区
  1482. var bodyTable = view.children('table');
  1483. $.data(this,'fweditgrid', {
  1484. options:opts,
  1485. grid:$(this),
  1486. dicts:opts.data.dicts,
  1487. view :view,
  1488. pager:pager
  1489. });
  1490. var state = $.data(this, 'fweditgrid');
  1491. var target = this;
  1492. var id= $(target).attr('id');
  1493. var b = false;
  1494. //检查该多记录的上层是否是弹出窗口(window)
  1495. $(this).parents('.window').each(function(){
  1496. b=true;
  1497. return false;
  1498. });
  1499. if(!b){
  1500. //检查该多记录的上层是否是TAB页(window)
  1501. $(this).parents('[myclass=fwtab]').each(function(){
  1502. b=true;
  1503. state.options.fwtab = true;
  1504. return false;
  1505. });
  1506. }
  1507. //TAB页必须先处理 WINDOW则不用奇怪,要不然显示有问题
  1508. //if(state.options.fwtab){
  1509. //setSize(this);
  1510. //}
  1511. var grid = $.data(target, 'fweditgrid').grid;
  1512. $(window).resize(function(){
  1513. if($.browser.msie&&(document.documentMode==null||document.documentMode=='5')){
  1514. }else{
  1515. if(!$(grid).is(':visible')){//当窗口不可见时,不能根据外框改变grid大小
  1516. return true;
  1517. }
  1518. }
  1519. if (opts.width == 'auto') {
  1520. // 先修改成初始值
  1521. $('div.fweditgrid-view', grid).width(50);
  1522. $('div.fweditgrid-wrap', grid).width(50);
  1523. $('div.fweditgrid', grid).width(50);
  1524. grid.width(50);
  1525. // 再调整
  1526. var iWd = grid.parent().outerWidth();
  1527. $('div.fweditgrid-view', grid).width(iWd);
  1528. $('div.fweditgrid-wrap', grid).width(iWd);
  1529. $('div.fweditgrid', grid).width(iWd);
  1530. grid.width(iWd);
  1531. }
  1532. });
  1533. //先保存模板行数据,预防没初始化就开始操作多记录表,而这时还没初始化,导致出错
  1534. storeRow(target);
  1535. //处理目的:多记录包含在弹出窗口内时不初始化
  1536. if(!b&&$(target).is(':visible')){
  1537. // var startTime = new Date();
  1538. setSize(this);
  1539. buildPage(this);
  1540. setProperties(target);
  1541. state.options.mywin = true;
  1542. iniDicts(target);
  1543. //控件初始化
  1544. var inputs = bodyTable[0].getElementsByTagName('INPUT');
  1545. for(var i =0,len=inputs.length;i<len;i++){
  1546. var input = inputs[i];
  1547. CFW.oGt._fnObjInit(input);
  1548. }
  1549. createMsg(target);
  1550. if($.browser.msie&&(document.documentMode==null||document.documentMode=='5')){
  1551. }else{
  1552. $('#'+id+'_table').floatThead({
  1553. scrollContainer:function($table){
  1554. return $table.closest('.fweditgrid-view');
  1555. }
  1556. });
  1557. }
  1558. if (opts.onLoadSuccess) {
  1559. opts.onLoadSuccess.apply(this, arguments);
  1560. }
  1561. // showErrMsg('glt Total:'+(new Date()-startTime),5);
  1562. }else{
  1563. //绑定事件,监听后期可能的初始化事件,一旦初始化,立即重新渲染
  1564. $(document).bind('gridlazyInit',function(){
  1565. if(!$(target).is(':visible')){
  1566. return ;
  1567. }
  1568. var opts = $.data(target, 'fweditgrid').options;
  1569. //window必须这样处理,tab不用,要不然显示有问题
  1570. if(!opts.fwtab){
  1571. //setSize(target);
  1572. }
  1573. if(!opts.mywin){
  1574. setSize(target);
  1575. opts.mywin = true;
  1576. buildPage(target);
  1577. setProperties(target);
  1578. iniDicts(target);
  1579. //控件初始化
  1580. var inputs = bodyTable[0].getElementsByTagName('INPUT');
  1581. for(var i =0,len=inputs.length;i<len;i++){CFW.oGt._fnObjInit(inputs[i]);}
  1582. storeRow(target);
  1583. createMsg(target);
  1584. if($.browser.msie&&(document.documentMode==null||document.documentMode=='5')){
  1585. }else{
  1586. $('#'+id+'_table').floatThead({
  1587. scrollContainer:function($table){
  1588. return $table.closest('.fweditgrid-view');
  1589. }
  1590. });
  1591. }
  1592. if (opts.onLoadSuccess) {
  1593. opts.onLoadSuccess.apply(this, arguments);
  1594. }
  1595. }
  1596. });
  1597. }
  1598. }
  1599. });
  1600. },
  1601. /**
  1602. * 获取已选项,数组形式,数组中是选中列的列索引(数字类型)
  1603. * @param alias 列别名
  1604. */
  1605. getSelected:function(alias){
  1606. return this.map(function() {
  1607. //获取别名下所有已选checkbox
  1608. return $('[nd='+alias+']:checked',this)
  1609. .map(function(){
  1610. return parseInt(this.rw,10);
  1611. }).get();
  1612. }).get();
  1613. },
  1614. /**
  1615. * 获取已选项的行数据
  1616. * @param 控件的NAME
  1617. */
  1618. getSelectedData:function(alias){
  1619. return this.map(function(){
  1620. var rows = $.data(this, 'fweditgrid').options.data.rows;
  1621. var opts = $.data(this, 'fweditgrid').options;
  1622. var view = $.data(this, 'fweditgrid').view;
  1623. var NewRows = [];
  1624. $('tbody [rw]', view)
  1625. .filter(':checkbox:checked,:radio:checked').each(function(){
  1626. if(parseInt(this.rw)>=rows.length){
  1627. return;
  1628. }
  1629. rows[this.rw][this.nd]=this.value;
  1630. }).end()
  1631. .not(':checkbox,:radio').each(function(){
  1632. if(parseInt(this.rw)>=rows.length){
  1633. return;
  1634. }
  1635. rows[this.rw][this.nd]=this.value;
  1636. });
  1637. $('[nd='+alias+']:checked',this).each(function (){
  1638. var i= parseInt(this.rw,10);
  1639. NewRows.push(rows[i]);
  1640. });
  1641. return NewRows;
  1642. }).get();
  1643. },
  1644. /**
  1645. * 注册翻页前的响应函数。
  1646. * 如果函数返回非true,那么系统不触发翻页操作。
  1647. * @param pageFun 自定义的响应函数,可以为空,空表示取消之前注册的函数。
  1648. */
  1649. beforePage:function(pageFun){
  1650. if(pageFun!=null&&!$.isFunction(pageFun)){
  1651. alert('beforePage函数的唯一入参必须是function对象');
  1652. return this;
  1653. }
  1654. return this.each(function(){
  1655. $.data(this,'beforePage',pageFun);
  1656. });
  1657. }
  1658. };
  1659. $.fn.fweditgrid = function(options) {
  1660. if (methods[options]) {
  1661. return methods[options].apply(this, Array.prototype.slice.call(
  1662. arguments, 1));
  1663. } else if (typeof options === 'object' || !options) {
  1664. return methods.init.apply(this, arguments);
  1665. } else {
  1666. $.error('Method ' + options + ' does not exist on fweditgrid');
  1667. }
  1668. };
  1669. $.fn.fweditgrid.defaults = {
  1670. title : null,
  1671. iconCls : null,
  1672. border : true,
  1673. width : 'auto',
  1674. height : 'auto',
  1675. frozenColumns : null,
  1676. columns : null,
  1677. striped : true,
  1678. method : 'post',
  1679. nowrap : true,
  1680. idField : null,
  1681. expbtn : null,
  1682. url : null,
  1683. whereCls : null,
  1684. confid : null,
  1685. dsId : null,
  1686. dynDictWhereCls : null,
  1687. subTotalAlign : 'bottom',
  1688. loadMsg : '正在处理中 ...',
  1689. tipMsg : '没有相关的数据!',
  1690. hasPage : true,// 是否显示标题
  1691. rownumbers : false,
  1692. singleSelect : false,
  1693. fit : false,
  1694. queryParams : {},
  1695. sortName : null,
  1696. sortOrder : 'asc',
  1697. data : null,
  1698. beforePageText : '页码',
  1699. afterPageText : '共 {pages} 页',
  1700. displayMsg : '第 {from} 到 {to} 行 共 {total} 行',
  1701. total : 1,
  1702. pageSize : 20,
  1703. pageNumber : 1,
  1704. loading : false,
  1705. buttons : null,
  1706. mywin:false,//用于判断是否已经被弹出窗口初始化过详见 fwwindow: setEditGird
  1707. zIndex:0,
  1708. tr:null,
  1709. rowxh:1,
  1710. fwtab:false,
  1711. showRefresh : true,
  1712. disableMap:{},
  1713. ReGetListData : function(target, where, pageNum) {
  1714. ReLoadData(target, where, pageNum);
  1715. },
  1716. onLoadSuccess : function() {
  1717. },
  1718. onLoadError : function() {
  1719. }
  1720. };
  1721. })(jQuery);