bootstraptable.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  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: 'example/bootstraptable/edit',
  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", "example/bootstraptable/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. // 相关文档:https://doc.fastadmin.net/doc/table.html
  43. table.bootstrapTable({
  44. //表格参数可以参考:https://doc.fastadmin.net/doc/190.html
  45. url: $.fn.bootstrapTable.defaults.extend.index_url,
  46. columns: [
  47. [
  48. //更多列参数可以参考:https://doc.fastadmin.net/doc/191.html
  49. //该列为复选框字段,如果后台的返回state值将会默认选中
  50. {field: 'state', checkbox: true,},
  51. //sortable为是否排序,operate为搜索时的操作符,visible表示是否可见
  52. {field: 'id', title: 'ID', sortable: true, operate: false},
  53. //直接响应搜索
  54. {field: 'username', title: __('管理员'), formatter: Table.api.formatter.search},
  55. //模糊搜索
  56. {field: 'title', title: __('Title'), operate: 'LIKE %...%', placeholder: '模糊搜索,*表示任意字符', width: '280px'},
  57. //通过Ajax渲染searchList,也可以使用JSON数据
  58. {
  59. field: 'url',
  60. title: __('Url'),
  61. align: 'left',
  62. searchList: $.getJSON('example/bootstraptable/searchlist?search=a&field=row[user_id]'),
  63. formatter: Controller.api.formatter.url,
  64. addClass: "selectpicker"
  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. {
  76. field: 'admin_id', title: __('联动搜索'), searchList: function (column) {
  77. return Template('categorytpl', {});
  78. }, formatter: function (value, row, index) {
  79. return '无';
  80. }, visible: false
  81. },
  82. //启用时间段搜索
  83. {
  84. field: 'createtime',
  85. title: __('Update time'),
  86. sortable: true,
  87. formatter: Table.api.formatter.datetime,
  88. operate: 'RANGE',
  89. addclass: 'datetimerange'
  90. },
  91. //操作栏,默认有编辑、删除或排序按钮,可自定义配置buttons来扩展按钮
  92. {
  93. field: 'operate',
  94. width: "150px",
  95. title: __('Operate'),
  96. table: table,
  97. events: Table.api.events.operate,
  98. buttons: [
  99. {
  100. name: 'click',
  101. title: __('点击执行事件'),
  102. classname: 'btn btn-xs btn-info btn-click',
  103. icon: 'fa fa-leaf',
  104. // dropdown: '更多',//如果包含dropdown,将会以下拉列表的形式展示
  105. click: function (data) {
  106. Layer.alert("点击按钮执行的事件");
  107. }
  108. },
  109. {
  110. name: 'detail',
  111. title: __('弹出窗口打开'),
  112. classname: 'btn btn-xs btn-primary btn-dialog',
  113. icon: 'fa fa-list',
  114. url: 'example/bootstraptable/detail',
  115. callback: function (data) {
  116. Layer.alert("接收到回传数据:" + JSON.stringify(data), {title: "回传数据"});
  117. }
  118. },
  119. {
  120. name: 'ajax',
  121. title: __('发送Ajax'),
  122. classname: 'btn btn-xs btn-success btn-magic btn-ajax',
  123. icon: 'fa fa-magic',
  124. confirm: '确认发送Ajax请求?',
  125. url: 'example/bootstraptable/detail',
  126. success: function (data, ret) {
  127. Layer.alert(ret.msg + ",返回数据:" + JSON.stringify(data));
  128. //如果需要阻止成功提示,则必须使用return false;
  129. //return false;
  130. },
  131. error: function (data, ret) {
  132. console.log(data, ret);
  133. Layer.alert(ret.msg);
  134. return false;
  135. }
  136. },
  137. {
  138. name: 'addtabs',
  139. title: __('新选项卡中打开'),
  140. classname: 'btn btn-xs btn-warning btn-addtabs',
  141. icon: 'fa fa-folder-o',
  142. url: 'example/bootstraptable/detail'
  143. }
  144. ],
  145. formatter: Table.api.formatter.operate
  146. },
  147. ],
  148. ],
  149. //更多配置参数可参考:https://doc.fastadmin.net/doc/190.html
  150. //亦可以参考require-table.js中defaults的配置
  151. //快捷搜索,这里可在控制器定义快捷搜索的字段
  152. search: true,
  153. //启用普通表单搜索
  154. commonSearch: true,
  155. //显示导出按钮
  156. showExport: true,
  157. //启用跨页选择
  158. maintainSelected: true,
  159. //启用固定列
  160. fixedColumns: true,
  161. //固定左侧列数
  162. fixedNumber: 3,
  163. //固定右侧列数
  164. fixedRightNumber: 1,
  165. //导出类型
  166. exportDataType: "all", //共有basic, all, selected三种值 basic当前页 all全部 selected仅选中
  167. //导出下拉列表选项
  168. exportTypes: ['json', 'xml', 'csv', 'txt', 'doc', 'excel'],
  169. //可以控制是否默认显示搜索单表,false则隐藏,默认为false
  170. searchFormVisible: true,
  171. queryParams: function (params) {
  172. //这里可以追加搜索条件
  173. var filter = JSON.parse(params.filter);
  174. var op = JSON.parse(params.op);
  175. //这里可以动态赋值,比如从URL中获取admin_id的值,filter.admin_id=Fast.api.query('admin_id');
  176. filter.admin_id = 1;
  177. op.admin_id = "=";
  178. params.filter = JSON.stringify(filter);
  179. params.op = JSON.stringify(op);
  180. return params;
  181. },
  182. });
  183. // 为表格绑定事件
  184. Table.api.bindevent(table);
  185. // 监听下拉列表改变的事件
  186. $(document).on('change', 'select[name=admin]', function () {
  187. $("input[name='admin_id']").val($(this).val());
  188. });
  189. //自定义Tab筛选条件
  190. $('.panel-heading .nav-custom-condition a[data-toggle="tab"]', table.closest(".panel-intro")).on('shown.bs.tab', function (e) {
  191. var value = $(this).data("value");
  192. var options = table.bootstrapTable('getOptions');
  193. var queryParams = options.queryParams;
  194. options.pageNumber = 1;
  195. options.queryParams = function (params) {
  196. //这一行必须要存在,否则在点击下一页时会丢失搜索栏数据
  197. params = queryParams(params);
  198. //如果希望追加搜索条件,可使用
  199. var filter = params.filter ? JSON.parse(params.filter) : {};
  200. var op = params.op ? JSON.parse(params.op) : {};
  201. if (value) {
  202. //这里可以自定义多个筛选条件
  203. filter.admin_id = value;
  204. op.admin_id = '=';
  205. } else {
  206. //选全部时要移除相应的条件
  207. delete filter.admin_id;
  208. delete op.admin_id;
  209. }
  210. params.filter = JSON.stringify(filter);
  211. params.op = JSON.stringify(op);
  212. //如果希望忽略搜索栏搜索条件,可使用
  213. //params.filter = JSON.stringify(value?{admin_id: value}:{});
  214. //params.op = JSON.stringify(value?{admin_id: '='}:{});
  215. return params;
  216. };
  217. table.trigger("uncheckbox");
  218. table.bootstrapTable('refresh', {pageNumber: 1});
  219. return false;
  220. });
  221. // 指定搜索条件
  222. $(document).on("click", ".btn-singlesearch", function () {
  223. var options = table.bootstrapTable('getOptions');
  224. var queryParams = options.queryParams;
  225. options.pageNumber = 1;
  226. options.queryParams = function (params) {
  227. //这一行必须要存在,否则在点击下一页时会丢失搜索栏数据
  228. params = queryParams(params);
  229. //如果希望追加搜索条件,可使用
  230. var filter = params.filter ? JSON.parse(params.filter) : {};
  231. var op = params.op ? JSON.parse(params.op) : {};
  232. filter.url = 'login';
  233. op.url = 'like';
  234. params.filter = JSON.stringify(filter);
  235. params.op = JSON.stringify(op);
  236. //如果希望忽略搜索栏搜索条件,可使用
  237. //params.filter = JSON.stringify({url: 'login'});
  238. //params.op = JSON.stringify({url: 'like'});
  239. return params;
  240. };
  241. table.bootstrapTable('refresh', {});
  242. Toastr.info("当前执行的是自定义搜索,搜索URL中包含login的数据");
  243. return false;
  244. });
  245. // 获取选中项
  246. $(document).on("click", ".btn-selected", function () {
  247. Layer.alert(JSON.stringify(Table.api.selecteddata(table)));
  248. });
  249. // 启动和暂停按钮
  250. $(document).on("click", ".btn-start,.btn-pause", function () {
  251. //在table外不可以使用添加.btn-change的方法
  252. //只能自己调用Table.api.multi实现
  253. //如果操作全部则ids可以置为空
  254. var ids = Table.api.selectedids(table);
  255. Table.api.multi("changestatus", ids.join(","), table, this);
  256. });
  257. },
  258. add: function () {
  259. Controller.api.bindevent();
  260. },
  261. edit: function () {
  262. Controller.api.bindevent();
  263. },
  264. detail: function () {
  265. $(document).on('click', '.btn-callback', function () {
  266. Fast.api.close($("input[name=callback]").val());
  267. });
  268. },
  269. api: {
  270. bindevent: function () {
  271. Form.api.bindevent($("form[role=form]"));
  272. },
  273. formatter: {//渲染的方法
  274. url: function (value, row, index) {
  275. 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>';
  276. },
  277. ip: function (value, row, index) {
  278. return '<a class="btn btn-xs btn-ip bg-success"><i class="fa fa-map-marker"></i> ' + value + '</a>';
  279. },
  280. custom: function (value, row, index) {
  281. //添加上btn-change可以自定义请求的URL进行数据处理
  282. return '<a class="btn-change text-success" data-url="example/bootstraptable/change" data-confirm="确认切换状态?" data-id="' + row.id + '"><i class="fa ' + (row.title == '' ? 'fa-toggle-on fa-flip-horizontal text-gray' : 'fa-toggle-on') + ' fa-2x"></i></a>';
  283. },
  284. },
  285. events: {//绑定事件的方法
  286. ip: {
  287. //格式为:方法名+空格+DOM元素
  288. 'click .btn-ip': function (e, value, row, index) {
  289. e.stopPropagation();
  290. var container = $("#table").data("bootstrap.table").$container;
  291. var options = $("#table").bootstrapTable('getOptions');
  292. //这里我们手动将数据填充到表单然后提交
  293. $("form.form-commonsearch [name='ip']", container).val(value);
  294. $("form.form-commonsearch", container).trigger('submit');
  295. Toastr.info("执行了自定义搜索操作");
  296. }
  297. },
  298. }
  299. }
  300. };
  301. return Controller;
  302. });