diff --git a/ruoyi-fastapi-backend/module_admin/dao/dept_dao.py b/ruoyi-fastapi-backend/module_admin/dao/dept_dao.py index 44a2f20..d470692 100644 --- a/ruoyi-fastapi-backend/module_admin/dao/dept_dao.py +++ b/ruoyi-fastapi-backend/module_admin/dao/dept_dao.py @@ -88,14 +88,14 @@ class DeptDao: dept_result = (await db.execute( select(SysDept) .where(SysDept.dept_id != dept_info.dept_id, - SysDept.parent_id != dept_info.dept_id, + ~SysDept.dept_id.in_(select(SysDept.dept_id).where(func.find_in_set(dept_info.dept_id, SysDept.ancestors))), SysDept.del_flag == '0', SysDept.status == '0', eval(data_scope_sql)) .order_by(SysDept.order_num) .distinct() )).scalars().all() - return list_format_datetime(dept_result) + return dept_result @classmethod async def get_children_dept(cls, db: AsyncSession, dept_id: int): diff --git a/ruoyi-fastapi-backend/module_admin/dao/menu_dao.py b/ruoyi-fastapi-backend/module_admin/dao/menu_dao.py index 522022c..dfa9ca2 100644 --- a/ruoyi-fastapi-backend/module_admin/dao/menu_dao.py +++ b/ruoyi-fastapi-backend/module_admin/dao/menu_dao.py @@ -168,7 +168,7 @@ class MenuDao: menu_count = (await db.execute( select(func.count('*')) .select_from(SysMenu) - .where(SysMenu.menu_id == menu_id) + .where(SysMenu.parent_id == menu_id) )).scalar() return menu_count diff --git a/ruoyi-fastapi-backend/module_admin/dao/role_dao.py b/ruoyi-fastapi-backend/module_admin/dao/role_dao.py index b65b4a1..5706128 100644 --- a/ruoyi-fastapi-backend/module_admin/dao/role_dao.py +++ b/ruoyi-fastapi-backend/module_admin/dao/role_dao.py @@ -3,6 +3,7 @@ from sqlalchemy.ext.asyncio import AsyncSession from module_admin.entity.do.user_do import SysUser, SysUserRole from module_admin.entity.do.role_do import SysRole, SysRoleMenu, SysRoleDept from module_admin.entity.do.dept_do import SysDept +from module_admin.entity.do.menu_do import SysMenu from module_admin.entity.vo.role_vo import * from utils.page_util import PageUtil from datetime import datetime, time @@ -169,17 +170,24 @@ class RoleDao: ) @classmethod - async def get_role_menu_dao(cls, db: AsyncSession, role_id: int): + async def get_role_menu_dao(cls, db: AsyncSession, role: RoleModel): """ 根据角色id获取角色菜单关联列表信息 :param db: orm对象 - :param role_id: 角色id + :param role: 角色对象 :return: 角色菜单关联列表信息 """ role_menu_query_all = (await db.execute( - select(SysRoleMenu) - .where(SysRoleMenu.role_id == role_id) - .distinct() + select(SysMenu) + .join(SysRoleMenu, SysRoleMenu.menu_id == SysMenu.menu_id) + .where(SysRoleMenu.role_id == role.role_id, + ~SysMenu.menu_id.in_( + select(SysMenu.parent_id) + .select_from(SysMenu) + .join(SysRoleMenu, + and_(SysRoleMenu.menu_id == SysMenu.menu_id, SysRoleMenu.role_id == role.role_id)) + ) if role.menu_check_strictly else True) + .order_by(SysMenu.parent_id, SysMenu.order_num) )).scalars().all() return role_menu_query_all diff --git a/ruoyi-fastapi-backend/module_admin/service/menu_service.py b/ruoyi-fastapi-backend/module_admin/service/menu_service.py index 4769311..e68d3f6 100644 --- a/ruoyi-fastapi-backend/module_admin/service/menu_service.py +++ b/ruoyi-fastapi-backend/module_admin/service/menu_service.py @@ -38,7 +38,8 @@ class MenuService: """ menu_list_result = await MenuDao.get_menu_list_for_tree(query_db, current_user.user.user_id, current_user.user.role) menu_tree_result = cls.list_to_tree(menu_list_result) - role_menu_list = await RoleDao.get_role_menu_dao(query_db, role_id) + role = await RoleDao.get_role_detail_by_id(query_db, role_id) + role_menu_list = await RoleDao.get_role_menu_dao(query_db, role) checked_keys = [row.menu_id for row in role_menu_list] result = RoleMenuQueryModel( menus=menu_tree_result,