Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
S
sts网站
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liyang
sts网站
Commits
478fae0d
Commit
478fae0d
authored
Sep 19, 2020
by
RuoYi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
菜单&数据权限新增(展开/折叠 全选/全不选 父子联动)
parent
0ecf27f8
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
150 additions
and
39 deletions
+150
-39
SysRole.java
...ain/java/com/ruoyi/common/core/domain/entity/SysRole.java
+26
-0
SysDeptMapper.java
.../src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
+2
-1
SysMenuMapper.java
.../src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
+3
-2
SysDeptServiceImpl.java
...ava/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
+7
-1
SysMenuServiceImpl.java
...ava/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
+7
-1
SysDeptMapper.xml
...system/src/main/resources/mapper/system/SysDeptMapper.xml
+5
-3
SysMenuMapper.xml
...system/src/main/resources/mapper/system/SysMenuMapper.xml
+5
-3
SysRoleMapper.xml
...system/src/main/resources/mapper/system/SysRoleMapper.xml
+21
-13
ruoyi.scss
ruoyi-ui/src/assets/styles/ruoyi.scss
+8
-0
index.vue
ruoyi-ui/src/views/system/role/index.vue
+49
-0
index.vue
ruoyi-ui/src/views/system/user/index.vue
+1
-1
ry_20200919.sql
sql/ry_20200919.sql
+16
-14
No files found.
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
View file @
478fae0d
...
...
@@ -37,6 +37,12 @@ public class SysRole extends BaseEntity
@Excel
(
name
=
"数据范围"
,
readConverterExp
=
"1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限"
)
private
String
dataScope
;
/** 菜单树选择项是否关联显示(0:父子互相关联显示 1:父子不互相关联显示) */
private
boolean
menuCheckStrictly
;
/** 部门树选择项是否关联显示(0:父子互相关联显示 1:父子不互相关联显示) */
private
boolean
deptCheckStrictly
;
/** 角色状态(0正常 1停用) */
@Excel
(
name
=
"角色状态"
,
readConverterExp
=
"0=正常,1=停用"
)
private
String
status
;
...
...
@@ -128,6 +134,26 @@ public class SysRole extends BaseEntity
this
.
dataScope
=
dataScope
;
}
public
boolean
isMenuCheckStrictly
()
{
return
menuCheckStrictly
;
}
public
void
setMenuCheckStrictly
(
boolean
menuCheckStrictly
)
{
this
.
menuCheckStrictly
=
menuCheckStrictly
;
}
public
boolean
isDeptCheckStrictly
()
{
return
deptCheckStrictly
;
}
public
void
setDeptCheckStrictly
(
boolean
deptCheckStrictly
)
{
this
.
deptCheckStrictly
=
deptCheckStrictly
;
}
public
String
getStatus
()
{
return
status
;
...
...
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
View file @
478fae0d
...
...
@@ -23,9 +23,10 @@ public interface SysDeptMapper
* 根据角色ID查询部门树信息
*
* @param roleId 角色ID
* @param deptCheckStrictly 部门树选择项是否关联显示
* @return 选中部门列表
*/
public
List
<
Integer
>
selectDeptListByRoleId
(
Long
roleId
);
public
List
<
Integer
>
selectDeptListByRoleId
(
@Param
(
"roleId"
)
Long
roleId
,
@Param
(
"deptCheckStrictly"
)
boolean
deptCheckStrictly
);
/**
* 根据部门ID查询信息
...
...
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
View file @
478fae0d
...
...
@@ -61,9 +61,10 @@ public interface SysMenuMapper
* 根据角色ID查询菜单树信息
*
* @param roleId 角色ID
* @param menuCheckStrictly 菜单树选择项是否关联显示
* @return 选中菜单列表
*/
public
List
<
Integer
>
selectMenuListByRoleId
(
Long
roleId
);
public
List
<
Integer
>
selectMenuListByRoleId
(
@Param
(
"roleId"
)
Long
roleId
,
@Param
(
"menuCheckStrictly"
)
boolean
menuCheckStrictly
);
/**
* 根据菜单ID查询信息
...
...
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
View file @
478fae0d
...
...
@@ -10,9 +10,11 @@ import com.ruoyi.common.annotation.DataScope;
import
com.ruoyi.common.constant.UserConstants
;
import
com.ruoyi.common.core.domain.TreeSelect
;
import
com.ruoyi.common.core.domain.entity.SysDept
;
import
com.ruoyi.common.core.domain.entity.SysRole
;
import
com.ruoyi.common.exception.CustomException
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.system.mapper.SysDeptMapper
;
import
com.ruoyi.system.mapper.SysRoleMapper
;
import
com.ruoyi.system.service.ISysDeptService
;
/**
...
...
@@ -26,6 +28,9 @@ public class SysDeptServiceImpl implements ISysDeptService
@Autowired
private
SysDeptMapper
deptMapper
;
@Autowired
private
SysRoleMapper
roleMapper
;
/**
* 查询部门管理数据
*
...
...
@@ -93,7 +98,8 @@ public class SysDeptServiceImpl implements ISysDeptService
@Override
public
List
<
Integer
>
selectDeptListByRoleId
(
Long
roleId
)
{
return
deptMapper
.
selectDeptListByRoleId
(
roleId
);
SysRole
role
=
roleMapper
.
selectRoleById
(
roleId
);
return
deptMapper
.
selectDeptListByRoleId
(
roleId
,
role
.
isDeptCheckStrictly
());
}
/**
...
...
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
View file @
478fae0d
...
...
@@ -13,12 +13,14 @@ import org.springframework.stereotype.Service;
import
com.ruoyi.common.constant.UserConstants
;
import
com.ruoyi.common.core.domain.TreeSelect
;
import
com.ruoyi.common.core.domain.entity.SysMenu
;
import
com.ruoyi.common.core.domain.entity.SysRole
;
import
com.ruoyi.common.core.domain.entity.SysUser
;
import
com.ruoyi.common.utils.SecurityUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.system.domain.vo.MetaVo
;
import
com.ruoyi.system.domain.vo.RouterVo
;
import
com.ruoyi.system.mapper.SysMenuMapper
;
import
com.ruoyi.system.mapper.SysRoleMapper
;
import
com.ruoyi.system.mapper.SysRoleMenuMapper
;
import
com.ruoyi.system.service.ISysMenuService
;
...
...
@@ -35,6 +37,9 @@ public class SysMenuServiceImpl implements ISysMenuService
@Autowired
private
SysMenuMapper
menuMapper
;
@Autowired
private
SysRoleMapper
roleMapper
;
@Autowired
private
SysRoleMenuMapper
roleMenuMapper
;
...
...
@@ -124,7 +129,8 @@ public class SysMenuServiceImpl implements ISysMenuService
@Override
public
List
<
Integer
>
selectMenuListByRoleId
(
Long
roleId
)
{
return
menuMapper
.
selectMenuListByRoleId
(
roleId
);
SysRole
role
=
roleMapper
.
selectRoleById
(
roleId
);
return
menuMapper
.
selectMenuListByRoleId
(
roleId
,
role
.
isMenuCheckStrictly
());
}
/**
...
...
ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
View file @
478fae0d
...
...
@@ -44,12 +44,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by d.parent_id, d.order_num
</select>
<select
id=
"selectDeptListByRoleId"
parameterType=
"Long"
resultType=
"Integer"
>
select d.dept_id
, d.parent_id
<select
id=
"selectDeptListByRoleId"
resultType=
"Integer"
>
select d.dept_id
from sys_dept d
left join sys_role_dept rd on d.dept_id = rd.dept_id
where rd.role_id = #{roleId}
<if
test=
"deptCheckStrictly"
>
and d.dept_id not in (select d.parent_id from sys_dept d inner join sys_role_dept rd on d.dept_id = rd.dept_id and rd.role_id = #{roleId})
</if>
order by d.parent_id, d.order_num
</select>
...
...
ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
View file @
478fae0d
...
...
@@ -82,12 +82,14 @@
order by m.parent_id, m.order_num
</select>
<select
id=
"selectMenuListByRoleId"
parameterType=
"Long"
resultType=
"Integer"
>
select m.menu_id
, m.parent_id
<select
id=
"selectMenuListByRoleId"
resultType=
"Integer"
>
select m.menu_id
from sys_menu m
left join sys_role_menu rm on m.menu_id = rm.menu_id
where rm.role_id = #{roleId}
<if
test=
"menuCheckStrictly"
>
and m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id = rm.menu_id and rm.role_id = #{roleId})
</if>
order by m.parent_id, m.order_num
</select>
...
...
ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
View file @
478fae0d
...
...
@@ -10,6 +10,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result
property=
"roleKey"
column=
"role_key"
/>
<result
property=
"roleSort"
column=
"role_sort"
/>
<result
property=
"dataScope"
column=
"data_scope"
/>
<result
property=
"menuCheckStrictly"
column=
"menu_check_strictly"
/>
<result
property=
"deptCheckStrictly"
column=
"dept_check_strictly"
/>
<result
property=
"status"
column=
"status"
/>
<result
property=
"delFlag"
column=
"del_flag"
/>
<result
property=
"createBy"
column=
"create_by"
/>
...
...
@@ -20,7 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql
id=
"selectRoleVo"
>
select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope,
select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope,
r.menu_check_strictly, r.dept_check_strictly,
r.status, r.del_flag, r.create_time, r.remark
from sys_role r
left join sys_user_role ur on ur.role_id = r.role_id
...
...
@@ -95,6 +97,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"roleKey != null and roleKey != ''"
>
role_key,
</if>
<if
test=
"roleSort != null and roleSort != ''"
>
role_sort,
</if>
<if
test=
"dataScope != null and dataScope != ''"
>
data_scope,
</if>
<if
test=
"menuCheckStrictly != null and menuCheckStrictly != ''"
>
menu_check_strictly,
</if>
<if
test=
"deptCheckStrictly != null and deptCheckStrictly != ''"
>
dept_check_strictly,
</if>
<if
test=
"status != null and status != ''"
>
status,
</if>
<if
test=
"remark != null and remark != ''"
>
remark,
</if>
<if
test=
"createBy != null and createBy != ''"
>
create_by,
</if>
...
...
@@ -105,6 +109,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"roleKey != null and roleKey != ''"
>
#{roleKey},
</if>
<if
test=
"roleSort != null and roleSort != ''"
>
#{roleSort},
</if>
<if
test=
"dataScope != null and dataScope != ''"
>
#{dataScope},
</if>
<if
test=
"menuCheckStrictly != null"
>
#{menu_check_strictly},
</if>
<if
test=
"deptCheckStrictly != null"
>
#{dept_check_strictly},
</if>
<if
test=
"status != null and status != ''"
>
#{status},
</if>
<if
test=
"remark != null and remark != ''"
>
#{remark},
</if>
<if
test=
"createBy != null and createBy != ''"
>
#{createBy},
</if>
...
...
@@ -119,6 +125,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"roleKey != null and roleKey != ''"
>
role_key = #{roleKey},
</if>
<if
test=
"roleSort != null and roleSort != ''"
>
role_sort = #{roleSort},
</if>
<if
test=
"dataScope != null and dataScope != ''"
>
data_scope = #{dataScope},
</if>
<if
test=
"menuCheckStrictly != null"
>
menu_check_strictly = #{menuCheckStrictly},
</if>
<if
test=
"deptCheckStrictly != null"
>
dept_check_strictly = #{deptCheckStrictly},
</if>
<if
test=
"status != null and status != ''"
>
status = #{status},
</if>
<if
test=
"remark != null"
>
remark = #{remark},
</if>
<if
test=
"updateBy != null and updateBy != ''"
>
update_by = #{updateBy},
</if>
...
...
ruoyi-ui/src/assets/styles/ruoyi.scss
View file @
478fae0d
...
...
@@ -92,6 +92,14 @@
padding
:
10px
20px
!
important
;
}
/* tree border */
.tree-border
{
margin-top
:
5px
;
border
:
1px
solid
#e5e6e7
;
background
:
#FFFFFF
none
;
border-radius
:
4px
;
}
.pagination-container
.el-pagination
{
right
:
0
;
position
:
absolute
;
...
...
ruoyi-ui/src/views/system/role/index.vue
View file @
478fae0d
...
...
@@ -175,11 +175,16 @@
</el-radio-group>
</el-form-item>
<el-form-item
label=
"菜单权限"
>
<el-checkbox
v-model=
"menuExpand"
@
change=
"handleCheckedTreeExpand($event, 'menu')"
>
展开/折叠
</el-checkbox>
<el-checkbox
v-model=
"menuNodeAll"
@
change=
"handleCheckedTreeNodeAll($event, 'menu')"
>
全选/全不选
</el-checkbox>
<el-checkbox
v-model=
"form.menuCheckStrictly"
@
change=
"handleCheckedTreeConnect($event, 'menu')"
>
父子联动
</el-checkbox>
<el-tree
class=
"tree-border"
:data=
"menuOptions"
show-checkbox
ref=
"menu"
node-key=
"id"
:check-strictly=
"!form.menuCheckStrictly"
empty-text=
"加载中,请稍后"
:props=
"defaultProps"
></el-tree>
...
...
@@ -214,12 +219,17 @@
</el-select>
</el-form-item>
<el-form-item
label=
"数据权限"
v-show=
"form.dataScope == 2"
>
<el-checkbox
v-model=
"deptExpand"
@
change=
"handleCheckedTreeExpand($event, 'dept')"
>
展开/折叠
</el-checkbox>
<el-checkbox
v-model=
"deptNodeAll"
@
change=
"handleCheckedTreeNodeAll($event, 'dept')"
>
全选/全不选
</el-checkbox>
<el-checkbox
v-model=
"form.deptCheckStrictly"
@
change=
"handleCheckedTreeConnect($event, 'dept')"
>
父子联动
</el-checkbox>
<el-tree
class=
"tree-border"
:data=
"deptOptions"
show-checkbox
default-expand-all
ref=
"dept"
node-key=
"id"
:check-strictly=
"!form.deptCheckStrictly"
empty-text=
"加载中,请稍后"
:props=
"defaultProps"
></el-tree>
...
...
@@ -262,6 +272,10 @@ export default {
open
:
false
,
// 是否显示弹出层(数据权限)
openDataScope
:
false
,
menuExpand
:
false
,
menuNodeAll
:
false
,
deptExpand
:
true
,
deptNodeAll
:
false
,
// 日期范围
dateRange
:
[],
// 状态数据字典
...
...
@@ -413,6 +427,10 @@ export default {
if
(
this
.
$refs
.
menu
!=
undefined
)
{
this
.
$refs
.
menu
.
setCheckedKeys
([]);
}
this
.
menuExpand
=
false
,
this
.
menuNodeAll
=
false
,
this
.
deptExpand
=
true
,
this
.
deptNodeAll
=
false
,
this
.
form
=
{
roleId
:
undefined
,
roleName
:
undefined
,
...
...
@@ -421,6 +439,7 @@ export default {
status
:
"0"
,
menuIds
:
[],
deptIds
:
[],
menuCheckStrictly
:
true
,
remark
:
undefined
};
this
.
resetForm
(
"form"
);
...
...
@@ -442,6 +461,36 @@ export default {
this
.
single
=
selection
.
length
!=
1
this
.
multiple
=
!
selection
.
length
},
// 树权限(展开/折叠)
handleCheckedTreeExpand
(
value
,
type
)
{
if
(
type
==
'menu'
)
{
let
treeList
=
this
.
menuOptions
;
for
(
let
i
=
0
;
i
<
treeList
.
length
;
i
++
)
{
this
.
$refs
.
menu
.
store
.
nodesMap
[
treeList
[
i
].
id
].
expanded
=
value
;
}
}
else
if
(
type
==
'dept'
)
{
let
treeList
=
this
.
deptOptions
;
for
(
let
i
=
0
;
i
<
treeList
.
length
;
i
++
)
{
this
.
$refs
.
dept
.
store
.
nodesMap
[
treeList
[
i
].
id
].
expanded
=
value
;
}
}
},
// 树权限(全选/全不选)
handleCheckedTreeNodeAll
(
value
,
type
)
{
if
(
type
==
'menu'
)
{
this
.
$refs
.
menu
.
setCheckedNodes
(
value
?
this
.
menuOptions
:
[]);
}
else
if
(
type
==
'dept'
)
{
this
.
$refs
.
dept
.
setCheckedNodes
(
value
?
this
.
deptOptions
:
[]);
}
},
// 树权限(父子联动)
handleCheckedTreeConnect
(
value
,
type
)
{
if
(
type
==
'menu'
)
{
this
.
form
.
menuCheckStrictly
=
value
?
true
:
false
;
}
else
if
(
type
==
'dept'
)
{
this
.
form
.
deptCheckStrictly
=
value
?
true
:
false
;
}
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
();
...
...
ruoyi-ui/src/views/system/user/index.vue
View file @
478fae0d
...
...
@@ -93,7 +93,7 @@
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"归属部门"
prop=
"deptId"
>
<treeselect
v-model=
"form.deptId"
:options=
"deptOptions"
:
disable-branch-nodes=
"true"
:
show-count=
"true"
placeholder=
"请选择归属部门"
/>
<treeselect
v-model=
"form.deptId"
:options=
"deptOptions"
:show-count=
"true"
placeholder=
"请选择归属部门"
/>
</el-form-item>
</el-col>
</el-row>
...
...
sql/ry_202009
01
.sql
→
sql/ry_202009
19
.sql
View file @
478fae0d
...
...
@@ -107,6 +107,8 @@ create table sys_role (
role_key
varchar
(
100
)
not
null
comment
'角色权限字符串'
,
role_sort
int
(
4
)
not
null
comment
'显示顺序'
,
data_scope
char
(
1
)
default
'1'
comment
'数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)'
,
menu_check_strictly
tinyint
(
1
)
default
1
comment
'菜单树选择项是否关联显示'
,
dept_check_strictly
tinyint
(
1
)
default
1
comment
'部门树选择项是否关联显示'
,
status
char
(
1
)
not
null
comment
'角色状态(0正常 1停用)'
,
del_flag
char
(
1
)
default
'0'
comment
'删除标志(0代表存在 2代表删除)'
,
create_by
varchar
(
64
)
default
''
comment
'创建者'
,
...
...
@@ -120,8 +122,8 @@ create table sys_role (
-- ----------------------------
-- 初始化-角色信息表数据
-- ----------------------------
insert
into
sys_role
values
(
'1'
,
'超级管理员'
,
'admin'
,
1
,
1
,
'0'
,
'0'
,
'admin'
,
'2018-03-16 11-33-00'
,
'ry'
,
'2018-03-16 11-33-00'
,
'超级管理员'
);
insert
into
sys_role
values
(
'2'
,
'普通角色'
,
'common'
,
2
,
2
,
'0'
,
'0'
,
'admin'
,
'2018-03-16 11-33-00'
,
'ry'
,
'2018-03-16 11-33-00'
,
'普通角色'
);
insert
into
sys_role
values
(
'1'
,
'超级管理员'
,
'admin'
,
1
,
1
,
1
,
1
,
'0'
,
'0'
,
'admin'
,
'2018-03-16 11-33-00'
,
'ry'
,
'2018-03-16 11-33-00'
,
'超级管理员'
);
insert
into
sys_role
values
(
'2'
,
'普通角色'
,
'common'
,
2
,
2
,
1
,
1
,
'0'
,
'0'
,
'admin'
,
'2018-03-16 11-33-00'
,
'ry'
,
'2018-03-16 11-33-00'
,
'普通角色'
);
-- ----------------------------
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment