From 1d535b5d613bb398cdb99a3215082eb99817856f Mon Sep 17 00:00:00 2001 From: chenchun <454313500@qq.com> Date: Sun, 11 Sep 2022 15:39:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=B7=BB=E5=8A=A0=E3=80=81?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E7=BC=96=E8=BE=91=E5=85=B3=E8=81=94=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Config/SwaggerDoc.xml | 13 + .../Controllers/MenuController.cs | 12 + .../Controllers/RoleController.cs | 11 + .../yi-sqlsugar-dev.db | Bin 126976 -> 126976 bytes .../Yi.Framework.Interface/IMenuService.cs | 7 + .../Yi.Framework.Interface/IRoleService.cs | 8 + .../Yi.Framework.Service/MenuService.cs | 6 + .../Yi.Framework.Service/RoleService.cs | 8 + Yi.Vue3.X.RuoYi/src/api/system/menu.js | 2 +- Yi.Vue3.X.RuoYi/src/api/system/role.js | 3 +- .../src/views/system/role/index.vue | 232 +++++++++--------- 11 files changed, 187 insertions(+), 115 deletions(-) diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Config/SwaggerDoc.xml b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Config/SwaggerDoc.xml index a674189e..60fa3dc0 100644 --- a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Config/SwaggerDoc.xml +++ b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Config/SwaggerDoc.xml @@ -230,6 +230,13 @@ + + + 根据角色id获取该角色下全部菜单 + + + + 角色管理 @@ -261,6 +268,12 @@ + + + 更新角色信息 + + + 测试控制器 diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/MenuController.cs b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/MenuController.cs index 8d82e8c6..d714b507 100644 --- a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/MenuController.cs +++ b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/MenuController.cs @@ -61,5 +61,17 @@ namespace Yi.Framework.ApiMicroservice.Controllers { return Result.Success().SetData(await _iMenuService.GetMenuTreeAsync()); } + + /// + /// 根据角色id获取该角色下全部菜单 + /// + /// + /// + [HttpGet] + [Route("{id}")] + public async Task GetListByRoleId(long id) + { + return Result.Success().SetData(await _iMenuService.GetListByRoleId(id)); + } } } diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/RoleController.cs b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/RoleController.cs index 72d28dce..2998a260 100644 --- a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/RoleController.cs +++ b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/RoleController.cs @@ -10,6 +10,7 @@ using Yi.Framework.DTOModel; using Yi.Framework.Interface; using Yi.Framework.Model.Models; using Yi.Framework.Repository; +using Yi.Framework.Service; using Yi.Framework.WebCore; using Yi.Framework.WebCore.AttributeExtend; using Yi.Framework.WebCore.AuthorizationPolicy; @@ -72,5 +73,15 @@ namespace Yi.Framework.ApiMicroservice.Controllers { return Result.Success().SetData(await _iRoleService.AddInfo(roleDto)); } + + /// + /// 更新角色信息 + /// + /// + [HttpPut] + public async Task UpdateInfo(RoleInfoDto roleDto) + { + return Result.Success().SetStatus(await _iRoleService.UpdateInfo(roleDto)); + } } } diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/yi-sqlsugar-dev.db b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/yi-sqlsugar-dev.db index ee4bac059adaaa8f50a41da441e4cb788463801d..e3c17b1a1d7a39a5ae36e7d5f14fc6db7febd44a 100644 GIT binary patch delta 2195 zcmai!U1$_n6vywKoy^Y8&fYu0jzKpuDFrpFyUyI1?9QwPb%W66AxR}6NWj`A_)%)4 z6pSC>3PLN!2SbSQrS${!QCqjgheVVvX(^bu(o{o>RZM(PDJb|Lf_G6r;`Pgm=e~V1c47SG z?p1ybR@Tr{mStNyA+!dkgzk_m#NC?fMO9t#-#^5@a*wP= zAK)2$26y8R(0y^<{S`iJnGo}Kvm^)t*bHc6X^KxoPN}OnQ;U5q#a|Ur%ZF)d_L>07 z`)Kc*3$!^)p-p8p@23qh?7xllWtL(a18F%Q?b|l~o{HnuXikAX+dGBd!>+Do72u$g zV_Db`rDN;7FYU{%_ALAX=5;oHIy}cIp~}pu#ok&Dow>J&WorSH^U<0PJ#jzSO*KF8VRC zB-{YvXc%A#y+!|{$LKHg2bxAV&=oX+PNU;!7@xpj<00ISJ8?VK@JIM1UcmS9J$wh> zM8ocn9_aO`t9<*N!`#dWehni+O^o0g83E&r0IMgbyWl_`j{;du>{{s0DfRB(&f{?! zBj6@RfK>S_rOoD(j0kOH1h;_^Fu@4WN;hF0U7FGqe<`k~YJXXU*HJN07Q$K=a)&9+ Xh;SPt1d|bU1|xXFh>(7*2VQyy1g;Fe delta 1734 zcmaLXTSyd990u?+GrP01b2PhJs5~!V9=X%kpd+wddPb4F`?PD)w7HaEW3Qe{?7T%%$YN^QDcmcsAUVuyZQC9A}h|{VZtb`iWte`f;AymOB%G|`!+q8^~ z{()rXLYyk!W14DMZ#0rg`%3QX1TC_AkO_6|XF|AU8lkA6nqi~&>L5bs zP@vf(vSs$Tk^FDV#`wq{zr{+)NYf2n)%6B7)}U!Y&5VcjxUPouXrwWsX}YQD#~6_f zAfwHmr-VaF+49#GyVuI_$ja1<^iU#@n^iQUAvL0g&8RWho1RQ`iVQ3wSc4z12s2r^ z>kaUB8EIqI?8h7RGch{{_$CB%a0fb|9Dl~6xEt3>zoeJafOJrz#JA#Iu~SrpMd69i zBh>M$e3rk(H)Zz)8GfoMPK{DlDbKPjI)Lm|DfMT+pKg^)6!zTuc&m(*x(fNrtc*66 z7jDpupl-y~i2VtfF(X#upfW+jHTDoYQMo{^&1r$KwWFz>Efnk~#RRQ-=+YQFs3mP# zrSh;#WyxVhg8J{fP|-n!0=1O7^0j`K%7Vl41#8pg%Py36Q2!>a>DkqhYi#AWuJhUY z9hM_3H=f%0`EU;E+oIine-|~jino-{VOhei?sl1$bx*kApGo6o_|Ged#7?YDt810 z@O0r^dJi*@g)w*x_rQXikc2aE9GXFc{ZIisUdMm%H~az5<7xZIN#V@(c8bl+wo@l9 zkzuLAc~eRRxr7KH69EGeBuoTRB7z_ifftD2=eNQYne%TY*~bxq^%23#62apo0^=b9 T%@Bd21%~ziUmY6jq@Ml*hBR{s diff --git a/Yi.Framework.Net6/Yi.Framework.Interface/IMenuService.cs b/Yi.Framework.Net6/Yi.Framework.Interface/IMenuService.cs index 28427488..19592ce7 100644 --- a/Yi.Framework.Net6/Yi.Framework.Interface/IMenuService.cs +++ b/Yi.Framework.Net6/Yi.Framework.Interface/IMenuService.cs @@ -10,5 +10,12 @@ namespace Yi.Framework.Interface { Task> GetMenuTreeAsync(); Task> SelctGetList(MenuEntity menu); + + /// + /// 获取该角色id下的所有菜单 + /// + /// + /// + Task> GetListByRoleId(long roleId); } } diff --git a/Yi.Framework.Net6/Yi.Framework.Interface/IRoleService.cs b/Yi.Framework.Net6/Yi.Framework.Interface/IRoleService.cs index 4414bc1a..fde0871c 100644 --- a/Yi.Framework.Net6/Yi.Framework.Interface/IRoleService.cs +++ b/Yi.Framework.Net6/Yi.Framework.Interface/IRoleService.cs @@ -44,5 +44,13 @@ namespace Yi.Framework.Interface /// /// Task AddInfo(RoleInfoDto roleDto); + + + /// + /// 更新角色关联菜单 + /// + /// + /// + Task UpdateInfo(RoleInfoDto roleDto); } } diff --git a/Yi.Framework.Net6/Yi.Framework.Service/MenuService.cs b/Yi.Framework.Net6/Yi.Framework.Service/MenuService.cs index 9448fa44..f76ecdaa 100644 --- a/Yi.Framework.Net6/Yi.Framework.Service/MenuService.cs +++ b/Yi.Framework.Net6/Yi.Framework.Service/MenuService.cs @@ -25,5 +25,11 @@ namespace Yi.Framework.Service //复杂查询直接使用db代理 return await _repository._Db.Queryable().Where(u => u.IsDeleted == false).ToTreeAsync(it => it.Children, it => it.ParentId, 0); } + + + public async Task> GetListByRoleId(long roleId) + { + return (await _repository._Db.Queryable().Includes(r => r.Menus).SingleAsync(r=>r.Id==roleId)).Menus; + } } } diff --git a/Yi.Framework.Net6/Yi.Framework.Service/RoleService.cs b/Yi.Framework.Net6/Yi.Framework.Service/RoleService.cs index bd51a930..b808dc17 100644 --- a/Yi.Framework.Net6/Yi.Framework.Service/RoleService.cs +++ b/Yi.Framework.Net6/Yi.Framework.Service/RoleService.cs @@ -75,5 +75,13 @@ namespace Yi.Framework.Service var res2 = await GiveRoleSetMenu(new List { res1 }, roleDto.MenuIds); return !0.Equals(res1) && res2; } + + + public async Task UpdateInfo(RoleInfoDto roleDto) + { + var res1 = await _repository.UpdateIgnoreNullAsync(roleDto.Role); + var res2 = await GiveRoleSetMenu(new List { roleDto.Role.Id }, roleDto.MenuIds); + return res1 && res2; + } } } diff --git a/Yi.Vue3.X.RuoYi/src/api/system/menu.js b/Yi.Vue3.X.RuoYi/src/api/system/menu.js index 5c04e404..f4a0818d 100644 --- a/Yi.Vue3.X.RuoYi/src/api/system/menu.js +++ b/Yi.Vue3.X.RuoYi/src/api/system/menu.js @@ -28,7 +28,7 @@ export function treeselect() { // 根据角色ID查询菜单下拉树结构 export function roleMenuTreeselect(roleId) { return request({ - url: '/system/menu/roleMenuTreeselect/' + roleId, + url: '/menu/getListByRoleId/' + roleId, method: 'get' }) } diff --git a/Yi.Vue3.X.RuoYi/src/api/system/role.js b/Yi.Vue3.X.RuoYi/src/api/system/role.js index 27d4ae14..ae522368 100644 --- a/Yi.Vue3.X.RuoYi/src/api/system/role.js +++ b/Yi.Vue3.X.RuoYi/src/api/system/role.js @@ -31,7 +31,7 @@ export function addRole(data) { // 修改角色 export function updateRole(data) { return request({ - url: '/system/role', + url: '/role/updateInfo', method: 'put', data: data }) @@ -130,4 +130,5 @@ export function roleOptionselect() { url: '/role/getList', method: 'get' }) + } \ No newline at end of file diff --git a/Yi.Vue3.X.RuoYi/src/views/system/role/index.vue b/Yi.Vue3.X.RuoYi/src/views/system/role/index.vue index 75e3237b..5757f026 100644 --- a/Yi.Vue3.X.RuoYi/src/views/system/role/index.vue +++ b/Yi.Vue3.X.RuoYi/src/views/system/role/index.vue @@ -188,7 +188,7 @@ const total = ref(0); const title = ref(""); const dateRange = ref([]); const menuOptions = ref([]); -const menuExpand = ref(false); +const menuExpand = ref(true); const menuNodeAll = ref(false); const deptExpand = ref(true); const deptNodeAll = ref(false); @@ -302,7 +302,6 @@ function getMenuTreeselect() { options.push({ id: m.id, label: m.menuName, parentId: m.parentId, children: m.children }) }) menuOptions.value = proxy.handleTree(options); - }) } /** 所有部门节点数据 */ @@ -352,145 +351,152 @@ function handleAdd() { function handleUpdate(row) { reset(); const roleId = row.id || ids.value; - const roleMenu = getRoleMenuTreeselect(roleId); + getRoleMenuTreeselect(roleId); getRole(roleId).then(response => { - form.value = response.data; - form.value.orderNum = Number(form.value.orderNum); + form.value.role = response.data; + form.value.role.orderNum = Number(form.value.role.orderNum); open.value = true; - nextTick(() => { - roleMenu.then((res) => { - let checkedKeys = res.checkedKeys; - checkedKeys.forEach((v) => { - nextTick(() => { - menuRef.value.setChecked(v, true, false); - }); - }); - }); - }); title.value = "修改角色"; }); } /** 根据角色ID查询菜单树结构 */ function getRoleMenuTreeselect(roleId) { - return roleMenuTreeselect(roleId).then(response => { - menuOptions.value = response.menus; - return response; + //1:获取该角色下的全部菜单id + //2:获取全量菜单 + 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查询部门树结构 */ function getDeptTree(roleId) { - return deptTreeSelect(roleId).then(response => { - deptOptions.value = response.depts; - return response; - }); -} + return deptTreeSelect(roleId).then(response => { + deptOptions.value = response.depts; + return response; + }); + } /** 树权限(展开/折叠)*/ function handleCheckedTreeExpand(value, type) { - if (type == "menu") { - let treeList = menuOptions.value; - for (let i = 0; i < treeList.length; i++) { - menuRef.value.store.nodesMap[treeList[i].id].expanded = value; + if (type == "menu") { + let treeList = menuOptions.value; + for (let i = 0; i < treeList.length; i++) { + 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) { - if (type == "menu") { - menuRef.value.setCheckedNodes(value ? menuOptions.value : []); - } else if (type == "dept") { - deptRef.value.setCheckedNodes(value ? deptOptions.value : []); - } -} + if (type == "menu") { + menuRef.value.setCheckedNodes(value ? menuOptions.value : []); + } else if (type == "dept") { + deptRef.value.setCheckedNodes(value ? deptOptions.value : []); + } + } /** 树权限(父子联动) */ function handleCheckedTreeConnect(value, type) { - if (type == "menu") { - form.value.menuCheckStrictly = value ? true : false; - } else if (type == "dept") { - form.value.deptCheckStrictly = value ? true : false; - } -} + if (type == "menu") { + form.value.menuCheckStrictly = value ? true : false; + } else if (type == "dept") { + form.value.deptCheckStrictly = value ? true : false; + } + } /** 所有菜单节点数据 */ function getMenuAllCheckedKeys() { - // 目前被选中的菜单节点 - let checkedKeys = menuRef.value.getCheckedKeys(); - // 半选中的菜单节点 - let halfCheckedKeys = menuRef.value.getHalfCheckedKeys(); - checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys); - return checkedKeys; -} + // 目前被选中的菜单节点 + let checkedKeys = menuRef.value.getCheckedKeys(); + // 半选中的菜单节点 + let halfCheckedKeys = menuRef.value.getHalfCheckedKeys(); + checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys); + return checkedKeys; + } /** 提交按钮 */ function submitForm() { - proxy.$refs["roleRef"].validate(valid => { - if (valid) { - if (form.value.role.id != undefined) { - form.value.menuIds = getMenuAllCheckedKeys(); - updateRole(form.value).then(response => { - proxy.$modal.msgSuccess("修改成功"); - open.value = false; - getList(); + proxy.$refs["roleRef"].validate(valid => { + if (valid) { + if (form.value.role.id != undefined) { + form.value.menuIds = getMenuAllCheckedKeys(); + updateRole(form.value).then(response => { + proxy.$modal.msgSuccess("修改成功"); + open.value = false; + 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 { - form.value.menuIds = getMenuAllCheckedKeys(); - addRole(form.value).then(response => { - proxy.$modal.msgSuccess("新增成功"); - open.value = false; + 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 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() { - openDataScope.value = false; - reset(); -} + openDataScope.value = false; + reset(); + } getList();