# ROLAC — UI 架構設計 **文件版本:** v0.1 (2026-05-24) --- ## 目錄 1. [前端整體架構](#1-前端整體架構) 2. [Angular 專案結構](#2-angular-專案結構) 3. [Landing Page — 公開網站設計](#3-landing-page--公開網站設計) 4. [Admin / User Portal — 後台設計](#4-admin--user-portal--後台設計) 5. [Kendo UI 元件對應清單](#5-kendo-ui-元件對應清單) 6. [Angular Material 使用範圍](#6-angular-material-使用範圍) 7. [設計系統 (Design Tokens)](#7-設計系統-design-tokens) 8. [Responsive / Mobile 規範](#8-responsive--mobile-規範) 9. [Kendo UI 授權注意事項](#9-kendo-ui-授權注意事項) --- ## 1. 前端整體架構 ``` 單一 Angular 專案 (Monorepo — Angular Workspace) │ ├── 公開路由 / → Landing Page │ src/app/public/ │ 技術: Tailwind CSS + 自訂元件 + Angular Animations │ 對象: 訪客、潛在新教友 │ ├── 教友入口 /portal/ → User Portal │ src/app/portal/ │ 技術: Angular Material + Kendo UI │ 對象: 一般教友(查看服事、奉獻歷史、個人資料) │ └── 後台管理 /admin/ → Admin Dashboard src/app/admin/ 技術: Angular Material + Kendo UI 對象: 管理員、牧師、財務、秘書等 ↓ Capacitor 打包 iOS App / Android App └── 打包 /portal/ 為主入口(App 不含 Landing Page) ``` **為什麼用單一 Angular 專案?** - Capacitor 只能打包一個 Web App - 共用 Auth service、API service、ngx-translate - 共用 Design Token(顏色、字型)保持品牌一致性 - 一個 Jenkins pipeline 搞定所有 build --- ## 2. Angular 專案結構 ``` src/ ├── app/ │ ├── core/ ← 全域服務 (Auth, API, i18n, Error) │ │ ├── services/ │ │ ├── guards/ │ │ ├── interceptors/ │ │ └── models/ │ │ │ ├── shared/ ← 跨模組共用元件 │ │ ├── components/ (語言切換器、頁頭、頁腳、Loading) │ │ └── pipes/ (雙語 pipe: {{ item | localizedName }}) │ │ │ ├── public/ ← Landing Page(Tailwind) │ │ ├── home/ │ │ ├── about/ │ │ ├── events/ │ │ ├── media/ │ │ ├── giving/ │ │ └── contact/ │ │ │ ├── portal/ ← 教友 User Portal(Material + Kendo) │ │ ├── dashboard/ │ │ ├── my-roster/ │ │ ├── my-giving/ │ │ └── my-profile/ │ │ │ └── admin/ ← 後台管理(Material + Kendo) │ ├── dashboard/ │ ├── members/ │ ├── attendance/ │ ├── groups/ │ ├── roster/ │ ├── giving/ │ ├── cms/ │ ├── reports/ │ ├── audit-log/ │ └── settings/ │ ├── assets/ │ ├── i18n/ │ │ ├── en.json │ │ └── zh-TW.json │ └── images/ │ └── styles/ ├── _tokens.scss ← Design Tokens(色彩、字型、間距) ├── _material-theme.scss ← Angular Material 主題 ├── _kendo-theme.scss ← Kendo UI 主題覆寫 └── tailwind.css ← Tailwind(public/ 使用) ``` --- ## 3. Landing Page — 公開網站設計 ### 設計方向 **目標:** 有設計感、溫暖、現代,反映教會的歡迎文化 **技術:** Tailwind CSS + 自訂 Angular 元件 + Angular Animations **不使用** Angular Material 或 Kendo UI(避免 Material Design 的企業感) ### 視覺風格建議 | 元素 | 建議 | |------|------| | 色調 | 以教會品牌色為主(深藍/金或暖色系),建議 2 主色 + 1 強調色 | | 字型 | Google Fonts:標題用 serif(如 Playfair Display),內文用 sans-serif(Inter) | | 圖像 | 真實教會照片優先;輔以 abstract/light 背景插圖 | | 動畫 | 入場淡入(Angular Animations)、滾動觸發(Intersection Observer)| | 圖示 | Heroicons 或 Phosphor Icons(免費,SVG) | ### 各區塊設計 ``` rolac.org │ ├── [Navbar] │ Logo | 導覽連結 | EN/中 切換 | [Visit Us] CTA 按鈕 │ ├── [Hero Section] │ 全版背景圖(教會聚會照片) │ 主標題 + 副標題(雙語動態切換) │ 兩個 CTA:[Join Us] [Watch Online] │ 滾動指示箭頭 │ ├── [Welcome / About Section] │ 左側:短文介紹教會異象 │ 右側:牧師照片 + 名字 │ 底部:[Learn More] 連結 │ ├── [Service Times] │ 卡片式:主日崇拜時間 / 地點 / 停車資訊 │ 嵌入 Google Maps │ ├── [Announcements / Events] │ 最新 3 則公告卡片(從 CMS 動態取得) │ [View All] 連結 │ ├── [Media — Latest Sermon] │ YouTube Embed 最新一篇講道 │ 標題 + 日期 + 講員 │ [Sermon Archive] 連結 │ ├── [Giving Section] │ 感召文字 + 奉獻方式說明(現金/支票/Zelle/PayPal) │ 簡潔卡片排版,非強迫式 │ ├── [Connect / Cell Groups] │ 鼓勵加入小組的呼召 │ [Contact Us] 或 [填寫訪客卡] 按鈕 │ ├── [Contact Section] │ 地址、電話、Email │ 聯絡表單 │ └── [Footer] Logo | 快速連結 | 社群媒體 | © | 隱私政策 ``` ### Tailwind 使用策略 ```html

