feature: 动态生成菜单栏
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
from collections import OrderedDict
|
||||
from copy import deepcopy
|
||||
|
||||
from flask import Blueprint, make_response, redirect, request
|
||||
from flask_jwt_extended import (
|
||||
create_access_token,
|
||||
@@ -10,7 +13,7 @@ from flask_jwt_extended import (
|
||||
)
|
||||
|
||||
from pear_admin.extensions import db
|
||||
from pear_admin.orms import UserORM
|
||||
from pear_admin.orms import RightsORM, UserORM
|
||||
|
||||
passport_api = Blueprint("passport", __name__)
|
||||
|
||||
@@ -46,3 +49,27 @@ def logout():
|
||||
unset_access_cookies(response)
|
||||
unset_refresh_cookies(response)
|
||||
return response
|
||||
|
||||
|
||||
@passport_api.get("/menu")
|
||||
@jwt_required()
|
||||
def menus_api():
|
||||
rights_orm_list = RightsORM.query.filter(RightsORM.type != "auth").all()
|
||||
rights_list = [rights_orm.menu_json() for rights_orm in rights_orm_list]
|
||||
rights_list.sort(key=lambda x: (x["pid"], x["id"]), reverse=True)
|
||||
|
||||
menu_dict_list = OrderedDict()
|
||||
for menu_dict in rights_list:
|
||||
if menu_dict["id"] in menu_dict_list.keys(): # 如果当前节点已经存在与字典中
|
||||
# 当前节点添加子节点
|
||||
menu_dict["children"] = deepcopy(menu_dict_list[menu_dict["id"]])
|
||||
menu_dict["children"].sort(key=lambda item: item["sort"])
|
||||
# 删除子节点
|
||||
del menu_dict_list[menu_dict["id"]]
|
||||
|
||||
if menu_dict["pid"] not in menu_dict_list:
|
||||
menu_dict_list[menu_dict["pid"]] = [menu_dict]
|
||||
else:
|
||||
menu_dict_list[menu_dict["pid"]].append(menu_dict)
|
||||
|
||||
return sorted(menu_dict_list.get(0), key=lambda item: item["sort"])
|
||||
|
||||
Reference in New Issue
Block a user