dramaling-app/sop/archive/web-component-architecture.md

342 lines
8.2 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🌐 Web端組件架構設計指南
## 📋 文檔概述
**文檔名稱**: Drama Ling Web端組件架構設計指南
**建立日期**: 2025-09-12
**目標受眾**: 前端工程師、UI/UX設計師、產品經理
**技術基礎**: HTML5 + CSS3 + Modern JavaScript
## 🎯 設計原則
### 🖥️ **桌面優先設計**
- **多任務並行**: 支援同時開啟多個學習模組
- **大螢幕利用**: 充分使用桌面螢幕空間
- **快捷鍵支援**: 提供完整的鍵盤操作體驗
- **即時回饋**: 無需頁面刷新的流暢互動
### 📐 **響應式策略**
- **桌面優先**: 1200px+ 主要設計目標
- **平板適配**: 768px-1199px 簡化佈局
- **手機兼容**: 320px-767px 降級體驗
## 🏗️ 組件架構層級
### 1⃣ **佈局組件 (Layout Components)**
#### `WebLayout_Main`
```html
<div class="web-layout-main">
<header class="web-header">
<WebHeader_Navigation />
<WebHeader_UserStatus />
</header>
<aside class="web-sidebar">
<WebSidebar_Menu />
<WebSidebar_Progress />
</aside>
<main class="web-content">
<WebContent_Area />
</main>
</div>
```
**設計特色**:
- **固定頭部**: 命條、通知、用戶資訊常駐
- **可摺疊側邊欄**: 學習進度、快速導航
- **主內容區**: 彈性佈局,支援多視窗
#### `WebLayout_Modal`
```html
<div class="web-modal-overlay">
<div class="web-modal-container">
<WebModal_Header />
<WebModal_Content />
<WebModal_Actions />
</div>
</div>
```
### 2⃣ **功能組件 (Feature Components)**
#### `WebLearning_VocabPanel`
```html
<div class="web-vocab-panel">
<div class="vocab-stages-overview">
<WebStage_Level1 status="completed" />
<WebStage_Level2 status="current" />
<WebStage_Level2Plus status="locked" />
<WebStage_Level3 status="locked" />
</div>
<div class="vocab-current-content">
<WebVocab_Display />
<WebVocab_AudioControls />
<WebVocab_Examples />
</div>
</div>
```
**Web端特色**:
- **四關同屏**: 同時顯示所有關卡狀態
- **即時切換**: 無縫在關卡間切換
- **詳細資訊**: 顯示更多學習數據
#### `WebLearning_DialoguePanel`
```html
<div class="web-dialogue-panel">
<div class="dialogue-character-info">
<WebCharacter_Avatar />
<WebCharacter_Details />
</div>
<div class="dialogue-conversation">
<WebDialogue_Messages />
<WebDialogue_InputArea />
</div>
<div class="dialogue-assistance">
<WebAssistance_Panel />
<WebAnalysis_Feedback />
</div>
</div>
```
### 3⃣ **交互組件 (Interactive Components)**
#### `WebInput_Smart`
```html
<div class="web-input-smart">
<input class="smart-input-field" />
<div class="smart-suggestions">
<WebSuggestion_Item />
</div>
<div class="smart-shortcuts">
<kbd>Tab</kbd> 接受建議
<kbd>Ctrl+Enter</kbd> 送出
</div>
</div>
```
**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
<!-- 手機版:單一焦點,垂直流程 -->
<div class="mobile-vocab-page">
<header>當前: 詞彙1/5</header>
<main>
<div class="vocab-card">單個詞彙展示</div>
</main>
<footer>
<button>上一個</button>
<button>下一個</button>
</footer>
</div>
```
### 💻 **Web版結構**
```html
<!-- Web版多資訊同屏橫向佈局 -->
<div class="web-vocab-page">
<aside class="stages-sidebar">
<div class="stage stage-completed">第1關 ✓</div>
<div class="stage stage-current">第2關 ⟲</div>
<div class="stage stage-locked">第2+關 🔒</div>
<div class="stage stage-locked">第3關 🔒</div>
</aside>
<main class="vocab-content">
<div class="vocab-overview">
<div class="vocab-list">5個詞彙預覽</div>
<div class="progress-indicator">進度: 3/5</div>
</div>
<div class="vocab-detail">
<div class="current-vocab">當前詞彙詳細資訊</div>
<div class="audio-controls">音頻控制面板</div>
<div class="examples">例句和語境</div>
</div>
</main>
<aside class="tools-panel">
<div class="shortcuts-help">快捷鍵提示</div>
<div class="statistics">學習統計</div>
</aside>
</div>
```
## 📏 響應式設計指南
### 🖥️ **桌面版** (1200px+)
- **三欄佈局**: 側邊欄 + 主內容 + 工具欄
- **豐富互動**: 懸停效果、快捷鍵提示
- **詳細資訊**: 完整統計、進度可視化
### 📱 **平板版** (768px-1199px)
- **兩欄佈局**: 可摺疊側邊欄 + 主內容
- **簡化工具欄**: 整合到主內容區
- **觸控優化**: 增大點擊區域
### 📱 **手機版** (320px-767px)
- **單欄佈局**: 全螢幕主內容
- **底部導航**: Tab式導航
- **簡化功能**: 保留核心功能
---
**維護提醒**: 當添加新的Web端功能時請確保更新此架構文檔並遵循既定的組件設計原則。
**最後更新**: 2025-09-12
**版本**: v1.0
**維護者**: Drama Ling Web開發團隊