|
|
@@ -97,7 +97,24 @@ class MenuService:
|
|
|
# 转换为字典列表
|
|
|
menu_dict_list = [MenuOutSchema.model_validate(menu).model_dump() for menu in menu_list]
|
|
|
# 使用traversal_to_tree构建树形结构
|
|
|
- return traversal_to_tree(menu_dict_list)
|
|
|
+ tree = traversal_to_tree(menu_dict_list)
|
|
|
+ # 对外链菜单(type=4)转换路由数据
|
|
|
+ _transform_external_menus(tree)
|
|
|
+ return tree
|
|
|
+
|
|
|
+
|
|
|
+def _transform_external_menus(items: list[dict]) -> None:
|
|
|
+ """递归转换外链菜单的路由和组件路径"""
|
|
|
+ for item in items:
|
|
|
+ if item.get("type") == 4:
|
|
|
+ original_url = item.get("route_path", "")
|
|
|
+ route_name = item.get("route_name") or "external"
|
|
|
+ item["route_path"] = f"/{route_name}"
|
|
|
+ item["component_path"] = "module_system/menu/ExternalLink"
|
|
|
+ # 把原始 URL 存入 params,供 ExternalLink 组件读取
|
|
|
+ item["params"] = [{"key": "url", "value": original_url}]
|
|
|
+ if item.get("children"):
|
|
|
+ _transform_external_menus(item["children"])
|
|
|
|
|
|
@classmethod
|
|
|
async def create_menu_service(cls, auth: AuthSchema, data: MenuCreateSchema) -> dict:
|