main
tamguo 7 years ago
parent c662a94ad1
commit 429bb73a3f

@ -1,8 +1,7 @@
package com.tamguo.modules.sys.service; package com.tamguo.modules.sys.service;
import java.util.List;
import java.util.Map; import java.util.Map;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService; import com.baomidou.mybatisplus.service.IService;
import com.tamguo.modules.sys.model.SysRoleEntity; import com.tamguo.modules.sys.model.SysRoleEntity;
@ -23,7 +22,7 @@ public interface ISysRoleService extends IService<SysRoleEntity>{
void allowDataScope(SysRoleEntity role); void allowDataScope(SysRoleEntity role);
/** 角色树形结构*/ /** 角色树形结构*/
List<SysRoleEntity> treeDate(String userType); JSONArray treeDate(String userType);
/** 修改角色*/ /** 修改角色*/
void update(SysRoleEntity role); void update(SysRoleEntity role);

@ -126,10 +126,27 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRoleEntity
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
public List<SysRoleEntity> treeDate(String userType) { public JSONArray treeDate(String userType) {
return sysRoleMapper.selectList(Condition.create().eq("user_type", userType)); if(StringUtils.isEmpty(userType)) {
return this.transformTreeDate(sysRoleMapper.selectList(Condition.create().eq("is_sys", "0")));
}
return this.transformTreeDate(sysRoleMapper.selectList(Condition.create().eq("is_sys", "0").eq("user_type", userType)));
} }
private JSONArray transformTreeDate(List<SysRoleEntity> roles) {
if(roles != null) {
JSONArray entitys = new JSONArray();
for(int i=0 ; i<roles.size() ; i++) {
JSONObject entity = new JSONObject();
entity.put("id", roles.get(i).getRoleCode());
entity.put("name", roles.get(i).getRoleName());
entitys.add(entity);
}
return entitys;
}
return null;
}
@Transactional(readOnly=false) @Transactional(readOnly=false)
@Override @Override
public void update(SysRoleEntity role) { public void update(SysRoleEntity role) {

@ -20,6 +20,7 @@ import com.tamguo.modules.sys.utils.Result;
public class SecAdminController { public class SecAdminController {
private final String SECADMIN_INDEX_PAGE = "modules/sys/secAdmin/index"; private final String SECADMIN_INDEX_PAGE = "modules/sys/secAdmin/index";
private final String SECADMIN_ADD_PAGE = "modules/sys/secAdmin/add";
@Autowired @Autowired
private ISysUserService iSysUserService; private ISysUserService iSysUserService;
@ -29,6 +30,20 @@ public class SecAdminController {
return SECADMIN_INDEX_PAGE; return SECADMIN_INDEX_PAGE;
} }
@RequestMapping(path="add")
public ModelAndView add(String userCode , ModelAndView model) {
model.setViewName(SECADMIN_ADD_PAGE);
model.addObject("user", iSysUserService.selectById(userCode));
return model;
}
@RequestMapping(path="save")
@ResponseBody
public Result save(SysUserEntity user , ModelAndView model) {
iSysUserService.saveUserDataScope(user);
return Result.result(0, null, "【"+user.getUserName()+"】保存数据权限成功!");
}
@RequestMapping(path="listData",method=RequestMethod.POST) @RequestMapping(path="listData",method=RequestMethod.POST)
@ResponseBody @ResponseBody
public Map<String, Object> listData(SysUserCondition condition) { public Map<String, Object> listData(SysUserCondition condition) {

@ -1,6 +1,5 @@
package com.tamguo.modules.sys.web; package com.tamguo.modules.sys.web;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@ -9,6 +8,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.mapper.Condition; import com.baomidou.mybatisplus.mapper.Condition;
import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.plugins.Page;
import com.tamguo.modules.sys.model.SysRoleEntity; import com.tamguo.modules.sys.model.SysRoleEntity;
@ -125,7 +125,7 @@ public class SysRoleController {
/** 角色树结构*/ /** 角色树结构*/
@RequestMapping(path="treeData",method=RequestMethod.POST) @RequestMapping(path="treeData",method=RequestMethod.POST)
@ResponseBody @ResponseBody
public List<SysRoleEntity> treeData(String userType){ public JSONArray treeData(String userType){
try { try {
return iSysRoleService.treeDate(userType); return iSysRoleService.treeDate(userType);
} catch (Exception e) { } catch (Exception e) {
@ -157,7 +157,6 @@ public class SysRoleController {
} catch (Exception e) { } catch (Exception e) {
return ExceptionSupport.resolverResult("新增角色", this.getClass(), e); return ExceptionSupport.resolverResult("新增角色", this.getClass(), e);
} }
} }
} }

@ -0,0 +1,242 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><meta content="webkit" name="renderer"/><meta http-equiv="X-UA-Compatible"
content="IE=edge"><meta name="keywords" content="PoweredByJeeSiteV4.0"/><meta http-equiv="Cache-Control"
content="no-cache, no-store, must-revalidate"/><meta name="description" content="PoweredByJeeSiteV4.0"/><meta
content="no-cache" http-equiv="Pragma"/><meta http-equiv="Expires" content="0"/><meta
content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
<title>二级管理员 - JeeSite Demo</title>
<script th:src="${setting.domain + 'global.min.js'}"></script>
<script th:src="${setting.domain + 'jquery/jquery-1.12.4.min.js'}"></script>
<script th:src="${setting.domain + 'jquery/jquery-migrate-1.4.1.min.js'}"></script>
<!--[if lt IE 9]><script src="/js/static/common/h5fix.min.js"></script><![endif]-->
<link rel="stylesheet" th:href="${setting.domain + 'fonts/font-icons.min.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'bootstrap/css/bootstrap.min.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'select2/4.0/select2.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'icheck/1.0/minimal/grey.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'jquery-ztree/3.5/css/metro/zTreeStyle.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'adminlte/css/AdminLTE.min.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'common/jeesite.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'common/common.css'}">
</head><body class="hold-transition ">
<div class="wrapper"><div class="main-content">
<div class="box box-main">
<div class="box-header">
<div class="box-title">
<i class="fa icon-people"></i> 二级管理员管理数据权限
</div>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<form id="inputForm" th:action="${setting.domain + 'sys/secAdmin/save'}" method="post" class="form-horizontal">
<input type="hidden" id="userCode" name="userCode" value="TEST_y6ee"/>
<div class="box-body"><br/>
<div class="row">
<div class="col-xs-6">
<div class="form-group">
<label class="control-label col-sm-4" title="">
<span class="required ">*</span> 登录账号:<i class="fa icon-question hide"></i></label>
<div class="col-sm-8">
<input type="text" id="loginCode" name="loginCode" th:value="${user.loginCode}" maxlength="32" readonly="true" class="form-control required "/>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="control-label col-sm-4" title="">
<span class="required ">*</span> 用户昵称:<i class="fa icon-question hide"></i></label>
<div class="col-sm-8">
<input type="text" id="userName" name="userName" th:value="${user.userName}" maxlength="32" readonly="true" class="form-control required "/>
</div>
</div>
</div>
</div>
<div class="form-unit">可管理的数据权限</div>
<div id="dataScopeTrees"></div>
<script id="dataScopeTpl" type="text/template">
<div class="pull-left" style="padding:0 15px;min-width:300px;">
<div class="box box-solid" style="background:#FAFAFA">
<div class="box-header">
<div class="box-title icheck">
<label><input type="checkbox" id="checkall_{{d.key}}"
class="checkall"/> {{d.label}}</label>
</div>
<div class="box-tools pull-right" style="top:8px;">
<a class="btn btn-box-tool" id="expand_{{d.key}}"
value="dataScopeTree_{{d.key}}" >展开</a>/<a
class="btn btn-box-tool" id="collapse_{{d.key}}"
value="dataScopeTree_{{d.key}}" >折叠</a>
</div>
</div>
<div class="box-body">
<div id="dataScopeTree_{{d.key}}" class="ztree"></div>
</div>
</div>
</div>
</script>
<input type="hidden" id="userDataScopeListJson" name="userDataScopeListJson" value=""/>
</div>
<div class="box-footer">
<div class="row">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-sm btn-primary" id="btnSubmit"><i class="fa fa-check"></i> 保 存</button>&nbsp;
<button type="button" class="btn btn-sm btn-default" id="btnCancel" onclick="js.closeCurrentTabPage()"><i class="fa fa-reply-all"></i> 关 闭</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<a id="scroll-up" href="#" class="btn btn-sm"><i class="fa fa-angle-double-up"></i></a>
<script th:src="${setting.domain + 'bootstrap/js/bootstrap.min.js'}"></script>
<script th:src="${setting.domain + 'select2/4.0/select2.js'}"></script>
<script th:src="${setting.domain + 'select2/4.0/i18n/zh_CN.js'}"></script>
<script th:src="${setting.domain + 'layer/3.1/layer.js'}"></script>
<script th:src="${setting.domain + 'my97/WdatePicker.js'}"></script>
<script th:src="${setting.domain + 'jquery-ztree/3.5/js/jquery.ztree.all-3.5.js'}"></script>
<script th:src="${setting.domain + 'jquery-validation/1.16/jquery.validate.js'}"></script>
<script th:src="${setting.domain + 'jquery-validation/1.16/localization/messages_zh_CN.js'}"></script>
<script th:src="${setting.domain + 'jquery-validation/1.16/jquery.validate.extend.js'}"></script>
<script th:src="${setting.domain + 'common/jeesite.js'}"></script>
<script th:src="${setting.domain + 'common/i18n/jeesite_zh_CN.js'}"></script>
<script th:src="${setting.domain + 'common/common.js'}"></script>
<script>
$("#inputForm").validate({
submitHandler: function(form){
// 获取数据权限数据
var dataScopeData = [];
$.each(dataScopeTrees, function(key, dataScopeTree){
var treeNodes = dataScopeTree.getCheckedNodes(true);
for(var i=0; i<treeNodes.length; i++) {
dataScopeData.push({
ctrlType: key, ctrlData: treeNodes[i].id
});
}
});
$("#userDataScopeListJson").val(JSON.stringify(dataScopeData));
// 提交表单数据
js.ajaxSubmitForm($(form), function(data){
js.showMessage(data.message);
if(data.code == 0){
js.closeCurrentTabPage(function(contentWindow){
contentWindow.page();
});
}
}, "json");
}
});
//加载数据权限树结构
var setting = {
check:{enable:true,nocheckInherit:true},
view:{selectedMulti:false,nameIsHTML: true},
data:{simpleData:{enable:true},key:{title:"title"}},
callback:{
beforeClick: function (treeId, treeNode, clickFlag) {
var tree = $.fn.zTree.getZTreeObj(treeId);
tree.checkNode(treeNode, !treeNode.checked, true, true);
return false;
},
onCheck: function (event, treeId, treeNode){
var tid = treeNode.tId;
if(!treeNode.checked){
$(".checkall[value="+treeId+"]").each(function(){
if(this.checked){
$(this).removeAttr("checked").iCheck('update');
}
return false;
});
}
}
}
},
moduleCodes = '["core","devtools"]';
dataScopes = [{
moduleCode: "core",
ctrlPermi: "0",
ctrlName: "机构权限",
ctrlName_en: "Office",
ctrlType: "Office",
ctrlDataUrl: "/sys/office/treeData",
chkboxType: {"Y":"ps","N":"ps"},
expandLevel: -1,
remarks: ""
},{
moduleCode: "core",
ctrlName: "公司权限",
ctrlName_en: "Company",
ctrlType: "Company",
ctrlPermi: "0",
ctrlDataUrl: "/sys/company/treeData",
chkboxType: {"Y":"ps","N":"ps"},
expandLevel: -1,
remarks: ""
},{
moduleCode: "core",
ctrlName: "角色权限",
ctrlName_en: "Role",
ctrlType: "Role",
ctrlPermi: "2",
ctrlDataUrl: "/sys/role/treeData",
chkboxType: {"Y":"ps","N":"ps"},
expandLevel: -1,
remarks: ""
}]
,
dataScopeTrees = {}; // 用sysCode分类存储所有菜单树
for (var i=0; i<dataScopes.length; i++){
var dataScope = dataScopes[i];
// 验证模块是否开启,如果未开启,则跳过
if (moduleCodes.indexOf("\""+dataScope.moduleCode+"\"") == -1){
continue;
}
// 控制权限 ctrlPermi: 0全部 1拥有权限 2管理权限
if (!(dataScope.ctrlPermi == '0'
|| dataScope.ctrlPermi == '2')){
continue;
}
$('#dataScopeTrees').append(js.template('dataScopeTpl', {
key: dataScope.ctrlType, label: dataScope.ctrlName_zh_CN || dataScope.ctrlName}));
var ctrlDataUrl = dataScope.ctrlDataUrl || '';
$.ajax({
type: 'POST',
url: ctrlDataUrl + (ctrlDataUrl.indexOf("?")!=-1?'&':'?') + "___t=" + new Date().getTime(),
data: {ctrlPermi: '2'},
dataType: 'json',
async: false,
error: function(data){
js.showErrorMessage(data.responseText);
},
success: function(data, status, xhr){
// 初始化树结构
var tree = $.fn.zTree.init($("#dataScopeTree_"+dataScope.ctrlType), setting, data);
tree.setting.check.chkboxType = dataScope.chkboxType;
// 默认展开节点(如果级别设置为-1如果有1个根节点则展开一级节点否则不展开
$.fn.zTree.expandNodeByLevel(tree, dataScope.expandLevel);
// 树结构:全选、取消全选
$('#checkall_'+dataScope.ctrlType).iCheck({
checkboxClass:'icheckbox_minimal-grey'
}).on('ifChecked ifUnchecked', function(){
var ctrlType = $(this).attr('ctrlType');
if(this.checked){
dataScopeTrees[ctrlType].checkAllNodes(true);
}else{
dataScopeTrees[ctrlType].checkAllNodes(false);
}
}).attr("ctrlType", dataScope.ctrlType);
// 展开和折叠按钮绑定
$('#expand_'+dataScope.ctrlType).click(function(){
var ctrlType = $(this).attr('ctrlType');
dataScopeTrees[ctrlType].expandAll(true);
}).attr("ctrlType", dataScope.ctrlType);
$('#collapse_'+dataScope.ctrlType).click(function(){
var ctrlType = $(this).attr('ctrlType');
dataScopeTrees[ctrlType].expandAll(false);
}).attr("ctrlType", dataScope.ctrlType);
// 将树对象存储到全局数组里
dataScopeTrees[dataScope.ctrlType] = tree;
}
});
}
// 默认选择节点
</script>

@ -77,11 +77,9 @@ content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
</div> </div>
</div> </div>
</div> </div>
<div class="hide"><div class="input-group treeselect" id="userSelectDiv" data-url="/js/a/sys/user/userSelect?userType=employee"> <div class="hide"><div class="input-group treeselect" id="userSelectDiv" data-url="sys/user/userSelect?userType=employee">
<input id="userSelectCode" type="hidden" name="" value="" class="isReset"/> <input id="userSelectCode" type="hidden" name="" value="" class="isReset"/>
<input id="userSelectName" type="text" name="" value="" <input id="userSelectName" type="text" name="" value="" class="form-control " readonly="readonly"/><span class="input-group-btn"><a id="userSelectButton" href="javascript:"
class="form-control " readonly="readonly"
/><span class="input-group-btn"><a id="userSelectButton" href="javascript:"
class="btn btn-default "><i class="fa fa-search"></i></a> class="btn btn-default "><i class="fa fa-search"></i></a>
</span> </span>
</div> </div>
@ -179,7 +177,7 @@ $('#dataGrid').dataGrid({
searchForm: $("#searchForm"), searchForm: $("#searchForm"),
columnModel: [ columnModel: [
{header:'登录账号', name:'loginCode', index:'a.login_code', width:200, align:"center", frozen:true, formatter: function(val, obj, row, act){ {header:'登录账号', name:'loginCode', index:'a.login_code', width:200, align:"center", frozen:true, formatter: function(val, obj, row, act){
return '<a href="/js/a/sys/secAdmin/form?userCode='+row.userCode+'" class="btnList" data-title="管理数据权限">'+(val||row.id)+'</a>'; return '<a href="sys/secAdmin/add?userCode='+row.userCode+'" class="btnList" data-title="管理数据权限">'+(val||row.id)+'</a>';
}}, }},
{header:'用户昵称', name:'userName', index:'a.user_name', width:200, align:"center"}, {header:'用户昵称', name:'userName', index:'a.user_name', width:200, align:"center"},
{header:'电子邮箱', name:'email', index:'a.email', width:200, align:"center"}, {header:'电子邮箱', name:'email', index:'a.email', width:200, align:"center"},
@ -191,8 +189,8 @@ $('#dataGrid').dataGrid({
}}, }},
{header:'操作', name:'actions', width:150, sortable:false, title:false, formatter: function(val, obj, row, act){ {header:'操作', name:'actions', width:150, sortable:false, title:false, formatter: function(val, obj, row, act){
var actions = []; var actions = [];
actions.push('<a href="/js/a/sys/secAdmin/form?userCode='+row.userCode+'" class="btnList" title="管理数据权限"><i class="fa fa-pencil"></i></a>&nbsp;'); actions.push('<a href="sys/secAdmin/add?userCode='+row.userCode+'" class="btnList" title="管理数据权限"><i class="fa fa-pencil"></i></a>&nbsp;');
actions.push('<a href="/js/a/sys/secAdmin/delete?userCode='+row.userCode+'" class="btnList" title="取消二级管理员身份" data-confirm="确认要取消该用户的二级管理员身份吗?"><i class="fa fa-trash-o"></i></a>&nbsp;'); actions.push('<a href="sys/secAdmin/delete?userCode='+row.userCode+'" class="btnList" title="取消二级管理员身份" data-confirm="确认要取消该用户的二级管理员身份吗?"><i class="fa fa-trash-o"></i></a>&nbsp;');
return actions.join(''); return actions.join('');
}} }}
], ],
@ -208,7 +206,7 @@ function listselectCallback(id, action, index, layero){
if (id == 'userSelect' && action == 'ok'){ if (id == 'userSelect' && action == 'ok'){
if ($('#userSelectCode').val() != ''){ if ($('#userSelectCode').val() != ''){
js.addTabPage(null, '二级管理员授权', js.addTabPage(null, '二级管理员授权',
'/js/a/sys/secAdmin/form?userCode=' 'sys/secAdmin/add?userCode='
+$('#userSelectCode').val()); +$('#userSelectCode').val());
}else{ }else{
js.showMessage('请选择需要设置为二级管理员的用户'); js.showMessage('请选择需要设置为二级管理员的用户');

@ -108,7 +108,7 @@ var roleGrid = $("#roleGrid").dataGrid({
{name:'ctrlPermi',value:'2'} {name:'ctrlPermi',value:'2'}
], ],
columnModel: [ columnModel: [
{header:'角色名称', name:'roleName', sortable:false, width:100, align:"center"}, {header:'角色名称', name:'name', sortable:false, width:100, align:"center"},
{header:'角色编码', name:'id', sortable:false, width:100, align:"center"} {header:'角色编码', name:'id', sortable:false, width:100, align:"center"}
], ],
showCheckbox: true, showCheckbox: true,

@ -82,7 +82,7 @@ content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
<script th:src="${setting.domain + 'jqGrid/4.7/js/jquery.jqGrid.extend.js'}"></script> <script th:src="${setting.domain + 'jqGrid/4.7/js/jquery.jqGrid.extend.js'}"></script>
<script th:src="${setting.domain + 'jqGrid/4.7/js/i18n/zh_CN.js'}"></script> <script th:src="${setting.domain + 'jqGrid/4.7/js/i18n/zh_CN.js'}"></script>
<script th:src="${setting.domain + 'common/jeesite.js'}"></script> <script th:src="${setting.domain + 'common/jeesite.js'}"></script>
<script th:src="${setting.domain + 'i18n/jeesite_zh_CN.js'}"></script> <script th:src="${setting.domain + 'common/i18n/jeesite_zh_CN.js'}"></script>
<script th:src="${setting.domain + 'common/common.js'}"></script> <script th:src="${setting.domain + 'common/common.js'}"></script>
<script> <script>
var selectData = JSON.parse(js.decodeUrl('{}')), var selectData = JSON.parse(js.decodeUrl('{}')),

Loading…
Cancel
Save