From 4f630afafbc2fa48002826df2fe5bcaf9a47929b Mon Sep 17 00:00:00 2001 From: philipcheung Date: Sun, 13 Sep 2026 21:41:33 +0800 Subject: [PATCH] feat(admin): sidebar shell and design tokens --- src/layouts/AdminLayout.astro | 226 ++++++++++++++++++++++++---------- 1 file changed, 162 insertions(+), 64 deletions(-) diff --git a/src/layouts/AdminLayout.astro b/src/layouts/AdminLayout.astro index 4a302e8..cbb76d5 100644 --- a/src/layouts/AdminLayout.astro +++ b/src/layouts/AdminLayout.astro @@ -4,18 +4,34 @@ interface Props { } const { title } = Astro.props; const path = Astro.url.pathname; -const links = [ - { href: "/admin", label: "文章" }, - { href: "/admin/content/service", label: "服務" }, - { href: "/admin/content/feature", label: "特色" }, - { href: "/admin/content/step", label: "流程" }, - { href: "/admin/content/faq", label: "常見問題" }, - { href: "/admin/cases", label: "案例" }, - { href: "/admin/settings", label: "設定" }, - { href: "/admin/ai", label: "AI 生成" }, + +const groups: { label: string; links: { href: string; label: string }[] }[] = [ + { label: "總覽", links: [{ href: "/admin", label: "總覽" }] }, + { + label: "內容管理", + links: [ + { href: "/admin/posts", label: "文章" }, + { href: "/admin/content/service", label: "服務" }, + { href: "/admin/content/feature", label: "特色" }, + { href: "/admin/content/step", label: "流程" }, + { href: "/admin/content/faq", label: "常見問題" }, + { href: "/admin/cases", label: "完成案例" }, + ], + }, + { + label: "系統", + links: [ + { href: "/admin/ai", label: "AI 生成" }, + { href: "/admin/settings", label: "網站設定" }, + ], + }, ]; -const isActive = (href: string) => - href === "/admin" ? path === "/admin" : path === href || path.startsWith(href + "/"); + +const isActive = (href: string) => { + if (href === "/admin") return path === "/admin"; + if (href === "/admin/posts") return path === "/admin/posts" || path.startsWith("/admin/post/"); + return path === href || path.startsWith(href + "/"); +}; --- @@ -27,28 +43,45 @@ const isActive = (href: string) => -
-
+ +
+ + -
-
- -
+