SysRoles.cshtml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. @using ShwasherSys.Authorization.Permissions
  2. @using ShwasherSys.Models.Layout
  3. @using ShwasherSys.Models.Modal
  4. @{
  5. /**/
  6. ViewBag.ActiveMenu = PermissionNames.PagesSystemRoles; //The menu item will be active for this page.
  7. ViewBag.Title = "角色管理";
  8. List<SelectListItem> roleType = ViewBag.RoleType;
  9. var searchForm = new SearchFormViewModal(new List<SearchItem>()
  10. {
  11. new SearchItem("name","角色编号"),
  12. new SearchItem("roleDisplayName","角色名称"),
  13. new SearchItem("roleType","角色类型",FiledType.I )
  14. .SetSearchItem(roleType)
  15. }, false);
  16. }
  17. <link href="~/Content/Plugins/jstree/themes/default/style.min.css" rel="stylesheet" />
  18. <link href="~/Content/Plugins/jstree/themes/jstree-self.css" rel="stylesheet" />
  19. <div class="table-box mr-4 iwb-bootstrap-table">
  20. @Html.Action("ToolMenu", "Layout", new { pageName = ViewBag.ActiveMenu, searchForm })
  21. <table id="table"
  22. data-url="/api/services/app/Roles/GetAllRole"
  23. data-striped="true" data-id-field="id" data-unique-id="id"
  24. data-method="post"
  25. data-side-pagination="server"
  26. data-content-type="application/x-www-form-urlencoded; charset=UTF-8"
  27. data-cache="false"
  28. data-pagination="true" data-page-size="30" data-page-number="1" data-page-list="[30,50,100,200]" data-pagination-detail-h-align="right" data-pagination-h-align="left"
  29. data-query-params="QueryParams"
  30. data-response-handler="ResponseHandler"
  31. data-click-to-select="true"
  32. data-single-select="true">
  33. <thead>
  34. <tr class="row" id="header">
  35. <th data-field="state" data-checkbox="true"></th>
  36. <th data-align="center" data-field="name">角色编号</th>
  37. <th data-align="center" data-field="roleDisplayName">角色名称</th>
  38. <th data-align="center" data-field="roleTypeName" data-formatter="RoleTypeFormatter">角色类型</th>
  39. <th data-align="center" data-field="description">角色详情</th>
  40. <th data-align="center" data-field="lastModificationTime">最后修改时间</th>
  41. <th data-align="center" data-field="lastModifierUserName">最后修改人</th>
  42. </tr>
  43. </thead>
  44. </table>
  45. </div>
  46. @section modal{
  47. <section>
  48. <!--Main Modal-->
  49. <div class="modal fade" id="modal" role="dialog" tabindex="-1" aria-labelledby="ModalLabel" aria-hidden="true">
  50. <div class="modal-dialog modal-dialog-centered" role="document">
  51. <div class="modal-content">
  52. @Html.Partial("Modals/_ModalHeader", new ModalHeaderViewModel("角色"))
  53. @{
  54. var inputs = new List<InputViewModel>
  55. {
  56. new InputViewModel("id", hide: true),
  57. new InputViewModel("name", displayName: "角色编号"),
  58. new InputViewModel("roleDisplayName", displayName: "角色名称"),
  59. new InputViewModel("roleType",InputTypes.List, "角色类型")
  60. .SetSelectOptions(roleType),
  61. new InputViewModel("description",InputTypes.Textarea, "角色详情").SetNotRequired(),
  62. };
  63. //var specials = new List<SpecialInputModel>();
  64. }
  65. @Html.Partial("Modals/_ModalBody", new ModalBodyViewModel(inputs))
  66. @Html.Partial("Modals/_ModalFooter", "0")
  67. </div>
  68. </div>
  69. </div>
  70. </section>
  71. <section>
  72. <!--Auth Modal -->
  73. <div class="modal fade" id="auth_Modal" role="dialog" aria-labelledby="ModalLabel_AUTH" aria-hidden="true">
  74. <div class="modal-dialog modal-dialog-centered" role="document" style="min-height: 700px;">
  75. <div class="modal-content">
  76. @Html.Partial("Modals/_ModalHeader", new ModalHeaderViewModel("角色权限配置", ""))
  77. <form>
  78. <div class="modal-body" style="max-height: 500px; overflow: auto">
  79. <div class="" id="auth-tree"></div>
  80. </div>
  81. </form>
  82. <div class="modal-footer">
  83. <button type="button" class="btn btn-default waves-effect" data-dismiss="modal">@L("Cancel")</button>
  84. <button type="button" class="btn btn-primary save-btn waves-effect">@L("Save")</button>
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. </section>
  90. @*<section>
  91. Auth Modal
  92. <div class="modal fade" id="auth_Modal" role="dialog" aria-labelledby="ModalLabel_AUTH" aria-hidden="true">
  93. <div class="modal-dialog modal-dialog-centered" role="document" style="min-height: 700px;">
  94. <div class="modal-content">
  95. @Html.Partial("Modals/_ModalHeader", new ModalHeaderViewModel("角色权限配置", ""))
  96. <form>
  97. <div class="modal-body" style="max-height: 500px;overflow: auto">
  98. </div>
  99. </form>
  100. <div class="modal-footer">
  101. <div class="pull-left" id="checkAll" style="margin: 10px 20px 0 70px;color: red;">
  102. <input class="filled-in" type="checkbox" name="checkAll" value="" />
  103. <label style="font-size: 15px">全选</label>
  104. </div>
  105. <button type="button" class="btn btn-default waves-effect" data-dismiss="modal">@L("Cancel")</button>
  106. <button type="button" class="btn btn-primary save-btn waves-effect">@L("Save")</button>
  107. </div>
  108. </div>
  109. </div>
  110. </div>
  111. </section>*@
  112. }
  113. @section scripts
  114. {
  115. <script src="~/Content/Plugins/jstree/jstree.min.js"></script>
  116. <script type="text/javascript">
  117. $(function () {
  118. LoadTable();
  119. var funs = window.funs || { none: function () { console.log("No type"); } };
  120. funs["btnUpdate"] = function () { BtnUpdate({ readonly: "name,accountTypeName" }); };
  121. funs["btnAuth"] = function () {
  122. var rows = config.table.bootstrapTable("getSelections");
  123. if (rows.length === 1) {
  124. abp.ui.setBusy();
  125. var roleId = rows[0].id;
  126. abp.ajax({
  127. url: abp.appPath + 'System/GetRolePermission?roleId=' + roleId,
  128. type: 'POST',
  129. dataType: "json",
  130. success: function (res) {
  131. $("#auth_Modal").on('show.bs.modal', function () {
  132. AuthFormate(res);
  133. $("#auth_Modal").find("button.save-btn").off("click").on("click", function () {
  134. var authData = GetAuthData(roleId);
  135. SaveAjax({
  136. url: $("#tableTool").find('.btn[data-type=btnAuth]').data('url'),
  137. isValidate: false,
  138. success: function () { $("#auth_Modal").modal("hide"); },
  139. data: authData
  140. });
  141. });
  142. });
  143. $("#auth_Modal").modal("show");
  144. abp.ui.clearBusy();
  145. }
  146. });
  147. } else
  148. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  149. };
  150. });
  151. </script>
  152. <script>
  153. function AuthFormate(data) {
  154. var authData = [];
  155. authData.push(data);
  156. authData = AuthDataConvert(authData).authData;
  157. console.log(authData);
  158. $("#auth-tree").jstree("destroy");
  159. $("#auth-tree").jstree({
  160. plugins: ["wholerow", "checkbox", "types"],
  161. core: {
  162. themes: {
  163. responsive: false
  164. },
  165. data: authData
  166. },
  167. types: {
  168. default:
  169. {
  170. icon: "fa fa-folder m--font-warning"
  171. },
  172. file: {
  173. icon: "fa fa-file m--font-warning"
  174. }
  175. }
  176. });
  177. }
  178. function AuthDataConvert(data) {
  179. //console.log(data);
  180. var authData = [], j = 0;
  181. for (var i = 0; i < data.length; i++) {
  182. var item = data[i], newItem = [];
  183. newItem["id"] = item.name;
  184. newItem["text"] = item.permDisplayName;
  185. newItem["icon"] = item.icon + " iconfont m--font-warning";
  186. newItem["state"] = {};
  187. newItem["state"].opened = item.isOpen;
  188. var childResult = { "authData": [], "isAuth": true };
  189. if (item.children && item.children.length > 0) {
  190. childResult = AuthDataConvert(item.children);
  191. newItem["children"] = childResult.authData;
  192. }
  193. if (!(item.isAuth && childResult.isAuth)) {
  194. j++;
  195. }
  196. newItem["state"].selected = item.isAuth && childResult.isAuth;
  197. authData.push(newItem);
  198. }
  199. var result = { "authData": authData, "isAuth": j === 0 };
  200. return result;
  201. }
  202. function GetAuthData(roleId) {
  203. var authData = { Id: roleId, PermissionNames: [] };
  204. var permissionNames = $('#auth-tree').jstree(true).get_selected(false);//获得所有选中节点,返回值为数组
  205. //console.log(1,permissionNames);
  206. //加上灰色的节点
  207. $(".jstree-undetermined").each(function () {
  208. permissionNames.push($(this).parent().parent().attr('id'));
  209. });
  210. //console.log(2,permissionNames);
  211. authData.PermissionNames = permissionNames;
  212. return authData;
  213. }
  214. </script>
  215. <script>
  216. function RoleTypeFormatter(v, r) {
  217. if (r.roleType === 1) {
  218. return '<span class="label label-danger">' + v + '</span>';
  219. } else if (r.roleType === 2) {
  220. return '<span class="label label-success">' + v + '</span>';
  221. } else if (r.roleType === 3) {
  222. return '<span class="label label-warning">' + v + '</span>';
  223. } else if (r.roleType === 4) {
  224. return '<span class="label label-primary">' + v + '</span>';
  225. }
  226. return v;
  227. }
  228. //function AccountTypeFormatter(v, r) {
  229. // if (r.accountType === 1) {
  230. // return '<span class="label label-danger">系统用户</span>';
  231. // } else if (r.accountType === 2) {
  232. // return '<span class="label label-success">来宾用户</span>';
  233. // }
  234. // return v;
  235. //}
  236. </script>
  237. @*<script type="text/javascript">
  238. $(function () {
  239. LoadTable();
  240. var funs = window.funs || { none: function () { console.log("No type"); } };
  241. funs["btnUpdate"] = function () { BtnUpdate({ readonly: "name" }); };
  242. funs["btnAuth"] = function () {
  243. var rows = config.table.bootstrapTable("getSelections");
  244. if (rows.length === 1) {
  245. var roleId = rows[0].id;
  246. $.ajax({
  247. url: abp.appPath + 'System/RoleAuthModal?roleId=' + roleId,
  248. type: 'POST',
  249. //contentType: 'application/html',
  250. dataType: "html",
  251. success: function (content) {
  252. //console.log(0);
  253. if (content === "") {
  254. return;
  255. }
  256. $("#auth_Modal").on('show.bs.modal',
  257. function () {
  258. $("#auth_Modal").find(".modal-body").empty().append(content);
  259. $("#auth_Modal").find("button.save-btn").off("click").on("click",
  260. function () {
  261. var authData = GetAuthData(roleId);
  262. SaveAjax({
  263. url: $("#tableTool").find('.btn[data-type=btnAuth]').data('url'),
  264. isValidate: false,
  265. success: function () { $("#auth_Modal").modal("hide"); },
  266. data: authData
  267. });
  268. });
  269. });
  270. $("#auth_Modal").modal("show");
  271. },
  272. error: function () {
  273. return;
  274. }
  275. });
  276. } else
  277. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  278. };
  279. });
  280. function GetAuthData(roleId) {
  281. var authData = { Id: roleId, PermissionNames: [] };
  282. var perms = $("input[name='permission']:checked");
  283. if (perms) {
  284. for (var i = 0; i < perms.length; i++) {
  285. var perm = $(perms[i]);
  286. authData.PermissionNames.push(perm.val());
  287. }
  288. }
  289. return authData;
  290. }
  291. </script>*@
  292. }