Skip to content

Commit 1cddd6e

Browse files
authored
Update non-linked sidebar support (#633)
* Update non-linked sidebar support * fix typing
1 parent ed10e6f commit 1cddd6e

File tree

6 files changed

+17
-109
lines changed

6 files changed

+17
-109
lines changed

backend/app/admin/api/v1/sys/menu.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515

1616

1717
@router.get('/sidebar', summary='获取用户菜单侧边栏', description='适配 vben5', dependencies=[DependsJwtAuth])
18-
async def get_user_sidebar(request: Request) -> ResponseSchemaModel[list[dict[str, Any]]]:
19-
menu = await menu_service.get_user_menu_tree(request=request)
18+
async def get_user_sidebar(request: Request) -> ResponseSchemaModel[list[dict[str, Any] | None]]:
19+
menu = await menu_service.get_sidebar(request=request)
2020
return response_base.success(data=menu)
2121

2222

backend/app/admin/api/v1/sys/role.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ async def get_user_all_roles(
4040
@router.get('/{pk}/menus', summary='获取角色所有菜单', dependencies=[DependsJwtAuth])
4141
async def get_role_all_menus(
4242
pk: Annotated[int, Path(description='角色 ID')],
43-
) -> ResponseSchemaModel[list[dict[str, Any]]]:
43+
) -> ResponseSchemaModel[list[dict[str, Any] | None]]:
4444
menu = await role_service.get_menu_tree(pk=pk)
4545
return response_base.success(data=menu)
4646

backend/app/admin/crud/crud_menu.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,12 @@ async def get_all(self, db: AsyncSession, title: str | None, status: int | None)
4545
"""
4646
filters = {}
4747
if title is not None:
48-
filters.update(title=f'%{title}%')
48+
filters.update(title_like=f'%{title}%')
4949
if status is not None:
5050
filters.update(status=status)
5151
return await self.select_models_order(db, 'sort', **filters)
5252

53-
async def get_role_menus(self, db: AsyncSession, superuser: bool, menu_ids: list[int]) -> Sequence[Menu]:
53+
async def get_sidebar(self, db: AsyncSession, superuser: bool, menu_ids: list[int | None]) -> Sequence[Menu]:
5454
"""
5555
获取角色菜单列表
5656

backend/app/admin/service/menu_service.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,27 +41,29 @@ async def get_menu_tree(*, title: str | None, status: int | None) -> list[dict[s
4141
:return:
4242
"""
4343
async with async_db_session() as db:
44-
menu_select = await menu_dao.get_all(db, title=title, status=status)
45-
menu_tree = get_tree_data(menu_select)
44+
menu_data = await menu_dao.get_all(db, title=title, status=status)
45+
menu_tree = get_tree_data(menu_data)
4646
return menu_tree
4747

4848
@staticmethod
49-
async def get_user_menu_tree(*, request: Request) -> list[dict[str, Any]]:
49+
async def get_sidebar(*, request: Request) -> list[dict[str, Any] | None]:
5050
"""
51-
获取用户的菜单树形结构
51+
获取用户的菜单侧边栏
5252
5353
:param request: FastAPI 请求对象
5454
:return:
5555
"""
5656
async with async_db_session() as db:
5757
roles = request.user.roles
58-
menu_ids = []
5958
menu_tree = []
6059
if roles:
60+
all_menus = []
6161
for role in roles:
62-
menu_ids.extend([menu.id for menu in role.menus])
63-
menu_select = await menu_dao.get_role_menus(db, request.user.is_superuser, menu_ids)
64-
menu_tree = get_vben5_tree_data(menu_select)
62+
all_menus.extend(role.menus)
63+
all_ids = [menu.id for menu in all_menus]
64+
valid_menu_ids = [menu.id for menu in all_menus if menu.parent_id is None or menu.parent_id in all_ids]
65+
menu_data = await menu_dao.get_sidebar(db, request.user.is_superuser, valid_menu_ids)
66+
menu_tree = get_vben5_tree_data(menu_data)
6567
return menu_tree
6668

6769
@staticmethod

backend/app/admin/service/role_service.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ async def get_select(*, name: str | None, status: int | None) -> Select:
6969
return await role_dao.get_list(name=name, status=status)
7070

7171
@staticmethod
72-
async def get_menu_tree(*, pk: int) -> list[dict[str, Any]]:
72+
async def get_menu_tree(*, pk: int) -> list[dict[str, Any] | None]:
7373
"""
7474
获取角色的菜单树形结构
7575
@@ -80,9 +80,7 @@ async def get_menu_tree(*, pk: int) -> list[dict[str, Any]]:
8080
role = await role_dao.get_with_relation(db, pk)
8181
if not role:
8282
raise errors.NotFoundError(msg='角色不存在')
83-
menu_ids = [menu.id for menu in role.menus]
84-
menu_select = await menu_dao.get_role_menus(db, False, menu_ids)
85-
menu_tree = get_tree_data(menu_select)
83+
menu_tree = get_tree_data(role.menus) if role.menus else []
8684
return menu_tree
8785

8886
@staticmethod

backend/static/ws.html

Lines changed: 0 additions & 92 deletions
This file was deleted.

0 commit comments

Comments
 (0)