tableX.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  7. <title>表格扩展</title>
  8. <link rel="stylesheet" href="../../../assets/libs/layui/css/layui.css"/>
  9. <link rel="stylesheet" href="../../../assets/module/admin.css?v=315"/>
  10. <!--[if lt IE 9]>
  11. <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
  12. <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
  13. <![endif]-->
  14. <style>
  15. #xTable2 + .layui-table-view .layui-table-click, #xTable2 + .layui-table-view .layui-table-hover, #xTable2 + .layui-table-view .layui-table tbody tr:hover {
  16. background: transparent;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <!-- 页面加载动画 -->
  22. <div class="page-loading">
  23. <div class="ball-loader">
  24. <span></span><span></span><span></span><span></span>
  25. </div>
  26. </div>
  27. <!-- 正文开始 -->
  28. <div class="layui-fluid">
  29. <div class="layui-card">
  30. <div class="layui-card-body" style="padding-top: 5px;">
  31. <div class="layui-tab layui-tab-brief" lay-filter="tableXTab">
  32. <ul class="layui-tab-title">
  33. <li class="layui-this">前端分页 | 搜索 | 排序</li>
  34. <li>合并单元格</li>
  35. <li>后端排序 | 鼠标右键</li>
  36. </ul>
  37. <div class="layui-tab-content" style="padding-left: 0;padding-right: 0;">
  38. <div class="layui-tab-item layui-show">
  39. <div class="layui-form toolbar">
  40. <div class="layui-form-item text-right">
  41. <div class="layui-inline pull-left">
  42. <button class="layui-btn icon-btn"><i class="layui-icon">&#xe654;</i>添加</button>
  43. <button class="layui-btn layui-btn-danger icon-btn"><i
  44. class="layui-icon">&#xe640;</i>删除
  45. </button>
  46. </div>
  47. <div class="layui-inline">
  48. <input tb-search="xTable1" class="layui-input icon-search" type="text"/>
  49. </div>
  50. <div class="layui-inline">
  51. <div class="layui-btn-group">
  52. <button tb-export="xTable1" class="layui-btn layui-btn-primary icon-btn">
  53. <i class="layui-icon">&#xe67d;</i>
  54. </button>
  55. <button tb-refresh="xTable1" class="layui-btn layui-btn-primary icon-btn">
  56. <i class="layui-icon">&#xe9aa;</i>
  57. </button>
  58. </div>
  59. </div>
  60. </div>
  61. </div>
  62. <table id="xTable1" lay-filter="xTable1"></table>
  63. </div>
  64. <div class="layui-tab-item ">
  65. <table id="xTable2" lay-filter="xTable2"></table>
  66. </div>
  67. <div class="layui-tab-item">
  68. <div class="layui-form toolbar">
  69. <blockquote class="layui-elem-quote">
  70. 点击排序会传递“sort”和“order”字段给接口,导出数据会使用templet格式化,
  71. <button class="layui-btn layui-btn-xs" id="btnExport3">
  72. <i class="layui-icon">&#xe67d;</i>导出
  73. </button>
  74. ,对表格行绑定
  75. <button class="layui-btn layui-btn-xs" style="margin-left: 0;">鼠标右键</button>
  76. 菜单。
  77. </blockquote>
  78. </div>
  79. <table id="xTable3" lay-filter="xTable3"></table>
  80. </div>
  81. </div>
  82. </div>
  83. </div>
  84. </div>
  85. </div>
  86. <!-- 表格状态列 -->
  87. <script type="text/html" id="tableState">
  88. <input type="checkbox" lay-filter="ckState" value="{{d.userId}}" lay-skin="switch"
  89. lay-text="正常|锁定" {{d.state==0?'checked':''}}/>
  90. <!-- export-show用于前端搜索和导出数据使用 -->
  91. <div class="export-show">{{d.state==0?'正常':'锁定'}}</div>
  92. </script>
  93. <!-- js部分 -->
  94. <script type="text/javascript" src="../../../assets/libs/layui/layui.js"></script>
  95. <script type="text/javascript" src="../../../assets/js/common.js?v=315"></script>
  96. <script>
  97. layui.use(['layer', 'element', 'util', 'table', 'tableX'], function () {
  98. var $ = layui.jquery;
  99. var layer = layui.layer;
  100. var element = layui.element;
  101. var util = layui.util;
  102. var table = layui.table;
  103. var tableX = layui.tableX;
  104. // 前端分页
  105. tableX.renderFront({
  106. elem: '#xTable1',
  107. url: '../../../json/userAll.json',
  108. page: {groups: 6},
  109. cellMinWidth: 100,
  110. title: '用户表',
  111. cols: [[
  112. {type: 'checkbox'},
  113. {field: 'nickName', title: '用户名', sort: true},
  114. {field: 'sex', title: '性别', sort: true},
  115. {field: 'phone', title: '手机号', sort: true},
  116. {
  117. templet: function (d) {
  118. var str = '';
  119. for (var i = 0; i < d.roles.length; i++) {
  120. str += ('<span class="layui-badge-rim">' + d.roles[i].roleName + '</span>');
  121. if (i != d.roles.length - 1) {
  122. str += '<span class="layui-badge-rim layui-hide">,</span>';
  123. }
  124. }
  125. return str;
  126. }, title: '角色', sort: true
  127. },
  128. {field: 'state', templet: '#tableState', title: '状态', sort: true},
  129. {
  130. field: 'createTime', templet: function (d) {
  131. return util.toDateString(d.createTime);
  132. }, title: '创建时间', sort: true
  133. }
  134. ]]
  135. });
  136. // 合并单元格
  137. table.render({
  138. elem: '#xTable2',
  139. url: '../../../json/tablex1.json',
  140. page: true,
  141. cellMinWidth: 100,
  142. cols: [[
  143. {type: 'numbers'},
  144. {field: 'parentName', title: '模块名称', sort: true},
  145. {field: 'authorityName', title: '菜单名称', sort: true},
  146. {field: 'authority', title: '权限标识', sort: true},
  147. {
  148. templet: function (d) {
  149. return util.toDateString(d.createTime);
  150. }, title: '创建时间', sort: true
  151. }
  152. ]],
  153. done: function () {
  154. tableX.merges('xTable2', [1]);
  155. }
  156. });
  157. // 排序自动传递sort和order
  158. var insTb3 = tableX.render({
  159. elem: '#xTable3',
  160. url: '../../../json/user.json',
  161. page: true,
  162. cellMinWidth: 100,
  163. cols: [[
  164. {type: 'numbers'},
  165. {field: 'nickName', title: '用户名', sort: true},
  166. {field: 'sex', title: '性别', sort: true},
  167. {field: 'phone', title: '手机号', sort: true},
  168. {
  169. field: 'roleId', templet: function (d) {
  170. var str = '';
  171. for (var i = 0; i < d.roles.length; i++) {
  172. str += ('<span class="layui-badge-rim">' + d.roles[i].roleName + '</span>');
  173. if (i != d.roles.length - 1) {
  174. str += '<span class="layui-badge-rim layui-hide">,</span>';
  175. }
  176. }
  177. return str;
  178. }, title: '角色', sort: true
  179. },
  180. {field: 'state', templet: '#tableState', title: '状态', sort: true},
  181. {
  182. field: 'createTime', templet: function (d) {
  183. return util.toDateString(d.createTime);
  184. }, title: '创建时间', sort: true
  185. }
  186. ]],
  187. done: function () {
  188. // 绑定鼠标右键
  189. tableX.bindCtxMenu('xTable3', [{
  190. icon: 'layui-icon layui-icon-edit',
  191. name: '修改用户',
  192. click: function (d) {
  193. layer.msg('点击了修改,userId:' + d.userId);
  194. }
  195. }, {
  196. icon: 'layui-icon layui-icon-unlink',
  197. name: '冻结用户',
  198. click: function (d) {
  199. layer.msg('点击了冻结,userId:' + d.userId);
  200. }
  201. }, {
  202. icon: 'layui-icon layui-icon-close text-danger',
  203. name: '<span class="text-danger">删除用户</span>',
  204. click: function (d) {
  205. layer.msg('点击了删除,userId:' + d.userId);
  206. }
  207. }]);
  208. }
  209. });
  210. // 导出数据包含templet
  211. $('#btnExport3').click(function () {
  212. tableX.exportData({
  213. cols: insTb3.config.cols,
  214. data: table.cache.xTable3,
  215. fileName: '用户表'
  216. });
  217. });
  218. // 切换Tab重置表格尺寸
  219. element.on('tab(tableXTab)', function (data) {
  220. var tableIds = ['xTable1', 'xTable2', 'xTable3'];
  221. table.resize(tableIds[data.index]);
  222. });
  223. setTimeout(function () {
  224. table.resize('xTable1');
  225. }, 200);
  226. });
  227. </script>
  228. </body>
  229. </html>