permissionsList.ftl 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. <!DOCTYPE HTML>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <#include "../layout/header.ftl"/>
  5. <#include "../layout/common.cssjs.ftl"/>
  6. <script type="text/javascript">
  7. function onClick (event, treeId, treeNode) {
  8. $("#pid").val(treeNode.id);
  9. $.cookie("select_res_id", treeNode.id, { path: '/' });
  10. $.cookie("select_app_id", $("#appId").val(), { path: '/' });
  11. $.cookie("select_res_name", treeNode.name,{ path: '/' });
  12. $("#searchBtn").click();
  13. }
  14. $(function () {
  15. $("#savePermBtn").click(function(){
  16. var roleId="";
  17. if($("#datagrid").length>0){//get grid list selected ids
  18. var selRows = $('#datagrid').bootstrapTable('getSelections');
  19. for (var i=0;i<selRows.length; i++){
  20. roleId=roleId+","+selRows[i].id;
  21. break;
  22. }
  23. roleId=roleId.substring(1);
  24. }
  25. if(roleId == null || roleId == "") {
  26. $.alert({content:$.platform.messages.select.alertText});
  27. return;
  28. }
  29. var resIds="";
  30. var nodes = $.fn.zTree.getZTreeObj("resourcesTree").getCheckedNodes(true);
  31. for(var i=0;i<nodes.length;i++){
  32. resIds=resIds+","+nodes[i].id;
  33. }
  34. resIds=resIds.substring(1);
  35. $.post("<@base/>/permissions/savepermissions",
  36. {
  37. appId:$("#appId").val(),
  38. roleId:roleId,
  39. resourceId:resIds,
  40. currTime:(new Date()).getTime()
  41. },
  42. function(data) {
  43. if (typeof(afterDelete) == "function"){
  44. afterDelete(data);//call back action
  45. }
  46. //alert delete result
  47. $.alert({content:data.message,type:$.platform.messages.messageType[data.messageType]});
  48. //refresh grid list
  49. });
  50. });
  51. $('#datagrid').on('click-row.bs.table', function (row, element, field) {
  52. if($("#appId").val() == null || $("#appId").val() == "") {
  53. $.alert({content:$.platform.messages.select.alertText});
  54. return;
  55. }
  56. $.post("<@base/>/permissions/querypermissions",
  57. {
  58. appId:$("#appId").val(),
  59. roleId:element.id,
  60. currTime:(new Date()).getTime()
  61. },
  62. function(data) {
  63. if (typeof(afterDelete) == "function"){
  64. afterDelete(data);//call back action
  65. }
  66. var zTree = $.fn.zTree.getZTreeObj("resourcesTree");
  67. zTree.checkAllNodes(false);
  68. for(var permsData of data){
  69. var node = zTree.getNodeByParam("id",permsData.resourceId);
  70. zTree.checkNode(node, true, true);
  71. }
  72. });
  73. });
  74. $("#changTreeBtn").click(function(){
  75. var treeSettings={
  76. element : "resourcesTree",
  77. rootId : "1",
  78. checkbox : true,
  79. onClick : onClick,
  80. onDblClick : null,
  81. url : "<@base/>/resources/tree/"
  82. };
  83. function singlePath(newNode) {
  84. if (newNode === curExpandNode) return;
  85. if (curExpandNode && curExpandNode.open==true) {
  86. var zTree = $.fn.zTree.getZTreeObj(treeSettings.element);
  87. if (newNode.parentTId === curExpandNode.parentTId) {
  88. zTree.expandNode(curExpandNode, false);
  89. } else {
  90. var newParents = [];
  91. while (newNode) {
  92. newNode = newNode.getParentNode();
  93. if (newNode === curExpandNode) {
  94. newParents = null;
  95. break;
  96. } else if (newNode) {
  97. newParents.push(newNode);
  98. }
  99. }
  100. if (newParents!=null) {
  101. var oldNode = curExpandNode;
  102. var oldParents = [];
  103. while (oldNode) {
  104. oldNode = oldNode.getParentNode();
  105. if (oldNode) {
  106. oldParents.push(oldNode);
  107. }
  108. }
  109. if (newParents.length>0) {
  110. for (var i = Math.min(newParents.length, oldParents.length)-1; i>=0; i--) {
  111. if (newParents[i] !== oldParents[i]) {
  112. zTree.expandNode(oldParents[i], false);
  113. break;
  114. }
  115. }
  116. } else {
  117. zTree.expandNode(oldParents[oldParents.length-1], false);
  118. }
  119. }
  120. }
  121. }
  122. curExpandNode = newNode;
  123. };
  124. function beforeExpand(treeId, treeNode) {
  125. var pNode = curExpandNode ? curExpandNode.getParentNode():null;
  126. var treeNodeP = treeNode.parentTId ? treeNode.getParentNode():null;
  127. var zTree = $.fn.zTree.getZTreeObj(""+treeSettings.element);
  128. for(var i=0, l=!treeNodeP ? 0:treeNodeP.children.length; i<l; i++ ) {
  129. if (treeNode !== treeNodeP.children[i]) {
  130. zTree.expandNode(treeNodeP.children[i], false);
  131. }
  132. }
  133. while (pNode) {
  134. if (pNode === treeNode) {
  135. break;
  136. }
  137. pNode = pNode.getParentNode();
  138. }
  139. if (!pNode) {
  140. singlePath(treeNode);
  141. }
  142. };
  143. $.fn.zTree.init(
  144. $("#"+treeSettings.element), //element
  145. {//json object
  146. check : {
  147. enable : treeSettings.checkbox
  148. },
  149. async : {
  150. enable : true,
  151. url : treeSettings.url,
  152. autoParam : ["id", "name=n", "level=lv"],
  153. otherParam : {
  154. "otherParam":"zTreeAsyncTest",
  155. id:treeSettings.rootId,
  156. "appId":$("#appId").val(),
  157. "appName":$("#appName").val(),
  158. }
  159. },
  160. data : {
  161. simpleData : {
  162. enable : true
  163. }
  164. },
  165. callback: {
  166. onClick : treeSettings.onClick,
  167. onDblClick : treeSettings.onDblClick,
  168. beforeAsync : function(treeId, treeNode){
  169. $.loading();
  170. },
  171. onAsyncSuccess : function(event, treeId, treeNode, msg){
  172. $.unloading();
  173. },
  174. //beforeExpand : beforeExpand,
  175. onExpand : function onExpand(event, treeId, treeNode) {
  176. curExpandNode = treeNode;
  177. }
  178. }
  179. }
  180. );//end tree
  181. });
  182. });
  183. </script>
  184. </head>
  185. <body>
  186. <div class="app header-default side-nav-dark">
  187. <div class="layout">
  188. <div class="header navbar">
  189. <#include "../layout/top.ftl"/>
  190. </div>
  191. <div class="col-md-3 sidebar-nav side-nav" >
  192. <#include "../layout/sidenav.ftl"/>
  193. </div>
  194. <div class="page-container">
  195. <div class="main-content">
  196. <div class="container-fluid">
  197. <div class="breadcrumb-wrapper row">
  198. <div class="col-12 col-lg-3 col-md-6">
  199. <h4 class="page-title"><@locale code="navs.role.permissions"/></h4>
  200. </div>
  201. <div class="col-12 col-lg-9 col-md-6">
  202. <ol class="breadcrumb float-right">
  203. <li><a href="<@base/>/main"><@locale code="navs.home"/></a></li>
  204. <li class="active">/ <@locale code="navs.resources"/></li>
  205. </ol>
  206. </div>
  207. </div>
  208. </div>
  209. <div class="container-fluid">
  210. <div class="col-12 grid-margin">
  211. <div class="card">
  212. <div class="card-body">
  213. <table class="table table-bordered">
  214. <tr>
  215. <td style="width:80px;"><@locale code="role.name"/>:</td>
  216. <td style="width:350px;">
  217. <form id="basic_search_form">
  218. <input class="form-control" style="width:200px;float: left;" value="" id="name" name="name" type="text" >
  219. <input class="button btn btn-primary mr-3" id="searchBtn" type="button" size="50" value="<@locale code="button.text.search"/>">
  220. </form>
  221. </td>
  222. <td style="width:120px;"><@locale code="apps.name"/>:</td>
  223. <td style="width:500px;">
  224. <form id="resources_search_form">
  225. <input class="form-control appId" id="appId" name="appId" value="" type="hidden" >
  226. <input class="form-control" id="pid" name="pid" value="" type="hidden" >
  227. <input class="form-control appName" style="width:200px;float: left;" value="" id="appName" name="appName" type="text" >
  228. <input class="button btn btn-success mr-3 window" style="float: left;" id="selectBtn" type="button" value="<@locale code="button.text.select"/>"
  229. wurl="<@base/>/apps/select"
  230. wwidth="700"
  231. wheight="500"
  232. target="window">
  233. <input class="button btn btn-primary mr-3" id="changTreeBtn" type="button" size="50" value="<@locale code="button.text.search"/>">
  234. </form>
  235. </td>
  236. <td >
  237. <div id="tool_box_right" style="width:100px;">
  238. <input class="button btn btn-success mr-3 " id="savePermBtn" type="button" value="<@locale code="button.text.save"/>"/>
  239. </div>
  240. </td>
  241. </tr>
  242. </table>
  243. </div>
  244. <div id="advanced_search">
  245. <form id="advanced_search_form">
  246. </form>
  247. </div>
  248. <table class="datatable" width="100%" >
  249. <tr>
  250. <td valign="top" class="td_1" style="vertical-align: top;width:450px;">
  251. <table data-url="<@base/>/roles/grid"
  252. id="datagrid"
  253. data-toggle="table"
  254. data-classes="table table-bordered table-hover table-striped"
  255. data-click-to-select="true"
  256. data-pagination="true"
  257. data-total-field="records"
  258. data-page-list="[10, 25, 50, 100]"
  259. data-search="false"
  260. data-single-select="true"
  261. data-locale="zh-CN"
  262. data-query-params="dataGridQueryParams"
  263. data-query-params-type="pageSize"
  264. data-side-pagination="server">
  265. <thead>
  266. <tr>
  267. <th data-checkbox="true"></th>
  268. <th data-sortable="true" data-field="id" data-visible="false">Id</th>
  269. <th data-field="name"><@locale code="role.name"/></th>
  270. <th data-field="description"><@locale code="common.text.description"/></th>
  271. </tr>
  272. </thead>
  273. </table>
  274. </td>
  275. <td valign="top" class="td_1" style="vertical-align: top;">
  276. <div id="resourcesTree" class="ztree"></div>
  277. </td>
  278. </tr>
  279. </table>
  280. </div>
  281. </div>
  282. <footer class="content-footer">
  283. <#include "../layout/footer.ftl"/>
  284. </footer>
  285. </div>
  286. </div>
  287. </div>
  288. <div id="preloader">
  289. <div class="loader" id="loader-1"></div>
  290. </div>
  291. </body>
  292. </html>