diff --git a/backend/app/admin/api/v1/sys/menu.py b/backend/app/admin/api/v1/sys/menu.py index dbd4f23c..14da21e2 100644 --- a/backend/app/admin/api/v1/sys/menu.py +++ b/backend/app/admin/api/v1/sys/menu.py @@ -15,8 +15,8 @@ router = APIRouter() @router.get('/sidebar', summary='获取用户菜单侧边栏', description='适配 vben5', dependencies=[DependsJwtAuth]) -async def get_user_sidebar(request: Request) -> ResponseSchemaModel[list[dict[str, Any]]]: - menu = await menu_service.get_user_menu_tree(request=request) +async def get_user_sidebar(request: Request) -> ResponseSchemaModel[list[dict[str, Any] | None]]: + menu = await menu_service.get_sidebar(request=request) return response_base.success(data=menu) diff --git a/backend/app/admin/api/v1/sys/role.py b/backend/app/admin/api/v1/sys/role.py index 1ac94f83..027a8133 100644 --- a/backend/app/admin/api/v1/sys/role.py +++ b/backend/app/admin/api/v1/sys/role.py @@ -40,7 +40,7 @@ async def get_user_all_roles( @router.get('/{pk}/menus', summary='获取角色所有菜单', dependencies=[DependsJwtAuth]) async def get_role_all_menus( pk: Annotated[int, Path(description='角色 ID')], -) -> ResponseSchemaModel[list[dict[str, Any]]]: +) -> ResponseSchemaModel[list[dict[str, Any] | None]]: menu = await role_service.get_menu_tree(pk=pk) return response_base.success(data=menu) diff --git a/backend/app/admin/crud/crud_menu.py b/backend/app/admin/crud/crud_menu.py index da9a086b..c18fd7e5 100644 --- a/backend/app/admin/crud/crud_menu.py +++ b/backend/app/admin/crud/crud_menu.py @@ -45,12 +45,12 @@ class CRUDMenu(CRUDPlus[Menu]): """ filters = {} if title is not None: - filters.update(title=f'%{title}%') + filters.update(title_like=f'%{title}%') if status is not None: filters.update(status=status) return await self.select_models_order(db, 'sort', **filters) - async def get_role_menus(self, db: AsyncSession, superuser: bool, menu_ids: list[int]) -> Sequence[Menu]: + async def get_sidebar(self, db: AsyncSession, superuser: bool, menu_ids: list[int | None]) -> Sequence[Menu]: """ 获取角色菜单列表 diff --git a/backend/app/admin/service/menu_service.py b/backend/app/admin/service/menu_service.py index 67a4b0fe..e9ac6877 100644 --- a/backend/app/admin/service/menu_service.py +++ b/backend/app/admin/service/menu_service.py @@ -41,27 +41,29 @@ class MenuService: :return: """ async with async_db_session() as db: - menu_select = await menu_dao.get_all(db, title=title, status=status) - menu_tree = get_tree_data(menu_select) + menu_data = await menu_dao.get_all(db, title=title, status=status) + menu_tree = get_tree_data(menu_data) return menu_tree @staticmethod - async def get_user_menu_tree(*, request: Request) -> list[dict[str, Any]]: + async def get_sidebar(*, request: Request) -> list[dict[str, Any] | None]: """ - 获取用户的菜单树形结构 + 获取用户的菜单侧边栏 :param request: FastAPI 请求对象 :return: """ async with async_db_session() as db: roles = request.user.roles - menu_ids = [] menu_tree = [] if roles: + all_menus = [] for role in roles: - menu_ids.extend([menu.id for menu in role.menus]) - menu_select = await menu_dao.get_role_menus(db, request.user.is_superuser, menu_ids) - menu_tree = get_vben5_tree_data(menu_select) + all_menus.extend(role.menus) + all_ids = [menu.id for menu in all_menus] + valid_menu_ids = [menu.id for menu in all_menus if menu.parent_id is None or menu.parent_id in all_ids] + menu_data = await menu_dao.get_sidebar(db, request.user.is_superuser, valid_menu_ids) + menu_tree = get_vben5_tree_data(menu_data) return menu_tree @staticmethod diff --git a/backend/app/admin/service/role_service.py b/backend/app/admin/service/role_service.py index 32648e5d..049e44c5 100644 --- a/backend/app/admin/service/role_service.py +++ b/backend/app/admin/service/role_service.py @@ -69,7 +69,7 @@ class RoleService: return await role_dao.get_list(name=name, status=status) @staticmethod - async def get_menu_tree(*, pk: int) -> list[dict[str, Any]]: + async def get_menu_tree(*, pk: int) -> list[dict[str, Any] | None]: """ 获取角色的菜单树形结构 @@ -80,9 +80,7 @@ class RoleService: role = await role_dao.get_with_relation(db, pk) if not role: raise errors.NotFoundError(msg='角色不存在') - menu_ids = [menu.id for menu in role.menus] - menu_select = await menu_dao.get_role_menus(db, False, menu_ids) - menu_tree = get_tree_data(menu_select) + menu_tree = get_tree_data(role.menus) if role.menus else [] return menu_tree @staticmethod diff --git a/backend/static/ws.html b/backend/static/ws.html deleted file mode 100644 index dcd2178f..00000000 --- a/backend/static/ws.html +++ /dev/null @@ -1,92 +0,0 @@ - - -
- - -Waiting for task notifications...
- - - - - - - -