{{ 'home.hero.title' | translate }}

{{ 'home.hero.subtitle' | translate }}

``` ### Landing Page 在 Mobile App 中的處理 > Landing Page 僅存在於 **rolac.org 網站**,**不** 納入 Capacitor App > App 啟動後直接跳到 Login 畫面或 Portal Dashboard --- ## 4. Admin / User Portal — 後台設計 ### 整體 Layout ``` ┌──────────────────────────────────────────────────┐ │ [ROLAC Logo] [模組標題] [EN|中] [通知] [頭像] │ ← Top Toolbar (Angular Material MatToolbar) ├──────────┬───────────────────────────────────────┤ │ │ │ │ [側邊 │ Main Content Area │ │ 導覽] │ │ │ │ (Kendo Grid / Form / Chart 等) │ │ Desktop │ │ │ only │ │ │ │ │ └──────────┴───────────────────────────────────────┘ ┌──────────────────────────────────────┐ │ [首頁] [服事] [教友] [奉獻] [我的] │ ← Bottom Tab Bar (Mobile only) └──────────────────────────────────────┘ ``` **導覽策略** - **Desktop (≥ 1024px):** 左側 Side Nav(Angular Material `MatSidenav`),可折疊 - **Mobile (< 1024px):** 底部 Tab Bar(最多 5 個主要分頁),Side Nav 改為漢堡選單 ### 色彩主題(Admin / Portal) 使用 Angular Material Custom Theme,與 Tailwind Landing Page 共用 Design Token: ```scss // _material-theme.scss @use '@angular/material' as mat; $rolac-primary: mat.define-palette(mat.$indigo-palette, 700); $rolac-accent: mat.define-palette(mat.$amber-palette, 600); $rolac-warn: mat.define-palette(mat.$red-palette); $rolac-theme: mat.define-light-theme(( color: ( primary: $rolac-primary, accent: $rolac-accent, warn: $rolac-warn, ), typography: mat.define-typography-config( $font-family: 'Inter, sans-serif' ), )); @include mat.all-component-themes($rolac-theme); ``` --- ## 5. Kendo UI 元件對應清單 ### 核心模組 → Kendo 元件 對應 | 模組 | Kendo 元件 | 用途 | |------|-----------|------| | **教友管理** | `kendo-grid` | 教友列表(排序、篩選、分頁、匯出) | | **教友管理** | `kendo-upload` | 教友照片上傳 | | **奉獻記錄** | `kendo-grid` | 奉獻列表(批次輸入、inline edit)| | **服事表** | `kendo-scheduler` | 排班日曆(月/週/日 視圖) | | **服事表** | `kendo-grid` | 服事同工列表 | | **出席報表** | `kendo-chart` `(LineChart)` | 主日出席趨勢折線圖 | | **奉獻報表** | `kendo-chart` `(BarChart)` | 月度奉獻長條圖 | | **奉獻報表** | `kendo-chart` `(DonutChart)` | 奉獻類型比例 | | **教友統計** | `kendo-chart` `(PieChart)` | 教友分佈(年齡/性別) | | **所有篩選** | `kendo-datepicker` `kendo-daterangepicker` | 日期範圍篩選 | | **所有列表** | `kendo-dropdownlist` | 下拉選單 | | **通知** | `kendo-notification` | 操作成功/失敗提示 | | **Audit Log** | `kendo-grid` | 稽核記錄(大量資料、虛擬捲動) | | **報表匯出** | Kendo Grid 內建 Excel/PDF 匯出 | 一鍵匯出 | ### Kendo Grid 重點設定(教友列表範例) ```typescript // members-list.component.html ``` ### Kendo Scheduler(服事排班) ```typescript // service-roster.component.html ``` --- ## 6. Angular Material 使用範圍 Angular Material 負責**基礎 UI 骨架**,Kendo UI 負責**複雜資料元件**。 | Angular Material 元件 | 用途 | |----------------------|------| | `MatToolbar` | 頂部 Header | | `MatSidenav` / `MatDrawer` | 側邊導覽(Desktop) | | `MatTabGroup` | Portal 底部分頁(Mobile) | | `MatCard` | Dashboard 統計卡片、表單卡片 | | `MatDialog` | 確認對話框、新增/編輯 Modal | | `MatFormField` + `MatInput` | 所有一般表單欄位 | | `MatSelect` | 小型下拉(非大量資料) | | `MatButton` / `MatIconButton` | 所有按鈕 | | `MatSnackBar` | 輕量操作回饋(儲存成功等) | | `MatProgressSpinner` | 載入中動畫 | | `MatBadge` | 通知數量角標 | | `MatChip` | 標籤(教友分類、服事類型) | | `MatIcon` | 系統圖示(搭配 Material Icons) | | `MatDivider` | 分隔線 | --- ## 7. 設計系統 (Design Tokens) 共用 Token 確保 Landing Page 與 Admin 視覺一致: ```scss // styles/_tokens.scss // ── 品牌主色 ── $color-primary-600: #3B3F8C; // 深藍靛(主色) $color-primary-400: #6366F1; // 亮藍靛(Hover) $color-accent-500: #D97706; // 金黃(強調色) $color-accent-300: #FCD34D; // 淺金(Hover) // ── 語意色 ── $color-success: #16A34A; $color-warning: #D97706; $color-error: #DC2626; $color-info: #2563EB; // ── 中性色 ── $color-gray-50: #F9FAFB; $color-gray-100: #F3F4F6; $color-gray-700: #374151; $color-gray-900: #111827; // ── 字型 ── $font-display: 'Playfair Display', Georgia, serif; // Landing Page 標題 $font-body: 'Inter', -apple-system, sans-serif; // 全域內文 // ── 間距 ── $spacing-unit: 8px; // ── 圓角 ── $radius-sm: 4px; $radius-md: 8px; $radius-lg: 16px; $radius-full: 9999px; ``` > 實際品牌色在開始前與教會確認(教會 Logo 的主色)。 --- ## 8. Responsive / Mobile 規範 ### Breakpoints | 名稱 | 寬度 | 描述 | |------|------|------| | `xs` | < 480px | 小螢幕手機 | | `sm` | 480–767px | 一般手機 | | `md` | 768–1023px | 平板 | | `lg` | ≥ 1024px | 桌機 | ### 各頁面 Mobile 適配規則 | 元件 | Desktop | Mobile | |------|---------|--------| | 導覽 | 左側 Sidenav(固定展開) | Bottom Tab Bar + 漢堡 | | Kendo Grid | 全欄顯示 | 隱藏次要欄,固定姓名欄 | | Kendo Scheduler | 月 / 週 視圖 | 僅「Day / Agenda」視圖 | | 表單 | 雙欄排版 | 單欄,全寬輸入框 | | Chart | 正常尺寸 | 可橫向捲動容器 | | Dialog | 置中 Modal | 底部 Sheet(全寬滑上) | ### Capacitor App 專屬考量 ```typescript // 偵測是否在原生 App 中執行 import { Capacitor } from '@capacitor/core'; const isNativeApp = Capacitor.isNativePlatform(); // 在 App 中隱藏 Landing Page 導覽 // 在 App 中使用原生 Back Button 處理 Android ``` --- ## 9. Kendo UI 授權注意事項 > **Kendo UI for Angular 是商業授權產品(Progress/Telerik)。** | 方案 | 費用 | 適用 | |------|------|------| | Developer License | ~$999/開發者/年 | 標準商業授權 | | **Kendo UI 30-day Trial** | 免費 | 開發評估用 | | DevCraft Complete | ~$1,999/年 | 含全套 Telerik 產品 | **Nonprofit 折扣** - Progress/Telerik **沒有標準 Nonprofit 免費方案** - 但可以直接寄信至 `sales@telerik.com` 說明是 501(c)(3) 教會,**詢問 Nonprofit Discount**,有時可獲 40–60% 折扣 - 建議在 Phase 0 確認授權再開始使用 **替代方案(若 Kendo 費用過高)** | 替代品 | 費用 | Grid | Chart | Scheduler | |--------|------|------|-------|-----------| | **AG Grid Community** | 免費 | ✅ 強大 | ❌ | ❌ | | **ngx-charts** | 免費 | ❌ | ✅ | ❌ | | **FullCalendar** | 免費/付費 | ❌ | ❌ | ✅ | | **PrimeNG** | 免費 (MIT) | ✅ | ✅ | ✅ 基本 | > **PrimeNG** 是最接近的免費替代品,如授權談不攏可考慮改用。