index.ejs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <% include ../layout/body_header.ejs %>
  2. <div class="panel-content">
  3. <div class="panel-title">
  4. <div class="title-main">
  5. <h2><%= ctx.menu.children[ctx.actionName].name %>
  6. <a href="#ver" data-toggle="modal" data-target="#add-user" class="btn btn-primary btn-sm pull-right">添加账号</a>
  7. </h2>
  8. </div>
  9. </div>
  10. <div class="content-wrap">
  11. <div class="c-body">
  12. <nav class="nav nav-tabs mb-3" role="tablist">
  13. <a class="nav-item nav-link active" data-toggle="tab" href="#user-list" role="tab">账号列表</a>
  14. <a class="nav-item nav-link" data-toggle="tab" href="#user-purview" role="tab">账号权限</a>
  15. </nav>
  16. <div class="tab-content">
  17. <div id="user-list" class="tab-pane active">
  18. <table class="table table-hover table-bordered table-sm">
  19. <thead>
  20. <tr>
  21. <th>账号</th>
  22. <th>姓名</th>
  23. <th>单位</th>
  24. <th>职位</th>
  25. <th>手机</th>
  26. <th>电话</th>
  27. <th class="text-center">操作</th>
  28. </tr>
  29. </thead>
  30. <tbody>
  31. <% if (accountList.length > 0) { %>
  32. <% accountList.forEach(function (account) { %>
  33. <tr class="<%= account.enable !== 1 ? 'table-danger' : ''%>">
  34. <td><%= account.account %></td>
  35. <td><%= account.name %></td>
  36. <td><%= account.company %></td>
  37. <td><%= account.role %></td>
  38. <td><%= account.mobile %></td>
  39. <td><%= account.telephone %></td>
  40. <td class="text-center">
  41. <a href="#edit-user" data-toggle="modal" data-target="#edit-user" class="btn btn-sm btn-outline-primary">编辑</a>
  42. <a href="/project/account/enable/<%= account.id %>" class="btn btn-sm btn-outline-<%= account.enable === 1 ? 'danger' : 'success'%>"><%= account.enable === 1 ? '停用' : '启用'%></a>
  43. </td>
  44. </tr>
  45. <% }) %>
  46. <% } %>
  47. </tbody>
  48. </table>
  49. </div>
  50. <div id="user-purview" class="tab-pane">
  51. <table class="table table-hover table-bordered table-sm">
  52. <thead>
  53. <tr>
  54. <th>账号</th>
  55. <th>姓名</th>
  56. <th>单位</th>
  57. <th>职位</th>
  58. <th>权限</th>
  59. </thead>
  60. <tbody>
  61. <% if (accountList.length > 0) { %>
  62. <% accountList.forEach(function (account) { %>
  63. <tr>
  64. <td><%= account.account %></td>
  65. <td><%= account.name %></td>
  66. <td><%= account.company %></td>
  67. <td><%= account.role %></td>
  68. <td>
  69. <span class="permission-string"></span>
  70. <a href="#permission-form" data-toggle="modal" data-target="#permission-form" class="btn btn-sm permission" data-permission="<%= account.permission %>" data-id="<%= account.id %>">编辑</a>
  71. </td>
  72. </tr>
  73. <% }) %>
  74. <% } %>
  75. </tbody>
  76. </table>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. <script type="text/javascript">
  83. let permissionList = '<%- permissionList %>';
  84. permissionList = JSON.parse(permissionList);
  85. let permissionString = '<%- permissionString %>';
  86. permissionString = JSON.parse(permissionString);
  87. $(document).ready(function() {
  88. // 页面载入时显示权限中文
  89. $(".permission").each(function() {
  90. const permission = $(this).data('permission');
  91. const permissionShowString = getPermissionString(permission);
  92. $(this).prev(".permission-string").html(permissionShowString);
  93. });
  94. // 点击编辑权限按钮
  95. let currentPermission = [];
  96. let currentId = 0;
  97. let currentTarget = null;
  98. $(".permission").click(function() {
  99. const permission = $(this).data('permission');
  100. currentPermission = permission.split(',');
  101. currentId = $(this).data('id');
  102. currentTarget = $(this);
  103. });
  104. // 初始化弹窗数据
  105. $("#permission-form").on("show.bs.modal", function() {
  106. let html = '';
  107. for (const index in permissionList) {
  108. html += '<div class="form-group">' +
  109. '<label><i class="fa '+ permissionList[index].icon +'"></i> '+ permissionList[index].name +'</label>' +
  110. '<div>';
  111. for (const child of permissionList[index].permission) {
  112. const checkedString = currentPermission.indexOf(child.value + '') >= 0 ? 'checked="checked"' : '';
  113. html += '<div class="form-check form-check-inline">' +
  114. '<input class="form-check-input" type="checkbox" name="permission" value="'+ child.value +'" '+ checkedString +'>' +
  115. '<label class="form-check-label">'+ child.name +'</label>' +
  116. '</div>';
  117. }
  118. html += '</div></div>';
  119. }
  120. $(this).find('.modal-body').html(html);
  121. });
  122. // 修改数据
  123. let isChanging = false;
  124. $("#modify-permission").click(function() {
  125. currentId = parseInt(currentId);
  126. if (isNaN(currentId) || currentId <= 0 || isChanging) {
  127. return false;
  128. }
  129. const selectPermission = [];
  130. $("input[name='permission']").each(function() {
  131. if ($(this).is(":checked")) {
  132. selectPermission.push($(this).val());
  133. }
  134. });
  135. if (selectPermission.length <= 0) {
  136. alert('请选择权限!');
  137. return false;
  138. }
  139. $.ajax({
  140. url: '/project/account/permission/' + currentId + "?_csrf_j=<%= ctx.csrf %>",
  141. type: 'post',
  142. data: { permission: selectPermission.join(',') },
  143. error: function() {
  144. alert('通信错误');
  145. isChanging = false;
  146. },
  147. beforeSend: function() {
  148. isChanging = true;
  149. },
  150. success: function(response) {
  151. isChanging = false;
  152. if (response.err !== 0) {
  153. alert(response.msg);
  154. return false;
  155. }
  156. const permissionShowString = getPermissionString(selectPermission);
  157. currentTarget.prev(".permission-string").html(permissionShowString);
  158. $("#permission-form").modal('hide');
  159. }
  160. });
  161. });
  162. });
  163. function getPermissionString(permission) {
  164. let result = '';
  165. permission = permission instanceof Array ? permission : permission.split(",");
  166. if (permission.length <= 0) {
  167. return result;
  168. }
  169. const permissionArr = [];
  170. for (const tmp of permission) {
  171. if (permissionString[tmp] !== undefined) {
  172. permissionArr.push(permissionString[tmp]);
  173. }
  174. }
  175. return permissionArr.join(',');
  176. }
  177. </script>