ソースを参照

优化菜单获取路由接口。

baoyubo 10 ヶ月 前
コミット
57d4f3f32e
1 ファイル変更83 行追加98 行削除
  1. 83 98
      routers/prod_api/system/menu/__init__.py

+ 83 - 98
routers/prod_api/system/menu/__init__.py

@@ -13,6 +13,8 @@ from utils.ry_system_util import *
 import json
 from sqlalchemy.sql import func
 from common.auth_user import *
+import traceback
+
 
 router = APIRouter()
 
@@ -122,72 +124,63 @@ async def getRouters(request: Request, db: Session = Depends(get_db),
         def build_menu_tree(menus, parent_menu):
             menu_tree = []  # 初始化一个列表来存储菜单树结构
             for menu in menus:
+                menu_data = {
+                    "component":menu.component or 'Layout',
+                    "hidden":menu.visible == '1',
+                    "name":menu.path,
+                    "path":'/'+menu.path,
+                    "redirect":'noRedirect',
+                    # "alwaysShow":True,
+                    "meta":{
+                        "title":menu.menu_name,
+                        'icon' : menu.icon,
+                        'noCache' : menu.is_cache == '1',
+
+                    }
+                }
                 if menu.is_frame==0:
-                    menu_data = Router_frame(
-                        component=menu.component or 'Layout',
-                        hidden=menu.visible == '1',
-                        name=menu.path,
-                        path='/'+menu.path,
-                        meta = Meta(
-                            title=menu.menu_name,
-                            icon=menu.icon,
-                            noCache=menu.is_cache == '1',
-                            link = menu.path
-                        ),
-                        children=[]
-                    )
-                else:
-                    menu_data = Router(
-                        name=menu.path,#menu.menu_name,
-                        path='/'+menu.path,
-                        hidden=menu.visible == '1',
-                        component=menu.component or 'Layout',
-                        meta=Meta(
-                            title=menu.menu_name,
-                            icon=menu.icon,
-                            noCache=menu.is_cache == '1'
-                        ),
-                        children=[]  # 初始化 children 列表,即使没有子菜单
-                    )
+                    menu_data['meta']['link']=menu.path
+
                 # 如果菜单有子菜单,则递归构建子菜单
                 if menu.menu_type == 'M':  # 假设 'M' 表示目录类型
-                    query = db.query(SysMenu)
-                    query = query.filter_by(parent_id=menu.menu_id)
-                    query = query.filter(SysMenu.del_flag != '2')
+                    # query = db.query(SysMenu)
+                    # query = query.filter_by(parent_id=menu.menu_id)
+                    # query = query.filter(SysMenu.del_flag != '2')
                     # children_menus = db.query(SysMenu).filter_by(parent_id=menu.menu_id).all()
-                    children_menus = query.all()
-                    menu_data.children = build_menu_tree(children_menus, menu)
+                    # children_menus = query.all()
+                    # menu_data['redirect'] ='noRedirect'
+                    menu_data['alwaysShow'] =True
+                    children_menus = parent_id_get_menu_info(db,menu.menu_id)
+                    if len(children_menus)>0:
+                        menu_data['children'] = build_menu_tree(children_menus, menu)
+
                 else:
-                    del menu_data.children #没有子菜单,删除children 列表
-                    del menu_data.redirect
-                    del menu_data.alwaysShow
-                    menu_data.path = menu_data.path[1:]
-                print(menu_data)
+                    menu_data['path'] = menu_data['path'][1:]
                 menu_tree.append(menu_data)  # 将当前菜单数据添加到菜单树列表
             return menu_tree
 
         # 构建顶级菜单的树形结构
         routers = build_menu_tree(menus, None)
         # routers_dict = [router.dict() for router in routers]
-        routers_dict = []
-        for router in routers:
-            router_info = router.dict()
-            if len(router_info['children'])==0:
-                del router_info['children']
-                del router_info['redirect']
-                del router_info['alwaysShow']
-                router_info['path'] = router_info['path'] #[1:]
-
-            routers_dict.append(router_info)
+        # routers_dict = []
+        # for router in routers:
+        #     router_info = router.dict()
+        #     if len(router_info['children'])==0:
+        #         del router_info['children']
+        #         del router_info['redirect']
+        #         del router_info['alwaysShow']
+        #         router_info['path'] = router_info['path'] #[1:]
+        #
+        #     routers_dict.append(router_info)
         # 返回构建好的路由数据
         return {
             "code": 200,
             "msg": "操作成功",
-            "data": routers_dict #[router.dict() for router in routers]  # 如果没有顶级菜单,返回空列表
+            "data": routers #[router.dict() for router in routers]  # 如果没有顶级菜单,返回空列表
         }
     except Exception as e:
-        # 处理异常,返回错误信息
-        raise HTTPException(status_code=500, detail=str(e))
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
 
 
 @router.get('/qydt/getRouters')
@@ -206,71 +199,63 @@ async def getRouters(request: Request, db: Session = Depends(get_db),
         def build_menu_tree(menus, parent_menu):
             menu_tree = []  # 初始化一个列表来存储菜单树结构
             for menu in menus:
-                if menu.is_frame==0:
-                    menu_data = Router_frame(
-                        component=menu.component or 'Layout',
-                        hidden=menu.visible == '1',
-                        name=menu.path,
-                        path='/'+menu.path,
-                        meta = Meta(
-                            title=menu.menu_name,
-                            icon=menu.icon,
-                            noCache=menu.is_cache == '1',
-                            link = menu.path
-                        ),
-                        children=[]
-                    )
-                else:
-                    menu_data = Router(
-                        name=menu.path,#menu.menu_name,
-                        path='/'+menu.path,
-                        hidden=menu.visible == '1',
-                        component=menu.component or 'Layout',
-                        meta=Meta(
-                            title=menu.menu_name,
-                            icon=menu.icon,
-                            noCache=menu.is_cache == '1'
-                        ),
-                        children=[]  # 初始化 children 列表,即使没有子菜单
-                    )
+                menu_data = {
+                    "component": menu.component or 'Layout',
+                    "hidden": menu.visible == '1',
+                    "name": menu.path,
+                    "path": '/' + menu.path,
+                    "redirect": 'noRedirect',
+                    # "alwaysShow":True,
+                    "meta": {
+                        "title": menu.menu_name,
+                        'icon': menu.icon,
+                        'noCache': menu.is_cache == '1',
+
+                    }
+                }
+                if menu.is_frame == 0:
+                    menu_data['meta']['link'] = menu.path
+
                 # 如果菜单有子菜单,则递归构建子菜单
                 if menu.menu_type == 'M':  # 假设 'M' 表示目录类型
-                    query = db.query(SysMenu)
-                    query = query.filter_by(parent_id=menu.menu_id)
-                    query = query.filter(SysMenu.del_flag != '2')
+                    # query = db.query(SysMenu)
+                    # query = query.filter_by(parent_id=menu.menu_id)
+                    # query = query.filter(SysMenu.del_flag != '2')
                     # children_menus = db.query(SysMenu).filter_by(parent_id=menu.menu_id).all()
-                    children_menus = query.all()
-                    menu_data.children = build_menu_tree(children_menus, menu)
+                    # children_menus = query.all()
+                    # menu_data['redirect'] ='noRedirect'
+                    menu_data['alwaysShow'] = True
+                    children_menus = parent_id_get_menu_info(db, menu.menu_id)
+                    if len(children_menus) > 0:
+                        menu_data['children'] = build_menu_tree(children_menus, menu)
+
                 else:
-                    del menu_data.children #没有子菜单,删除children 列表
-                    del menu_data.redirect
-                    del menu_data.alwaysShow
-                    menu_data.path = menu_data.path[1:]
+                    menu_data['path'] = menu_data['path'][1:]
                 menu_tree.append(menu_data)  # 将当前菜单数据添加到菜单树列表
             return menu_tree
 
         # 构建顶级菜单的树形结构
         routers = build_menu_tree(menus, None)
         # routers_dict = [router.dict() for router in routers]
-        routers_dict = []
-        for router in routers:
-            router_info = router.dict()
-            if len(router_info['children'])==0:
-                del router_info['children']
-                del router_info['redirect']
-                del router_info['alwaysShow']
-                router_info['path'] = router_info['path'][1:]
-
-            routers_dict.append(router_info)
+        # routers_dict = []
+        # for router in routers:
+        #     router_info = router.dict()
+        #     if len(router_info['children'])==0:
+        #         del router_info['children']
+        #         del router_info['redirect']
+        #         del router_info['alwaysShow']
+        #         router_info['path'] = router_info['path'] #[1:]
+        #
+        #     routers_dict.append(router_info)
         # 返回构建好的路由数据
         return {
             "code": 200,
             "msg": "操作成功",
-            "data": routers_dict #[router.dict() for router in routers]  # 如果没有顶级菜单,返回空列表
+            "data": routers  # [router.dict() for router in routers]  # 如果没有顶级菜单,返回空列表
         }
     except Exception as e:
-        # 处理异常,返回错误信息
-        raise HTTPException(status_code=500, detail=str(e))
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
 
 
 @router.get('/list')