bootstraptable.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function ($, undefined, Backend, Table, Form, Template) {
  2. var Controller = {
  3. index: function () {
  4. // 初始化表格参数配置
  5. Table.api.init({
  6. extend: {
  7. index_url: 'example/bootstraptable/index',
  8. add_url: '',
  9. edit_url: '',
  10. del_url: 'example/bootstraptable/del',
  11. multi_url: '',
  12. }
  13. });
  14. var table = $("#table");
  15. //在普通搜索提交搜索前
  16. table.on('common-search.bs.table', function (event, table, query) {
  17. //这里可以获取到普通搜索表单中字段的查询条件
  18. console.log(query);
  19. });
  20. //在普通搜索渲染后
  21. table.on('post-common-search.bs.table', function (event, table) {
  22. var form = $("form", table.$commonsearch);
  23. $("input[name='title']", form).addClass("selectpage").data("source", "auth/adminlog/selectpage").data("primaryKey", "title").data("field", "title").data("orderBy", "id desc");
  24. $("input[name='username']", form).addClass("selectpage").data("source", "auth/admin/index").data("primaryKey", "username").data("field", "username").data("orderBy", "id desc");
  25. Form.events.cxselect(form);
  26. Form.events.selectpage(form);
  27. });
  28. //在表格内容渲染完成后回调的事件
  29. table.on('post-body.bs.table', function (e, settings, json, xhr) {
  30. console.log(e, settings, json, xhr);
  31. });
  32. //当表格数据加载完成时
  33. table.on('load-success.bs.table', function (e, data) {
  34. //这里可以获取从服务端获取的JSON数据
  35. console.log(data);
  36. //这里我们手动设置底部的值
  37. $("#money").text(data.extend.money);
  38. $("#price").text(data.extend.price);
  39. });
  40. // 初始化表格
  41. // 这里使用的是Bootstrap-table插件渲染表格
  42. // 相关文档:http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/
  43. table.bootstrapTable({
  44. url: $.fn.bootstrapTable.defaults.extend.index_url,
  45. columns: [
  46. [
  47. //更多配置参数可参考http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/#c
  48. //该列为复选框字段,如果后台的返回state值将会默认选中
  49. {field: 'state', checkbox: true,},
  50. //sortable为是否排序,operate为搜索时的操作符,visible表示是否可见
  51. {field: 'id', title: 'ID', sortable: true, operate: false},
  52. //默认隐藏该列
  53. {field: 'admin_id', title: __('管理员'), operate: false},
  54. //直接响应搜索
  55. {field: 'username', title: __('管理员'), formatter: Table.api.formatter.search},
  56. //模糊搜索
  57. {field: 'title', title: __('Title'), operate: 'LIKE %...%', placeholder: '模糊搜索,*表示任意字符'},
  58. //通过Ajax渲染searchList,也可以使用JSON数据
  59. {
  60. field: 'url',
  61. title: __('Url'),
  62. align: 'left',
  63. searchList: $.getJSON('example/bootstraptable/searchlist?search=a&field=row[user_id]'),
  64. formatter: Controller.api.formatter.url
  65. },
  66. //点击IP时同时执行搜索此IP
  67. {
  68. field: 'ip',
  69. title: __('IP'),
  70. events: Controller.api.events.ip,
  71. formatter: Controller.api.formatter.ip
  72. },
  73. //自定义栏位,custom是不存在的字段
  74. {field: 'custom', title: __('切换'), operate: false, formatter: Controller.api.formatter.custom},
  75. //browser是一个不存在的字段
  76. //通过formatter来渲染数据,同时为它添加上事件
  77. {
  78. field: 'browser',
  79. title: __('Browser'),
  80. operate: false,
  81. events: Controller.api.events.browser,
  82. formatter: Controller.api.formatter.browser
  83. },
  84. {
  85. field: 'admin_id', title: __('联动搜索'), searchList: function (column) {
  86. return Template('categorytpl', {});
  87. }, formatter: function (value, row, index) {
  88. return '无';
  89. }, visible: false
  90. },
  91. //启用时间段搜索
  92. {
  93. field: 'createtime',
  94. title: __('Update time'),
  95. sortable: true,
  96. formatter: Table.api.formatter.datetime,
  97. operate: 'RANGE',
  98. addclass: 'datetimerange'
  99. },
  100. //操作栏,默认有编辑、删除或排序按钮,可自定义配置buttons来扩展按钮
  101. {
  102. field: 'operate',
  103. width: "150px",
  104. title: __('Operate'),
  105. table: table,
  106. events: Table.api.events.operate,
  107. buttons: [
  108. {
  109. name: 'click',
  110. title: __('点击执行事件'),
  111. classname: 'btn btn-xs btn-info btn-click',
  112. icon: 'fa fa-leaf',
  113. click: function (data) {
  114. Layer.alert("点击按钮执行的事件");
  115. }
  116. },
  117. {
  118. name: 'detail',
  119. title: __('弹出窗口打开'),
  120. classname: 'btn btn-xs btn-primary btn-dialog',
  121. icon: 'fa fa-list',
  122. url: 'example/bootstraptable/detail',
  123. callback: function (data) {
  124. Layer.alert("接收到回传数据:" + JSON.stringify(data), {title: "回传数据"});
  125. }
  126. },
  127. {
  128. name: 'ajax',
  129. title: __('发送Ajax'),
  130. classname: 'btn btn-xs btn-success btn-magic btn-ajax',
  131. icon: 'fa fa-magic',
  132. url: 'example/bootstraptable/detail',
  133. success: function (data, ret) {
  134. Layer.alert(ret.msg + ",返回数据:" + JSON.stringify(data));
  135. //如果需要阻止成功提示,则必须使用return false;
  136. //return false;
  137. },
  138. error: function (data, ret) {
  139. console.log(data, ret);
  140. Layer.alert(ret.msg);
  141. return false;
  142. }
  143. },
  144. {
  145. name: 'addtabs',
  146. title: __('新选项卡中打开'),
  147. classname: 'btn btn-xs btn-warning btn-addtabs',
  148. icon: 'fa fa-folder-o',
  149. url: 'example/bootstraptable/detail'
  150. }
  151. ],
  152. formatter: Table.api.formatter.operate
  153. },
  154. ],
  155. ],
  156. //更多配置参数可参考http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/#t
  157. //亦可以参考require-table.js中defaults的配置
  158. //快捷搜索,这里可在控制器定义快捷搜索的字段
  159. search: true,
  160. //启用普通表单搜索
  161. commonSearch: true,
  162. //显示导出按钮
  163. showExport: true,
  164. //导出类型
  165. exportDataType: "all", //共有basic, all, selected三种值 basic当前页 all全部 selected仅选中
  166. //导出下拉列表选项
  167. exportTypes: ['json', 'xml', 'csv', 'txt', 'doc', 'excel'],
  168. //可以控制是否默认显示搜索单表,false则隐藏,默认为false
  169. searchFormVisible: true,
  170. queryParams: function (params) {
  171. //这里可以追加搜索条件
  172. var filter = JSON.parse(params.filter);
  173. var op = JSON.parse(params.op);
  174. //这里可以动态赋值,比如从URL中获取admin_id的值,filter.admin_id=Fast.api.query('admin_id');
  175. filter.admin_id = 1;
  176. op.admin_id = "=";
  177. params.filter = JSON.stringify(filter);
  178. params.op = JSON.stringify(op);
  179. return params;
  180. },
  181. });
  182. // 为表格绑定事件
  183. Table.api.bindevent(table);
  184. // 监听下拉列表改变的事件
  185. $(document).on('change', 'select[name=admin]', function () {
  186. $("input[name='admin_id']").val($(this).val());
  187. });
  188. // 指定搜索条件
  189. $(document).on("click", ".btn-singlesearch", function () {
  190. var options = table.bootstrapTable('getOptions');
  191. var queryParams = options.queryParams;
  192. options.pageNumber = 1;
  193. options.queryParams = function (params) {
  194. //这一行必须要存在,否则在点击下一页时会丢失搜索栏数据
  195. params = queryParams(params);
  196. //如果希望追加搜索条件,可使用
  197. var filter = params.filter ? JSON.parse(params.filter) : {};
  198. var op = params.op ? JSON.parse(params.op) : {};
  199. filter.url = 'login';
  200. op.url = 'like';
  201. params.filter = JSON.stringify(filter);
  202. params.op = JSON.stringify(op);
  203. //如果希望忽略搜索栏搜索条件,可使用
  204. //params.filter = JSON.stringify({url: 'login'});
  205. //params.op = JSON.stringify({url: 'like'});
  206. return params;
  207. };
  208. table.bootstrapTable('refresh', {});
  209. Toastr.info("当前执行的是自定义搜索,搜索URL中包含login的数据");
  210. return false;
  211. });
  212. // 获取选中项
  213. $(document).on("click", ".btn-selected", function () {
  214. Layer.alert(JSON.stringify(table.bootstrapTable('getSelections')));
  215. });
  216. // 启动和暂停按钮
  217. $(document).on("click", ".btn-start,.btn-pause", function () {
  218. //在table外不可以使用添加.btn-change的方法
  219. //只能自己调用Table.api.multi实现
  220. //如果操作全部则ids可以置为空
  221. var ids = Table.api.selectedids(table);
  222. Table.api.multi("changestatus", ids.join(","), table, this);
  223. });
  224. },
  225. add: function () {
  226. Controller.api.bindevent();
  227. },
  228. edit: function () {
  229. Controller.api.bindevent();
  230. },
  231. detail: function () {
  232. $(document).on('click', '.btn-callback', function () {
  233. Fast.api.close($("input[name=callback]").val());
  234. });
  235. },
  236. api: {
  237. bindevent: function () {
  238. Form.api.bindevent($("form[role=form]"));
  239. },
  240. formatter: {//渲染的方法
  241. url: function (value, row, index) {
  242. return '<div class="input-group input-group-sm" style="width:250px;"><input type="text" class="form-control input-sm" value="' + value + '"><span class="input-group-btn input-group-sm"><a href="' + value + '" target="_blank" class="btn btn-default btn-sm"><i class="fa fa-link"></i></a></span></div>';
  243. },
  244. ip: function (value, row, index) {
  245. return '<a class="btn btn-xs btn-ip bg-success"><i class="fa fa-map-marker"></i> ' + value + '</a>';
  246. },
  247. browser: function (value, row, index) {
  248. //这里我们直接使用row的数据
  249. return '<a class="btn btn-xs btn-browser">' + row.useragent.split(" ")[0] + '</a>';
  250. },
  251. custom: function (value, row, index) {
  252. //添加上btn-change可以自定义请求的URL进行数据处理
  253. return '<a class="btn-change text-success" data-url="example/bootstraptable/change" data-id="' + row.id + '"><i class="fa ' + (row.title == '' ? 'fa-toggle-on fa-flip-horizontal text-gray' : 'fa-toggle-on') + ' fa-2x"></i></a>';
  254. },
  255. },
  256. events: {//绑定事件的方法
  257. ip: {
  258. //格式为:方法名+空格+DOM元素
  259. 'click .btn-ip': function (e, value, row, index) {
  260. e.stopPropagation();
  261. console.log();
  262. var container = $("#table").data("bootstrap.table").$container;
  263. var options = $("#table").bootstrapTable('getOptions');
  264. //这里我们手动将数据填充到表单然后提交
  265. $("form.form-commonsearch [name='ip']", container).val(value);
  266. $("form.form-commonsearch", container).trigger('submit');
  267. Toastr.info("执行了自定义搜索操作");
  268. }
  269. },
  270. browser: {
  271. 'click .btn-browser': function (e, value, row, index) {
  272. e.stopPropagation();
  273. Layer.alert("该行数据为: <code>" + JSON.stringify(row) + "</code>");
  274. }
  275. },
  276. }
  277. }
  278. };
  279. return Controller;
  280. });