# 🌐 Web端組件架構設計指南
## 📋 文檔概述
**文檔名稱**: Drama Ling Web端組件架構設計指南
**建立日期**: 2025-09-12
**目標受眾**: 前端工程師、UI/UX設計師、產品經理
**技術基礎**: HTML5 + CSS3 + Modern JavaScript
## 🎯 設計原則
### 🖥️ **桌面優先設計**
- **多任務並行**: 支援同時開啟多個學習模組
- **大螢幕利用**: 充分使用桌面螢幕空間
- **快捷鍵支援**: 提供完整的鍵盤操作體驗
- **即時回饋**: 無需頁面刷新的流暢互動
### 📐 **響應式策略**
- **桌面優先**: 1200px+ 主要設計目標
- **平板適配**: 768px-1199px 簡化佈局
- **手機兼容**: 320px-767px 降級體驗
## 🏗️ 組件架構層級
### 1️⃣ **佈局組件 (Layout Components)**
#### `WebLayout_Main`
```html
```
**設計特色**:
- **固定頭部**: 命條、通知、用戶資訊常駐
- **可摺疊側邊欄**: 學習進度、快速導航
- **主內容區**: 彈性佈局,支援多視窗
#### `WebLayout_Modal`
```html
```
### 2️⃣ **功能組件 (Feature Components)**
#### `WebLearning_VocabPanel`
```html
```
**Web端特色**:
- **四關同屏**: 同時顯示所有關卡狀態
- **即時切換**: 無縫在關卡間切換
- **詳細資訊**: 顯示更多學習數據
#### `WebLearning_DialoguePanel`
```html
```
### 3️⃣ **交互組件 (Interactive Components)**
#### `WebInput_Smart`
```html
```
**Web端增強**:
- **快捷鍵提示**: 顯示可用快捷鍵
- **智能建議**: 即時顯示輸入建議
- **多行支援**: 支援長段對話輸入
## 📊 組件狀態管理
### 🔄 **狀態架構**
```javascript
// Web端狀態管理
const WebStateManager = {
// 學習狀態
learning: {
currentStage: 'vocab-level1',
progress: { level1: 80, level2: 60, level3: 0 },
activeWindows: ['vocab', 'dialogue']
},
// UI狀態
ui: {
sidebarCollapsed: false,
activeModals: [],
shortcuts: true,
theme: 'dark'
},
// 用戶狀態
user: {
lifePoints: 5,
diamonds: 150,
streak: 7
}
}
```
### 📡 **數據流向**
```mermaid
flowchart TD
A[用戶操作] --> B[組件事件]
B --> C[狀態管理器]
C --> D[API調用]
D --> E[後端回應]
E --> C
C --> F[組件重渲染]
F --> G[UI更新]
```
## 🎨 視覺設計標準
### 🖼️ **佈局網格**
```css
.web-container {
display: grid;
grid-template-columns: 280px 1fr; /* 側邊欄 + 主內容 */
grid-template-rows: 80px 1fr; /* 頭部 + 內容區 */
min-height: 100vh;
}
.web-content-area {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
gap: var(--space-6);
padding: var(--space-6);
}
```
### 🎯 **互動狀態**
```css
/* Web端特有的懸停效果 */
.web-interactive:hover {
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(0, 229, 204, 0.3);
transition: all 0.3s ease;
}
/* 聚焦狀態 */
.web-focusable:focus {
outline: 2px solid var(--primary-teal);
outline-offset: 2px;
}
```
## ⌨️ 快捷鍵系統
### 🔤 **全域快捷鍵**
```javascript
const WebShortcuts = {
'Ctrl+1': () => navigateToStage('vocab-level1'),
'Ctrl+2': () => navigateToStage('vocab-level2'),
'Ctrl+3': () => navigateToStage('dialogue'),
'Space': () => playAudio(),
'Ctrl+Enter': () => submitAnswer(),
'Escape': () => closeModal(),
'Ctrl+/': () => showShortcutHelp()
}
```
### 📝 **上下文快捷鍵**
```javascript
// 詞彙學習專用
const VocabShortcuts = {
'←/→': () => switchWord(),
'R': () => repeatAudio(),
'1-4': () => selectAnswer(),
'N': () => nextQuestion()
}
// 對話練習專用
const DialogueShortcuts = {
'Ctrl+H': () => showHint(),
'Ctrl+T': () => translateMessage(),
'Ctrl+R': () => requestAssistance()
}
```
## 🔧 開發規範
### 📦 **組件命名**
```javascript
// 組件命名規範
WebComponent_功能名稱 // 主要組件
WebLayout_佈局類型 // 佈局組件
WebModal_彈窗類型 // 彈窗組件
WebInput_輸入類型 // 輸入組件
```
### 🗂️ **檔案結構**
```
src/web/
├── components/
│ ├── layout/ # 佈局組件
│ │ ├── WebLayout_Main.js
│ │ └── WebLayout_Modal.js
│ ├── learning/ # 學習功能組件
│ │ ├── WebLearning_VocabPanel.js
│ │ └── WebLearning_DialoguePanel.js
│ └── common/ # 通用組件
│ ├── WebInput_Smart.js
│ └── WebButton_Action.js
├── styles/
│ ├── web-layout.scss # 佈局樣式
│ ├── web-components.scss # 組件樣式
│ └── web-responsive.scss # 響應式樣式
└── utils/
├── web-shortcuts.js # 快捷鍵管理
└── web-state.js # 狀態管理
```
## 🎮 實際範例:詞彙學習頁面
### 📱 **Mobile版結構**
```html
```
### 💻 **Web版結構**
```html
```
## 📏 響應式設計指南
### 🖥️ **桌面版** (1200px+)
- **三欄佈局**: 側邊欄 + 主內容 + 工具欄
- **豐富互動**: 懸停效果、快捷鍵提示
- **詳細資訊**: 完整統計、進度可視化
### 📱 **平板版** (768px-1199px)
- **兩欄佈局**: 可摺疊側邊欄 + 主內容
- **簡化工具欄**: 整合到主內容區
- **觸控優化**: 增大點擊區域
### 📱 **手機版** (320px-767px)
- **單欄佈局**: 全螢幕主內容
- **底部導航**: Tab式導航
- **簡化功能**: 保留核心功能
---
**維護提醒**: 當添加新的Web端功能時,請確保更新此架構文檔並遵循既定的組件設計原則。
**最後更新**: 2025-09-12
**版本**: v1.0
**維護者**: Drama Ling Web開發團隊