authorities.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. <!DOCTYPE html>
  2. <html>
  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. </head>
  15. <body>
  16. <!-- 页面加载loading -->
  17. <div class="page-loading">
  18. <div class="ball-loader">
  19. <span></span><span></span><span></span><span></span>
  20. </div>
  21. </div>
  22. <!-- 正文开始 -->
  23. <div class="layui-fluid">
  24. <div class="layui-card">
  25. <div class="layui-card-body">
  26. <div class="layui-form toolbar">
  27. <div class="layui-form-item">
  28. <div class="layui-inline">
  29. <label class="layui-form-label w-auto">搜索:</label>
  30. <div class="layui-input-inline mr0">
  31. <input id="edtSearchAuth" class="layui-input" type="text" placeholder="输入关键字"/>
  32. </div>
  33. </div>
  34. <div class="layui-inline">
  35. <button id="btnSearchAuth" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i>搜索
  36. </button>
  37. <button id="btnAddAuth" class="layui-btn icon-btn"><i class="layui-icon">&#xe654;</i>添加</button>
  38. <button id="btnExpandAuth" class="layui-btn icon-btn">全部展开</button>
  39. </div>
  40. <div class="layui-inline">
  41. <button id="btnFoldAuth" class="layui-btn icon-btn">全部折叠</button>
  42. </div>
  43. </div>
  44. </div>
  45. <table class="layui-table" id="tableAuth" lay-filter="tableAuth"></table>
  46. </div>
  47. </div>
  48. </div>
  49. <!-- 表格操作列 -->
  50. <script type="text/html" id="tableBarAuth">
  51. <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">修改</a>
  52. <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
  53. </script>
  54. <!-- 表单弹窗 -->
  55. <script type="text/html" id="modelAuth">
  56. <form id="modelAuthForm" lay-filter="modelAuthForm" class="layui-form model-form">
  57. <input name="authorityId" type="hidden"/>
  58. <div class="layui-form-item">
  59. <label class="layui-form-label">上级菜单</label>
  60. <div class="layui-input-block">
  61. <select name="parentId" lay-search>
  62. <option value="">请选择上级菜单</option>
  63. <option value="1">系统管理</option>
  64. <option value="2">用户管理</option>
  65. <option value="5">角色管理</option>
  66. <option value="8">权限管理</option>
  67. <option value="11">登录日志</option>
  68. <option value="12">系统监控</option>
  69. <option value="13">Druid监控</option>
  70. </select>
  71. </div>
  72. </div>
  73. <div class="layui-form-item">
  74. <label class="layui-form-label">权限名称</label>
  75. <div class="layui-input-block">
  76. <input name="authorityName" placeholder="请输入权限名称" type="text" class="layui-input" maxlength="50"
  77. lay-verType="tips" lay-verify="required" required/>
  78. </div>
  79. </div>
  80. <div class="layui-form-item">
  81. <label class="layui-form-label">权限类型</label>
  82. <div class="layui-input-block">
  83. <input name="isMenu" type="radio" value="0" title="菜单" checked/>
  84. <input name="isMenu" type="radio" value="1" title="按钮"/>
  85. </div>
  86. </div>
  87. <div class="layui-form-item">
  88. <label class="layui-form-label">菜单url</label>
  89. <div class="layui-input-block">
  90. <input name="menuUrl" placeholder="请输入菜单url" type="text" class="layui-input"/>
  91. </div>
  92. </div>
  93. <div class="layui-form-item">
  94. <label class="layui-form-label">权限标识</label>
  95. <div class="layui-input-block">
  96. <input name="authority" placeholder="请输入权限标识" type="text" class="layui-input"/>
  97. </div>
  98. </div>
  99. <div class="layui-form-item">
  100. <label class="layui-form-label">菜单图标</label>
  101. <div class="layui-input-block">
  102. <input name="menuIcon" placeholder="请输入菜单图标" type="text" class="layui-input"/>
  103. </div>
  104. </div>
  105. <div class="layui-form-item">
  106. <label class="layui-form-label">排序号</label>
  107. <div class="layui-input-block">
  108. <input name="orderNumber" placeholder="请输入排序号" type="number" class="layui-input" min="0" max="1000"
  109. lay-verType="tips" lay-verify="required|number" required/>
  110. </div>
  111. </div>
  112. <div class="layui-form-item text-right">
  113. <button class="layui-btn layui-btn-primary" type="button" ew-event="closePageDialog">取消</button>
  114. <button class="layui-btn" lay-filter="modelSubmitAuth" lay-submit>保存</button>
  115. </div>
  116. </form>
  117. </script>
  118. <!-- js部分 -->
  119. <script type="text/javascript" src="../../assets/libs/layui/layui.js"></script>
  120. <script type="text/javascript" src="../../assets/js/common.js?v=315"></script>
  121. <script>
  122. layui.use(['layer', 'form', 'table', 'admin', 'treetable'], function () {
  123. var $ = layui.jquery;
  124. var layer = layui.layer;
  125. var form = layui.form;
  126. var table = layui.table;
  127. var admin = layui.admin;
  128. var treetable = layui.treetable;
  129. // 渲染表格
  130. function renderTable() {
  131. treetable.render({
  132. treeColIndex: 1,
  133. treeSpid: -1,
  134. treeIdName: 'authorityId',
  135. treePidName: 'parentId',
  136. elem: '#tableAuth',
  137. url: '../../json/authorities.json',
  138. cellMinWidth: 100,
  139. cols: [[
  140. {type: 'numbers', title: '#'},
  141. {field: 'authorityName', title: '权限名称', minWidth: 200},
  142. {field: 'menuUrl', title: '菜单url'},
  143. {field: 'authority', title: '权限标识'},
  144. {field: 'orderNumber', title: '排序号', align: 'center'},
  145. {
  146. title: '类型', templet: function (d) {
  147. var strs = ['<span class="layui-badge-rim">菜单</span>', '<span class="layui-badge layui-bg-gray">按钮</span>'];
  148. return strs[d.isMenu];
  149. }, align: 'center'
  150. },
  151. {templet: '#tableBarAuth', title: '操作', align: 'center', minWidth: 120}
  152. ]]
  153. });
  154. }
  155. renderTable();
  156. // 添加按钮点击事件
  157. $('#btnAddAuth').click(function () {
  158. showEditModel();
  159. });
  160. // 工具条点击事件
  161. table.on('tool(tableAuth)', function (obj) {
  162. var data = obj.data;
  163. var layEvent = obj.event;
  164. if (layEvent === 'edit') { // 修改
  165. showEditModel(data);
  166. } else if (layEvent === 'del') { // 删除
  167. doDel(data.authorityId, data.authorityName);
  168. }
  169. });
  170. // 删除
  171. function doDel(authorityId, authorityName) {
  172. layer.confirm('确定要删除“' + authorityName + '”吗?', {
  173. skin: 'layui-layer-admin',
  174. shade: .1
  175. }, function (index) {
  176. layer.close(index);
  177. layer.load(2);
  178. $.get('../../json/ok.json', {
  179. authorityId: authorityId
  180. }, function (res) {
  181. layer.closeAll('loading');
  182. if (res.code == 200) {
  183. layer.msg(res.msg, {icon: 1});
  184. renderTable();
  185. } else {
  186. layer.msg(res.msg, {icon: 2});
  187. }
  188. }, 'json');
  189. });
  190. }
  191. // 显示表单弹窗
  192. function showEditModel(mAuth) {
  193. admin.open({
  194. type: 1,
  195. title: (mAuth ? '修改' : '添加') + '权限',
  196. content: $('#modelAuth').html(),
  197. success: function (layero, dIndex) {
  198. $(layero).children('.layui-layer-content').css('overflow', 'visible');
  199. var url = mAuth ? '../../json/ok.json' : '../../json/ok.json';
  200. if (mAuth && mAuth.isMenu == '1') {
  201. $('#modelAuthForm input[name="isMenu"][value="1"]').prop("checked", true);
  202. }
  203. form.val('modelAuthForm', mAuth); // 回显数据
  204. // 表单提交事件
  205. form.on('submit(modelSubmitAuth)', function (data) {
  206. if (data.field.parentId == '') {
  207. data.field.parentId = '-1';
  208. }
  209. layer.load(2);
  210. $.get(url, data.field, function (res) {
  211. layer.closeAll('loading');
  212. if (res.code == 200) {
  213. layer.close(dIndex);
  214. layer.msg(res.msg, {icon: 1});
  215. renderTable();
  216. } else {
  217. layer.msg(res.msg, {icon: 2});
  218. }
  219. }, 'json');
  220. return false;
  221. });
  222. }
  223. });
  224. }
  225. // 搜索按钮点击事件
  226. $('#btnSearchAuth').click(function () {
  227. $('#edtSearchAuth').removeClass('layui-form-danger');
  228. var keyword = $('#edtSearchAuth').val();
  229. var $tds = $('#tableAuth').next('.treeTable').find('.layui-table-body tbody tr td');
  230. $tds.css('background-color', 'transparent');
  231. if (!keyword) {
  232. layer.tips('请输入关键字', '#edtSearchAuth', {tips: [1, '#ff4c4c']});
  233. $('#edtSearchAuth').addClass('layui-form-danger');
  234. $('#edtSearchAuth').focus();
  235. return;
  236. }
  237. var searchCount = 0;
  238. $tds.each(function () {
  239. if ($(this).text().indexOf(keyword) >= 0) {
  240. $(this).css('background-color', '#FAE6A0');
  241. if (searchCount == 0) {
  242. $('body,html').stop(true);
  243. $('body,html').animate({scrollTop: $(this).offset().top - 150}, 500);
  244. }
  245. searchCount++;
  246. }
  247. });
  248. if (searchCount == 0) {
  249. layer.msg("没有匹配结果", {icon: 5, anim: 6});
  250. } else {
  251. treetable.expandAll('#tableAuth');
  252. }
  253. });
  254. $('#btnExpandAuth').click(function () {
  255. treetable.expandAll('#tableAuth');
  256. });
  257. $('#btnFoldAuth').click(function () {
  258. treetable.foldAll('#tableAuth');
  259. });
  260. });
  261. </script>
  262. </body>
  263. </html>