角色添加、角色编辑关联菜单功能
This commit is contained in:
@@ -230,6 +230,13 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Yi.Framework.ApiMicroservice.Controllers.MenuController.GetListByRoleId(System.Int64)">
|
||||||
|
<summary>
|
||||||
|
根据角色id获取该角色下全部菜单
|
||||||
|
</summary>
|
||||||
|
<param name="id"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="T:Yi.Framework.ApiMicroservice.Controllers.RoleController">
|
<member name="T:Yi.Framework.ApiMicroservice.Controllers.RoleController">
|
||||||
<summary>
|
<summary>
|
||||||
角色管理
|
角色管理
|
||||||
@@ -261,6 +268,12 @@
|
|||||||
<param name="roleDto"></param>
|
<param name="roleDto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Yi.Framework.ApiMicroservice.Controllers.RoleController.UpdateInfo(Yi.Framework.DTOModel.RoleInfoDto)">
|
||||||
|
<summary>
|
||||||
|
更新角色信息
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="T:Yi.Framework.ApiMicroservice.Controllers.TestController">
|
<member name="T:Yi.Framework.ApiMicroservice.Controllers.TestController">
|
||||||
<summary>
|
<summary>
|
||||||
测试控制器
|
测试控制器
|
||||||
|
|||||||
@@ -61,5 +61,17 @@ namespace Yi.Framework.ApiMicroservice.Controllers
|
|||||||
{
|
{
|
||||||
return Result.Success().SetData(await _iMenuService.GetMenuTreeAsync());
|
return Result.Success().SetData(await _iMenuService.GetMenuTreeAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据角色id获取该角色下全部菜单
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{id}")]
|
||||||
|
public async Task<Result> GetListByRoleId(long id)
|
||||||
|
{
|
||||||
|
return Result.Success().SetData(await _iMenuService.GetListByRoleId(id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ using Yi.Framework.DTOModel;
|
|||||||
using Yi.Framework.Interface;
|
using Yi.Framework.Interface;
|
||||||
using Yi.Framework.Model.Models;
|
using Yi.Framework.Model.Models;
|
||||||
using Yi.Framework.Repository;
|
using Yi.Framework.Repository;
|
||||||
|
using Yi.Framework.Service;
|
||||||
using Yi.Framework.WebCore;
|
using Yi.Framework.WebCore;
|
||||||
using Yi.Framework.WebCore.AttributeExtend;
|
using Yi.Framework.WebCore.AttributeExtend;
|
||||||
using Yi.Framework.WebCore.AuthorizationPolicy;
|
using Yi.Framework.WebCore.AuthorizationPolicy;
|
||||||
@@ -72,5 +73,15 @@ namespace Yi.Framework.ApiMicroservice.Controllers
|
|||||||
{
|
{
|
||||||
return Result.Success().SetData(await _iRoleService.AddInfo(roleDto));
|
return Result.Success().SetData(await _iRoleService.AddInfo(roleDto));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新角色信息
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPut]
|
||||||
|
public async Task<Result> UpdateInfo(RoleInfoDto roleDto)
|
||||||
|
{
|
||||||
|
return Result.Success().SetStatus(await _iRoleService.UpdateInfo(roleDto));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -10,5 +10,12 @@ namespace Yi.Framework.Interface
|
|||||||
{
|
{
|
||||||
Task<List<MenuEntity>> GetMenuTreeAsync();
|
Task<List<MenuEntity>> GetMenuTreeAsync();
|
||||||
Task<List<MenuEntity>> SelctGetList(MenuEntity menu);
|
Task<List<MenuEntity>> SelctGetList(MenuEntity menu);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取该角色id下的所有菜单
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="roleId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<MenuEntity>> GetListByRoleId(long roleId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,5 +44,13 @@ namespace Yi.Framework.Interface
|
|||||||
/// <param name="roleDto"></param>
|
/// <param name="roleDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<bool> AddInfo(RoleInfoDto roleDto);
|
Task<bool> AddInfo(RoleInfoDto roleDto);
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新角色关联菜单
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="roleDto"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> UpdateInfo(RoleInfoDto roleDto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,5 +25,11 @@ namespace Yi.Framework.Service
|
|||||||
//复杂查询直接使用db代理
|
//复杂查询直接使用db代理
|
||||||
return await _repository._Db.Queryable<MenuEntity>().Where(u => u.IsDeleted == false).ToTreeAsync(it => it.Children, it => it.ParentId, 0);
|
return await _repository._Db.Queryable<MenuEntity>().Where(u => u.IsDeleted == false).ToTreeAsync(it => it.Children, it => it.ParentId, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<List<MenuEntity>> GetListByRoleId(long roleId)
|
||||||
|
{
|
||||||
|
return (await _repository._Db.Queryable<RoleEntity>().Includes(r => r.Menus).SingleAsync(r=>r.Id==roleId)).Menus;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,5 +75,13 @@ namespace Yi.Framework.Service
|
|||||||
var res2 = await GiveRoleSetMenu(new List<long> { res1 }, roleDto.MenuIds);
|
var res2 = await GiveRoleSetMenu(new List<long> { res1 }, roleDto.MenuIds);
|
||||||
return !0.Equals(res1) && res2;
|
return !0.Equals(res1) && res2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<bool> UpdateInfo(RoleInfoDto roleDto)
|
||||||
|
{
|
||||||
|
var res1 = await _repository.UpdateIgnoreNullAsync(roleDto.Role);
|
||||||
|
var res2 = await GiveRoleSetMenu(new List<long> { roleDto.Role.Id }, roleDto.MenuIds);
|
||||||
|
return res1 && res2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ export function treeselect() {
|
|||||||
// 根据角色ID查询菜单下拉树结构
|
// 根据角色ID查询菜单下拉树结构
|
||||||
export function roleMenuTreeselect(roleId) {
|
export function roleMenuTreeselect(roleId) {
|
||||||
return request({
|
return request({
|
||||||
url: '/system/menu/roleMenuTreeselect/' + roleId,
|
url: '/menu/getListByRoleId/' + roleId,
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export function addRole(data) {
|
|||||||
// 修改角色
|
// 修改角色
|
||||||
export function updateRole(data) {
|
export function updateRole(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/system/role',
|
url: '/role/updateInfo',
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
@@ -130,4 +130,5 @@ export function roleOptionselect() {
|
|||||||
url: '/role/getList',
|
url: '/role/getList',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -188,7 +188,7 @@ const total = ref(0);
|
|||||||
const title = ref("");
|
const title = ref("");
|
||||||
const dateRange = ref([]);
|
const dateRange = ref([]);
|
||||||
const menuOptions = ref([]);
|
const menuOptions = ref([]);
|
||||||
const menuExpand = ref(false);
|
const menuExpand = ref(true);
|
||||||
const menuNodeAll = ref(false);
|
const menuNodeAll = ref(false);
|
||||||
const deptExpand = ref(true);
|
const deptExpand = ref(true);
|
||||||
const deptNodeAll = ref(false);
|
const deptNodeAll = ref(false);
|
||||||
@@ -302,7 +302,6 @@ function getMenuTreeselect() {
|
|||||||
options.push({ id: m.id, label: m.menuName, parentId: m.parentId, children: m.children })
|
options.push({ id: m.id, label: m.menuName, parentId: m.parentId, children: m.children })
|
||||||
})
|
})
|
||||||
menuOptions.value = proxy.handleTree(options);
|
menuOptions.value = proxy.handleTree(options);
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
/** 所有部门节点数据 */
|
/** 所有部门节点数据 */
|
||||||
@@ -352,145 +351,152 @@ function handleAdd() {
|
|||||||
function handleUpdate(row) {
|
function handleUpdate(row) {
|
||||||
reset();
|
reset();
|
||||||
const roleId = row.id || ids.value;
|
const roleId = row.id || ids.value;
|
||||||
const roleMenu = getRoleMenuTreeselect(roleId);
|
getRoleMenuTreeselect(roleId);
|
||||||
getRole(roleId).then(response => {
|
getRole(roleId).then(response => {
|
||||||
form.value = response.data;
|
form.value.role = response.data;
|
||||||
form.value.orderNum = Number(form.value.orderNum);
|
form.value.role.orderNum = Number(form.value.role.orderNum);
|
||||||
open.value = true;
|
open.value = true;
|
||||||
nextTick(() => {
|
|
||||||
roleMenu.then((res) => {
|
|
||||||
let checkedKeys = res.checkedKeys;
|
|
||||||
checkedKeys.forEach((v) => {
|
|
||||||
nextTick(() => {
|
|
||||||
menuRef.value.setChecked(v, true, false);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
title.value = "修改角色";
|
title.value = "修改角色";
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/** 根据角色ID查询菜单树结构 */
|
/** 根据角色ID查询菜单树结构 */
|
||||||
function getRoleMenuTreeselect(roleId) {
|
function getRoleMenuTreeselect(roleId) {
|
||||||
return roleMenuTreeselect(roleId).then(response => {
|
//1:获取该角色下的全部菜单id
|
||||||
menuOptions.value = response.menus;
|
//2:获取全量菜单
|
||||||
return response;
|
getMenuTreeselect();
|
||||||
|
|
||||||
|
roleMenuTreeselect(roleId).then(response => {
|
||||||
|
|
||||||
|
const menuIds = [];
|
||||||
|
response.data.forEach(m => {
|
||||||
|
menuIds.push(m.id)
|
||||||
|
})
|
||||||
|
|
||||||
|
menuIds.forEach((v) => {
|
||||||
|
nextTick(() => {
|
||||||
|
menuRef.value.setChecked(v, true, false);
|
||||||
|
});
|
||||||
|
|
||||||
|
//这里是要一个当前用户已拥有的菜单的id
|
||||||
|
})
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
}
|
||||||
/** 根据角色ID查询部门树结构 */
|
/** 根据角色ID查询部门树结构 */
|
||||||
function getDeptTree(roleId) {
|
function getDeptTree(roleId) {
|
||||||
return deptTreeSelect(roleId).then(response => {
|
return deptTreeSelect(roleId).then(response => {
|
||||||
deptOptions.value = response.depts;
|
deptOptions.value = response.depts;
|
||||||
return response;
|
return response;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/** 树权限(展开/折叠)*/
|
/** 树权限(展开/折叠)*/
|
||||||
function handleCheckedTreeExpand(value, type) {
|
function handleCheckedTreeExpand(value, type) {
|
||||||
if (type == "menu") {
|
if (type == "menu") {
|
||||||
let treeList = menuOptions.value;
|
let treeList = menuOptions.value;
|
||||||
for (let i = 0; i < treeList.length; i++) {
|
for (let i = 0; i < treeList.length; i++) {
|
||||||
menuRef.value.store.nodesMap[treeList[i].id].expanded = value;
|
menuRef.value.store.nodesMap[treeList[i].id].expanded = value;
|
||||||
|
}
|
||||||
|
} else if (type == "dept") {
|
||||||
|
let treeList = deptOptions.value;
|
||||||
|
for (let i = 0; i < treeList.length; i++) {
|
||||||
|
deptRef.value.store.nodesMap[treeList[i].id].expanded = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (type == "dept") {
|
|
||||||
let treeList = deptOptions.value;
|
|
||||||
for (let i = 0; i < treeList.length; i++) {
|
|
||||||
deptRef.value.store.nodesMap[treeList[i].id].expanded = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/** 树权限(全选/全不选) */
|
/** 树权限(全选/全不选) */
|
||||||
function handleCheckedTreeNodeAll(value, type) {
|
function handleCheckedTreeNodeAll(value, type) {
|
||||||
if (type == "menu") {
|
if (type == "menu") {
|
||||||
menuRef.value.setCheckedNodes(value ? menuOptions.value : []);
|
menuRef.value.setCheckedNodes(value ? menuOptions.value : []);
|
||||||
} else if (type == "dept") {
|
} else if (type == "dept") {
|
||||||
deptRef.value.setCheckedNodes(value ? deptOptions.value : []);
|
deptRef.value.setCheckedNodes(value ? deptOptions.value : []);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/** 树权限(父子联动) */
|
/** 树权限(父子联动) */
|
||||||
function handleCheckedTreeConnect(value, type) {
|
function handleCheckedTreeConnect(value, type) {
|
||||||
if (type == "menu") {
|
if (type == "menu") {
|
||||||
form.value.menuCheckStrictly = value ? true : false;
|
form.value.menuCheckStrictly = value ? true : false;
|
||||||
} else if (type == "dept") {
|
} else if (type == "dept") {
|
||||||
form.value.deptCheckStrictly = value ? true : false;
|
form.value.deptCheckStrictly = value ? true : false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/** 所有菜单节点数据 */
|
/** 所有菜单节点数据 */
|
||||||
function getMenuAllCheckedKeys() {
|
function getMenuAllCheckedKeys() {
|
||||||
// 目前被选中的菜单节点
|
// 目前被选中的菜单节点
|
||||||
let checkedKeys = menuRef.value.getCheckedKeys();
|
let checkedKeys = menuRef.value.getCheckedKeys();
|
||||||
// 半选中的菜单节点
|
// 半选中的菜单节点
|
||||||
let halfCheckedKeys = menuRef.value.getHalfCheckedKeys();
|
let halfCheckedKeys = menuRef.value.getHalfCheckedKeys();
|
||||||
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
|
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
|
||||||
return checkedKeys;
|
return checkedKeys;
|
||||||
}
|
}
|
||||||
/** 提交按钮 */
|
/** 提交按钮 */
|
||||||
function submitForm() {
|
function submitForm() {
|
||||||
proxy.$refs["roleRef"].validate(valid => {
|
proxy.$refs["roleRef"].validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (form.value.role.id != undefined) {
|
if (form.value.role.id != undefined) {
|
||||||
form.value.menuIds = getMenuAllCheckedKeys();
|
form.value.menuIds = getMenuAllCheckedKeys();
|
||||||
updateRole(form.value).then(response => {
|
updateRole(form.value).then(response => {
|
||||||
proxy.$modal.msgSuccess("修改成功");
|
proxy.$modal.msgSuccess("修改成功");
|
||||||
open.value = false;
|
open.value = false;
|
||||||
getList();
|
getList();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
form.value.menuIds = getMenuAllCheckedKeys();
|
||||||
|
addRole(form.value).then(response => {
|
||||||
|
proxy.$modal.msgSuccess("新增成功");
|
||||||
|
open.value = false;
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/** 取消按钮 */
|
||||||
|
function cancel() {
|
||||||
|
open.value = false;
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
/** 选择角色权限范围触发 */
|
||||||
|
function dataScopeSelectChange(value) {
|
||||||
|
if (value !== "2") {
|
||||||
|
deptRef.value.setCheckedKeys([]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/** 分配数据权限操作 */
|
||||||
|
function handleDataScope(row) {
|
||||||
|
reset();
|
||||||
|
const deptTreeSelect = getDeptTree(row.id);
|
||||||
|
getRole(row.id).then(response => {
|
||||||
|
form.value = response.data;
|
||||||
|
openDataScope.value = true;
|
||||||
|
nextTick(() => {
|
||||||
|
deptTreeSelect.then(res => {
|
||||||
|
nextTick(() => {
|
||||||
|
if (deptRef.value) {
|
||||||
|
deptRef.value.setCheckedKeys(res.checkedKeys);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
} else {
|
title.value = "分配数据权限";
|
||||||
form.value.menuIds = getMenuAllCheckedKeys();
|
});
|
||||||
addRole(form.value).then(response => {
|
}
|
||||||
proxy.$modal.msgSuccess("新增成功");
|
/** 提交按钮(数据权限) */
|
||||||
open.value = false;
|
function submitDataScope() {
|
||||||
|
if (form.value.id != undefined) {
|
||||||
|
form.value.deptIds = getDeptAllCheckedKeys();
|
||||||
|
dataScope(form.value).then(response => {
|
||||||
|
proxy.$modal.msgSuccess("修改成功");
|
||||||
|
openDataScope.value = false;
|
||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
/** 取消按钮 */
|
|
||||||
function cancel() {
|
|
||||||
open.value = false;
|
|
||||||
reset();
|
|
||||||
}
|
|
||||||
/** 选择角色权限范围触发 */
|
|
||||||
function dataScopeSelectChange(value) {
|
|
||||||
if (value !== "2") {
|
|
||||||
deptRef.value.setCheckedKeys([]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/** 分配数据权限操作 */
|
|
||||||
function handleDataScope(row) {
|
|
||||||
reset();
|
|
||||||
const deptTreeSelect = getDeptTree(row.id);
|
|
||||||
getRole(row.id).then(response => {
|
|
||||||
form.value = response.data;
|
|
||||||
openDataScope.value = true;
|
|
||||||
nextTick(() => {
|
|
||||||
deptTreeSelect.then(res => {
|
|
||||||
nextTick(() => {
|
|
||||||
if (deptRef.value) {
|
|
||||||
deptRef.value.setCheckedKeys(res.checkedKeys);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
title.value = "分配数据权限";
|
|
||||||
});
|
|
||||||
}
|
|
||||||
/** 提交按钮(数据权限) */
|
|
||||||
function submitDataScope() {
|
|
||||||
if (form.value.id != undefined) {
|
|
||||||
form.value.deptIds = getDeptAllCheckedKeys();
|
|
||||||
dataScope(form.value).then(response => {
|
|
||||||
proxy.$modal.msgSuccess("修改成功");
|
|
||||||
openDataScope.value = false;
|
|
||||||
getList();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/** 取消按钮(数据权限)*/
|
/** 取消按钮(数据权限)*/
|
||||||
function cancelDataScope() {
|
function cancelDataScope() {
|
||||||
openDataScope.value = false;
|
openDataScope.value = false;
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
getList();
|
getList();
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user