index.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. <!DOCTYPE html>
  2. <html lang="zh-cn">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>浏览页面</title>
  6. <link rel="stylesheet" href="/app/admin/component/pear/css/pear.css" />
  7. <link rel="stylesheet" href="/app/admin/admin/css/reset.css" />
  8. </head>
  9. <body class="pear-container">
  10. <!-- 顶部查询表单 -->
  11. <!-- 数据表格 -->
  12. <div class="layui-card">
  13. <div class="layui-card-body">
  14. <table id="data-table" lay-filter="data-table"></table>
  15. </div>
  16. </div>
  17. <!-- 表格顶部工具栏 -->
  18. <script type="text/html" id="table-toolbar">
  19. <button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add" permission="app.admin.role.insert">
  20. <i class="layui-icon layui-icon-add-1"></i>新增
  21. </button>
  22. <button class="pear-btn pear-btn-danger pear-btn-md" lay-event="batchRemove" permission="app.admin.role.delete">
  23. <i class="layui-icon layui-icon-delete"></i>删除
  24. </button>
  25. </script>
  26. <!-- 表格行工具栏 -->
  27. <script type="text/html" id="table-bar">
  28. {{# if(d.id!==1&&d.pid&&!d.isRoot){ }}
  29. <button class="pear-btn pear-btn-xs tool-btn" lay-event="edit" permission="app.admin.role.update">编辑</button>
  30. <button class="pear-btn pear-btn-xs tool-btn" lay-event="remove" permission="app.admin.role.delete">删除</button>
  31. {{# } }}
  32. </script>
  33. <script src="/app/admin/component/layui/layui.js?v=2.8.12"></script>
  34. <script src="/app/admin/component/pear/pear.js"></script>
  35. <script src="/app/admin/admin/js/permission.js"></script>
  36. <script src="/app/admin/admin/js/common.js"></script>
  37. <script>
  38. // 相关常量
  39. const PRIMARY_KEY = "id";
  40. const SELECT_API = "/app/admin/role/select";
  41. const UPDATE_API = "/app/admin/role/update";
  42. const DELETE_API = "/app/admin/role/delete";
  43. const INSERT_URL = "/app/admin/role/insert";
  44. const UPDATE_URL = "/app/admin/role/update";
  45. // 表格渲染
  46. layui.use(["table", "treetable", "form", "common", "popup", "util"], function() {
  47. let treeTable = layui.treetable;
  48. let table = layui.table;
  49. let form = layui.form;
  50. let $ = layui.$;
  51. let common = layui.common;
  52. let util = layui.util;
  53. // 表头参数
  54. let cols = [
  55. {
  56. type: "checkbox"
  57. },{
  58. title: "角色组",
  59. field: "name",
  60. },{
  61. title: "主键",
  62. field: "id",
  63. },{
  64. title: "权限",
  65. field: "rules",
  66. templet: function (d) {
  67. let field = "rules";
  68. if (typeof d[field] == "undefined") return "";
  69. let items = [];
  70. layui.each((d[field] + "").split(","), function (k , v) {
  71. items.push(apiResults[field][v] || v);
  72. });
  73. return util.escape(items.join(","));
  74. },
  75. hide: true,
  76. },{
  77. title: "创建时间",
  78. field: "created_at",
  79. },{
  80. title: "更新时间",
  81. field: "updated_at",
  82. },{
  83. title: "父级",
  84. field: "pid",
  85. templet: function (d) {
  86. let field = "pid";
  87. if (typeof d[field] == "undefined") return "";
  88. let items = [];
  89. layui.each((d[field] + "").split(","), function (k , v) {
  90. items.push(apiResults[field][v] || v);
  91. });
  92. return util.escape(items.join(","));
  93. },
  94. hide: true,
  95. },{
  96. title: "操作",
  97. toolbar: "#table-bar",
  98. align: "center",
  99. fixed: "right",
  100. width: 120,
  101. }
  102. ];
  103. // 渲染表格
  104. function render()
  105. {
  106. treeTable.render({
  107. elem: "#data-table",
  108. url: SELECT_API,
  109. treeColIndex: 1,
  110. treeIdName: "id",
  111. treePidName: "pid",
  112. treeDefaultClose: false,
  113. cols: [cols],
  114. skin: "line",
  115. size: "lg",
  116. toolbar: "#table-toolbar",
  117. defaultToolbar: [{
  118. title: "刷新",
  119. layEvent: "refresh",
  120. icon: "layui-icon-refresh",
  121. }, "filter", "print", "exports"]
  122. });
  123. }
  124. // 获取表格中下拉或树形组件数据
  125. let apis = [];
  126. apis.push(["rules", "/app/admin/rule/get?type=0,1,2"]);
  127. apis.push(["pid", "/app/admin/role/select?format=tree"]);
  128. let apiResults = {};
  129. apiResults["rules"] = [];
  130. apiResults["pid"] = [];
  131. let count = apis.length;
  132. layui.each(apis, function (k, item) {
  133. let [field, url] = item;
  134. $.ajax({
  135. url: url,
  136. dateType: "json",
  137. success: function (res) {
  138. if (res.code) {
  139. return layui.popup.failure(res.msg);
  140. }
  141. function travel(items) {
  142. for (let k in items) {
  143. let item = items[k];
  144. apiResults[field][item.value] = item.name;
  145. if (item.children) {
  146. travel(item.children);
  147. }
  148. }
  149. }
  150. travel(res.data);
  151. },
  152. complete: function () {
  153. if (--count === 0) {
  154. render();
  155. }
  156. }
  157. });
  158. });
  159. if (!count) {
  160. render();
  161. }
  162. // 编辑或删除行事件
  163. table.on("tool(data-table)", function(obj) {
  164. if (obj.event === "remove") {
  165. remove(obj);
  166. } else if (obj.event === "edit") {
  167. edit(obj);
  168. }
  169. });
  170. // 表格顶部工具栏事件
  171. table.on("toolbar(data-table)", function(obj) {
  172. if (obj.event === "add") {
  173. add();
  174. } else if (obj.event === "refresh") {
  175. refreshTable();
  176. } else if (obj.event === "batchRemove") {
  177. batchRemove(obj);
  178. }
  179. });
  180. // 表格顶部搜索事件
  181. form.on("submit(table-query)", function(data) {
  182. table.reload("data-table", {
  183. page: {
  184. curr: 1
  185. },
  186. where: data.field
  187. })
  188. return false;
  189. });
  190. // 表格顶部搜索重置事件
  191. form.on("submit(table-reset)", function(data) {
  192. table.reload("data-table", {
  193. where: []
  194. })
  195. });
  196. // 表格排序事件
  197. table.on("sort(data-table)", function(obj){
  198. table.reload("data-table", {
  199. initSort: obj,
  200. scrollPos: "fixed",
  201. where: {
  202. field: obj.field,
  203. order: obj.type
  204. }
  205. });
  206. });
  207. // 表格新增数据
  208. let add = function() {
  209. layer.open({
  210. type: 2,
  211. title: "新增",
  212. shade: 0.1,
  213. area: [common.isModile()?"100%":"500px", common.isModile()?"100%":"450px"],
  214. content: INSERT_URL
  215. });
  216. }
  217. // 表格编辑数据
  218. let edit = function(obj) {
  219. let value = obj.data[PRIMARY_KEY];
  220. layer.open({
  221. type: 2,
  222. title: "修改",
  223. shade: 0.1,
  224. area: [common.isModile()?"100%":"500px", common.isModile()?"100%":"450px"],
  225. content: UPDATE_URL + "?" + PRIMARY_KEY + "=" + value
  226. });
  227. }
  228. // 删除一行
  229. let remove = function(obj) {
  230. return doRemove(obj.data[PRIMARY_KEY]);
  231. }
  232. // 删除多行
  233. let batchRemove = function(obj) {
  234. let checkIds = common.checkField(obj, PRIMARY_KEY);
  235. if (checkIds === "") {
  236. layui.popup.warning("未选中数据");
  237. return false;
  238. }
  239. doRemove(checkIds.split(","));
  240. }
  241. // 执行删除
  242. let doRemove = function (ids) {
  243. let data = {};
  244. data[PRIMARY_KEY] = ids;
  245. layer.confirm("确定删除?", {
  246. icon: 3,
  247. title: "提示"
  248. }, function(index) {
  249. layer.close(index);
  250. let loading = layer.load();
  251. $.ajax({
  252. url: DELETE_API,
  253. data: data,
  254. dataType: "json",
  255. type: "post",
  256. success: function(res) {
  257. layer.close(loading);
  258. if (res.code) {
  259. return layui.popup.failure(res.msg);
  260. }
  261. return layui.popup.success("操作成功", refreshTable);
  262. }
  263. })
  264. });
  265. }
  266. // 刷新表格数据
  267. window.refreshTable = function() {
  268. table.reloadData("data-table", {
  269. scrollPos: "fixed",
  270. done: function (res, curr) {
  271. if (curr > 1 && res.data && !res.data.length) {
  272. curr = curr - 1;
  273. table.reloadData("data-table", {
  274. page: {
  275. curr: curr
  276. },
  277. })
  278. }
  279. }
  280. });
  281. }
  282. })
  283. </script>
  284. </body>
  285. </html>