roles.html 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <style type="text/css">
  2. .ztree * {
  3. font-size: 13px;
  4. }
  5. </style>
  6. <!-- 正文开始 -->
  7. <div class="layui-fluid">
  8. <div class="layui-card">
  9. <div class="layui-card-body">
  10. <div class="layui-form toolbar">
  11. <div class="layui-form-item">
  12. <div class="layui-inline">
  13. <label class="layui-form-label w-auto">角色名:</label>
  14. <div class="layui-input-inline mr0">
  15. <input name="name" class="layui-input" type="text" placeholder="输入角色名"/>
  16. </div>
  17. </div>
  18. <div class="layui-inline">
  19. <button class="layui-btn icon-btn" lay-filter="formSubSearch" lay-submit>
  20. <i class="layui-icon">&#xe615;</i>搜索
  21. </button>
  22. <button id="btnAddRole" class="layui-btn icon-btn"><i class="layui-icon">&#xe654;</i>添加</button>
  23. </div>
  24. </div>
  25. </div>
  26. <table id="dataTable" lay-filter="dataTable"></table>
  27. </div>
  28. </div>
  29. </div>
  30. <!-- 表格操作列 -->
  31. <script type="text/html" id="tableBarRole">
  32. <a class="layui-btn layui-btn-xs" lay-event="edit">修改</a>
  33. <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
  34. <a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="auth">权限分配</a>
  35. </script>
  36. <!-- 表单弹窗 -->
  37. <script type="text/html" id="modelRole">
  38. <form id="modelRoleForm" lay-filter="modelRoleForm" class="layui-form model-form">
  39. <input name="id" type="hidden"/>
  40. <div class="layui-form-item">
  41. <label class="layui-form-label layui-form-required">角色名</label>
  42. <div class="layui-input-block">
  43. <input name="name" placeholder="请输入角色名" type="text" class="layui-input" maxlength="20"
  44. lay-verType="tips" lay-verify="required" required/>
  45. </div>
  46. </div>
  47. <div class="layui-form-item">
  48. <label class="layui-form-label">备注</label>
  49. <div class="layui-input-block">
  50. <textarea name="description" placeholder="请输入内容" class="layui-textarea" maxlength="200"></textarea>
  51. </div>
  52. </div>
  53. <div class="layui-form-item text-right">
  54. <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
  55. <button class="layui-btn" lay-filter="modelSubmitRole" perm-show="delete:/permission/roles/<id>" lay-submit>保存</button>
  56. </div>
  57. </form>
  58. </script>
  59. <script type="text/html" id="modelAuthTree">
  60. <form id="modelAuthTreeForm" lay-filter="modelAuthTreeForm" class="layui-form">
  61. <input name="ptId" type="hidden"/>
  62. <div class="model-form-body" style="max-height: 310px;">
  63. <div id="selAuthTree" class="ztree"></div>
  64. </div>
  65. </form>
  66. </script>
  67. <!-- js部分 -->
  68. <script>
  69. layui.use(['layer', 'form', 'table', 'util', 'admin', 'zTree', 'setter', 'notice'], function () {
  70. var $ = layui.jquery;
  71. var layer = layui.layer;
  72. var form = layui.form;
  73. var table = layui.table;
  74. var util = layui.util;
  75. var admin = layui.admin;
  76. var setter = layui.setter;
  77. var notice = layui.notice;
  78. // 渲染表格
  79. var insTb = table.render({
  80. elem: '#dataTable',
  81. url: setter.baseServer + 'permission/roles',
  82. page: true,
  83. cellMinWidth: 100,
  84. cols: [[
  85. {type: 'numbers'},
  86. {field: 'name', title: '角色名'},
  87. {field: 'description', title: '备注'},
  88. {
  89. field: 'created_at', sort: true, templet: function (d) {
  90. return util.toDateString(d.created_at * 1e3);
  91. }, title: '创建时间', width: 180
  92. },
  93. {fixed:'right',align: 'center', toolbar: '#tableBarRole', title: '操作', minWidth: 200}
  94. ]]
  95. });
  96. // 添加
  97. $('#btnAddRole').click(function () {
  98. showEditModel();
  99. });
  100. // 搜索
  101. form.on('submit(formSubSearch)', function (data) {
  102. insTb.reload({where: data.field}, 'data');
  103. });
  104. // 工具条点击事件
  105. table.on('tool(dataTable)', function (obj) {
  106. var data = obj.data;
  107. var layEvent = obj.event;
  108. if (layEvent === 'edit') { // 修改
  109. showEditModel(data);
  110. } else if (layEvent === 'del') { // 删除
  111. doDel(data);
  112. } else if (layEvent === 'auth') { // 权限管理
  113. showPermModel(data);
  114. }
  115. });
  116. // 删除
  117. function doDel(data) {
  118. layer.confirm('确定要删除“' + data.name + '(' + data.description + ')”角色吗?', {
  119. skin: 'layui-layer-admin',
  120. shade: .1
  121. }, function (i) {
  122. layer.close(i);
  123. layer.load(2);
  124. admin.req('permission/roles/' + data.id, (res) => {
  125. layer.closeAll('loading');
  126. if (res.code === 10000) {
  127. notice.msg(res.message, {icon: 1});
  128. insTb.reload({}, 'data');
  129. } else {
  130. notice.msg(res.message, {icon: 2});
  131. }
  132. }, 'DELETE');
  133. });
  134. }
  135. // 显示编辑弹窗
  136. function showEditModel(mRole) {
  137. admin.open({
  138. type: 1,
  139. title: (mRole ? '修改' : '添加') + '角色',
  140. content: $('#modelRole').html(),
  141. success: function (layero, dIndex) {
  142. form.val('modelRoleForm', mRole); // 回显数据
  143. // 表单提交事件
  144. form.on('submit(modelSubmitRole)', function (data) {
  145. layer.load(2);
  146. admin.req('permission/roles' + (mRole ? '/' + data.field.id : ''), data.field, function (res) {
  147. layer.closeAll('loading');
  148. if (res.code === 10000) {
  149. // 更新菜单权限
  150. setter.updateUser();
  151. layer.close(dIndex);
  152. notice.msg(res.message, {icon: 1});
  153. insTb.reload({}, 'data');
  154. } else {
  155. notice.msg(res.message, {icon: 2});
  156. }
  157. }, mRole ? 'PUT' : 'POST');
  158. return false;
  159. });
  160. }
  161. });
  162. }
  163. // 权限管理
  164. function showPermModel(data) {
  165. admin.open({
  166. title: '角色权限分配',
  167. btn: ['保存', '取消'],
  168. area: ['400px','450px'],
  169. content: $("#modelAuthTree").html(),
  170. success: function (layero, index) {
  171. $(layero).children('.layui-layer-content').css({'max-height': '300px', 'overflow': 'auto'});
  172. layer.load(2);
  173. admin.req('permission/roles/perm/' + data.id, (r) => {
  174. // 转换
  175. let treeAuth = [];
  176. $.each(r.data, (k, item) => {
  177. treeAuth.push({
  178. checked: item.checked || false,
  179. id: item.id,
  180. //name: item.name + '(' + item.policy + ':' + item.url +')',
  181. name: item.name,
  182. open: true,
  183. pId: item.parent_id
  184. });
  185. });
  186. var setting = {
  187. check: {enable: true},
  188. view: {showLine: true},
  189. data: {simpleData: {enable: true}}
  190. };
  191. $.fn.zTree.init($('#selAuthTree'), setting, treeAuth);
  192. layer.closeAll('loading');
  193. });
  194. },
  195. yes: function (index) {
  196. layer.load(2);
  197. var treeObj = $.fn.zTree.getZTreeObj('selAuthTree');
  198. var nodes = treeObj.getCheckedNodes(true);
  199. var ids = [];
  200. for (var i = 0; i < nodes.length; i++) {
  201. ids[i] = nodes[i].id;
  202. }
  203. admin.req('permission/roles/auth/' + data.id, {authIds: ids.join(',')}, function (res) {
  204. layer.closeAll('loading');
  205. if (10000 === res.code) {
  206. setter.updateUser();
  207. notice.msg(res.message, {icon: 1});
  208. layer.close(index);
  209. } else {
  210. notice.msg(res.message, {icon: 2});
  211. }
  212. }, 'PUT');
  213. }
  214. });
  215. }
  216. });
  217. </script>