功能变化: 菜单授权返回包含父级的完整名称

This commit is contained in:
猿小天
2023-12-28 01:25:58 +08:00
parent 411f065bfc
commit 577b88332f
2 changed files with 31 additions and 3 deletions

View File

@@ -175,6 +175,26 @@ class Menu(CoreModel):
is_iframe = models.BooleanField(default=False, blank=True, verbose_name="框架外显示", help_text="框架外显示") is_iframe = models.BooleanField(default=False, blank=True, verbose_name="框架外显示", help_text="框架外显示")
is_affix = models.BooleanField(default=False, blank=True, verbose_name="是否固定", help_text="是否固定") is_affix = models.BooleanField(default=False, blank=True, verbose_name="是否固定", help_text="是否固定")
@classmethod
def get_all_parent(cls, id: int, all_list=None, nodes=None):
"""
递归获取给定ID的所有层级
:param id: 参数ID
:param all_list: 所有列表
:param nodes: 递归列表
:return: nodes
"""
if not all_list:
all_list = Menu.objects.values("id", "name", "parent")
if nodes is None:
nodes = []
for ele in all_list:
if ele.get("id") == id:
parent_id = ele.get("parent")
if parent_id is not None:
cls.get_all_parent(parent_id, all_list, nodes)
nodes.append(ele)
return nodes
class Meta: class Meta:
db_table = table_prefix + "system_menu" db_table = table_prefix + "system_menu"
verbose_name = "菜单表" verbose_name = "菜单表"

View File

@@ -112,10 +112,15 @@ class RoleMenuPermissionSerializer(CustomModelSerializer):
""" """
菜单和按钮权限 菜单和按钮权限
""" """
name = serializers.SerializerMethodField()
isCheck = serializers.SerializerMethodField() isCheck = serializers.SerializerMethodField()
btns = serializers.SerializerMethodField() btns = serializers.SerializerMethodField()
columns = serializers.SerializerMethodField() columns = serializers.SerializerMethodField()
def get_name(self, instance):
parent_list = Menu.get_all_parent(instance['id'])
names = [d["name"] for d in parent_list]
return "/".join(names)
def get_isCheck(self, instance): def get_isCheck(self, instance):
params = self.request.query_params params = self.request.query_params
return RoleMenuPermission.objects.filter( return RoleMenuPermission.objects.filter(
@@ -189,9 +194,12 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet):
RoleMenuButtonPermission.objects.filter(role=pk).delete() RoleMenuButtonPermission.objects.filter(role=pk).delete()
for menu in body: for menu in body:
if menu.get('isCheck'): if menu.get('isCheck'):
menu_parent = Menu.objects.filter(id=menu.get('id')).values('parent').first() menu_parent = Menu.get_all_parent(menu.get('id'))
RoleMenuPermission.objects.create(role_id=pk, menu_id=menu_parent.get('parent')) role_menu_permission_list = []
RoleMenuPermission.objects.create(role_id=pk, menu_id=menu.get('id')) for d in menu_parent:
role_menu_permission_list.append(RoleMenuPermission(role_id=pk, menu_id=d["id"]))
RoleMenuPermission.objects.bulk_create(role_menu_permission_list)
# RoleMenuPermission.objects.create(role_id=pk, menu_id=menu.get('id'))
for btn in menu.get('btns'): for btn in menu.get('btns'):
if btn.get('isCheck'): if btn.get('isCheck'):
data_range = btn.get('data_range',0) or 0 data_range = btn.get('data_range',0) or 0