jquery-bootstable.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904
  1. /**
  2. * bootstable 表格插件
  3. * caratename:雨中磐石(rainrock)
  4. * caratetime:2014-04-06 21:40:00
  5. * email:admin@rockoa.com
  6. * homepage:www.rockoa.com
  7. */
  8. (function ($) {
  9. function bootstable(element, options){
  10. var obj = element;
  11. var can = options;
  12. var rand = js.getrand();
  13. var me = this;
  14. this.data = can.data;
  15. this.count = 0;
  16. this.page = 1;
  17. this.changedata = {};
  18. this.changeid = 0;
  19. this.bool = false;
  20. this.where = can.where;
  21. this.highorderstr = '';
  22. this.otherparams = {};
  23. this.loadci = 0;
  24. this.options= can;
  25. this.init = function(){
  26. this.tablename=can.tablename;
  27. can.tablename=jm.encrypt(can.tablename);
  28. this._init();
  29. this._create();
  30. if(can.autoLoad){
  31. this._loaddata(1);
  32. }
  33. if(can.fanye)this._fanye();
  34. };
  35. this.getData= function(fid){
  36. var a = this.data;
  37. if(fid)a= this.json[fid];
  38. if(!isNaN(fid))a= this.data[fid];
  39. return a;
  40. };
  41. this.getCount= function(){
  42. return this.count;
  43. };
  44. this.getJson= function(){
  45. return this.json;
  46. };
  47. this._init = function(){
  48. var sas = can.modedir;
  49. if(!sas)sas='index:';
  50. sas = sas.split(':');
  51. if(can.url=='')can.url = js.getajaxurl('publicstore', sas[0], sas[1]);
  52. if(can.cellurl=='')can.cellurl = js.getajaxurl('publicsavevalue', sas[0], sas[1]);
  53. this.setColumns(can.columns);
  54. s='<div style="position:relative;'+can.bodyStyle+'" id="tablebody_'+rand+'"></div><div id="tablefanye_'+rand+'"></div>';
  55. obj.html(s);
  56. $('#tablebody_'+rand+'').scroll(function(){
  57. me._scrollTopla($(this));
  58. });
  59. if(can.tree)window['stabletree'+rand+'']=function(j,o1){me.stabletree(j,o1)}
  60. };
  61. this.setColumns=function(cols){
  62. can.columns=cols;var a,i;
  63. for(i=0; i<can.columns.length; i++){
  64. a = can.columns[i];
  65. if(typeof(a.align)=='undefined')can.columns[i].align='center';
  66. if(a.dataIndex=='caozuo')can.columns[i] = this._caozuochengs(a,i);
  67. }
  68. };
  69. this.getcolumns = function(){
  70. return can.columns;
  71. };
  72. this.setCans = function(cas){
  73. for(var i in cas)can[i]=cas[i];
  74. };
  75. this._create = function(){
  76. var a = can.columns;
  77. var s = '',i,len=a.length,val,s1,s2='',cols,s3='',s4='',s5='',le,st,ov,j,j1,na,attr,sty='',hs='',dis,dlen=this.data.length;
  78. s+='<table id="tablemain_'+rand+'" class="table table-striped table-bordered table-hover" style="margin:0px">';
  79. if(!can.hideHeaders){
  80. s+='<thead><tr><th width="40"></th>';
  81. if(can.checked)s+='<th width="40"><div align="center"><input id="seltablecheck_'+rand+'" type="checkbox"></div></th>';
  82. for(i=0;i<len;i++){
  83. hs = '';
  84. attr = '';
  85. cols = a[i].colspan;
  86. if(can.sort == a[i].dataIndex)hs='style="color:#3399FF"';
  87. if(a[i].width)attr+=' width="'+a[i].width+'"';
  88. if(a[i].tooltip)attr+=' title="'+a[i].tooltip+'"';
  89. if(cols && cols>1)attr+=' colspan="'+cols+'"';
  90. s+='<th nowrap '+attr+'><div '+hs+' align="'+a[i].align+'" lfields="'+a[i].dataIndex+'">';
  91. if(can.celleditor&&a[i].editor)s+='<i class="icon-pencil"></i>&nbsp;';
  92. s+=a[i].text;
  93. if(a[i].sortable){
  94. s+='&nbsp;';
  95. if(can.sort == a[i].dataIndex){
  96. s+='<i tempsort="'+i+'" lx="'+((can.dir=='desc')?'asc':'desc')+'" class="icon-sort-'+((can.dir=='desc')?'down':'up')+' cursor"></i>';
  97. }else{
  98. s+='<i tempsort="'+i+'" lx="desc" class="icon-sort cursor"></i>';
  99. }
  100. }
  101. s+='</div></th>';
  102. if(cols>1)i=i+cols-1;
  103. }
  104. s+='</tr></thead>';
  105. }
  106. s+='<tbody id="tbody_'+rand+'">';
  107. s+='</tbody></table>';
  108. $('#tablebody_'+rand+'').html(s);
  109. for(j=0;j<dlen;j++){
  110. s=this.createrows(j);
  111. $('#tbody_'+rand+'').append(s);
  112. }
  113. s='';
  114. this.trobj = obj.find('tr[dataid]');
  115. this.trobj.click(function(event){
  116. me._itemclick(this, event);
  117. });
  118. this.trobj.dblclick(function(event){
  119. me._itemdblclick(this, event);
  120. });
  121. if(typeof(can.celldblclick)=='function'){
  122. obj.find('td[cell]').dblclick(function(event){
  123. me._celldblclick(this, event);
  124. });
  125. }
  126. if(can.celleditor){
  127. var o = obj.find('td[fields]');
  128. o[can.celledittype](function(){
  129. me._celleditla(this);
  130. });
  131. }
  132. obj.find("a[temp='caozuomenu_"+rand+"']").click(function(){
  133. me._caozuochengss(this);
  134. return false;
  135. });
  136. $('#seltablecheck_'+rand+'').click(function(){
  137. js.selall(this, 'tablecheck_'+rand+'');
  138. });
  139. obj.find('i[tempsort]').click(function(){
  140. me._clickorder(this);
  141. });
  142. };
  143. this.insert=function(d, funs,inid){
  144. d = js.apply({id:'auto'}, d);
  145. this.data.push(d);
  146. var j = this.data.length-1;
  147. var s=this.createrows(j);
  148. this.count++;
  149. if(!inid){
  150. $('#tbody_'+rand+'').append(s);
  151. }else{
  152. obj.find('tr[dataid="'+inid+'"]').after(s);
  153. }
  154. if(typeof(funs)=='function'){
  155. funs(this,j);
  156. }
  157. };
  158. this.createrows=function(j){
  159. var a = can.columns;
  160. var s = '',i,len=a.length,val,s1,s2='',s3='',s4='',s5='',le,st,ov,j,j1,na,attr,sty='',hs='',dis,trsty='',xu;
  161. ov = this.data[j];
  162. s3 = can.rendertr(ov, this, j);
  163. s4 = can.rowsbody(ov, this, j);
  164. if(s4)s5='rowspan="2"';
  165. if(!s3 && ((can.statuschange && ov.status==0) || (ov.ishui==1) || (ov.status==5))){
  166. trsty='color:#aaaaaa;';
  167. }
  168. if(ov.trbgcolor)trsty+='background:'+ov.trbgcolor+';';
  169. if(ov.trstyle)trsty+=''+ov.trstyle+';';
  170. if(trsty)trsty='style="'+trsty+'"';
  171. s='<tr clickbo="false" oi="'+j+'" dataid="'+ov.id+'" '+s3+' '+trsty+'>';
  172. xu = ov.trxu;if(!xu)xu=j+1+can.pageSize*(this.page-1);
  173. s+='<td '+s5+' align="right" width="40">'+xu+'</td>';
  174. if(can.checked){
  175. dis = '';
  176. if(ov.checkdisabled)dis='disabled';
  177. s+='<td align="center" width="40"><input oi="'+j+'" name="tablecheck_'+rand+'" '+dis+' value="'+ov.id+'" type="checkbox"></td>';
  178. }
  179. for(i=0;i<len;i++){
  180. na = a[i].dataIndex;
  181. val = ov[na];
  182. attr= '';
  183. sty = '';
  184. if(isempt(val)){
  185. val = '';
  186. this.data[j][na]=val;
  187. }
  188. if(a[i].type == 'checkbox'){
  189. s1 = '<img height="20" width="20" src="images/checkbox'+val+'.png">';
  190. }else{
  191. s1 = val;
  192. }
  193. if(typeof(a[i].renderer)=='function'){
  194. s3 = a[i].renderer(val, ov, j);
  195. if(!isempt(s3))s1=s3;
  196. }
  197. s2 = '';
  198. if(i == 0 && can.tree){
  199. st = ov.stotal;
  200. le = ov.level;
  201. for(j1=1;j1<le;j1++)s2+='<img src="images/white.gif" class="icons">&nbsp; ';
  202. s2 += '<i onclick="stabletree'+rand+'('+j+',this)" class="icon-'+((st>0)?'folder-close-alt':'file-alt')+'"></i>&nbsp;';
  203. }
  204. if(can.celleditor &&a[i].editor)attr+=' fields="'+na+'"';
  205. if(a[i].width)attr+=' width="'+a[i].width+'"';
  206. if(typeof(a[i].renderstyle)=='function'){
  207. s3 = a[i].renderstyle(val, ov, j);
  208. if(!isempt(s3))sty+=''+s3+';';
  209. }
  210. if(typeof(a[i].renderattr)=='function'){
  211. s3 = a[i].renderattr(val, ov, j);
  212. if(!isempt(s3))attr+=' '+s3+'';
  213. }
  214. s+='<td align="'+a[i].align+'" '+attr+' style="'+sty+'" row="'+j+'" cell="'+i+'">'+s2+''+s1+'</td>';
  215. }
  216. s+='</tr>';
  217. if(s4)s+='<tr><td colspan="'+(len+1)+'">'+s4+'</td></tr>';
  218. return s;
  219. };
  220. this._tredat={};
  221. this.stabletree=function(j,o1){
  222. if(!can.loadtree)return;
  223. var ov = this.data[j];
  224. if(!ov.stotal || ov.stotal<1 || this._tredat[j])return;
  225. var das = this._loaddata(1, true);
  226. das.pvalue = ov.id;
  227. das.level = ov.level+1;
  228. this.bool = true;
  229. this._tredat[j]=true;
  230. o1.className='icon-spinner';
  231. $.ajax({
  232. url:can.url,type:can.method,data:das,dataType:'json',
  233. success:function(ret){
  234. o1.className='icon-folder-open-alt';
  235. me.showtreeda(ret.rows,das.pvalue);
  236. me.bool = false;
  237. },
  238. error: function(e){
  239. o1.className='icon-folder-close-alt';
  240. js.msg('msg',e.responseText);
  241. me.bool = false;
  242. }
  243. });
  244. };
  245. this.showtreeda=function(da,pj){
  246. if(!da)return;var len = da.length,o1,i;if(len==0)return;
  247. for(i=len-1;i>=0;i--){
  248. this.insert(da[i],false,pj);
  249. if(can.celleditor){
  250. o1 = obj.find('tr[dataid="'+da[i].id+'"]').find('td[fields]');
  251. o1[can.celledittype](function(){
  252. me._celleditla(this);
  253. });
  254. }
  255. }
  256. this.trobj = obj.find('tr[dataid]');
  257. this.trobj.unbind();
  258. this.trobj.click(function(event){
  259. me._itemclick(this, event);
  260. });
  261. this.trobj.dblclick(function(event){
  262. me._itemdblclick(this, event);
  263. });
  264. obj.find("a[temp='caozuomenu_"+rand+"']").unbind().click(function(){
  265. me._caozuochengss(this);
  266. return false;
  267. });
  268. };
  269. this._celldblclick = function(o1,e){
  270. var o = $(o1);
  271. var cell = parseFloat(o.attr('cell')), row = parseFloat(o.attr('row'));
  272. var farr = can.columns[cell],
  273. d = this.data[row];
  274. can.celldblclick(farr, d, o1, cell, row, e);
  275. };
  276. this._scrollTopla= function(o){
  277. if(can.hideHeaders)return;
  278. var top = o.scrollTop();
  279. if(top<40){
  280. var o1 = $('#headerla_'+rand+'');
  281. o1.hide();
  282. o1.html('');
  283. }else{
  284. var off = obj.offset();
  285. var a = can.columns,s='',i,len=a.length,w1,o2;
  286. if(!get('headerla_'+rand+'')){
  287. s = '<div style="position:fixed;left:'+(off.left)+'px;top:'+(off.top)+'px;width:100%;height:34px;overflow:hidden; background:rgba(255,255,255,0.5);border-bottom:1px #dddddd solid;z-index:2" id="headerla_'+rand+'"></div>';
  288. obj.append(s);
  289. }
  290. var o1 = $('#headerla_'+rand+'');
  291. o1.show();
  292. o1.css({left:''+(off.left)+'px',top:''+(off.top)+'px',width:''+($('#tablemain_'+rand+'').width())+'px'});
  293. if(o1.html()==''){
  294. s = '';
  295. s+='<table class="table table-striped table-bordered" style="margin:0px" width="100%">';
  296. s+='<tr style="background:white"><th width="40"></th>';
  297. if(can.checked)s+='<th width="40"></th>';
  298. for(i=0;i<len;i++){
  299. o2 = obj.find("div[lfields='"+a[i].dataIndex+"']");
  300. w1 = o2[0].clientWidth-1;
  301. w1 = 'width:'+w1+'px';
  302. s+='<th><div style="'+w1+'" align="'+a[i].align+'">'+o2.html()+'</div></th>';
  303. }
  304. s+='</tr>';
  305. s+='</table>';
  306. o1.html(s);
  307. }
  308. }
  309. };
  310. this._celleditla = function(o1){
  311. if(this.bool)return;
  312. var o = $(o1),
  313. fields = o.attr('fields'),
  314. row = parseFloat(o.attr('row')),
  315. cell = parseFloat(o.attr('cell'));
  316. var a = this.data[row],i,len,sel,d,
  317. b = can.columns[cell],
  318. l = o.offset(),
  319. w = o1.clientWidth,
  320. h = o1.clientHeight,
  321. at = '',
  322. v = a[fields];
  323. $('#edittable_'+rand+'').remove();
  324. if(b.editorbefore && !b.editorbefore(a))return;
  325. if(!b.textmsg)b.textmsg='';
  326. var s = '<div id="edittable_'+rand+'" style="position:absolute;z-index:2;left:'+(l.left)+'px;top:'+(l.top+h)+'px">';
  327. s+='<div style="border:1px #cccccc solid;background:white;padding:10px;box-shadow:0px 0px 10px rgba(0,0,0,0.3); border-radius:10px">';
  328. s+=' <div>&nbsp;<b>'+b.text+'</b>:&nbsp;<span id="msgteita_'+rand+'">'+b.textmsg+'</span></div>';
  329. s+=' <div class="blank10"></div>';
  330. var wss = 200;
  331. if(b.editorwidth)wss=b.editorwidth;
  332. var flx = b.type,attr=b.editorattr;
  333. if(!flx)flx='text';
  334. if(!attr)attr='';
  335. if(b.repEmpty)attr+=' onblur="this.value=strreplace(this.value)" ';
  336. if(flx=='checkbox'){
  337. if(v=='1')at='checked';
  338. s+='<div><label><input type="checkbox" id="inputedit_'+rand+'" '+at+' value="1"> '+b.text+'</label></div>';
  339. }else if(flx=='textarea'){
  340. s+='<div><textarea type="text" style="width:'+wss+'px;height:100px" '+attr+' id="inputedit_'+rand+'" class="input">'+v+'</textarea></div>';
  341. }else if(flx=='select' && b.store){
  342. d=b.store;
  343. s+='<div><select style="width:'+wss+'px" id="inputedit_'+rand+'" '+attr+' class="input">';
  344. len=b.store.length;for(i=0;i<len;i++){
  345. sel='';if(d[i][0]==v||d[i][1]==v)sel='selected';
  346. s+='<option value="'+d[i][0]+'" '+sel+'>'+d[i][1]+'</option>';
  347. }
  348. s+='</select></div>';
  349. }else if(flx=='date'){
  350. s+='<div><input type="text" style="width:'+wss+'px" id="inputedit_'+rand+'" '+attr+' class="input datesss" onclick="js.datechange(this)" readonly value="'+v+'"></div>';
  351. }else{
  352. s+='<div><input type="'+flx+'" style="width:'+wss+'px" id="inputedit_'+rand+'" '+attr+' class="input" value="'+v+'"></div>';
  353. }
  354. s+=' <div class="blank10"></div>';
  355. if(!can.cellautosave)s+=' <div><a id="inputeditsave_'+rand+'" href="javascript:"><i class="icon-ok"></i> 确定</a >&nbsp; &nbsp; <a href="javascript:" class="hui" onclick="$(\'#edittable_'+rand+'\').remove()"><i class="icon-remove"></i> 取消</a></div>';
  356. s+='</div>';
  357. s+='<div align="center"><div class="arrow-down"></div></div>';
  358. s+='</div>';
  359. $('body').append(s);
  360. var o2 = get('edittable_'+rand+'');
  361. var jg = (w-o2.clientWidth)*0.5;
  362. $(o2).css({left:''+(l.left+jg)+'px',top:''+(l.top-o2.clientHeight)+'px'});
  363. var o3 = get('inputedit_'+rand+'');
  364. o3.focus();
  365. $(o3).keyup(function(e){
  366. if(e.keyCode==13)this.blur();
  367. });
  368. var arr = {oldvalue:v,fields:fields,type:b.type,id:a.id,obj:o,row:row}
  369. if(can.cellautosave){
  370. $(o3).blur(function(){
  371. me._editforcuschen(this, arr, b);
  372. });
  373. }else{
  374. $('#inputeditsave_'+rand+'').click(function(){
  375. me._editforcuschen(this, arr, b);
  376. });
  377. }
  378. };
  379. this.signature= function(da, url){
  380. var time = parseInt(js.now('time')*0.001);
  381. var siaa = ''+NOWURL+''+url+''+da.tablename+''+time+'_'+adminid+'';
  382. var sign = md5(siaa);
  383. da.sys_signature= sign;
  384. da.sys_timeature= time;
  385. return da;
  386. };
  387. this._editforcuschen = function(o1, a, farr){
  388. var o1= get('inputedit_'+rand+'');
  389. var v = o1.value,ov = a.oldvalue;
  390. if(a.type=='checkbox')if(!o1.checked)v='0';
  391. var selv= v+'';
  392. if(a.type=='select')selv=o1.options[o1.selectedIndex].text;
  393. if(v==ov || selv==ov){
  394. $('#edittable_'+rand+'').remove();
  395. return;
  396. }
  397. var vid = 'msgteita_'+rand+'';
  398. js.setmsg('处理中...','#ff6600',vid);
  399. o1.disabled = true;
  400. this.bool = true;
  401. var data = {tablename:can.tablename,id:a.id,fieldname:a.fields,value:v,fieldsafteraction:can.fieldsafteraction};
  402. $.ajax({
  403. data:this.signature(data, can.cellurl),type:'post',url:can.cellurl,
  404. success:function(bstr){
  405. me.bool = false;
  406. $('#edittable_'+rand+'').remove();
  407. if(bstr!='success'){
  408. js.msg('msg', bstr);
  409. return;
  410. }
  411. js.setmsg('处理完成','green',vid);
  412. var ohtml = a.obj.html();
  413. ohtml = ohtml.replace(ov, v);
  414. if(a.type=='checkbox')ohtml='<img height="20" width="20" src="images/checkbox'+v+'.png">';
  415. if(a.type=='select')ohtml=selv;
  416. a.obj.html(ohtml);
  417. me.data[a.row][a.fields] = v;
  418. if(farr.editorafter)farr.editorafter();//保存后处理
  419. },
  420. error:function(e){
  421. js.msg('msg',e.responseText);
  422. me.bool = false;
  423. }
  424. });
  425. };
  426. this._itemclick= function(o1, e){
  427. var o = $(o1);
  428. if(can.selectColor){
  429. this.trobj.css('background','');
  430. o.css('background', can.selectColor);
  431. }else{
  432. this.trobj.removeClass(can.selectcls);
  433. o.addClass(can.selectcls);
  434. }
  435. var oi = parseFloat(o.attr('oi'));
  436. var a = this.data[oi];
  437. this.changedata = a;
  438. this.changeid = a.id;
  439. can.itemclick(a, oi, e);
  440. };
  441. this._itemdblclick= function(o1, e){
  442. var o = $(o1),oi,lxs,o1,cell,farr,o2;
  443. oi = parseFloat(o.attr('oi'));
  444. o2 = e.target;
  445. lxs = o2.nodeName.toLowerCase();
  446. if(lxs!='td'){
  447. o2 = e.target.parentNode;
  448. lxs = o2.nodeName.toLowerCase();
  449. }
  450. if(lxs=='td'){
  451. o1 = $(o2);
  452. cell= parseFloat(o1.attr('cell'));
  453. farr= can.columns[cell];
  454. if(farr.editor)return;//单元格是编辑就退出
  455. }
  456. can.itemdblclick(this.changedata, oi, e);
  457. };
  458. this._loaddata = function(p, donbo){
  459. if(this.bool)return;
  460. this.changeid= 0;
  461. this.loadci++;
  462. this.changedata = {};
  463. var url = can.url;
  464. var das = {tablename_abc:can.tablename,defaultorder:can.defaultorder,keywhere:can.keywhere,where:this.where,sort:can.sort,dir:can.dir,loadci:this.loadci,storebeforeaction:can.storebeforeaction,storeafteraction:can.storeafteraction,modenum:can.modenum},
  465. s='',of=obj.offset();
  466. das.keywhere=jm.encrypt(das.keywhere.replace(/\'/g, '[F]'));
  467. das.where = jm.encrypt(das.where.replace(/\'/g, '[F]'));
  468. das.start = can.pageSize*(p-1);
  469. das.page = p;
  470. das.limit = can.pageSize;
  471. if(!can.fanye)das.limit = can.limit;
  472. das = js.apply(das, can.params);
  473. das = js.apply(das, this.otherparams);
  474. if(donbo)return das;
  475. this.page = p;
  476. var o1 = $('#tablebody_'+rand+'');
  477. var h= o1.height()-2,w= o1.width()-2;
  478. s='<div id="modeshow_'+rand+'" style="filter:Alpha(opacity=20);opacity:0.2;height:'+h+'px;width:'+w+'px;overflow:hidden;z-index:3;position:absolute;left:1px;line-height:'+h+'px;top:1px;background:#000000;color:white" align="center"><img src="images/mloading.gif" align="absmiddle">&nbsp;加载中...</div>';
  479. o1.append(s);
  480. can.beforeload();
  481. this.bool = true;
  482. $.ajax({
  483. url:url,type:can.method,data:das,
  484. success:function(da){
  485. if(!get('tablebody_'+rand+''))return;
  486. var a = js.decode(da);
  487. if(!a.rows){
  488. if(a.msg)da=a.msg;
  489. js.msg('msg',da);
  490. }else{
  491. me._loaddataback(a);
  492. }
  493. $('#modeshow_'+rand+'').remove();
  494. me.bool = false;
  495. },
  496. error: function(e){
  497. $('#modeshow_'+rand+'').remove();
  498. js.msg('msg',e.responseText);
  499. me.bool = false;
  500. }
  501. });
  502. };
  503. this.exceldown = function(bt, lxs,ocsn){
  504. if(this.bool)return;
  505. var excelfields='',excelheader='',i,a=can.columns;
  506. var np = (lxs==2) ? this.page : 1;
  507. var das = this._loaddata(np, true);
  508. das.limit = 10000;
  509. das.execldown = 'true';
  510. if(!bt)bt=nowtabs.name;
  511. das.exceltitle = bt;
  512. for(i=0;i<a.length;i++){
  513. if(!a[i].notexcel){
  514. excelfields+=','+a[i].dataIndex+'';
  515. excelheader+=','+a[i].text+'';
  516. }
  517. }
  518. das.excelfields = excelfields.substr(1);
  519. das.excelheader = excelheader.substr(1);
  520. if(lxs==1)return das;
  521. if(lxs==2){
  522. das.limit = can.pageSize;
  523. }
  524. if(ocsn)for(i in ocsn)das[i]=ocsn[i];
  525. das.exceltitle = jm.encrypt(das.exceltitle);
  526. das.excelfields = jm.encrypt(das.excelfields);
  527. das.excelheader = jm.encrypt(das.excelheader);
  528. this.bool = true;
  529. js.msg('wait', '导出处理中...');
  530. $.ajax({
  531. url:can.url,type:'POST',data:das,dataType:'json',
  532. success:function(a1){
  533. var lex = (nwjsgui)?'_self':'_blank';
  534. if(!a1.downCount)a1.downCount = a1.totalCount;
  535. js.msg('success', '处理成功,共有记录'+a1.totalCount+'条/导出'+a1.downCount+'条,点我直接<a class="a" href="'+a1.url+'" target="'+lex+'">[下载]</a>', 60);
  536. me.bool=false;
  537. },
  538. error:function(e){
  539. js.msg('msg','err:'+e.responseText);
  540. me.bool = false;
  541. }
  542. });
  543. };
  544. this.exceldownnow = function(bt){
  545. this.exceldown(bt,2);
  546. };
  547. this.setparams = function(cans, relo){
  548. if(!cans)cans={};
  549. this.otherparams = js.apply(this.otherparams,cans);
  550. this.page = 1;
  551. if(relo)this.reload();
  552. };
  553. this._loaddataback=function(a){
  554. this._tredat={};
  555. this.json = a;
  556. this.data = a.rows;
  557. this.count = a.totalCount;
  558. can.loadbefore(a, this);
  559. this._create();
  560. this._initfany();
  561. can.load(a, this, this.loadci);
  562. };
  563. this.loadData = function(d){
  564. this._loaddataback(d);
  565. };
  566. this._clickorder = function(o1){
  567. if(this.loadci==0)return;
  568. var o,oi,a,dir,sort;
  569. o = $(o1);
  570. oi = parseFloat(o.attr('tempsort'));
  571. a = can.columns[oi];
  572. sort = a.dataIndex;
  573. dir = o.attr('lx');
  574. this.order(sort, dir);
  575. };
  576. this.remove = function(ids){
  577. var sid = ids.split(','),id,i;
  578. for(i=0;i<sid.length;i++){
  579. id = sid[i];
  580. obj.find("tr[dataid='"+id+"']").remove();
  581. if(id == this.changeid){
  582. this.changeid= 0;
  583. this.changedata = {};
  584. }
  585. }
  586. };
  587. this.hiderows=function(ids){
  588. var sid = ids.split(','),id,i;
  589. for(i=0;i<sid.length;i++){
  590. id = sid[i];
  591. obj.find("tr[dataid='"+id+"']").hide();
  592. if(id == this.changeid){
  593. this.changeid= 0;
  594. this.changedata = {};
  595. }
  596. }
  597. };
  598. this.showrows=function(id){
  599. var sid = ids.split(','),id,i;
  600. for(i=0;i<sid.length;i++){
  601. id = sid[i];
  602. obj.find("tr[dataid='"+id+"']").show();
  603. }
  604. };
  605. this.showallrows=function(){
  606. obj.find("tr[dataid']").show();
  607. }
  608. this.order = function(a, b){
  609. if(!a)return;
  610. if(!b)b='asc';
  611. can.sort = a;
  612. can.dir = b;
  613. this.reload();
  614. };
  615. this.highorder = function(str){
  616. if(!str)str='';
  617. this.highorderstr = str;
  618. this.reload();
  619. };
  620. this.search = function(w, jg, slx){
  621. if(!w)w='';
  622. if(jg)w = this.where+' '+w;
  623. var s = can.outsearch(this);
  624. if(s)w+=' '+s+'';
  625. this.where = w;
  626. this._loaddata(1);
  627. return w;
  628. };
  629. this.reload = function(){
  630. this._loaddata(this.page);
  631. };
  632. this.del = function(csa){
  633. if(this.bool)return;
  634. var a = js.apply({msg:'确定要删除选中的{s}条记录吗?',success:function(){},checked:false,check:function(){}},csa);
  635. var s = ''+this.changeid+'',xz;
  636. if(a.checked)s=this.getchecked();
  637. if(s=='0'||s==''){
  638. js.msg('msg','没有选中记录');
  639. return;
  640. }
  641. xz = s.split(',').length;
  642. a.msg = a.msg.replace('{s}', ''+xz+'');
  643. js.confirm(a.msg,function(lx){
  644. a.check(lx);
  645. if(lx=='yes'){
  646. me._delok(s, a);
  647. }
  648. });
  649. };
  650. this.getchecked = function(){
  651. return js.getchecked('tablecheck_'+rand+'');
  652. };
  653. this.getcheckobj = function(){
  654. return $("input[name='tablecheck_"+rand+"']");
  655. };
  656. this.getcheckdata= function(){
  657. var o = this.getcheckobj(),len=o.length,i,o1,d=[];
  658. for(i=0;i<len;i++){
  659. o1=o[i];
  660. if(o1.checked){
  661. oi=parseFloat($(o1).attr('oi'));
  662. d.push(this.data[oi]);
  663. }
  664. }
  665. return d;
  666. };
  667. this._delok = function(sid, ds){
  668. js.msg('wait','删除'+sid+'中...');
  669. this.bool=true;
  670. var url = ds.url;if(!url)url=js.getajaxurl('publicdel','index');
  671. var ss = js.apply({modenum:can.modenum,table:can.tablename,id:sid},ds.params);
  672. $.ajax({
  673. url:url,type:'POST',data:ss,dataType:'json',
  674. success:function(a1){
  675. me.bool=false;
  676. if(a1.code==200){
  677. js.msg('success','删除成功');
  678. ds.success();
  679. me.reload();
  680. }else{
  681. js.msg('msg',a1.msg);
  682. }
  683. },
  684. error:function(e){
  685. js.msg('msg','err:'+e.responseText);
  686. me.bool = false;
  687. }
  688. });
  689. };
  690. this.settishi=function(nr){
  691. $('#bottomtishi_'+rand+'').html(nr);
  692. };
  693. this._fanye = function(){
  694. var s = '';
  695. s='<div style="margin-top:10px" class="btn-toolbar" role="toolbar">'+
  696. '<div class="btn-group">'+
  697. '<button id="shouye_'+rand+'" type="button" data-toggle="tooltip" data-placement="top" title="首页" class="btn btn-default">&laquo;</button>'+
  698. '<button id="shang_'+rand+'" data-toggle="tooltip" data-placement="top" title="上一页" type="button" disabled class="btn btn-default">&lt;</button>'+
  699. '<button id="nowye_'+rand+'" type="button" disabled class="btn btn-default"> 第<span id="pages_'+rand+'">1</span>页/共<span id="maxpage_'+rand+'">0</span>页 <span class="caret"></span></button>'+
  700. '<button id="next_'+rand+'" type="button" data-toggle="tooltip" data-placement="top" title="下一页" disabled class="btn btn-default">&gt;</button>'+
  701. '<button id="lastye_'+rand+'" type="button" data-toggle="tooltip" data-placement="top" title="尾页" disabled class="btn btn-default">&raquo;</button>'+
  702. '</div> '+
  703. '<div class="btn-group">'+
  704. ' <button id="refresh_'+rand+'" type="button" data-toggle="tooltip" data-placement="top" title="刷新" class="btn btn-default"><i class="icon-refresh"></i></button>'+
  705. '</div> '+
  706. '<div class="btn-group" id="bottomtishi_'+rand+'"></div>'+
  707. '<div class="btn-group" style="float:right; padding-top:3px">'+
  708. '<span>共记录<span id="zjilu_'+rand+'">0</span>条</span> &nbsp;'+
  709. '每页<input maxlength="3" onblur="js.number(this)" onfocus="js.focusval=this.value" id="pagesize_'+rand+'" type="number" value="'+can.pageSize+'" style="width:40px;text-align:center;height:24px;border:1px #dddddd solid;margin:0px 2px;font-size:12px">条&nbsp;'+
  710. '</div>'+
  711. '</div>';
  712. $('#tablefanye_'+rand+'').html(s);
  713. $('#shouye_'+rand+'').click(function(){me.firstPage();});
  714. $('#shang_'+rand+'').click(function(){me.backPage();});
  715. $('#next_'+rand+'').click(function(){me.nextPage();});
  716. $('#lastye_'+rand+'').click(function(){me.lastPage();});
  717. $('#refresh_'+rand+'').click(function(){me.reload();});
  718. $('#nowye_'+rand+'').rockmenu({
  719. top:33,width:150,
  720. data:[{name:'第1页',p:1}],
  721. beforeshow:function(o){
  722. o.setData(me._getpaged());
  723. o.setValue('第'+me.page+'页');
  724. },
  725. itemsclick:function(a){
  726. me.gotoPage(a.p);
  727. }
  728. });
  729. var o1 = $('#pagesize_'+rand+'');
  730. o1.blur(function(){me.setpageSize(this.value);});
  731. o1.keyup(function(e){if(e.keyCode==13)this.blur()});
  732. };
  733. this._getpaged = function(){
  734. var a = [],i=1,j=1,b,bg;
  735. i = this.page-5;
  736. j = this.page+5;
  737. if(i<1)i=1;
  738. if(j>this.maxPage)j=this.maxPage;
  739. for(b=i;b<=j;b++){
  740. a.push({name:'第'+b+'页',p:b});
  741. }
  742. return a;
  743. };
  744. this._initfany = function(){
  745. if(!can.fanye)return;
  746. $('#zjilu_'+rand+'').html(''+this.count+'');
  747. $('#pages_'+rand+'').html(''+this.page+'');
  748. this.maxPage = Math.ceil(this.count/can.pageSize);
  749. $('#maxpage_'+rand+'').html(''+this.maxPage+'');
  750. var bo1=false,bo2=false;
  751. if(this.maxPage <=1 || this.page<=1){
  752. bo1 = true;
  753. }
  754. get('shouye_'+rand+'').disabled=bo1;
  755. get('shang_'+rand+'').disabled=bo1;
  756. if(this.maxPage <=1){
  757. get('nowye_'+rand+'').disabled=true;
  758. }else{
  759. get('nowye_'+rand+'').disabled=false;
  760. }
  761. if(this.maxPage <=1 || this.page>=this.maxPage){
  762. bo2 = true;
  763. }
  764. get('next_'+rand+'').disabled=bo2;
  765. get('lastye_'+rand+'').disabled=bo2;
  766. };
  767. this._next = function(oi){
  768. var p = this.page+oi;
  769. if(p<=0)p=1;
  770. if(p>=this.maxPage)p=this.maxPage;
  771. this._loaddata(p);
  772. };
  773. this.firstPage = function(){
  774. this._loaddata(1);
  775. };
  776. this.backPage = function(){
  777. this._next(-1);
  778. };
  779. this.nextPage = function(){
  780. this._next(1);
  781. };
  782. this.gotoPage = function(p){
  783. this._loaddata(p);
  784. };
  785. this.lastPage = function(){
  786. this._loaddata(this.maxPage);
  787. };
  788. this.setpageSize = function(p){
  789. p = parseFloat(p);
  790. if(p<=0)p=can.pageSize;
  791. $('#pagesize_'+rand+'').val(''+p+'');
  792. if(can.pageSize == p)return;
  793. can.pageSize = p;
  794. this.page = 1;
  795. this.reload();
  796. };
  797. this._caozuochengs=function(a,oj){
  798. a.renderer=function(v,d,oi){
  799. var s='<a oi="'+oi+'" oj="'+oj+'" style="TEXT-DECORATION:none" temp="caozuomenu_'+rand+'">操作<i class="icon-angle-down"></i></a>';
  800. if(!d.id)s='&nbsp;';
  801. return s;
  802. };
  803. a.notexcel=true;
  804. return a;
  805. };
  806. this._caozuochengss=function(o1){
  807. var oi,d,num,mid,modename,o2;
  808. o2= $(o1);
  809. oi= parseFloat(o2.attr('oi'));
  810. oj= parseFloat(o2.attr('oj'));
  811. d = this.getData(oi);
  812. num=can.modenum;if(num=='')num=this.tablename;
  813. mid = d.id;if(d.modenum)num=d.modenum;
  814. modename=can.modename;if(d.modename)modename=d.modename;
  815. new optmenuclass(o1,num,mid,this,modename,oi,can.columns[oj]);
  816. };
  817. this.geturlparams=function(bt,ocans){
  818. var cshu = this.exceldown(bt, 1),i;
  819. cshu.tablename_abc = jm.uncrypt(cshu.tablename_abc);
  820. cshu = js.apply(cshu,ocans);
  821. return [can.url, cshu];
  822. }
  823. };
  824. /**
  825. 表格中常用方法
  826. 1、reload(); //刷新数据源
  827. 2、getchecked();//获取复选框对应记录ID聚
  828. 3、getcheckdata();//获取复选框选中的数据数组[]
  829. 4、insert({name:''});//表格中插入一行
  830. 5、setparams({key:''},true);//设置参数并搜索
  831. 6、geturlparams();获取当前Url地址参数,订阅时用到的
  832. */
  833. if(typeof(bootsSelectColor)!='string')bootsSelectColor= '';
  834. $.fn.bootstable = function(options){
  835. var defaultVal = {
  836. columns:[], //表头
  837. selectColor:bootsSelectColor, //选中时行颜色
  838. pageSize:15, //默认分页数
  839. limit:0, //没有分页时展示条数
  840. bodyStyle:'',
  841. height:0, //高度
  842. url:'', //请求地址
  843. celleditor:false, //是否可编辑单元格
  844. cellautosave:true, //编辑单元格是否自动保存
  845. celledittype:'dblclick', //编辑单元格用双击
  846. cellurl:'', //编辑单元格保存地址
  847. fieldsafteraction:'', //编辑单元格时保存后触发
  848. data:[], //初始数据
  849. autoLoad:true, //是否初始化后就加载
  850. tree:false, //是否树形显示
  851. itemdblclick:function(){}, //双击行调用
  852. searchwidth:500, //没用
  853. defaultorder:'', //默认排序
  854. where:'', //条件
  855. hideHeaders:false, //是否隐藏头部表头
  856. modename:'', //对应模块名称
  857. modenum:'', //对应模块编号
  858. statuschange:true, //当行的status=0时自动变成灰色
  859. checked:false, //是否多选
  860. fanye:false, //是否可翻页
  861. sort:'', //排序字段
  862. dir:'', //排序类型desc和asc
  863. storeafteraction:'', //数据源请求后先处理函数
  864. storebeforeaction:'',//数据源请求时先处理函数,可返回条件字段等
  865. loadtree:false,
  866. modedir:'', //当前文件路径,一般都是写:'{mode}:{dir}'
  867. keywhere:'', //条件
  868. params:{}, //其他参数
  869. tablename:'', //请求数据表格名,如有指定modenum,会加载对应模块上设置的表
  870. selectcls:'success', //选中样式
  871. itemclick:function(da, index, e){}, //单击行触发
  872. beforeload:function(){}, //数据加载前触发
  873. load:function(){}, //数据加载完成后触发
  874. loadbefore:function(){}, //数据加载完成后但还没有渲染出来时触发
  875. outsearch:function(){return ''}, //外搜索条件
  876. searchview:'', //没用
  877. method:'POST', //post请求
  878. rendertr:function(){return ''}, //少用
  879. rowsbody:function(){return ''}, //少用
  880. celldblclick:false //没用
  881. };
  882. if(typeof(bootstableobj)=='undefined')bootstableobj={};
  883. var can = $.extend({}, defaultVal, options);
  884. var clsa = new bootstable($(this), can);
  885. clsa.init();
  886. if(can.modenum!='')bootstableobj[can.modenum]=clsa;
  887. return clsa;
  888. };
  889. })(jQuery);