begtable.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. layui.config({
  2. base: 'plugins/layui/modules/'
  3. });
  4. layui.define(['layer', 'laypage', 'icheck'], function(exports) {
  5. "use strict";
  6. var $ = layui.jquery,
  7. layer = parent.layer === undefined ? layui.layer : parent.layer,
  8. laypage = layui.laypage;
  9. /**
  10. * @description begtable元素
  11. */
  12. var ELEM = {
  13. table: 'beg-table',
  14. hover: 'beg-table-hovered',
  15. border: 'beg-table-bordered',
  16. strip: 'beg-table-striped'
  17. };
  18. /**
  19. * @constructor begTable 构造函数
  20. */
  21. var begTable = function() {
  22. this.config = {
  23. elem: undefined, //存放begtable的窗口,必填
  24. bordered: false, //是否加边框
  25. striped: false, //是否显示斑马线
  26. hovered: false, //鼠标悬停样式
  27. checked: false, //显示多选按钮
  28. checkboxClass: 'icheckbox_flat-green', //checkbox样式
  29. tips: '这是默认Tips',
  30. columns: undefined, // 数据列
  31. url: undefined, //远程地址
  32. data: undefined, //数据
  33. identity: undefined, // 标识字段
  34. paged: true, //启用分页功能
  35. type: 'get', //远程读取数据的方式
  36. pageSet: {
  37. jump: undefined, //
  38. groups: 5,
  39. } //分页设置
  40. };
  41. };
  42. /**
  43. * @description 设置
  44. * @param {Object} options
  45. */
  46. begTable.prototype.set = function(options) {
  47. var that = this;
  48. $.extend(true, that.config, options);
  49. return that;
  50. };
  51. /**
  52. * @description 获取选择的行
  53. */
  54. begTable.prototype.getSelectedRows = function() {
  55. console.log(this.config.tips);
  56. };
  57. /**
  58. * 初始化begtable
  59. */
  60. begTable.prototype.init = function() {
  61. var _that = this;
  62. var _config = _that.config;
  63. var elem = _config.elem;
  64. if(typeof(elem) !== 'string' && typeof(elem) !== 'object') {
  65. throwError('elem参数未定义或设置出错,具体设置格式请参考文档API.');
  66. }
  67. var $container;
  68. if(typeof(elem) === 'string') {
  69. $container = $(elem);
  70. }
  71. if(typeof(elem) === 'object') {
  72. $container = elem;
  73. }
  74. if($container.length === 0) {
  75. throwError('找不到elem参数配置的容器,请检查.');
  76. }
  77. if(typeof(_config.columns) !== 'object') {
  78. throwError('请配置columns参数,具体设置格式请参考文档API');
  79. }
  80. var tableClass = ELEM.table;
  81. if(_config.bordered) {
  82. tableClass += ' ' + ELEM.border;
  83. }
  84. if(_config.hovered) {
  85. tableClass += ' ' + ELEM.hover;
  86. }
  87. if(_config.striped) {
  88. tableClass += ' ' + ELEM.strip;
  89. }
  90. var tableTemp = '<table class="' + tableClass + '">';
  91. var columns = _config.columns;
  92. var theadTemp = '<thead><tr>';
  93. //添加全选按钮
  94. if(_config.checked) {
  95. theadTemp += '<th style="width:25px;"><input type="checkbox" id="begtable-selected-all"></th>'
  96. }
  97. for(var i = 0; i < columns.length; i++) {
  98. theadTemp += '<th>' + columns[i].title + '</th>'
  99. }
  100. theadTemp += '</tr></thead>';
  101. var tbodyTemp = '<tbody>';
  102. var data = _config.data;
  103. if(data !== undefined && typeof(data) === 'object') {
  104. for(var i = 0; i < data.length; i++) {
  105. var tr = '<tr>';
  106. if(_config.checked) {
  107. tr += '<td style="text-align: center;"><input type="checkbox" /></td>';
  108. }
  109. for(var j = 0; j < columns.length; j++) {
  110. tr += '<td>' + data[i][columns[j].field] + '</td>';
  111. }
  112. tr += '</tr>';
  113. tbodyTemp += tr;
  114. }
  115. }
  116. tbodyTemp += '</tbody>';
  117. tableTemp = tableTemp + theadTemp + tbodyTemp + '</table>';
  118. //渲染table
  119. $container.html('<div class="beg-table-box"><div class="beg-table-body">' + tableTemp + '</div></div>');
  120. //checkbox
  121. if(_config.checked) {
  122. //渲染checkbox
  123. $container.find('input[type=checkbox]').iCheck({
  124. checkboxClass: _config.checkboxClass
  125. });
  126. }
  127. //分页
  128. if(_config.paged) {
  129. var $tableBox = $container.children('.beg-table-box');
  130. $tableBox.append('<div class="beg-table-paged"></div>');
  131. loadData($tableBox, 1);
  132. } else {
  133. $container.find('.' + ELEM.table).css('margin-bottom', '0px');
  134. }
  135. //msgErrorTips('请对begtable返回正确的JSON字符');
  136. return _that;
  137. };
  138. begTable.prototype.getConfig = function() {
  139. return this.config;
  140. };
  141. /**
  142. * 加载数据
  143. * @param {Object} $tableBox
  144. * @param {Number} page
  145. */
  146. function loadData($tableBox, page) {
  147. //var that = '';
  148. /*$.ajax({
  149. type: that.config.type,
  150. success: function(result) {
  151. }
  152. });*/
  153. laypage({
  154. cont: $tableBox.find('.beg-table-paged'),
  155. curr: page,
  156. pages: 25, //总页数
  157. groups: 5, //连续显示分页数
  158. jump: function(obj, first) {
  159. //得到了当前页,用于向服务端请求对应数据
  160. var curr = obj.curr;
  161. if(!first) {
  162. //layer.msg('第 '+ obj.curr +' 页');
  163. that.loadData()
  164. }
  165. }
  166. });
  167. }
  168. /**
  169. * 抛出一个异常错误信息
  170. * @param {String} msg
  171. */
  172. function throwError(msg) {
  173. throw new Error('betTable error:' + msg);
  174. return;
  175. }
  176. /**
  177. * 弹出一个错误提示
  178. * @param {String} msg
  179. */
  180. function msgErrorTips(msg) {
  181. layer.msg(msg, {
  182. icon: 5
  183. });
  184. return;
  185. }
  186. var begtable = new begTable();
  187. //begtable.init();
  188. exports('begtable', function(options) {
  189. return begtable.set(options);
  190. });
  191. });