构造多级菜单树(来源mini分支)

This commit is contained in:
mkg
2021-11-17 16:02:51 +08:00
parent 14f96abdb3
commit fba22bbcbf
+21 -30
View File
@@ -1,3 +1,5 @@
import copy
from collections import OrderedDict
from io import BytesIO from io import BytesIO
from flask import session, make_response, current_app from flask import session, make_response, current_app
from flask_login import current_user from flask_login import current_user
@@ -22,16 +24,8 @@ def add_auth_session():
# 生成菜单树 # 生成菜单树
def make_menu_tree(): def make_menu_tree():
# power0 = Power.query.filter(
# Power.type == 0,
# ).all()
# power1 = Power.query.filter(
# Power.type == 1
# ).all()
# 获取当前用户的角色
role = current_user.role role = current_user.role
power0 = [] powers = []
power1 = []
for i in role: for i in role:
# 如果角色没有被启用就直接跳过 # 如果角色没有被启用就直接跳过
if i.enable == 0: if i.enable == 0:
@@ -41,31 +35,28 @@ def make_menu_tree():
# 如果权限关闭了就直接跳过 # 如果权限关闭了就直接跳过
if p.enable == 0: if p.enable == 0:
continue continue
# 一级菜单 # 一级菜单
if int(p.type) == 0: if int(p.type) == 0 or int(p.type) == 1:
power0.append(p) powers.append(p)
# 二级菜单
else:
power1.append(p)
power_schema = PowerSchema(many=True) # 用已继承 ma.ModelSchema 类的自定制类生成序列化类 power_schema = PowerSchema(many=True) # 用已继承 ma.ModelSchema 类的自定制类生成序列化类
power0_dict = power_schema.dump(power0) # 生成可序列化对象 power_dict = power_schema.dump(powers) # 生成可序列化对象
power1_dict = power_schema.dump(power1) # 生成可序列化对象 power_dict.sort(key=lambda x: x['id'], reverse=True)
power0_dict = sorted(power0_dict, key=lambda i: i['sort'])
power1_dict = sorted(power1_dict, key=lambda i: i['sort'])
# print(power0)
# print(power1)
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: if _dict['parent_id'] not in menu_dict:
for p1 in power1_dict: menu_dict[_dict['parent_id']] = [_dict]
if p0.get('id') == p1.get('parent_id'): else:
if p0.get("children") is None: menu_dict[_dict['parent_id']].append(_dict)
p0['children'] = [] return sorted(menu_dict.get(0), key=lambda item: item['sort'])
p0['children'].append(p1)
menu.append(p0)
return menu
# 生成验证码 # 生成验证码