mytable.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. (function($) {
  2. 'use strict';
  3. var con;
  4. var options;
  5. var curDatas;
  6. var element;
  7. var obj;
  8. /**
  9. * Datatable class
  10. *
  11. * @param object element DOM element or jquery element
  12. * @param object options Datatable options
  13. */
  14. var mytable = function(element, options, flag) {
  15. // default options
  16. var DEFAULTS = {
  17. isShoWPager:true,
  18. pager:{
  19. page_size:10
  20. }
  21. };
  22. this.options = $.extend({}, DEFAULTS, options);
  23. this.element = element;
  24. // this.options = options;
  25. this.pager = options.pager;
  26. this.con = $(element);
  27. this.obj = this;
  28. $(element).html('');
  29. if(flag) return;
  30. $(element).append('<div class=""><div id="my_table" data-checkable="true" data-sortable="true"></div></div>'
  31. + '<div id="kkpager" class="" style="text-align:center"></div>');
  32. this.getRemoteData(element,this.options,this);
  33. return this;
  34. };
  35. // Get options
  36. mytable.prototype = {
  37. getRemoteData:function(element,options,obj){
  38. if(!element) element = this.element;
  39. if(!options) options = this.options;
  40. var url = options.url;
  41. var p_cur = 1;
  42. var pager = options.pager;
  43. this.getServerData(p_cur, options, element, obj);
  44. },
  45. getRemoteData1:function(p_cur){
  46. this.getServerData(p_cur, this.options, this.element, this.obj);
  47. },
  48. getServerData:function(p_cur, options, element, obj){
  49. var url = options.url;
  50. var pager = options.pager;
  51. var page_size = pager.page_size;
  52. var param = options.param;
  53. // var obj = this.obj;
  54. post_common_service(url+"/"+p_cur+"/"+page_size, param, function(data) {
  55. console.log(data);
  56. if(!data){
  57. data = {list:[]};
  58. // return;
  59. }
  60. // 这边把请求过来的数据缓存到table选择器中
  61. $(element).data("data_cache",data.list);
  62. element.tt_data=data.list;
  63. options.tableData=data.list;
  64. obj.setTable(data.list,element, options,p_cur);
  65. if(obj.options.pager){
  66. options.pager = {
  67. page_size:10,
  68. p_cur : data.pageNum, //页号
  69. p_pages:data.pages, //总页码
  70. p_totalRecords:data.total
  71. // 'cb':'getRemoteData
  72. }
  73. obj.setPager();
  74. }
  75. if(data.list.length<=0){
  76. $("#kkpager").css("display","none");
  77. }else{
  78. $("#kkpager").css("display","block");
  79. }
  80. }, function(error) {
  81. alert(error);
  82. });
  83. },
  84. setTable:function(datas, element, options,p_cur) {
  85. var cols = options.cols;
  86. var newCols = []
  87. for(var i in cols) {
  88. if(!cols[i].hide){
  89. newCols.push(cols[i]);
  90. }
  91. }
  92. cols = newCols;
  93. var tableData = datas;
  94. // var pager = options.pager;
  95. clearTable(cols);
  96. var rowData = formatTableData(tableData, cols, p_cur);
  97. // 使用data参数更新数据:
  98. $('#my_table').datatable('load',{
  99. cols: cols,
  100. rows:rowData
  101. }
  102. );
  103. function formatTableData(data,cols,p_cur){
  104. var rows = [];
  105. for(var i=0;i<data.length;i++){
  106. data[i].num=(p_cur-1)*10+i+1;
  107. rows.push(genRow(data[i],cols));
  108. }
  109. return rows;
  110. }
  111. function genRow(obj,cols){
  112. var row = {checked: false, data:null};
  113. var dArr=[];
  114. for(var i=0;i<cols.length;i++){
  115. if(cols[i].func!=null){
  116. dArr.push(cols[i].func(obj[cols[i].field]));
  117. }else if(cols[i].type=="imagedd"){
  118. var pics = obj[cols[i].field];
  119. var picStr='';
  120. if(pics){
  121. var picArr = pics.split(',');
  122. for(var j in picArr){
  123. var pic = '<a class="lightbox-toggle" href="'+picArr[j]+'" style="width:60px;height:50px;">'
  124. + '<img class="pic-class img-thumbnail" style="width:60px;height:50px;" src="'+picArr[j]+'" alt="">'
  125. + '</a>';
  126. picStr+=pic;
  127. }
  128. }
  129. dArr.push(picStr);
  130. }else if(cols[i].oper!=null) {
  131. var oper = cols[i].oper;
  132. var operStr="";
  133. for(var j=0;j<oper.length;j++){
  134. operStr+='&nbsp;<a href="#" onclick="'+oper[j].func+'('+obj[cols[i].field]+','+obj[cols[i].field_other]+')"><i class="icon '+oper[j].icon_class+'"></i>&nbsp;'+oper[j].text+' </a>&nbsp;';
  135. }
  136. dArr.push(operStr);
  137. }else{
  138. if(cols[i].type == "date"){
  139. if(cols[i].custom){
  140. dArr.push(timeStamp2String(obj[cols[i].field],cols[i].date_type) + cols[i].custom);
  141. }else{
  142. dArr.push(timeStamp2String(obj[cols[i].field],cols[i].date_type));
  143. }
  144. }else if(obj[cols[i].field]){
  145. if(cols[i].custom){
  146. dArr.push(obj[cols[i].field] + cols[i].custom);
  147. }else{
  148. dArr.push(obj[cols[i].field]);
  149. }
  150. }else{
  151. dArr.push('0');
  152. }
  153. }
  154. }
  155. row.data=dArr;
  156. return row;
  157. }
  158. function clearTable(cols){
  159. $('#my_table').datatable( {
  160. checkable:false,
  161. sortable:false,
  162. data: {
  163. cols: cols,
  164. rows:[]
  165. }
  166. });
  167. }
  168. },
  169. setPager:function(data) {
  170. var pager = this.options.pager;
  171. var p_cur = pager.p_cur;
  172. var p_pages = pager.p_pages;
  173. var p_totalRecords = pager.p_totalRecords;
  174. var obj=this;
  175. kkpager.generPageHtml({
  176. pno : p_cur,
  177. total : p_pages,
  178. totalRecords : p_totalRecords,
  179. mode : 'click',
  180. click : function(n){
  181. obj.options.pager.p_cur = n;
  182. this.selectPage(n);
  183. obj.getRemoteData1(n);//调用获取数据方法
  184. return false;
  185. }
  186. },true);
  187. }
  188. };
  189. $.fn.mytable = function(options) {
  190. if (typeof options == 'string') {
  191. switch (options) {
  192. case 'getTableData':
  193. return this[0].tt_data;
  194. case 'empty':
  195. return new mytable(this,options,true);
  196. }
  197. } else{
  198. return this.each(function() {
  199. // var $this = $(this);
  200. new mytable(this,options);
  201. // $(this).attr('tableData',mytable.tableData);
  202. });
  203. }
  204. };
  205. $.fn.mytable.Constructor = mytable;
  206. }(jQuery));