角色添加、角色编辑关联菜单功能

This commit is contained in:
chenchun
2022-09-11 15:39:55 +08:00
parent 004cb20132
commit 1d535b5d61
11 changed files with 187 additions and 115 deletions

View File

@@ -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>
测试控制器 测试控制器

View File

@@ -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));
}
} }
} }

View File

@@ -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));
}
} }
} }

View File

@@ -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);
} }
} }

View File

@@ -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);
} }
} }

View File

@@ -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;
}
} }
} }

View File

@@ -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;
}
} }
} }

View File

@@ -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'
}) })
} }

View File

@@ -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'
}) })
} }

View File

@@ -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,38 +351,45 @@ 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") {
@@ -397,7 +403,7 @@ function handleCheckedTreeExpand(value, type) {
deptRef.value.store.nodesMap[treeList[i].id].expanded = value; deptRef.value.store.nodesMap[treeList[i].id].expanded = value;
} }
} }
} }
/** 树权限(全选/全不选) */ /** 树权限(全选/全不选) */
function handleCheckedTreeNodeAll(value, type) { function handleCheckedTreeNodeAll(value, type) {
if (type == "menu") { if (type == "menu") {
@@ -405,7 +411,7 @@ function handleCheckedTreeNodeAll(value, type) {
} 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") {
@@ -413,7 +419,7 @@ function handleCheckedTreeConnect(value, type) {
} else if (type == "dept") { } else if (type == "dept") {
form.value.deptCheckStrictly = value ? true : false; form.value.deptCheckStrictly = value ? true : false;
} }
} }
/** 所有菜单节点数据 */ /** 所有菜单节点数据 */
function getMenuAllCheckedKeys() { function getMenuAllCheckedKeys() {
// 目前被选中的菜单节点 // 目前被选中的菜单节点
@@ -422,7 +428,7 @@ function getMenuAllCheckedKeys() {
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 => {
@@ -444,18 +450,18 @@ function submitForm() {
} }
} }
}); });
} }
/** 取消按钮 */ /** 取消按钮 */
function cancel() { function cancel() {
open.value = false; open.value = false;
reset(); reset();
} }
/** 选择角色权限范围触发 */ /** 选择角色权限范围触发 */
function dataScopeSelectChange(value) { function dataScopeSelectChange(value) {
if (value !== "2") { if (value !== "2") {
deptRef.value.setCheckedKeys([]); deptRef.value.setCheckedKeys([]);
} }
} }
/** 分配数据权限操作 */ /** 分配数据权限操作 */
function handleDataScope(row) { function handleDataScope(row) {
reset(); reset();
@@ -474,7 +480,7 @@ function handleDataScope(row) {
}); });
title.value = "分配数据权限"; title.value = "分配数据权限";
}); });
} }
/** 提交按钮(数据权限) */ /** 提交按钮(数据权限) */
function submitDataScope() { function submitDataScope() {
if (form.value.id != undefined) { if (form.value.id != undefined) {
@@ -485,12 +491,12 @@ function submitDataScope() {
getList(); getList();
}); });
} }
} }
/** 取消按钮(数据权限)*/ /** 取消按钮(数据权限)*/
function cancelDataScope() { function cancelDataScope() {
openDataScope.value = false; openDataScope.value = false;
reset(); reset();
} }
getList(); getList();
</script> </script>