diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index ed2fa7b6c..d97724101 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -74,6 +74,8 @@ "workItems": "工作鏈路", "runMonitor": "Run 監控", "approvalQueue": "審批佇列", + "contracts": "合約", + "tenants": "租戶", "operationsOverview": "營運總覽", "iwooos": "IwoooS", "iwooosSecurityCompliance": "IwoooS 安全合規" @@ -3478,10 +3480,10 @@ "subtitle": "控制平面", "mode": "影子模式優先", "operator": "操作員", - "navLabel": "AwoooP 工作流導航", - "sectionMenuLabel": "AwoooP 二層菜單", - "sectionEyebrow": "工作區", - "tabsLabel": "AwoooP 頁面分頁", + "navLabel": "AwoooP 主導航", + "sectionMenuLabel": "AwoooP 主導航", + "sectionEyebrow": "目前工作面", + "tabsLabel": "AwoooP 內容視角", "pageScope": "所有時間", "scope": { "viewLabel": "資料檢視", diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json index ed2fa7b6c..d97724101 100644 --- a/apps/web/messages/zh-TW.json +++ b/apps/web/messages/zh-TW.json @@ -74,6 +74,8 @@ "workItems": "工作鏈路", "runMonitor": "Run 監控", "approvalQueue": "審批佇列", + "contracts": "合約", + "tenants": "租戶", "operationsOverview": "營運總覽", "iwooos": "IwoooS", "iwooosSecurityCompliance": "IwoooS 安全合規" @@ -3478,10 +3480,10 @@ "subtitle": "控制平面", "mode": "影子模式優先", "operator": "操作員", - "navLabel": "AwoooP 工作流導航", - "sectionMenuLabel": "AwoooP 二層菜單", - "sectionEyebrow": "工作區", - "tabsLabel": "AwoooP 頁面分頁", + "navLabel": "AwoooP 主導航", + "sectionMenuLabel": "AwoooP 主導航", + "sectionEyebrow": "目前工作面", + "tabsLabel": "AwoooP 內容視角", "pageScope": "所有時間", "scope": { "viewLabel": "資料檢視", diff --git a/apps/web/src/app/[locale]/awooop/layout.tsx b/apps/web/src/app/[locale]/awooop/layout.tsx index c355e94c3..6ca4d27c4 100644 --- a/apps/web/src/app/[locale]/awooop/layout.tsx +++ b/apps/web/src/app/[locale]/awooop/layout.tsx @@ -2,27 +2,20 @@ // WOOO AIOps - AwoooP Operator Console 佈局 // ============================================================================= // AwoooP 專屬工作殼,在 DashboardLayout main 區域內運作。 -// 2026-06-04 D0:參考 Google Ads 管理後台 IA,改為二層 section menu + scope bar + top tabs。 +// 2026-06-06 D1:全站 sidebar 作為唯一主導航,頁面內只保留 scope bar 與工具列。 // 視覺仍維持 WOOO Open Design token、8px panel radius 與既有色彩規範。 "use client"; import { AppLayout } from "@/components/layout"; -import { Link, usePathname } from "@/i18n/routing"; +import { usePathname } from "@/i18n/routing"; import { - Activity, BrainCircuit, - Building2, CalendarDays, - ClipboardList, Download, - FileText, - LayoutDashboard, MessageSquareText, RefreshCw, - ShieldCheck, } from "lucide-react"; -import { cn } from "@/lib/utils"; import { useTranslations } from "next-intl"; // ============================================================================= @@ -33,44 +26,30 @@ const navItems = [ { labelKey: "overview", href: "/awooop" as const, - icon: LayoutDashboard, exact: true, - groupKey: "overviewGroup", }, { labelKey: "workItems", href: "/awooop/work-items" as const, - icon: ClipboardList, - groupKey: "operationsGroup", }, { labelKey: "runs", href: "/awooop/runs" as const, - icon: Activity, - groupKey: "operationsGroup", }, { labelKey: "approvals", href: "/awooop/approvals" as const, - icon: ShieldCheck, - groupKey: "operationsGroup", }, { labelKey: "contracts", href: "/awooop/contracts" as const, - icon: FileText, - groupKey: "platformGroup", }, { labelKey: "tenants", href: "/awooop/tenants" as const, - icon: Building2, - groupKey: "platformGroup", }, ]; -const navGroups = ["overviewGroup", "operationsGroup", "platformGroup"] as const; - // ============================================================================= // AwoooP Console 佈局 // ============================================================================= @@ -138,58 +117,7 @@ export default function AwoooPLayout({ -
- - +
@@ -218,30 +146,6 @@ export default function AwoooPLayout({
- -
{children}
diff --git a/apps/web/src/app/[locale]/awooop/page.tsx b/apps/web/src/app/[locale]/awooop/page.tsx index 4015fca48..16116a726 100644 --- a/apps/web/src/app/[locale]/awooop/page.tsx +++ b/apps/web/src/app/[locale]/awooop/page.tsx @@ -809,27 +809,27 @@ function SecurityMirrorPanel() { })}
-
-
-
+
+
+
{t("checkpointsTitle")}
{securityMirrorCheckpoints.map((checkpoint) => { const Icon = checkpoint.icon; return ( -
-
+
+
-

+

{t(`checkpoints.${checkpoint.key}.title` as never)}

-

+

{t(`checkpoints.${checkpoint.key}.detail` as never)}

@@ -839,11 +839,11 @@ function SecurityMirrorPanel() {
-
+

{t("boundaryLabel")}

{t("boundaryTitle")}

-

{t("boundaryDetail")}

-
+

{t("boundaryDetail")}

+
read_only_production_landing_evidence_count=1 execution_router_linked=false runtime_execution_authorized=false diff --git a/apps/web/src/components/layout/sidebar.tsx b/apps/web/src/components/layout/sidebar.tsx index a39b6d150..a511c0efc 100644 --- a/apps/web/src/components/layout/sidebar.tsx +++ b/apps/web/src/components/layout/sidebar.tsx @@ -30,10 +30,12 @@ import { Bell, BookOpen, BrainCircuit, + Building2, ChevronLeft, ChevronRight, ClipboardList, DollarSign, + FileText, GitBranch, HelpCircle, LayoutDashboard, @@ -93,6 +95,8 @@ const NAV_SECTIONS: NavSection[] = [ { id: 'awooop-work-items', href: '/awooop/work-items', labelKey: 'workItems', Icon: ClipboardList }, { id: 'awooop-runs', href: '/awooop/runs', labelKey: 'runMonitor', Icon: Activity }, { id: 'awooop-approvals', href: '/awooop/approvals', labelKey: 'approvalQueue', Icon: ShieldCheck, badge: true }, + { id: 'awooop-contracts', href: '/awooop/contracts', labelKey: 'contracts', Icon: FileText }, + { id: 'awooop-tenants', href: '/awooop/tenants', labelKey: 'tenants', Icon: Building2 }, { id: 'alerts', href: '/alerts', labelKey: 'alerts', Icon: Bell }, ], },