| 欄位 | 內容 |
|---|---|
| 草稿來源 | docs/draft_requirement_spec/menu-group/requirement.md(原始草稿) |
| 撰寫日期 | 2026-05-26 |
| 撰寫者 | Claude(由 raymond 提出需求 + 釐清) |
| 狀態 | 白話需求討論中(Phase 0),尚未進入 Phase 1 設計階段 |
目前系統側邊欄選單全部攤平成一層(DB public.ui_routes 共 39 個項目,全部 pid=0),即使有些功能項目已經 enable=0 不顯示,仍然顯示在使用者眼前的選單長到「太冗長」、不容易找到對應功能。
使用者希望按照業務領域把選單分成 7 個分組,每個分組是一個可展開的父節點,下面掛上對應功能入口,讓側邊欄一眼就能看出「我要找的東西在哪一類」。
側邊欄從上到下依序變成這 7 個分組,每個分組是可展開/收合的父節點:
1. 專案與任務 ▼
2. 合規與稽核 ▼
3. 溝通與互動 ▼
4. 租戶與組織 ▼
5. 系統管理 ▼
6. 系統設定 ▼
7. AI 與分析 ▼
各分組底下包含的功能入口(按目前使用者實際看到的中文標題列示,括號內是內部對應的 ui_routes.name):
pi pi-briefcase)project-dashboard)— ⚠ 目前 AppMenu.vue 寫死,需搬進 DBmy-tasks)— ⚠ 目前 AppMenu.vue 寫死,需搬進 DBproject-list)audit-manage)report-manage)pi pi-shield)module-frame)compliance-framework-manage)tool-plugin-manage)flow-template-manage)pi pi-comments)bulletin-list)bulletin-manage)survey-manage)system-feedback-manage)system-feedback-view)issue-integrate-config)pi pi-building)tenant-manage)department-manage)user-manage)role-manage)pi pi-cog)system-menu-manage)information-system-manage)device-manage)storage-config)cloud-integrations)pi pi-sliders-h)smtp-config)ldap-config)notify-config)user-log)pi pi-chart-line)ai-dashboard)| 對象 | 是否做權限控制 | 行為 |
|---|---|---|
| 葉節點(功能入口) | 維持現狀 | 沿用 ui_routes ↔︎ route_capabilities ↔︎ role_capabilities 既有 RBAC 機制,使用者沒對應 capability 就看不到 |
| 分組節點(7 個分組標題) | 不掛 capability | 由「底下是否還有可見子節點」決定要不要顯示 |
| 「專案儀表板」「待辦任務」這 2 個搬進 DB 的項目 | 不掛 capability | 每個 user 都看得到(含新進 user,不需另外設權限) |
為什麼這樣可行:BE jedi-auth 套件 ui_route_repo_impl.py:103-107 已實作「若路由無任何 route_capabilities 關聯設定 → 視為可見」的 fallback 邏輯。所以不掛 capability 等同於「對所有人開放」,免去額外建 capability 的繁瑣。
當某個使用者的角色 / capability 配置下,某個分組底下所有葉節點都被權限過濾掉時,該分組標題也不要顯示。
例如:某個 user 沒有「租戶管理 / 機關單位管理 / 帳號管理 / 權限管理」中任何一項權限,那「4. 租戶與組織」這個分組標題就完全不出現在他的選單上(而不是顯示一個點開來什麼都沒有的空殼)。
依上面 1~7 的編號順序,由上而下顯示。不可更動這個順序(已是使用者明確指定的最終順序)。
每個分組內的功能入口,依上面列示的順序顯示(不再依照舊版 ui_routes.sort 的全域排序,而是改成「分組內局部排序」)。
public.ui_routes 新增 7 個分組節點(pid=null/0,icon 如上述)pid 指向對應分組節點project-dashboard / my-tasks),對應「Group 1」底下的「專案儀表板」「待辦任務」AppMenu.vue 移除寫死的 grcItems 陣列(讓兩個項目改從 /user/web-menu API 取得)get_user_web_ui_routes(在 jedi-auth 套件內)加上「空分組自動隱藏」邏輯workflow-setup / workflow-view / textbook-* / resource-version-manage / resource-manage / cruise-project-manage / cruise-feedback-view / report-view / customer-dashboard-editor / user-guide)保持原狀不動(不設 pid、不改 enable),它們本來就被 BE 過濾掉,不會出現在新版選單上。workflow-* 跟 flow-template-manage 是否功能重疊」這類議題本期不討論。ui_routes.name,FE 顯示時優先用 i18n key 對照,找不到對照就直接顯示 name 原文(這部分行為視 AppMenuItem.vue 的實作而定,需在 Phase 1 確認)。這只是初估,正式的拆解、檔案清單、影響面盤點等留到 Phase 3「實作計畫」階段再做。
| 層面 | 預估改動 |
|---|---|
| DB migration | 1 份 SQL:新增 9 筆 ui_routes(7 個分組 + 2 個寫死搬遷項)、更新 27 筆既有 ui_routes 的 pid |
| i18n(FE) | zh-tw/menu.json / zh-cn/menu.json 新增 7 個分組節點的 i18n key(若採用 i18n key 方案;若直接用 ui_routes.name 顯示中文就不用改 i18n) |
BE jedi-auth 套件 |
ui_route_repo_impl.py 或 user_service.get_user_web_ui_routes 加「組樹完成後剪枝:分組節點若 items 為空就移除」邏輯 |
FE AppMenu.vue |
移除寫死的 grcItems 陣列,全部走 permissions.value(即 /user/web-menu 回傳結果) |
| 權限初始化 | 不需新增 capability / role_capabilities(分組節點與寫死搬遷項都不掛 capability) |
| # | 議題 | 決策 | 決策日期 |
|---|---|---|---|
| 1 | 未在 7 組草稿內的舊選單怎處理? | 全部 enable=0、保持原狀不動。BE 自動過濾,不會出現在新版選單上。 | 2026-05-26 |
| 2 | AppMenu.vue 寫死的「專案儀表板 / 待辦任務」怎處理? | 搬到 DB 統一管理,但不掛 capability(讓所有 user 都看得到),免去額外建 capability。 | 2026-05-26 |
| 3 | 分組標題本身要不要做權限控制? | 不掛 capability。底下無可見子節點時自動隱藏分組(BE 端剪枝)。 | 2026-05-26 |
| 4 | 「回饋」對應的是哪個 ui_routes? | system-feedback-manage(i18n: "回饋")。system-feedback-view(i18n: "系統回饋管理")是另一項目,兩者都保留並歸到 Group 3。cruise-feedback-view 是 enable=0 的未列項目,保持原狀不動。 |
2026-05-26 |
| 5 | module-frame 對應的中文是什麼? |
FE i18n 翻譯為「合規資源庫」(不是 resource-manage)。resource-manage 在 i18n 是「資源上下架」、enable=0,屬於本期不動的未列項目。 |
2026-05-26 |
| 6 | 1~7 編號就是顯示順序? | 是,1 在最上、7 在最下,不可變更。 | 2026-05-26 |
| 7 | 分組 icon 怎決定? | 由 Claude 任意提案使用者 review;本份文件已採用第一版提案(見第 2 段)。 | 2026-05-26 |
ui_routes.name 由 FE 原樣顯示,還是 (b) 在 ui_routes.name 寫 i18n key、FE 透過 menu.json 對照後顯示?兩種做法都可行,差別在英文版 / 簡體版怎麼處理。Phase 1 設計時決定。menu.group.project-task 等。jedi-auth 套件的 user_service.get_user_web_ui_routes 內(影響其他 consumer),還是主專案在 route 層 wrap?外部套件異動規範參考 CLAUDE.md。uid 怎產生:分組節點與兩個搬遷項的 uid 規則(既有 ui_routes 都有手動指派的 uid,需要保持一致風格)。依專案 docs/claude/feature-development-workflow.md 流程:
superpowers:brainstorming skill,產出 docs/features/FR-029-2605-menu-group/design.md,包含 DB schema 變動、API 行為、FE 改動、i18n 策略、邊界 case 處理等技術設計。docs/draft_requirement_spec/menu-group/ 在 Phase 1 完成後搬到 docs/features/FR-029-2605-menu-group/,原資料夾刪除。docs/features/FR-029-2605-menu-group/implementation-plan.md。test-plan.md(本需求屬 UI 重組,BE 邏輯改動小,可能不需要重型 test plan,由 Phase 3 評估)。| Group | ui_routes.name | FE i18n 中文 | 來源 |
|---|---|---|---|
| 1 | project-dashboard |
專案儀表板 | 本期新增到 DB |
| 1 | my-tasks |
待辦任務 | 本期新增到 DB |
| 1 | project-list |
專案管理 | 既有 |
| 1 | audit-manage |
我的稽核 | 既有 |
| 1 | report-manage |
專案調查結果 | 既有 |
| 2 | module-frame |
合規資源庫 | 既有 |
| 2 | compliance-framework-manage |
合規框架管理 | 既有 |
| 2 | tool-plugin-manage |
檢測工具管理 | 既有 |
| 2 | flow-template-manage |
流程範本管理 | 既有 |
| 3 | bulletin-list |
公告 | 既有 |
| 3 | bulletin-manage |
公告管理 | 既有 |
| 3 | survey-manage |
問卷管理 | 既有 |
| 3 | system-feedback-manage |
回饋 | 既有 |
| 3 | system-feedback-view |
系統回饋管理 | 既有 |
| 3 | issue-integrate-config |
回饋整合設定 | 既有 |
| 4 | tenant-manage |
租戶管理 | 既有 |
| 4 | department-manage |
機關(構)單位管理 | 既有 |
| 4 | user-manage |
帳號管理 | 既有 |
| 4 | role-manage |
權限管理 | 既有 |
| 5 | system-menu-manage |
選單管理 | 既有 |
| 5 | information-system-manage |
資訊系統管理 | 既有 |
| 5 | device-manage |
設備管理 | 既有 |
| 5 | storage-config |
儲存設備設定 | 既有 |
| 5 | cloud-integrations |
雲端空間整合 | 既有 |
| 6 | smtp-config |
郵件伺服器設定 | 既有 |
| 6 | ldap-config |
LDAP伺服器設定 | 既有 |
| 6 | notify-config |
通知設定 | 既有 |
| 6 | user-log |
操作日誌 | 既有 |
| 7 | ai-dashboard |
AI動態儀表板 | 既有 |
| ui_routes.name | enable | FE i18n 中文 |
|---|---|---|
workflow-setup |
0 | 工作流程設定 |
workflow-view |
0 | 系統流程 |
textbook-execution |
0 | 教材-執行端 |
textbook-tested |
0 | 教材-受檢端 |
textbook-general |
0 | 教材-一般性 |
resource-version-manage |
0 | 資源版本維護 |
resource-manage |
0 | 資源上下架 |
cruise-project-manage |
0 | 專案管理(韌性巡航) |
cruise-feedback-view |
0 | 韌性巡航回饋管理 |
report-view |
0 | 查閱背景資料盤點問卷結果數據 |
customer-dashboard-editor |
0 | 自定義儀表板 |
user-guide |
0 | 操作說明 |