empUserFormAuthDataScope.html 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <% layout('/layouts/default.html', {title: '用户管理', libs: ['validate', 'zTree']}){ %>
  2. <div class="main-content">
  3. <div class="box box-main">
  4. <div class="box-header">
  5. <div class="box-title">
  6. <i class="fa icon-people"></i> ${text('用户分配数据权限')}
  7. </div>
  8. <div class="box-tools pull-right">
  9. <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
  10. </div>
  11. </div>
  12. <#form:form id="inputForm" model="${empUser}" action="${ctx}/sys/empUser/saveAuthDataScope" method="post" class="form-horizontal">
  13. <#form:hidden path="userCode"/>
  14. <div class="box-body"><br/>
  15. <div class="row">
  16. <div class="col-xs-6">
  17. <div class="form-group">
  18. <label class="control-label col-sm-4" title="">
  19. <span class="required ">*</span> ${text('登录账号')}:<i class="fa icon-question hide"></i></label>
  20. <div class="col-sm-8">
  21. <#form:input path="loginCode" maxlength="32" readonly="${!empUser.isNewRecord}" class="form-control required "/>
  22. </div>
  23. </div>
  24. </div>
  25. <div class="col-xs-6">
  26. <div class="form-group">
  27. <label class="control-label col-sm-4" title="">
  28. <span class="required ">*</span> ${text('用户昵称')}:<i class="fa icon-question hide"></i></label>
  29. <div class="col-sm-8">
  30. <#form:input path="userName" maxlength="32" readonly="${!empUser.isNewRecord}" class="form-control required "/>
  31. </div>
  32. </div>
  33. </div>
  34. </div>
  35. <div class="form-unit">${text('数据权限')}</div>
  36. <div id="dataScopeTrees"></div>
  37. <script id="dataScopeTpl" type="text/template">
  38. <div class="pull-left" style="padding:0 15px;min-width:300px;">
  39. <div class="box box-solid box-trees">
  40. <div class="box-header">
  41. <div class="box-title icheck">
  42. <label><input type="checkbox" id="checkall_{{d.key}}"
  43. class="checkall"/> {{d.label}}</label>
  44. </div>
  45. <div class="box-tools pull-right" style="top:8px;">
  46. <a class="btn btn-box-tool" id="expand_{{d.key}}"
  47. value="dataScopeTree_{{d.key}}" >${text('展开')}</a>/<a
  48. class="btn btn-box-tool" id="collapse_{{d.key}}"
  49. value="dataScopeTree_{{d.key}}" >${text('折叠')}</a>
  50. </div>
  51. </div>
  52. <div class="box-body">
  53. <div id="dataScopeTree_{{d.key}}" class="ztree"></div>
  54. </div>
  55. </div>
  56. </div>
  57. </script>
  58. <#form:hidden name="userDataScopeListJson"/>
  59. </div>
  60. <div class="box-footer">
  61. <div class="row">
  62. <div class="col-sm-offset-2 col-sm-10">
  63. <% if (hasPermi('sys:empUser:authDataScope')){ %>
  64. <button type="submit" class="btn btn-sm btn-primary" id="btnSubmit"><i class="fa fa-check"></i> ${text('保 存')}</button>&nbsp;
  65. <% } %>
  66. <button type="button" class="btn btn-sm btn-default" id="btnCancel" onclick="js.closeCurrentTabPage()"><i class="fa fa-reply-all"></i> ${text('关 闭')}</button>
  67. </div>
  68. </div>
  69. </div>
  70. </#form:form>
  71. </div>
  72. </div>
  73. <% } %>
  74. <script>
  75. $("#inputForm").validate({
  76. submitHandler: function(form){
  77. // 获取数据权限数据
  78. var dataScopeData = [];
  79. $.each(dataScopeTrees, function(key, dataScopeTree){
  80. var treeNodes = dataScopeTree.getCheckedNodes(true);
  81. for(var i=0; i<treeNodes.length; i++) {
  82. dataScopeData.push({
  83. ctrlType: key, ctrlData: treeNodes[i].id
  84. });
  85. }
  86. });
  87. $("#userDataScopeListJson").val(JSON.stringify(dataScopeData));
  88. // 提交表单数据
  89. js.ajaxSubmitForm($(form), function(data){
  90. js.showMessage(data.message);
  91. if(data.result == Global.TRUE){
  92. js.closeCurrentTabPage(function(contentWindow){
  93. contentWindow.page();
  94. });
  95. }
  96. }, "json");
  97. }
  98. });
  99. //加载数据权限树结构
  100. var setting = {
  101. check:{enable:true,nocheckInherit:true},
  102. view:{selectedMulti:false,nameIsHTML: true},
  103. data:{simpleData:{enable:true},key:{title:"title"}},
  104. callback:{
  105. beforeClick: function (treeId, treeNode, clickFlag) {
  106. var tree = $.fn.zTree.getZTreeObj(treeId);
  107. tree.checkNode(treeNode, !treeNode.checked, true, true);
  108. return false;
  109. },
  110. onCheck: function (event, treeId, treeNode){ }
  111. }
  112. },
  113. moduleCodes = '${toJson(moduleCodes)}';
  114. dataScopes = ${toJson(dataScopes)},
  115. dataScopeTrees = {}; // 用sysCode分类存储所有菜单树
  116. for (var i=0; i<dataScopes.length; i++){
  117. var dataScope = dataScopes[i];
  118. // 验证模块是否开启,如果未开启,则跳过
  119. if (moduleCodes.indexOf("\""+dataScope.moduleCode+"\"") == -1){
  120. continue;
  121. }
  122. // 控制权限 ctrlPermi: 0全部 1拥有权限 2管理权限
  123. if (!(dataScope.ctrlPermi == '0' || dataScope.ctrlPermi == '1')){
  124. continue;
  125. }
  126. $('#dataScopeTrees').append(js.template('dataScopeTpl', {
  127. key: dataScope.ctrlType, label: dataScope.ctrlName_${lang()} || dataScope.ctrlName}));
  128. var ctrlDataUrl = dataScope.ctrlDataUrl || '';
  129. $.ajax({
  130. type: 'POST',
  131. url: "${ctx}" + ctrlDataUrl + (ctrlDataUrl.indexOf("?")!=-1?'&':'?') + "___t=" + new Date().getTime(),
  132. data: {ctrlPermi: '${ctrlPermi}'},
  133. dataType: 'json',
  134. async: false,
  135. error: function(data){
  136. js.showErrorMessage(data.responseText);
  137. },
  138. success: function(data, status, xhr){
  139. // 初始化树结构
  140. var tree = $.fn.zTree.init($("#dataScopeTree_"+dataScope.ctrlType), setting, data);
  141. tree.setting.check.chkboxType = dataScope.chkboxType;
  142. // 默认展开节点(如果级别设置为-1,则:如果有1个根节点,则展开一级节点,否则不展开)
  143. $.fn.zTree.expandNodeByLevel(tree, dataScope.expandLevel);
  144. // 树结构:全选、取消全选
  145. $('#checkall_'+dataScope.ctrlType).iCheck({
  146. checkboxClass:'icheckbox_minimal-grey'
  147. }).on('ifChecked ifUnchecked', function(){
  148. var ctrlType = $(this).attr('ctrlType');
  149. if(this.checked){
  150. dataScopeTrees[ctrlType].checkAllNodes(true);
  151. }else{
  152. dataScopeTrees[ctrlType].checkAllNodes(false);
  153. }
  154. }).attr("ctrlType", dataScope.ctrlType);
  155. // 展开和折叠按钮绑定
  156. $('#expand_'+dataScope.ctrlType).click(function(){
  157. var ctrlType = $(this).attr('ctrlType');
  158. dataScopeTrees[ctrlType].expandAll(true);
  159. }).attr("ctrlType", dataScope.ctrlType);
  160. $('#collapse_'+dataScope.ctrlType).click(function(){
  161. var ctrlType = $(this).attr('ctrlType');
  162. dataScopeTrees[ctrlType].expandAll(false);
  163. }).attr("ctrlType", dataScope.ctrlType);
  164. // 将树对象存储到全局数组里
  165. dataScopeTrees[dataScope.ctrlType] = tree;
  166. }
  167. });
  168. }
  169. // 默认选择节点
  170. //<% for(dataScope in userDataScopeList){ %>
  171. try{dataScopeTrees['${dataScope.ctrlType}'].checkNode(dataScopeTrees['${dataScope.ctrlType}']
  172. .getNodeByParam("id","${dataScope.ctrlData}"), true, false);}catch(e){}
  173. //<% } %>
  174. </script>