lyear_pages_data_table.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
  6. <title>bootstrap-table - 光年(Light Year Admin)后台管理系统模板</title>
  7. <link rel="icon" href="favicon.ico" type="image/ico">
  8. <meta name="keywords" content="LightYear,光年,后台模板,后台管理系统,光年HTML模板">
  9. <meta name="description" content="LightYear是一个基于Bootstrap v3.3.7的后台管理系统的HTML模板。">
  10. <meta name="author" content="yinqi">
  11. <link href="css/bootstrap.min.css" rel="stylesheet">
  12. <link href="css/materialdesignicons.min.css" rel="stylesheet">
  13. <link href="css/animate.css" rel="stylesheet">
  14. <link href="css/style.min.css" rel="stylesheet">
  15. <link href="js/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
  16. </head>
  17. <body>
  18. <div class="container-fluid p-t-15">
  19. <div class="row">
  20. <div class="col-lg-12">
  21. <div class="card">
  22. <div class="card-header"><h4>bootstrap-table简单示例</h4></div>
  23. <div class="card-body">
  24. <div id="toolbar" class="toolbar-btn-action">
  25. <button id="btn_add" type="button" class="btn btn-primary m-r-5">
  26. <span class="mdi mdi-plus" aria-hidden="true"></span>新增
  27. </button>
  28. <button id="btn_edit" type="button" class="btn btn-success m-r-5">
  29. <span class="mdi mdi-check" aria-hidden="true"></span>启用
  30. </button>
  31. <button id="btn_edit" type="button" class="btn btn-warning m-r-5">
  32. <span class="mdi mdi-block-helper" aria-hidden="true"></span>禁用
  33. </button>
  34. <button id="btn_delete" type="button" class="btn btn-danger">
  35. <span class="mdi mdi-window-close" aria-hidden="true"></span>删除
  36. </button>
  37. </div>
  38. <table id="tb_departments"></table>
  39. </div>
  40. </div>
  41. </div>
  42. <div class="col-lg-12">
  43. <div class="card">
  44. <div class="card-header">
  45. <h4>TreeGrid使用</h4>
  46. </div>
  47. <div class="card-body">
  48. <div id="toolbar2" class="toolbar-btn-action">
  49. <button type="button" class="btn btn-primary m-r-5" onclick="test()">返回选中行</button>
  50. </div>
  51. <table class="tree-table"></table>
  52. </div>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. <script type="text/javascript" src="js/jquery.min.js"></script>
  58. <script type="text/javascript" src="js/bootstrap.min.js"></script>
  59. <script type="text/javascript" src="js/perfect-scrollbar.min.js"></script>
  60. <script type="text/javascript" src="js/bootstrap-table/bootstrap-table.min.js"></script>
  61. <script type="text/javascript" src="js/bootstrap-table/bootstrap-table-zh-CN.min.js"></script>
  62. <!--行内编辑插件-->
  63. <link href="js/x-editable/1.5.1/bootstrap3-editable/css/bootstrap-editable.min.css" rel="stylesheet">
  64. <script type="text/javascript" src="js/x-editable/1.5.1/bootstrap3-editable/js/bootstrap-editable.min.js"></script>
  65. <script type="text/javascript" src="js/bootstrap-table/extensions/editable/bootstrap-table-editable.min.js"></script>
  66. <script type="text/javascript" src="js/main.min.js"></script>
  67. <script type="text/javascript">
  68. $('#tb_departments').bootstrapTable({
  69. classes: 'table table-bordered table-hover table-striped',
  70. url: 'http://www.bixiaguangnian.com/index/test/getExampleJson',
  71. method: 'get',
  72. dataType : 'jsonp', // 因为本示例中是跨域的调用,所以涉及到ajax都采用jsonp,
  73. uniqueId: 'id',
  74. idField: 'id', // 每行的唯一标识字段
  75. toolbar: '#toolbar', // 工具按钮容器
  76. //clickToSelect: true, // 是否启用点击选中行
  77. showColumns: true, // 是否显示所有的列
  78. showRefresh: true, // 是否显示刷新按钮
  79. //showToggle: true, // 是否显示详细视图和列表视图的切换按钮(clickToSelect同时设置为true时点击会报错)
  80. pagination: true, // 是否显示分页
  81. sortOrder: "asc", // 排序方式
  82. queryParams: function(params) {
  83. var temp = {
  84. limit: params.limit, // 每页数据量
  85. offset: params.offset, // sql语句起始索引
  86. page: (params.offset / params.limit) + 1,
  87. sort: params.sort, // 排序的列名
  88. sortOrder: params.order // 排序方式'asc' 'desc'
  89. };
  90. return temp;
  91. }, // 传递参数
  92. sidePagination: "server", // 分页方式:client客户端分页,server服务端分页
  93. pageNumber: 1, // 初始化加载第一页,默认第一页
  94. pageSize: 10, // 每页的记录行数
  95. pageList: [10, 25, 50, 100], // 可供选择的每页的行数
  96. //search: true, // 是否显示表格搜索,此搜索是客户端搜索
  97. //showExport: true, // 是否显示导出按钮, 导出功能需要导出插件支持(tableexport.min.js)
  98. //exportDataType: "basic", // 导出数据类型, 'basic':当前页, 'all':所有数据, 'selected':选中的数据
  99. columns: [{
  100. checkbox: true // 是否显示复选框
  101. }, {
  102. field: 'id',
  103. title: 'ID',
  104. sortable: true // 是否排序
  105. }, {
  106. field: 'author',
  107. title: '作者'
  108. }, {
  109. field: 'dynasty',
  110. title: '朝代',
  111. }, {
  112. field: 'nationality',
  113. title: '国籍'
  114. }, {
  115. field: 'opus',
  116. title: '作品'
  117. }, {
  118. field: 'category',
  119. title: '分类'
  120. }, {
  121. field: 'status',
  122. title: '状态',
  123. editable: {
  124. type: 'select',
  125. title: "状态",
  126. pk: 1,
  127. source: [
  128. { value: 0, text: '禁用'},
  129. { value: 1, text: '正常'}
  130. ],
  131. noeditFormatter: function (value, row, index) {
  132. var result;
  133. if (value == '0' || value == '禁用') {
  134. result = { filed: "status", value: "禁用", class: "label label-danger" };
  135. } else if (value == '1' || value == '正常') {
  136. result = { filed: "status", value: "正常", class: "label label-success" };
  137. }
  138. return result; // 这里对bootstrap-table-editable.min.js做了一些修改,让其能接收class
  139. },
  140. // 可以按列分开做保存,也可以用后面的onEditableSave
  141. url: 'http://www.bixiaguangnian.com/index/test/testEditJson',
  142. ajaxOptions: {
  143. type: 'get',
  144. dataType: 'jsonp'
  145. }, // 默认是post方式提交,这里因为跨域,改成get
  146. success: function(response, newValue) {
  147. if (response.code == '200') {
  148. // 这里的状态显示有自定义样式区分,做单元格更新
  149. $('#tb_departments').bootstrapTable('updateCellById', {id: response.id, field: 'status', value: newValue});
  150. } else {
  151. return response.msg;
  152. }
  153. },
  154. highlight: false
  155. }
  156. }, {
  157. field: 'operate',
  158. title: '操作',
  159. formatter: btnGroup, // 自定义方法
  160. events: {
  161. 'click .edit-btn': function (event, value, row, index) {
  162. editUser(row.id);
  163. },
  164. 'click .del-btn': function (event, value, row, index) {
  165. delUser(row.id);
  166. },
  167. 'click .show-btn': function (event, value, row, index) {
  168. showUser(row);
  169. }
  170. }
  171. }],
  172. /*
  173. onEditableSave: function (field, row, oldValue, $el) {
  174. $.ajax({
  175. type: "get",
  176. url: "http://www.bixiaguangnian.com/index/test/testEditTwo",
  177. data: row,
  178. dataType: 'jsonp',
  179. success: function (data, status) {
  180. if (data.code == '200') {
  181. // 这里的状态显示有自定义样式区分,做单行的更新
  182. $('.example-table').bootstrapTable('updateRow', {index: row.id, row: row});
  183. } else {
  184. alert(data.msg);
  185. }
  186. },
  187. error: function () {
  188. alert('修改失败,请稍后再试');
  189. }
  190. });
  191. }
  192. */
  193. onLoadSuccess: function(data){
  194. $("[data-toggle='tooltip']").tooltip();
  195. }
  196. });
  197. // 操作按钮
  198. function btnGroup ()
  199. {
  200. let html =
  201. '<a href="#!" class="btn btn-xs btn-default m-r-5 edit-btn" title="编辑" data-toggle="tooltip"><i class="mdi mdi-pencil"></i></a>' +
  202. '<a href="#!" class="btn btn-xs btn-default m-r-5 show-btn" title="查看" data-toggle="tooltip"><i class="mdi mdi-eye"></i></a>' +
  203. '<a href="#!" class="btn btn-xs btn-default del-btn" title="删除" data-toggle="tooltip"><i class="mdi mdi-window-close"></i></a>';
  204. return html;
  205. }
  206. // 操作方法 - 编辑
  207. function editUser()
  208. {
  209. alert('编辑信息跳转');
  210. }
  211. // 操作方法 - 删除
  212. function delUser()
  213. {
  214. alert('信息删除成功');
  215. }
  216. // 操作方法 - 查看
  217. function showUser()
  218. {
  219. alert('查看详细');
  220. }
  221. </script>
  222. <!--以下是tree-grid的使用示例-->
  223. <link href="js/jquery-treegrid/jquery.treegrid.min.css" rel="stylesheet">
  224. <script type="text/javascript" src="js/jquery-treegrid/jquery.treegrid.min.js"></script>
  225. <script type="text/javascript" src="js/bootstrap-table/extensions/treegrid/bootstrap-table-treegrid.min.js"></script>
  226. <script type="text/javascript">
  227. // tree-grid使用
  228. var data = JSON.parse(
  229. '[{"id":1, "pid":0, "status":1, "name":"用户管理", "permissionValue":"open:user:manage"},' +
  230. '{"id":2, "pid":0, "status":1, "name":"系统管理", "permissionValue":"open:system:manage"},' +
  231. '{"id":3, "pid":1, "status":1, "name":"新增用户", "permissionValue":"open:user:add"},' +
  232. '{"id":4, "pid":1, "status":1, "name":"修改用户", "permissionValue":"open:user:edit"},' +
  233. '{"id":5, "pid":1, "status":0, "name":"删除用户", "permissionValue":"open:user:del"},' +
  234. '{"id":6, "pid":2, "status":1, "name":"系统配置管理", "permissionValue":"open:systemconfig:manage"},' +
  235. '{"id":7, "pid":6, "status":1, "name":"新增配置", "permissionValue":"open:systemconfig:add"},' +
  236. '{"id":8, "pid":6, "status":1, "name":"修改配置", "permissionValue":"open:systemconfig:edit"},' +
  237. '{"id":9, "pid":6, "status":0, "name":"删除配置", "permissionValue":"open:systemconfig:del"},' +
  238. '{"id":10, "pid":2,"status":1, "name":"系统日志管理", "permissionValue":"open:log:manage"},' +
  239. '{"id":11, "pid":10,"status":1, "name":"新增日志", "permissionValue":"open:log:add"},' +
  240. '{"id":12, "pid":10,"status":1, "name":"修改日志", "permissionValue":"open:log:edit"},' +
  241. '{"id":13, "pid":10,"status":0, "name":"删除日志", "permissionValue":"open:log:del"}]');
  242. var $treeTable = $('.tree-table');
  243. $treeTable.bootstrapTable({
  244. data: data,
  245. idField: 'id',
  246. uniqueId: 'id',
  247. dataType: 'jsonp',
  248. toolbar: '#toolbar2',
  249. columns: [
  250. {
  251. field: 'check',
  252. checkbox: true
  253. },
  254. {
  255. field: 'name',
  256. title: '名称'
  257. },
  258. {
  259. field: 'status',
  260. title: '状态',
  261. sortable: true,
  262. /*
  263. * 可以选择采用开关来处理状态显示
  264. * 或者采用上个示例的处理方式
  265. */
  266. formatter: function (value, row, index) {
  267. if (value == 0) {
  268. is_checked = '';
  269. } else if (value == 1){
  270. is_checked = 'checked="checked"';
  271. }
  272. result = '<label class="lyear-switch switch-primary lyear-status"><input type="checkbox" '+ is_checked +'><span onClick="updateStatus('+ row.id +', '+ value +')"></span></label>';
  273. return result;
  274. },
  275. },
  276. {
  277. field: 'permissionValue',
  278. title: '权限值'
  279. },
  280. {
  281. field: 'operate',
  282. title: '操作',
  283. align: 'center',
  284. events : {
  285. 'click .role-add': function (e, value, row, index) {
  286. add(row.id);
  287. },
  288. 'click .role-delete': function (e, value, row, index) {
  289. del(row.id);
  290. },
  291. 'click .role-edit': function (e, value, row, index) {
  292. update(row.id);
  293. }
  294. },
  295. formatter: operateFormatter
  296. }
  297. ],
  298. treeShowField: 'name',
  299. parentIdField: 'pid',
  300. onResetView: function(data) {
  301. $treeTable.treegrid({
  302. initialState: 'collapsed', // 所有节点都折叠
  303. treeColumn: 1,
  304. //expanderExpandedClass: 'mdi mdi-folder-open', // 可自定义图标样式
  305. //expanderCollapsedClass: 'mdi mdi-folder',
  306. onChange: function() {
  307. $treeTable.bootstrapTable('resetWidth');
  308. }
  309. });
  310. // 只展开树形的第一集节点
  311. $treeTable.treegrid('getRootNodes').treegrid('expand');
  312. },
  313. onCheck: function(row) {
  314. var datas = $treeTable.bootstrapTable('getData');
  315. selectChilds(datas, row, 'id', 'pid', true); // 选择子类
  316. selectParentChecked(datas, row, 'id', 'pid'); // 选择父类
  317. $treeTable.bootstrapTable('load', datas);
  318. },
  319. onUncheck: function(row) {
  320. var datas = $treeTable.bootstrapTable('getData');
  321. selectChilds(datas, row, 'id', 'pid', false);
  322. $treeTable.bootstrapTable('load', datas);
  323. },
  324. });
  325. // 操作按钮
  326. function operateFormatter(value, row, index) {
  327. return [
  328. '<a type="button" class="role-add btn btn-xs btn-default m-r-5" title="编辑" data-toggle="tooltip"><i class="mdi mdi-plus"></i></a>',
  329. '<a type="button" class="role-edit btn btn-xs btn-default m-r-5" title="修改" data-toggle="tooltip"><i class="mdi mdi-pencil"></i></a>',
  330. '<a type="button" class="role-delete btn btn-xs btn-default" title="删除" data-toggle="tooltip"><i class="mdi mdi-delete"></i></a>'
  331. ].join('');
  332. }
  333. /**
  334. * 选中父项时,同时选中子项
  335. * @param datas 所有的数据
  336. * @param row 当前数据
  337. * @param id id 字段名
  338. * @param pid 父id字段名
  339. */
  340. function selectChilds(datas,row,id,pid,checked) {
  341. for(var i in datas){
  342. if(datas[i][pid] == row[id]){
  343. datas[i].check=checked;
  344. selectChilds(datas,datas[i],id,pid,checked);
  345. };
  346. }
  347. }
  348. function selectParentChecked(datas,row,id,pid){
  349. for(var i in datas){
  350. if(datas[i][id] == row[pid]){
  351. datas[i].check=true;
  352. selectParentChecked(datas,datas[i],id,pid);
  353. };
  354. }
  355. }
  356. function add(id) {
  357. alert("add 方法 , id = " + id);
  358. }
  359. function del(id) {
  360. alert("del 方法 , id = " + id);
  361. }
  362. function update(id) {
  363. alert("update 方法 , id = " + id);
  364. }
  365. function updateStatus(id, state) {
  366. var newstate = (state == 1) ? 0 : 1; // 发送参数值跟当前参数值相反
  367. $.ajax({
  368. type: "get",
  369. url: "http://www.bixiaguangnian.com/index/test/testGridJson",
  370. data: {id: id, state: newstate},
  371. dataType: 'jsonp',
  372. success: function (data, status) {
  373. if (data.code == '200') {
  374. $treeTable.bootstrapTable('updateCellById', {id: id, field: 'status', value: newstate});
  375. } else {
  376. alert(data.msg);
  377. $treeTable.bootstrapTable('updateCellById', {id: id, field: 'status', value: state}); // 因开关点击后样式是变的,失败也重置下
  378. }
  379. },
  380. error: function () {
  381. alert('修改失败,请稍后再试');
  382. }
  383. });
  384. }
  385. function test() {
  386. var selRows = $treeTable.bootstrapTable("getSelections");
  387. if(selRows.length == 0){
  388. alert("请至少选择一行");
  389. return;
  390. }
  391. console.log(selRows);
  392. var postData = "";
  393. $.each(selRows,function(i) {
  394. postData += this.id;
  395. if (i < selRows.length - 1) {
  396. postData += ", ";
  397. }
  398. });
  399. alert("你选中行的 id 为:"+postData);
  400. }
  401. </script>
  402. </body>
  403. </html>