feat: 完成 issue #181 菜单播种 v5——概览/推广菜单逻辑删除(合并 QA 1aaa159 的 Project 系列;display=0 对超管无效须删除,先子后父)

This commit is contained in:
2026-08-06 14:35:04 +08:00
parent 1aaa159363
commit ccdaa67787
+15 -17
View File
@@ -68,12 +68,14 @@ FBA_ADMIN_MENUS = ["system", "monitor", "log", "scheduler"]
# 退役菜单(issue #174 [B8]):旧 #161 版注册的 users/mobile 改为隐藏(display=0),保留数据
# 另隐藏 fba init 测试数据自带的 概览(Dashboard) 三个菜单——其 component
# 指向的 /dashboard/analytics|workspace 视图在 UI 中不存在,点击必 404。
# 以及 FBA 推广菜单「项目」(文档/Github/Apifox 外链目录,与业务无关)。
LEGACY_HIDE = ["users", "mobile",
"page.dashboard.title",
"page.dashboard.analytics",
"page.dashboard.workspace",
"Project", "Document", "Github", "Apifox"]
# 退役/不存在菜单:逻辑删除(deleted=1)
# - Analytics/Workspace/Dashboard(issue #181:FBA init 测试数据自带概览,视图不存在 → 404)
# - Document/Github/Apifox/Project(FBA 推广外链菜单,与业务无关)
# - users/mobile(issue #174 [B8] 退役)
# 注:FBA sidebar 查询仅过滤 deleted=0(不过滤 display/status),display=0 对超管无效,
# 必须删除才从 sidebar 消失;先删子菜单再删父,否则 409。
LEGACY_DELETE = ["Analytics", "Workspace", "Document", "Github", "Apifox",
"Dashboard", "Project", "users", "mobile"]
class FbaClient:
@@ -127,6 +129,9 @@ class FbaClient:
def put(self, path, body):
return self._req("PUT", path, body)
def delete(self, path):
return self._req("DELETE", path, None)
def flatten_menu_names(tree, out=None):
"""菜单树 → {name: id}(含子级)"""
@@ -194,19 +199,12 @@ def main():
component=m.get("component"), icon=m.get("icon"))
print(f"[ok] 菜单:新建 {created},更新 {updated}")
# issue #174 [B8]:退役菜单隐藏(users/mobile,旧 #161 版残留)
for legacy in LEGACY_HIDE:
# 退役/不存在菜单:逻辑删除(issue #174 [B8] + issue #181)
for legacy in LEGACY_DELETE:
if legacy in existing:
mid = existing[legacy]
cli.put(f"/sys/menus/{mid}", {
"title": legacy, "name": legacy,
"path": f"/iaop/{legacy}", "parent_id": None, "sort": 99,
"icon": None, "type": 1, "component": None,
"perms": f"iaop:{legacy}", "status": 1,
"display": 0, "cache": 0, "link": None,
"remark": "退役菜单(issue #174,由 FBA 系统管理承载)",
})
print(f"[ok] 隐藏退役菜单 {legacy}(display=0)")
cli.delete(f"/sys/menus/{mid}")
print(f"[ok] 删除退役菜单 {legacy}(id={mid},deleted=1)")
# ---- 2. 播种角色并分配菜单 -------------------------------------------
menu_ids = flatten_menu_names(cli.get("/sys/menus"))