mytable.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  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. checkable: false,
  18. sortable: false,
  19. isShoWPager: true,
  20. pager: {
  21. page_size: 10
  22. }
  23. };
  24. this.options = $.extend({}, DEFAULTS, options);
  25. this.element = element;
  26. // this.options = options;
  27. this.pager = options.pager;
  28. this.con = $(element);
  29. this.obj = this;
  30. $(element).html('');
  31. if (flag) return;
  32. $(element).append('<div class=""><div id="my_table" data-checkable="true" data-sortable="true"></div></div>'
  33. + '<div id="kkpager" class="" style="text-align:center"></div>');
  34. this.getRemoteData(element, this.options, this);
  35. return this;
  36. };
  37. // Get options
  38. mytable.prototype = {
  39. getRemoteData: function (element, options, obj) {
  40. if (!element) element = this.element;
  41. if (!options) options = this.options;
  42. var url = options.url;
  43. var p_cur = 1;
  44. var pager = options.pager;
  45. this.getServerData(p_cur, options, element, obj);
  46. },
  47. getRemoteData1: function (p_cur) {
  48. this.getServerData(p_cur, this.options, this.element, this.obj);
  49. },
  50. getServerData: function (p_cur, options, element, obj) {
  51. var url = options.url;
  52. var pager = options.pager;
  53. var page_size = pager.page_size;
  54. var param = options.param;
  55. // var obj = this.obj;
  56. post_common_service(url + "/" + p_cur + "/" + page_size, param, function (data) {
  57. console.log(data);
  58. if (!data) {
  59. data = { list: [] };
  60. // return;
  61. }
  62. // 这边把请求过来的数据缓存到table选择器中
  63. $(element).data("data_cache", data.list);
  64. element.tt_data = data.list;
  65. options.tableData = data.list;
  66. obj.setTable(data.list, element, options, p_cur);
  67. if (obj.options.pager) {
  68. options.pager = {
  69. page_size: 10,
  70. p_cur: data.pageNum, //页号
  71. p_pages: data.pages, //总页码
  72. p_totalRecords: data.total
  73. // 'cb':'getRemoteData
  74. }
  75. obj.setPager();
  76. }
  77. if (data.list.length <= 0) {
  78. $("#kkpager").css("display", "none");
  79. } else {
  80. $("#kkpager").css("display", "block");
  81. }
  82. }, function (error) {
  83. alert(error);
  84. });
  85. },
  86. setTable: function (datas, element, options, p_cur) {
  87. var cols = options.cols;
  88. var newCols = []
  89. for (var i in cols) {
  90. if (!cols[i].hide) {
  91. newCols.push(cols[i]);
  92. }
  93. }
  94. cols = newCols;
  95. var tableData = datas;
  96. // var pager = options.pager;
  97. clearTable(cols, options, element);
  98. var rowData = formatTableData(tableData, cols, p_cur);
  99. // 使用data参数更新数据:
  100. $('#my_table').datatable('load', {
  101. cols: cols,
  102. rows: rowData
  103. }
  104. );
  105. // $('#my_table').datatable({checkable: true});
  106. $('a.lightbox-toggle').lightbox();//图片轮播
  107. function formatTableData(data, cols, p_cur) {
  108. var rows = [];
  109. for (var i = 0; i < data.length; i++) {
  110. data[i].num = (p_cur - 1) * 10 + i + 1;
  111. rows.push(genRow(data[i], cols));
  112. }
  113. return rows;
  114. }
  115. function genRow(obj, cols) {
  116. var row = { checked: false, data: null };
  117. var dArr = [];
  118. for (var i = 0; i < cols.length; i++) {
  119. if (cols[i].func != null) {
  120. dArr.push(cols[i].func(obj[cols[i].field]));
  121. } else if (cols[i].type == "imagedd") {
  122. var pics = obj[cols[i].field];
  123. var picStr = '';
  124. if (pics) {
  125. var picArr = pics.split(',');
  126. for (var j in picArr) {
  127. var ispic = true;
  128. var src = picArr[j];
  129. if (!src.startWith("http"))
  130. src = base_image_server_url + src;
  131. var videosrc = src;
  132. if (src.indexOf('.avi') != -1) {
  133. src = src.split('.avi')[0] + "_screen_0.png"
  134. ispic = false;
  135. }
  136. if (src.indexOf('.mov') != -1) {
  137. src = src.split('.mov')[0] + "_screen_0.png"
  138. ispic = false;
  139. }
  140. if (src.indexOf('.mp4') != -1) {
  141. src = src.split('.mp4')[0] + "_screen_0.png"
  142. ispic = false;
  143. }
  144. var pic = (ispic ? '<a class="card lightbox-toggle" data-group="image-group-1" data-lightbox-group="example-3" href="' + src + '" style="width:60px;height:50px;">' : '<a class="card" onclick="video_paly(\'' + videosrc + '\')" href="javascript:void(0)" style="width:60px;height:50px;">')
  145. + '<img class="pic-class img-thumbnail" style="width:60px;height:50px;" src="' + src + '" alt="">'+ (ispic ? '' : '<i class="icon icon-play-circle" style=" font-size: 30px;position: absolute;top: 10px;left: 15px;color: white;"></i>')
  146. + '</a>';
  147. picStr += pic;
  148. }
  149. }
  150. dArr.push(picStr);
  151. } else if (cols[i].oper != null) {
  152. var oper = cols[i].oper;
  153. var operStr = "";
  154. for (var j = 0; j < oper.length; j++) {
  155. operStr += '<a href="javascript:void(0)" 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;';
  156. }
  157. dArr.push(operStr);
  158. } else {
  159. if (cols[i].type == "date") {
  160. if (cols[i].custom) {
  161. dArr.push(timeStamp2String(obj[cols[i].field], cols[i].date_type) + cols[i].custom);
  162. } else {
  163. dArr.push(timeStamp2String(obj[cols[i].field], cols[i].date_type));
  164. }
  165. } else if (obj[cols[i].field]) {
  166. if (cols[i].custom) {
  167. dArr.push(obj[cols[i].field] + cols[i].custom);
  168. } else {
  169. dArr.push(obj[cols[i].field]);
  170. }
  171. } else {
  172. dArr.push('');
  173. }
  174. }
  175. }
  176. row.data = dArr;
  177. return row;
  178. }
  179. function clearTable(cols, options, element) {
  180. var checkable = options.checkable;
  181. var sortable = options.sortable
  182. $('#my_table').datatable({
  183. checkable: checkable,
  184. sortable: sortable,
  185. data: {
  186. cols: cols,
  187. rows: []
  188. },
  189. checksChanged: function (event) {
  190. var checkArr = event.checks.checks;
  191. var checkedIds = [];
  192. for (var i = 0; i < checkArr.length; i++) {
  193. element.tt_data[i].checked = true;
  194. checkedIds.push(element.tt_data[i].id);
  195. }
  196. element.tt_checkedIds = checkedIds;
  197. $(element).data("select_cache", checkedIds);
  198. console.log(element.tt_checkedIds);
  199. }
  200. });
  201. }
  202. },
  203. setPager: function (data) {
  204. var pager = this.options.pager;
  205. var p_cur = pager.p_cur;
  206. var p_pages = pager.p_pages;
  207. var p_totalRecords = pager.p_totalRecords;
  208. var obj = this;
  209. kkpager.generPageHtml({
  210. pno: p_cur,
  211. total: p_pages,
  212. totalRecords: p_totalRecords,
  213. isShowTotalRecords: true,
  214. mode: 'click',
  215. click: function (n) {
  216. obj.options.pager.p_cur = n;
  217. this.selectPage(n);
  218. obj.getRemoteData1(n);//调用获取数据方法
  219. return false;
  220. }
  221. }, true);
  222. }
  223. };
  224. $.fn.mytable = function (options) {
  225. if (typeof options == 'string') {
  226. switch (options) {
  227. case 'getTableData':
  228. return this[0].tt_data;
  229. case 'getTableCheckedIds':
  230. // return this[0].tt_checkedIds;
  231. return $(this).data("select_cache");
  232. case 'empty':
  233. return new mytable(this, options, true);
  234. }
  235. } else {
  236. return this.each(function () {
  237. // var $this = $(this);
  238. new mytable(this, options);
  239. // $(this).attr('tableData',mytable.tableData);
  240. });
  241. }
  242. };
  243. $.fn.mytable.Constructor = mytable;
  244. }(jQuery));