bootstraptable.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  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", "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. // 相关文档: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. //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. // dropdown: '更多',//如果包含dropdown,将会以下拉列表的形式展示
  114. click: function (data) {
  115. Layer.alert("点击按钮执行的事件");
  116. }
  117. },
  118. {
  119. name: 'detail',
  120. title: __('弹出窗口打开'),
  121. classname: 'btn btn-xs btn-primary btn-dialog',
  122. icon: 'fa fa-list',
  123. url: 'example/bootstraptable/detail',
  124. callback: function (data) {
  125. Layer.alert("接收到回传数据:" + JSON.stringify(data), {title: "回传数据"});
  126. }
  127. },
  128. {
  129. name: 'ajax',
  130. title: __('发送Ajax'),
  131. classname: 'btn btn-xs btn-success btn-magic btn-ajax',
  132. icon: 'fa fa-magic',
  133. confirm: '确认发送Ajax请求?',
  134. url: 'example/bootstraptable/detail',
  135. success: function (data, ret) {
  136. Layer.alert(ret.msg + ",返回数据:" + JSON.stringify(data));
  137. //如果需要阻止成功提示,则必须使用return false;
  138. //return false;
  139. },
  140. error: function (data, ret) {
  141. console.log(data, ret);
  142. Layer.alert(ret.msg);
  143. return false;
  144. }
  145. },
  146. {
  147. name: 'addtabs',
  148. title: __('新选项卡中打开'),
  149. classname: 'btn btn-xs btn-warning btn-addtabs',
  150. icon: 'fa fa-folder-o',
  151. url: 'example/bootstraptable/detail'
  152. }
  153. ],
  154. formatter: Table.api.formatter.operate
  155. },
  156. ],
  157. ],
  158. //更多配置参数可参考:https://doc.fastadmin.net/doc/190.html
  159. //亦可以参考require-table.js中defaults的配置
  160. //快捷搜索,这里可在控制器定义快捷搜索的字段
  161. search: true,
  162. //启用普通表单搜索
  163. commonSearch: true,
  164. //显示导出按钮
  165. showExport: true,
  166. //启用跨页选择
  167. maintainSelected: true,
  168. //启用固定列
  169. fixedColumns: true,
  170. //固定右侧列数
  171. fixedRightNumber: 1,
  172. //导出类型
  173. exportDataType: "all", //共有basic, all, selected三种值 basic当前页 all全部 selected仅选中
  174. //导出下拉列表选项
  175. exportTypes: ['json', 'xml', 'csv', 'txt', 'doc', 'excel'],
  176. //可以控制是否默认显示搜索单表,false则隐藏,默认为false
  177. searchFormVisible: true,
  178. queryParams: function (params) {
  179. //这里可以追加搜索条件
  180. var filter = JSON.parse(params.filter);
  181. var op = JSON.parse(params.op);
  182. //这里可以动态赋值,比如从URL中获取admin_id的值,filter.admin_id=Fast.api.query('admin_id');
  183. filter.admin_id = 1;
  184. op.admin_id = "=";
  185. params.filter = JSON.stringify(filter);
  186. params.op = JSON.stringify(op);
  187. return params;
  188. },
  189. });
  190. // 为表格绑定事件
  191. Table.api.bindevent(table);
  192. // 监听下拉列表改变的事件
  193. $(document).on('change', 'select[name=admin]', function () {
  194. $("input[name='admin_id']").val($(this).val());
  195. });
  196. // 指定搜索条件
  197. $(document).on("click", ".btn-singlesearch", function () {
  198. var options = table.bootstrapTable('getOptions');
  199. var queryParams = options.queryParams;
  200. options.pageNumber = 1;
  201. options.queryParams = function (params) {
  202. //这一行必须要存在,否则在点击下一页时会丢失搜索栏数据
  203. params = queryParams(params);
  204. //如果希望追加搜索条件,可使用
  205. var filter = params.filter ? JSON.parse(params.filter) : {};
  206. var op = params.op ? JSON.parse(params.op) : {};
  207. filter.url = 'login';
  208. op.url = 'like';
  209. params.filter = JSON.stringify(filter);
  210. params.op = JSON.stringify(op);
  211. //如果希望忽略搜索栏搜索条件,可使用
  212. //params.filter = JSON.stringify({url: 'login'});
  213. //params.op = JSON.stringify({url: 'like'});
  214. return params;
  215. };
  216. table.bootstrapTable('refresh', {});
  217. Toastr.info("当前执行的是自定义搜索,搜索URL中包含login的数据");
  218. return false;
  219. });
  220. // 获取选中项
  221. $(document).on("click", ".btn-selected", function () {
  222. Layer.alert(JSON.stringify(Table.api.selecteddata(table)));
  223. });
  224. // 启动和暂停按钮
  225. $(document).on("click", ".btn-start,.btn-pause", function () {
  226. //在table外不可以使用添加.btn-change的方法
  227. //只能自己调用Table.api.multi实现
  228. //如果操作全部则ids可以置为空
  229. var ids = Table.api.selectedids(table);
  230. Table.api.multi("changestatus", ids.join(","), table, this);
  231. });
  232. },
  233. add: function () {
  234. Controller.api.bindevent();
  235. },
  236. edit: function () {
  237. Controller.api.bindevent();
  238. },
  239. detail: function () {
  240. $(document).on('click', '.btn-callback', function () {
  241. Fast.api.close($("input[name=callback]").val());
  242. });
  243. },
  244. api: {
  245. bindevent: function () {
  246. Form.api.bindevent($("form[role=form]"));
  247. },
  248. formatter: {//渲染的方法
  249. url: function (value, row, index) {
  250. 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>';
  251. },
  252. ip: function (value, row, index) {
  253. return '<a class="btn btn-xs btn-ip bg-success"><i class="fa fa-map-marker"></i> ' + value + '</a>';
  254. },
  255. browser: function (value, row, index) {
  256. //这里我们直接使用row的数据
  257. return '<a class="btn btn-xs btn-browser">' + row.useragent.split(" ")[0] + '</a>';
  258. },
  259. custom: function (value, row, index) {
  260. //添加上btn-change可以自定义请求的URL进行数据处理
  261. 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>';
  262. },
  263. },
  264. events: {//绑定事件的方法
  265. ip: {
  266. //格式为:方法名+空格+DOM元素
  267. 'click .btn-ip': function (e, value, row, index) {
  268. e.stopPropagation();
  269. var container = $("#table").data("bootstrap.table").$container;
  270. var options = $("#table").bootstrapTable('getOptions');
  271. //这里我们手动将数据填充到表单然后提交
  272. $("form.form-commonsearch [name='ip']", container).val(value);
  273. $("form.form-commonsearch", container).trigger('submit');
  274. Toastr.info("执行了自定义搜索操作");
  275. }
  276. },
  277. browser: {
  278. 'click .btn-browser': function (e, value, row, index) {
  279. e.stopPropagation();
  280. Layer.alert("该行数据为: <code>" + JSON.stringify(row) + "</code>");
  281. }
  282. },
  283. }
  284. }
  285. };
  286. return Controller;
  287. });