table.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>数据表格</title>
  6. <link rel="stylesheet" href="../../component/pear/css/pear.css" />
  7. <style>
  8. .expand.pear-btn:hover {
  9. color: currentColor;
  10. background: none;
  11. }
  12. .expand.pear-btn {
  13. border: 1px solid rgba(255, 255, 255, 0)
  14. }
  15. </style>
  16. </head>
  17. <body class="pear-container">
  18. <div class="layui-card">
  19. <div class="layui-card-body">
  20. <form id="userForm" class="layui-form" action="">
  21. <div class="layui-form-item">
  22. <div class="layui-inline">
  23. <label class="layui-form-label">用户名</label>
  24. <div class="layui-input-inline">
  25. <input type="text" name="realName" placeholder="" class="layui-input">
  26. </div>
  27. </div>
  28. <div class="layui-inline">
  29. <label class="layui-form-label">账号</label>
  30. <div class="layui-input-inline">
  31. <input type="text" name="username" placeholder="" class="layui-input">
  32. </div>
  33. </div>
  34. <div class="layui-inline">
  35. <label class="layui-form-label">账号</label>
  36. <div class="layui-input-inline">
  37. <input type="text" name="username" placeholder="" class="layui-input">
  38. </div>
  39. </div>
  40. <div class="layui-inline">
  41. <label class="layui-form-label">账号</label>
  42. <div class="layui-input-inline">
  43. <input type="text" name="username" placeholder="" class="layui-input">
  44. </div>
  45. </div>
  46. <div class="layui-inline">
  47. <label class="layui-form-label">账号</label>
  48. <div class="layui-input-inline">
  49. <input type="text" name="username" placeholder="" class="layui-input">
  50. </div>
  51. </div>
  52. <div class="layui-inline" style="margin-left: 50px;">
  53. <button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="user-query">
  54. <i class="layui-icon layui-icon-search"></i>
  55. 查询
  56. </button>
  57. <button type="reset" class="pear-btn pear-btn-md">
  58. <i class="layui-icon layui-icon-refresh"></i>
  59. 重置
  60. </button>
  61. <button type="button" class="pear-btn pear-btn-md expand">
  62. </button>
  63. </div>
  64. </div>
  65. </form>
  66. </div>
  67. </div>
  68. <div class="layui-card">
  69. <div class="layui-card-body">
  70. <table id="user-table" lay-filter="user-table"></table>
  71. </div>
  72. </div>
  73. <script type="text/html" id="user-toolbar">
  74. <button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add">
  75. <i class="layui-icon layui-icon-add-1"></i>
  76. 新增
  77. </button>
  78. <button class="pear-btn pear-btn-danger pear-btn-md" lay-event="batchRemove">
  79. <i class="layui-icon layui-icon-delete"></i>
  80. 删除
  81. </button>
  82. </script>
  83. <script type="text/html" id="user-bar">
  84. <button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit"><i
  85. class="layui-icon layui-icon-edit"></i></button>
  86. <button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i
  87. class="layui-icon layui-icon-delete"></i></button>
  88. <button class="pear-btn pear-btn-sm" id="more_{{d.userId}}"><i class="layui-icon layui-icon-triangle-d"></i></button>
  89. </script>
  90. <script type="text/html" id="user-enable">
  91. <input type="checkbox" name="enable" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用" lay-filter="user-enable"
  92. checked="{{ d.enable == 0 ? 'true' : 'false' }}">
  93. </script>
  94. <script type="text/html" id="user-sex">
  95. {{#if (d.sex == 1) { }}
  96. <span>男</span>
  97. {{# }else if(d.sex == 2){ }}
  98. <span>女</span>
  99. {{# } }}
  100. </script>
  101. <script type="text/html" id="user-login">
  102. {{#if (d.login == 0) { }}
  103. <span>在线</span>
  104. {{# }else if(d.sex == 1){ }}
  105. <span>离线</span>
  106. {{# } }}
  107. </script>
  108. <script type="text/html" id="user-createTime">
  109. {{layui.util.toDateString(d.createTime, 'yyyy-MM-dd')}}
  110. </script>
  111. <div style="display: none;">
  112. <div class="layer-top">
  113. <br />
  114. <h3>上侧弹层内容...</h3>
  115. </div>
  116. </div>
  117. <script src="../../component/layui/layui.js"></script>
  118. <script src="../../component/pear/pear.js"></script>
  119. <script>
  120. layui.use(['table', 'form', 'jquery', 'drawer', 'dropdown'], function() {
  121. let table = layui.table;
  122. let form = layui.form;
  123. let $ = layui.jquery;
  124. let drawer = layui.drawer;
  125. let dropdown = layui.dropdown;
  126. let MODULE_PATH = "/system/user/";
  127. formToggle({
  128. elem: "#userForm",
  129. });
  130. function formToggle(options) {
  131. var defaultsOpt = {
  132. isExpand: false,
  133. prefixIcon: "layui-icon",
  134. toggleIcon: ['layui-icon-down', 'layui-icon-up'],
  135. toggleText: ['展开', '折叠'],
  136. }
  137. var opt = $.extend({}, defaultsOpt, options);
  138. var elem = opt.elem; // 绑定的表单元素,必填
  139. var min = opt.min; // 最小显示数,默认显示一行
  140. var isExpand = opt.isExpand; // 初始展开
  141. var prefixIcon = opt.prefixIcon + " "; // 图标前缀
  142. var toggleIcon = opt.toggleIcon; // 折叠和展开时的图标类[unExpandIcon, ExpandIcon]
  143. var toggleText = opt.toggleText; // 折叠和展开时的文本
  144. var eleDOM = $(elem + " .layui-inline");
  145. var firstElTop = eleDOM.first().offset().top;
  146. var targetEl = eleDOM.filter(function(index) {
  147. var isGtMin = (index + 1) > min;
  148. var isGtFirstElTop = $(this).offset().top > firstElTop;
  149. var isNeqLast = (index + 1) != eleDOM.length;
  150. return min ? isGtMin && isNeqLast : isGtFirstElTop && isNeqLast;
  151. });
  152. var unExpandIcon = prefixIcon + toggleIcon[0];
  153. var expandIcon = prefixIcon + toggleIcon[1];
  154. var unExpandText = toggleText[0];
  155. var expandText = toggleText[1];
  156. var btnSelector = elem + " .expand";
  157. $(btnSelector).append("<i></i>")
  158. if (targetEl.length > 0) {
  159. if (isExpand) {
  160. $(btnSelector).prepend("<span>" + expandText + "</span>");
  161. $(btnSelector + ">i").addClass(expandIcon);
  162. } else {
  163. $(btnSelector).prepend("<span>" + unExpandText + "</span>")
  164. $(btnSelector + ">i").addClass(unExpandIcon)
  165. targetEl.addClass("layui-hide");
  166. }
  167. $(btnSelector).click(function() {
  168. isExpand = !isExpand;
  169. if (isExpand) {
  170. $(btnSelector + ">span").html(expandText);
  171. $(btnSelector + ">i").removeClass(unExpandIcon).addClass(expandIcon);
  172. targetEl.removeClass("layui-hide")
  173. } else {
  174. $(btnSelector + ">span").html(unExpandText);
  175. $(btnSelector + ">i").removeClass(expandIcon).addClass(unExpandIcon);
  176. targetEl.addClass("layui-hide")
  177. }
  178. })
  179. }
  180. }
  181. let cols = [
  182. [{
  183. type: 'checkbox'
  184. },
  185. {
  186. title: '账号',
  187. field: 'username',
  188. align: 'center',
  189. width: 100
  190. },
  191. {
  192. title: '姓名',
  193. field: 'realName',
  194. align: 'center'
  195. },
  196. {
  197. title: '性别',
  198. field: 'sex',
  199. align: 'center',
  200. width: 80,
  201. templet: '#user-sex'
  202. },
  203. {
  204. title: '电话',
  205. field: 'phone',
  206. align: 'center'
  207. },
  208. {
  209. title: '启用',
  210. field: 'enable',
  211. align: 'center',
  212. templet: '#user-enable'
  213. },
  214. {
  215. title: '登录',
  216. field: 'login',
  217. align: 'center',
  218. templet: '#user-login'
  219. },
  220. {
  221. title: '注册',
  222. field: 'createTime',
  223. align: 'center',
  224. templet: '#user-createTime'
  225. },
  226. {
  227. title: '操作',
  228. toolbar: '#user-bar',
  229. align: 'left',
  230. width: 160,
  231. fixed: 'right'
  232. }
  233. ]
  234. ]
  235. table.render({
  236. elem: '#user-table',
  237. url: '../../demos/data/table.json',
  238. page: true,
  239. cols: cols,
  240. skin: 'line',
  241. toolbar: '#user-toolbar',
  242. defaultToolbar: [{
  243. layEvent: 'refresh',
  244. icon: 'layui-icon-refresh',
  245. }, 'filter', 'print', 'exports'],
  246. done: function(res, curr, count) {
  247. for (var i = 0; i < res.data.length; i++) {
  248. dropdown.render({
  249. elem: '#more_' + res.data[i].userId,
  250. data: [{
  251. title: 'menu item11',
  252. id: 100
  253. }, {
  254. title: 'menu item22',
  255. id: 101
  256. }, {
  257. title: 'menu item33',
  258. id: 102
  259. }],
  260. id: '#more_' + res.data[i].userId,
  261. click: function(obj) {
  262. layer.tips('点击了:' + obj.title, this.elem, {
  263. tips: [1, '#5FB878']
  264. })
  265. }
  266. });
  267. }
  268. }
  269. });
  270. table.on('tool(user-table)', function(obj) {
  271. if (obj.event === 'remove') {
  272. window.remove(obj);
  273. } else if (obj.event === 'edit') {
  274. window.edit(obj);
  275. }
  276. });
  277. table.on('toolbar(user-table)', function(obj) {
  278. if (obj.event === 'add') {
  279. window.add();
  280. } else if (obj.event === 'refresh') {
  281. window.refresh();
  282. } else if (obj.event === 'batchRemove') {
  283. window.batchRemove(obj);
  284. }
  285. });
  286. form.on('submit(user-query)', function(data) {
  287. table.reload('user-table', {
  288. where: data.field
  289. })
  290. return false;
  291. });
  292. form.on('switch(user-enable)', function(obj) {
  293. layer.tips(this.value + ' ' + this.name + ':' + obj.elem.checked, obj.othis);
  294. });
  295. window.add = function() {
  296. drawer.open({
  297. direction: "top",
  298. dom: ".layer-top",
  299. distance: "30%"
  300. });
  301. }
  302. window.edit = function(obj) {
  303. layer.msg("修改");
  304. }
  305. window.remove = function(obj) {
  306. layer.confirm('确定要删除该用户', {
  307. icon: 3,
  308. title: '提示'
  309. }, function(index) {
  310. layer.close(index);
  311. let loading = layer.load();
  312. $.ajax({
  313. url: MODULE_PATH + "remove/" + obj.data['userId'],
  314. dataType: 'json',
  315. type: 'delete',
  316. success: function(result) {
  317. layer.close(loading);
  318. if (result.success) {
  319. layer.msg(result.msg, {
  320. icon: 1,
  321. time: 1000
  322. }, function() {
  323. obj.del();
  324. });
  325. } else {
  326. layer.msg(result.msg, {
  327. icon: 2,
  328. time: 1000
  329. });
  330. }
  331. }
  332. })
  333. });
  334. }
  335. window.batchRemove = function(obj) {
  336. let data = table.checkStatus(obj.config.id).data;
  337. if (data.length === 0) {
  338. layer.msg("未选中数据", {
  339. icon: 3,
  340. time: 1000
  341. });
  342. return false;
  343. }
  344. let ids = "";
  345. for (let i = 0; i < data.length; i++) {
  346. ids += data[i].userId + ",";
  347. }
  348. ids = ids.substr(0, ids.length - 1);
  349. layer.confirm('确定要删除这些用户', {
  350. icon: 3,
  351. title: '提示'
  352. }, function(index) {
  353. layer.close(index);
  354. let loading = layer.load();
  355. $.ajax({
  356. url: MODULE_PATH + "batchRemove/" + ids,
  357. dataType: 'json',
  358. type: 'delete',
  359. success: function(result) {
  360. layer.close(loading);
  361. if (result.success) {
  362. layer.msg(result.msg, {
  363. icon: 1,
  364. time: 1000
  365. }, function() {
  366. table.reload('user-table');
  367. });
  368. } else {
  369. layer.msg(result.msg, {
  370. icon: 2,
  371. time: 1000
  372. });
  373. }
  374. }
  375. })
  376. });
  377. }
  378. window.refresh = function(param) {
  379. table.reload('user-table');
  380. }
  381. })
  382. </script>
  383. </body>
  384. </html>