diff --git a/applications/common/admin.py b/applications/common/admin.py index 275e6de..1f80c32 100644 --- a/applications/common/admin.py +++ b/applications/common/admin.py @@ -1,3 +1,5 @@ +import copy +from collections import OrderedDict from io import BytesIO from flask import session, make_response, current_app from flask_login import current_user @@ -22,16 +24,8 @@ def add_auth_session(): # 生成菜单树 def make_menu_tree(): - # power0 = Power.query.filter( - # Power.type == 0, - # ).all() - # power1 = Power.query.filter( - # Power.type == 1 - # ).all() - # 获取当前用户的角色 role = current_user.role - power0 = [] - power1 = [] + powers = [] for i in role: # 如果角色没有被启用就直接跳过 if i.enable == 0: @@ -41,31 +35,28 @@ def make_menu_tree(): # 如果权限关闭了就直接跳过 if p.enable == 0: continue - # 一级菜单 - if int(p.type) == 0: - power0.append(p) - # 二级菜单 - else: - power1.append(p) + # 一二级菜单 + if int(p.type) == 0 or int(p.type) == 1: + powers.append(p) power_schema = PowerSchema(many=True) # 用已继承 ma.ModelSchema 类的自定制类生成序列化类 - power0_dict = power_schema.dump(power0) # 生成可序列化对象 - power1_dict = power_schema.dump(power1) # 生成可序列化对象 - power0_dict = sorted(power0_dict, key=lambda i: i['sort']) - power1_dict = sorted(power1_dict, key=lambda i: i['sort']) - # print(power0) - # print(power1) + power_dict = power_schema.dump(powers) # 生成可序列化对象 + power_dict.sort(key=lambda x: x['id'], reverse=True) - menu = [] + menu_dict = OrderedDict() + for _dict in power_dict: + if _dict['id'] in menu_dict: + # 当前节点添加子节点 + _dict['children'] = copy.deepcopy(menu_dict[_dict['id']]) + _dict['children'].sort(key=lambda item: item['sort']) + # 删除子节点 + del menu_dict[_dict['id']] - for p0 in power0_dict: - for p1 in power1_dict: - if p0.get('id') == p1.get('parent_id'): - if p0.get("children") is None: - p0['children'] = [] - p0['children'].append(p1) - menu.append(p0) - return menu + if _dict['parent_id'] not in menu_dict: + menu_dict[_dict['parent_id']] = [_dict] + else: + menu_dict[_dict['parent_id']].append(_dict) + return sorted(menu_dict.get(0), key=lambda item: item['sort']) # 生成验证码