diff --git a/deploy/fba/seed_iaop_menus.py b/deploy/fba/seed_iaop_menus.py index c3601d9..58635bb 100644 --- a/deploy/fba/seed_iaop_menus.py +++ b/deploy/fba/seed_iaop_menus.py @@ -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"))