4.9 KiB
4.9 KiB
盈豐太陽能 — 後台 Dashboard 化重新設計 (Redesign Spec)
- 日期:2026-09-13
- 狀態:已與客戶確認方向
- 背景:現時
/admin後台用綠色(#0b8a5e)/淺綠底(#f2f8f6)純 CSS,同前台 editorial(暖米白+琥珀金+墨黑)唔一致;一入/admin就係文章表,冇總覽。本規格將後台改造成墨黑 sidebar + 米白內容嘅真 dashboard。 - 範圍:只改後台(
src/layouts/AdminLayout.astro、src/pages/admin/**、src/data/content.ts、src/AGENTS.md)。唔郁前台、D1 schema、migration、認證/middleware 邏輯。
1. 設計方向
墨黑 sidebar × 暖米白內容 × 琥珀金 accent 嘅工具感 dashboard,同前台品牌一致但偏實用。
- 沿用前台語意色:墨黑
#1A1917、暖米白#FAF8F4、髮絲線#E7E2D9、暖灰#6E6862、琥珀#D97706/#B45309。 - 狀態色只用嚟表達語意,唔做裝飾:成功
#0F6E56、警示/草稿琥珀、危險#A32D2D。 - 形狀:直角/微圓角(4–8px)、髮絲邊框、無陰影、無漸層。
- 純 Astro SSR + CSS(CSS variables),唔引入 React / Chakra,維持現有 admin 合約。
2. 資訊架構
/admin(總覽):dashboard,見 §3。/admin/posts(文章):由原index.astro文章列表搬過來。- 其餘路由不變:
/admin/content/[kind]、/admin/cases、/admin/ai、/admin/settings、/admin/post/[id]、/admin/login、/admin/logout。
Shell(AdminLayout.astro)
- 桌面(≥900px):左側固定 sidebar 248px、墨黑底;內容區暖米白、
max-width 1080px。 - Sidebar:品牌 serif「盈豐太陽能」+細字「後台」;導航分組:
- 總覽 →
/admin - 內容管理 → 文章
/admin/posts、服務、特色、流程、常見問題、完成案例 - 系統 → AI 生成、網站設定
- 底部:睇網站 ↗(新視窗)、登出
- 總覽 →
- Active 項:琥珀文字+左邊 3px 琥珀條+微亮底。
- 手機(<900px):sidebar 收埋,頂欄顯示品牌+純 CSS checkbox 漢堡開合。
- 所有色值集中做 CSS variables(
--ink/--ink-2/--bg/--surface/--fg/--fg-muted/--border/--brand/--brand-strong/--brand-soft/--ok/--warn/--danger/--radius-sm/--radius/--sidebar-w)。 - 保留原有 R2 上傳
<script>同ImageField依賴嘅.image-url/.image-preview/.image-statusclass。
3. /admin 總覽內容
- 頁首:h1「總覽」+更新時間。
- 統計卡 ×4(大 serif 琥珀數字、髮絲邊框、無陰影):
- 文章 — 總數;細字:已發布 N · 草稿 N
- 完成案例 — 總數;細字:已發布 N · 草稿 N
- 首頁內容 — 總數;細字:服務 · 特色 · 流程 · FAQ
- 關鍵字佇列 — 待生成數;細字:已生成 N · 已略過 N
- 待辦提示(主欄):條件式列出,每項可點去對應頁;全清顯示「一切妥當」:
- N 篇文章仍是草稿 →
/admin/posts - N 篇文章未有封面圖 →
/admin/posts - N 個關鍵字待生成 →
/admin/ai - N 個案例仍是草稿 →
/admin/cases - N 個首頁內容項目仍是草稿 →
/admin/content/service
- N 篇文章仍是草稿 →
- 系統狀態(側欄):AI 生成 啟用/停用、
AI_API_KEY/TAVILY_API_KEY已設定/未設定、目前 model 與 Base URL(唯讀顯示)。 - 最近更新文章(全寬):最新 5 篇(標題+slug、狀態 badge、更新日期、編輯 link),section 右上「+ 寫新文」。
4. 資料層
src/data/content.ts加getDashboardData(db): Promise<DashboardData>,集中提供 dashboard 統計(沿用「查詢集中喺 content.ts」慣例)。DashboardData:posts{published,draft}、cases{published,draft}、content[{kind,published,draft}]、keywords{pending,generated,skipped}、recentPosts、postsWithoutCover。getDashboardData只讀 DB;AI secrets(env.AI_API_KEY/env.TAVILY_API_KEY)同ai_enabled喺頁面層處理。- 冇 schema 改動、冇 migration。
5. 各頁統一
cases/content/[kind]/settings/ai只改外觀(卡片、badge、掣、表格、提示),表單 action 同流程不變。- badge:已發布=淡綠、草稿=琥珀、已略過/muted=灰;成功提示由
.badge.published改為.notice。 post/[id].astro存/刪/取消後 redirect 去/admin/posts。login.astro用同一 tokens 重新上色。
6. 驗證
npm run build(唯一自動驗證;專案冇 test/lint/typecheck)。npm run dev目測:所有 admin 頁、RWD(≥900 / <900)、登入/登出、圖片上傳、表單存檔 redirect、/blog/[slug]404 不受影響。
7. 文件同步
src/AGENTS.mdAdmin 段落:/admin由文章列表改為總覽、文章列表喺/admin/posts、AdminLayout改為墨黑 sidebar shell、色系改用 CSS variables、getDashboardData位置。