跳至主要内容
💬 回報這一頁

頁面總覽

一種頁型,學一次。 元件章回答「這顆控制項怎麼用」,模式章回答「這類操作怎麼運作」, 這一章回答中間那一層:一整頁怎麼組

為什麼需要頁面層

內部系統的畫面其實高度重複:找一筆資料、看一筆資料、填一張表、看一眼狀況、改一個設定。 但同樣的五件事,三個系統可以長出三種版面——主要動作一下在左上、一下在右下, 儲存回饋一下彈窗、一下跳頁。每換一個系統,使用者就要重學一次「東西在哪裡」。

把常見頁收斂成頁型之後,規則變成:同一種頁在每套系統長一樣。 清單頁的主要動作永遠在右上、表單頁的錯誤永遠緊貼欄位、儀表板永遠唯讀—— 學習成本從「每個系統 × 每個畫面」降到「每種頁型一次」。

三層分工

管什麼文件
站台層側邊欄分區、全域狀態列、深連結、單一出口後台系統的資訊架構
單頁層一頁之內的區塊順序、組成元件、行為規範本章
區塊層每個元件自身的用途、狀態、無障礙元件章

本章不收應用外殼(Layout、Sidebar、路由)——那是宿主的職責, 規範在站台層那一頁;本章從「進到這一頁之後」開始管。

五種頁型

頁型回答的問題主角元件文件
清單頁那一筆在哪?DataTable清單頁
明細頁這一筆的全貌?EditableField + TabPills明細頁
表單頁建立一筆新的Input 家族 + Stepper表單頁
儀表板整體狀況如何?Charts + KPI 磚儀表板
設定頁改變系統的行為Card 分區 + Dialog設定頁

拿不準的時候,先問這一頁回答什麼問題,不要先想版面。 一頁想同時回答兩個問題(又要清單又要總覽),通常代表該拆成兩頁。

登入頁刻意不收:它高度品牌化、又在後台外殼之外,抽掉品牌之後剩下的 只有「Card + Input + Button」,不值得一種頁型。

跨頁一致性守則

這六條跨頁型通用。各頁型文件不再重複,違反任何一條都算走樣:

#守則理由
1頁面標題永遠在左上,一頁只有一個 h1使用者靠它確認「我在哪」
2每頁至多一顆主要動作,位置固定(清單頁右上、表單頁右下)兩顆主要按鈕=沒有主要按鈕
3操作回饋的去向全站固定一種一下彈窗一下橫幅,使用者會漏看
4錯誤緊貼發生處,頂部只做彙總錯在第 8 欄、訊息在頁首,等於要人玩找碴
5同一實體跨頁同色(分類色跟實體走)Charts 配色策略與 GraphCanvas 的同一條規則
6同一個東西全站同一個名字清單頁叫「項目」、明細頁叫「紀錄」,使用者會以為是兩種東西
✅ 這樣做

新畫面動工前先對照這張表與該頁型的 Rules,把「跟規範不同」當成需要理由的事。

🚫 不要這樣

不要為單一畫面微調共同守則——「這一頁比較特別」重複五次之後,頁型就不存在了。 真的特別,走 RFC 改規範,讓所有頁一起變。

新專案:從頁面開始規劃

既有系統的導入路徑是三階段(先 token、新畫面用元件、按需查模式)。 全新專案不必走那條漸進路——還沒有畫面要遷就,第一天就可以從頁型開始:

流程圖載入中…
  1. 列出所有畫面,各標上頁型。 規劃期的畫面清單通常就是「幾張清單、幾張表單、 幾張明細、一兩個儀表板、一頁設定」。標不出頁型的畫面,先回頭想它回答什麼問題。
  2. 每頁抄骨架與最小安裝集。 各頁型文件末尾都有「取用」段—— 一條指令裝齊那種頁需要的元件,版面照「頁面解剖」的區塊順序排。
  3. 照各頁 Rules 驗收。 每頁型的行為規範就是驗收清單; 對照組合 story 看「組出來應該長怎樣」。

裝之前的前置條件(components.json@/* 別名、token 安裝)見 三種取用方式;上線之後怎麼跟著規範一起演進,見 跟上新版

收錄門檻

頁型跟元件過同樣的三關:去領域化、通用性、三次法則。 頁面特別容易寫成「某個系統的畫面」——收錄前先自問:換一個領域, 這一頁的區塊順序與規則還成立嗎?只有某個業務流程需要的複合畫面,不收。

缺件與後續

組這五種頁會遇到的缺口如下。先用替代方案,不要自己長一個私有版—— 需要正式元件時走 RFC 流程,過三次法則才收。 「認領」欄直達缺件認領表單: 回報一個使用場景=三次法則的一次證據,三個場景湊齊就會動工。

缺件目前替代用在認領
PageHeader/Breadcrumb頁首區照解剖規範手排明細頁提出
Drawer/Popover/DropdownMenuDialog 或就地展開各頁提出

(表單的下拉選項與這張表逐字一致——改表要同步改 .github/ISSUE_TEMPLATE/missing-piece.yml。)

v0.11.0 已收錄七件,替代方案功成身退: ToastSwitch/Textarea/RadioGroupSkeleton(規範正本在〈載入中〉,DataTable 內建 loading)、 DateRange 期間選擇、 Form 包裝 → FormFieldFieldError(見 Input 的錯誤態)。

AppShell 與 Sidebar 不在此列——外殼不收進元件庫是刻意決策, 規範正本在站台層