新增菜单路由排序功能
This commit is contained in:
parent
3f7e96e9b1
commit
36615163b7
@ -128,25 +128,26 @@ class MenuDal(DalBase):
|
||||
def __init__(self, db: AsyncSession):
|
||||
super(MenuDal, self).__init__(db, models.VadminMenu, schemas.MenuSimpleOut)
|
||||
|
||||
async def get_tree_list(self):
|
||||
async def get_tree_list(self, mode: int):
|
||||
"""
|
||||
获取菜单树列表
|
||||
1:获取菜单树列表
|
||||
2:获取菜单树选择项,添加/修改菜单时使用
|
||||
3:获取菜单树列表,角色添加菜单权限时使用
|
||||
"""
|
||||
sql = select(self.model)
|
||||
if mode == 3:
|
||||
sql = select(self.model).where(self.model.disabled == 0, self.model.menu_type != "2")
|
||||
else:
|
||||
sql = select(self.model)
|
||||
queryset = await self.db.execute(sql)
|
||||
menus = queryset.scalars().all()
|
||||
roots = filter(lambda i: not i.parent_id, menus)
|
||||
return self.generate_tree_list(menus, roots)
|
||||
|
||||
async def get_tree_options(self):
|
||||
"""
|
||||
获取菜单树选择项
|
||||
"""
|
||||
sql = select(self.model)
|
||||
queryset = await self.db.execute(sql)
|
||||
menus = queryset.scalars().all()
|
||||
roots = filter(lambda i: not i.parent_id, menus)
|
||||
return self.generate_tree_options(menus, roots)
|
||||
datas = queryset.scalars().all()
|
||||
roots = filter(lambda i: not i.parent_id, datas)
|
||||
if mode == 1:
|
||||
menus = self.generate_tree_list(datas, roots)
|
||||
elif mode == 2 or mode == 3:
|
||||
menus = self.generate_tree_options(datas, roots)
|
||||
else:
|
||||
raise CustomException("获取菜单失败,无可用选项", code=400)
|
||||
return self.menus_order(menus)
|
||||
|
||||
async def get_routers(self, user: models.VadminUser):
|
||||
"""
|
||||
@ -161,27 +162,20 @@ class MenuDal(DalBase):
|
||||
}
|
||||
"""
|
||||
if any([i.is_admin for i in user.roles]):
|
||||
sql = select(self.model).where(self.model.disabled == False, self.model.menu_type != "2")
|
||||
sql = select(self.model).where(self.model.disabled == 0, self.model.menu_type != "2")
|
||||
queryset = await self.db.execute(sql)
|
||||
menus = queryset.scalars().all()
|
||||
datas = queryset.scalars().all()
|
||||
else:
|
||||
menus = set()
|
||||
datas = set()
|
||||
for role in user.roles:
|
||||
role_obj = await RoleDal(self.db).get_data(role.id, options=[models.VadminRole.menus])
|
||||
for menu in role_obj.menus:
|
||||
# 该路由没有被禁用,并且菜单不是按钮
|
||||
if not menu.disabled and menu.menu_type != "2":
|
||||
menus.add(menu)
|
||||
roots = filter(lambda i: not i.parent_id, menus)
|
||||
return self.generate_router_tree(menus, roots)
|
||||
|
||||
async def get_treeselect(self):
|
||||
"""获取菜单树列表,角色添加菜单权限时使用"""
|
||||
sql = select(self.model).where(self.model.disabled == False, self.model.menu_type != "2")
|
||||
queryset = await self.db.execute(sql)
|
||||
menus = queryset.scalars().all()
|
||||
roots = filter(lambda i: not i.parent_id, menus)
|
||||
return self.generate_tree_options(menus, roots)
|
||||
datas.add(menu)
|
||||
roots = filter(lambda i: not i.parent_id, datas)
|
||||
menus = self.generate_router_tree(datas, roots)
|
||||
return self.menus_order(menus)
|
||||
|
||||
def generate_router_tree(self, menus: List[models.VadminMenu], nodes: filter) -> list:
|
||||
"""
|
||||
@ -232,3 +226,15 @@ class MenuDal(DalBase):
|
||||
router["children"] = self.generate_tree_options(menus, sons)
|
||||
data.append(router)
|
||||
return data
|
||||
|
||||
@classmethod
|
||||
def menus_order(cls, datas: list, order: str = "order", children: str = "children"):
|
||||
"""
|
||||
菜单排序
|
||||
"""
|
||||
result = sorted(datas, key=lambda menu: menu[order])
|
||||
for item in result:
|
||||
if item[children]:
|
||||
item[children] = sorted(item[children], key=lambda menu: menu[order])
|
||||
return result
|
||||
|
||||
|
@ -55,6 +55,7 @@ class RouterOut(BaseModel):
|
||||
path: str
|
||||
redirect: Optional[str] = None
|
||||
meta: Optional[Meta] = None
|
||||
order: Optional[int] = None
|
||||
children: List['RouterOut'] = []
|
||||
|
||||
class Config:
|
||||
|
@ -118,19 +118,19 @@ async def get_role(data_id: int, auth: Auth = Depends(login_auth)):
|
||||
###########################################################
|
||||
@app.get("/menus/", summary="获取菜单列表")
|
||||
async def get_menus(auth: Auth = Depends(login_auth)):
|
||||
datas = await crud.MenuDal(auth.db).get_tree_list()
|
||||
datas = await crud.MenuDal(auth.db).get_tree_list(mode=1)
|
||||
return SuccessResponse(datas)
|
||||
|
||||
|
||||
@app.get("/menus/tree/options/", summary="获取菜单树选择项")
|
||||
@app.get("/menus/tree/options/", summary="获取菜单树选择项,添加/修改菜单时使用")
|
||||
async def get_menus_options(auth: Auth = Depends(login_auth)):
|
||||
datas = await crud.MenuDal(auth.db).get_tree_options()
|
||||
datas = await crud.MenuDal(auth.db).get_tree_list(mode=2)
|
||||
return SuccessResponse(datas)
|
||||
|
||||
|
||||
@app.get("/menus/role/tree/options/", summary="获取菜单列表树信息,角色权限使用")
|
||||
async def get_menus_treeselect(auth: Auth = Depends(login_auth)):
|
||||
return SuccessResponse(await crud.MenuDal(auth.db).get_treeselect())
|
||||
return SuccessResponse(await crud.MenuDal(auth.db).get_tree_list(mode=3))
|
||||
|
||||
|
||||
@app.post("/menus/", summary="创建菜单信息")
|
||||
@ -163,6 +163,6 @@ async def put_menus(data_id: int, auth: Auth = Depends(login_auth)):
|
||||
|
||||
@app.get("/role/menus/tree/{role_id}/", summary="获取菜单列表树信息以及角色菜单权限ID,角色权限使用")
|
||||
async def get_role_menu_tree(role_id: int, auth: Auth = Depends(login_auth)):
|
||||
treeselect = await crud.MenuDal(auth.db).get_treeselect()
|
||||
treeselect = await crud.MenuDal(auth.db).get_tree_list(mode=3)
|
||||
role_menu_tree = await crud.RoleDal(auth.db).get_role_menu_tree(role_id)
|
||||
return SuccessResponse({"role_menu_tree": role_menu_tree, "menus": treeselect})
|
||||
|
Loading…
x
Reference in New Issue
Block a user