Changes: - Fix Python dependency conflicts in requirements.txt - Update to use compatible version ranges - Add fix_dependencies.bat for easy dependency repair - Create comprehensive DEPENDENCY_FIX.md guide - Add complete System Design Document (SDD) v1.0 SDD v1.0 includes: ✅ System architecture with dual backend ✅ Complete database design (31 tables) ✅ API specifications ✅ Security design ✅ Deployment architecture ✅ Performance optimization strategies Fixed Issues: 🐛 Flask/cryptography version conflicts 🐛 pip dependency resolver warnings Documentation: 📚 DEPENDENCY_FIX.md - Dependency troubleshooting 📚 SDD_系統設計文件_v1.0.md - Complete system design 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
867 lines
26 KiB
Markdown
867 lines
26 KiB
Markdown
# HR 績效評核系統 - 系統設計文件 (SDD)
|
||
|
||
**System Design Document**
|
||
|
||
---
|
||
|
||
## 文件資訊
|
||
|
||
| 項目 | 內容 |
|
||
|------|------|
|
||
| **文件名稱** | HR 績效評核系統 - 系統設計文件 (SDD) |
|
||
| **文件版本** | v1.0 |
|
||
| **建立日期** | 2025-12-03 |
|
||
| **最後更新** | 2025-12-03 |
|
||
| **文件狀態** | ✅ 已完成 |
|
||
| **作者** | Donald |
|
||
| **專案名稱** | HR Performance Management System |
|
||
| **專案代碼** | HRPMS-2025 |
|
||
|
||
---
|
||
|
||
## 版本歷史
|
||
|
||
| 版本 | 日期 | 作者 | 變更說明 |
|
||
|------|------|------|----------|
|
||
| v1.0 | 2025-12-03 | Donald | 初始版本,完整系統設計 |
|
||
|
||
---
|
||
|
||
## 目錄
|
||
|
||
1. [系統概述](#1-系統概述)
|
||
2. [系統架構](#2-系統架構)
|
||
3. [技術棧](#3-技術棧)
|
||
4. [資料庫設計](#4-資料庫設計)
|
||
5. [API 設計](#5-api-設計)
|
||
6. [前端設計](#6-前端設計)
|
||
7. [安全設計](#7-安全設計)
|
||
8. [部署架構](#8-部署架構)
|
||
9. [效能優化](#9-效能優化)
|
||
10. [附錄](#10-附錄)
|
||
|
||
---
|
||
|
||
## 1. 系統概述
|
||
|
||
### 1.1 專案背景
|
||
|
||
HR 績效評核系統是一個基於「四卡循環」理念的現代化績效管理平台,旨在協助企業建立完整的績效管理生命週期,從角色定義、能力評估、績效考核到個人發展計畫。
|
||
|
||
### 1.2 核心理念
|
||
|
||
```
|
||
角色卡 → 能力卡 → 績效卡 → 成長卡
|
||
↑ ↓
|
||
└──────────── 回饋循環 ◀────────┘
|
||
```
|
||
|
||
### 1.3 系統目標
|
||
|
||
- ✅ 建立標準化的績效評核流程
|
||
- ✅ 整合 AI 輔助功能提升效率
|
||
- ✅ 支援多語系(繁中、英文)
|
||
- ✅ 響應式設計支援多裝置
|
||
- ✅ 完整的資料追蹤與版本管理
|
||
|
||
### 1.4 技術特色
|
||
|
||
- **雙後端架構**: Python Flask + Node.js Express
|
||
- **AI 整合**: 支援 4 種 LLM(Gemini, DeepSeek, OpenAI, Claude)
|
||
- **資料庫**: MySQL 8.0+ (31 張資料表)
|
||
- **前端**: React + 響應式設計
|
||
- **部署**: 容器化支援 (Docker)
|
||
|
||
---
|
||
|
||
## 2. 系統架構
|
||
|
||
### 2.1 整體架構圖
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 使用者介面層 │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ Web Browser │ │ Mobile │ │ Tablet │ │
|
||
│ │ (React) │ │ (Responsive)│ │ (Responsive) │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
└───────────────────────────┬─────────────────────────────────────┘
|
||
│ HTTPS
|
||
┌───────────────────────────┴─────────────────────────────────────┐
|
||
│ API Gateway │
|
||
│ (CORS, 認證, 負載平衡) │
|
||
└───────────┬──────────────────────────────┬──────────────────────┘
|
||
│ │
|
||
┌───────────▼─────────────┐ ┌──────────▼───────────────────────┐
|
||
│ Flask Backend │ │ Node.js Backend │
|
||
│ (Python 3.8+) │ │ (Express.js) │
|
||
│ Port: 5002 │ │ Port: 3000 │
|
||
│ │ │ │
|
||
│ ┌──────────────────┐ │ │ ┌──────────────────┐ │
|
||
│ │ LLM Service │ │ │ │ LLM Service │ │
|
||
│ │ - Gemini │ │ │ │ - Gemini │ │
|
||
│ │ - DeepSeek │ │ │ │ - DeepSeek │ │
|
||
│ │ - OpenAI │ │ │ │ - OpenAI │ │
|
||
│ │ - Claude │ │ │ │ - Claude │ │
|
||
│ └──────────────────┘ │ │ └──────────────────┘ │
|
||
│ │ │ │
|
||
│ ┌──────────────────┐ │ │ ┌──────────────────┐ │
|
||
│ │ Database Layer │ │ │ │ Database Layer │ │
|
||
│ │ (PyMySQL) │ │ │ │ (mysql2) │ │
|
||
│ └──────────────────┘ │ │ └──────────────────┘ │
|
||
└─────────────┬───────────┘ └────────────┬─────────────────────┘
|
||
│ │
|
||
└──────────────┬───────────────┘
|
||
│
|
||
┌────────────────────────────▼─────────────────────────────────────┐
|
||
│ 資料庫層 │
|
||
│ MySQL 8.0+ │
|
||
│ Database: db_A102 │
|
||
│ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ 基礎資料 │ │ 職能字典 │ │ 四卡系統 │ │
|
||
│ │ (5 tables) │ │ (3 tables) │ │ (19 tables) │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ │
|
||
│ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ 系統支援 │ │ 審批流程 │ │
|
||
│ │ (5 tables) │ │ (1 table) │ │
|
||
│ └──────────────┘ └──────────────┘ │
|
||
└──────────────────────────────────────────────────────────────────┘
|
||
│
|
||
┌────────────────────────────▼─────────────────────────────────────┐
|
||
│ 外部服務層 │
|
||
│ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ LLM APIs │ │ SMTP Server │ │ File Storage│ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
└──────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 2.2 系統分層
|
||
|
||
| 層級 | 職責 | 技術 |
|
||
|------|------|------|
|
||
| **呈現層** | 使用者介面、使用者體驗 | React, HTML5, CSS3 |
|
||
| **應用層** | 業務邏輯、API 端點 | Flask (Python), Express (Node.js) |
|
||
| **服務層** | LLM 整合、外部服務 | axios, requests |
|
||
| **資料層** | 資料持久化、查詢 | MySQL 8.0, PyMySQL, mysql2 |
|
||
| **基礎設施層** | 伺服器、網路、安全 | Nginx, Docker, SSL |
|
||
|
||
### 2.3 資料流向
|
||
|
||
```
|
||
使用者操作
|
||
↓
|
||
前端驗證
|
||
↓
|
||
API 請求 (HTTPS)
|
||
↓
|
||
後端驗證 (JWT)
|
||
↓
|
||
業務邏輯處理
|
||
↓
|
||
資料庫操作 (Transaction)
|
||
↓
|
||
回應格式化
|
||
↓
|
||
前端更新 UI
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 技術棧
|
||
|
||
### 3.1 後端技術
|
||
|
||
#### Python Flask 版本
|
||
|
||
| 技術 | 版本 | 用途 |
|
||
|------|------|------|
|
||
| **Python** | 3.8+ | 程式語言 |
|
||
| **Flask** | 2.3.0+ | Web 框架 |
|
||
| **Flask-CORS** | 4.0.0+ | CORS 支援 |
|
||
| **PyMySQL** | 1.1.0+ | MySQL 連接器 |
|
||
| **requests** | 2.31.0+ | HTTP 客戶端 |
|
||
| **python-dotenv** | 1.0.0+ | 環境變數管理 |
|
||
| **cryptography** | 41.0.0+ | 加密功能 |
|
||
|
||
#### Node.js Express 版本
|
||
|
||
| 技術 | 版本 | 用途 |
|
||
|------|------|------|
|
||
| **Node.js** | 16.0.0+ | 執行環境 |
|
||
| **Express** | 4.18.2+ | Web 框架 |
|
||
| **cors** | 2.8.5+ | CORS 支援 |
|
||
| **mysql2** | 3.6.5+ | MySQL 連接器 |
|
||
| **axios** | 1.6.2+ | HTTP 客戶端 |
|
||
| **dotenv** | 16.3.1+ | 環境變數管理 |
|
||
| **helmet** | 7.1.0+ | 安全標頭 |
|
||
|
||
### 3.2 前端技術
|
||
|
||
| 技術 | 版本 | 用途 |
|
||
|------|------|------|
|
||
| **React** | 18.0+ | UI 框架 |
|
||
| **CSS3** | - | 樣式設計 |
|
||
| **Axios** | 1.6+ | HTTP 請求 |
|
||
| **React Router** | 6.0+ | 路由管理 |
|
||
|
||
### 3.3 資料庫
|
||
|
||
| 技術 | 版本 | 用途 |
|
||
|------|------|------|
|
||
| **MySQL** | 8.0+ | 關聯式資料庫 |
|
||
| **字符集** | utf8mb4_unicode_ci | 多語系支援 |
|
||
| **引擎** | InnoDB | 交易支援 |
|
||
|
||
### 3.4 AI / LLM 整合
|
||
|
||
| 服務 | API | 用途 |
|
||
|------|-----|------|
|
||
| **Google Gemini** | generativelanguage.googleapis.com | 內容生成 |
|
||
| **DeepSeek** | api.deepseek.com | 中文優化 |
|
||
| **OpenAI** | api.openai.com | GPT-4 |
|
||
| **Claude** | api.anthropic.com | 長文本處理 |
|
||
|
||
### 3.5 開發工具
|
||
|
||
| 工具 | 用途 |
|
||
|------|------|
|
||
| **Git** | 版本控制 |
|
||
| **Gitea** | 程式碼託管 |
|
||
| **VSCode** | IDE |
|
||
| **Postman** | API 測試 |
|
||
| **MySQL Workbench** | 資料庫管理 |
|
||
|
||
---
|
||
|
||
## 4. 資料庫設計
|
||
|
||
### 4.1 資料庫概覽
|
||
|
||
**資料庫名稱**: `db_A102`
|
||
**資料表總數**: 31 張
|
||
**字符集**: utf8mb4_unicode_ci
|
||
**引擎**: InnoDB
|
||
|
||
### 4.2 資料表分類
|
||
|
||
#### 4.2.1 基礎資料表 (5張)
|
||
|
||
| 資料表 | 說明 | 記錄數 (預估) |
|
||
|--------|------|--------------|
|
||
| `hr_departments` | 部門組織架構 | 50-100 |
|
||
| `hr_job_levels` | 職級定義 | 9 |
|
||
| `hr_employees` | 員工資料 | 1000-5000 |
|
||
| `hr_system_roles` | 系統角色權限 | 4 |
|
||
| `hr_employee_roles` | 員工角色關聯 | 1000-5000 |
|
||
|
||
#### 4.2.2 職能字典 (3張)
|
||
|
||
| 資料表 | 說明 | 記錄數 (預估) |
|
||
|--------|------|--------------|
|
||
| `hr_competency_categories` | 職能分類 | 10-20 |
|
||
| `hr_competency_dictionary` | 職能字典 | 50-100 |
|
||
| `hr_competency_behaviors` | 職能行為指標 | 250-500 |
|
||
|
||
#### 4.2.3 角色卡模組 (6張)
|
||
|
||
| 資料表 | 說明 | 記錄數 (預估) |
|
||
|--------|------|--------------|
|
||
| `hr_role_cards` | 角色卡主表 | 200-500 |
|
||
| `hr_role_responsibilities` | 角色卡職責 | 1000-2000 |
|
||
| `hr_role_supervisees` | 角色卡督導對象 | 500-1000 |
|
||
| `hr_role_collaborators` | 角色卡協作夥伴 | 1000-2000 |
|
||
| `hr_role_kra` | 角色卡KRA | 1000-2000 |
|
||
| `hr_role_kpi` | 角色卡KPI | 2000-4000 |
|
||
|
||
#### 4.2.4 能力卡模組 (3張)
|
||
|
||
| 資料表 | 說明 | 記錄數 (預估) |
|
||
|--------|------|--------------|
|
||
| `hr_competency_cards` | 能力卡主表 | 1000-5000 |
|
||
| `hr_competency_card_hard_skills` | 能力卡硬性能力 | 5000-10000 |
|
||
| `hr_competency_card_soft_skills` | 能力卡軟性能力 | 5000-10000 |
|
||
|
||
#### 4.2.5 績效卡模組 (4張)
|
||
|
||
| 資料表 | 說明 | 記錄數 (預估) |
|
||
|--------|------|--------------|
|
||
| `hr_review_cycles` | 評核週期設定 | 20-40 |
|
||
| `hr_performance_cards` | 績效卡主表 | 5000-20000 |
|
||
| `hr_performance_goals` | 績效卡目標評核 | 20000-80000 |
|
||
| `hr_performance_behaviors` | 績效卡行為評估 | 20000-80000 |
|
||
|
||
#### 4.2.6 成長卡模組 (5張)
|
||
|
||
| 資料表 | 說明 | 記錄數 (預估) |
|
||
|--------|------|--------------|
|
||
| `hr_growth_cards` | 成長卡主表 | 5000-20000 |
|
||
| `hr_growth_focus_areas` | 成長卡發展焦點 | 10000-40000 |
|
||
| `hr_growth_idp_goals` | 成長卡IDP目標 | 15000-60000 |
|
||
| `hr_growth_actions` | 成長卡行動計畫 | 30000-120000 |
|
||
| `hr_growth_tracking` | 成長卡追蹤紀錄 | 20000-80000 |
|
||
|
||
#### 4.2.7 系統支援 (5張)
|
||
|
||
| 資料表 | 說明 | 記錄數 (預估) |
|
||
|--------|------|--------------|
|
||
| `hr_approval_records` | 審批記錄 | 50000-200000 |
|
||
| `hr_system_settings` | 系統設定 | 50-100 |
|
||
| `hr_rating_thresholds` | 等級分界設定 | 5 |
|
||
| `hr_version_snapshots` | 版本快照 | 50000-200000 |
|
||
| `hr_audit_logs` | 操作日誌 | 500000+ |
|
||
|
||
### 4.3 核心資料表詳細設計
|
||
|
||
#### 4.3.1 員工資料表 (hr_employees)
|
||
|
||
```sql
|
||
CREATE TABLE hr_employees (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
employee_no VARCHAR(20) UNIQUE NOT NULL COMMENT '員工編號',
|
||
email VARCHAR(100) UNIQUE NOT NULL COMMENT '電子郵件',
|
||
name_zh VARCHAR(50) NOT NULL COMMENT '姓名(中文)',
|
||
name_en VARCHAR(50) COMMENT '姓名(英文)',
|
||
department_id INT NOT NULL COMMENT '部門ID',
|
||
job_level_id INT NOT NULL COMMENT '職級ID',
|
||
supervisor_id INT COMMENT '直屬主管ID',
|
||
status ENUM('active', 'inactive', 'resigned') DEFAULT 'active',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_dept (department_id),
|
||
INDEX idx_status (status),
|
||
FOREIGN KEY (department_id) REFERENCES hr_departments(id),
|
||
FOREIGN KEY (job_level_id) REFERENCES hr_job_levels(id),
|
||
FOREIGN KEY (supervisor_id) REFERENCES hr_employees(id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 4.3.2 績效卡主表 (hr_performance_cards)
|
||
|
||
```sql
|
||
CREATE TABLE hr_performance_cards (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
card_code VARCHAR(30) UNIQUE NOT NULL COMMENT '績效卡編號',
|
||
review_cycle_id INT NOT NULL COMMENT '評核週期ID',
|
||
employee_id INT NOT NULL COMMENT '被評核人ID',
|
||
role_card_id INT NOT NULL COMMENT '關聯角色卡ID',
|
||
supervisor_id INT NOT NULL COMMENT '評核主管ID',
|
||
goal_score DECIMAL(5,2) COMMENT '目標得分',
|
||
behavior_score DECIMAL(5,2) COMMENT '行為得分',
|
||
total_score DECIMAL(5,2) COMMENT '總分',
|
||
rating ENUM('A+', 'A', 'B+', 'B', 'C') COMMENT '考核等級',
|
||
status ENUM('not_started', 'self_review', 'supervisor_review', 'completed', 'archived'),
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_cycle (review_cycle_id),
|
||
INDEX idx_employee (employee_id),
|
||
INDEX idx_status (status),
|
||
FOREIGN KEY (review_cycle_id) REFERENCES hr_review_cycles(id),
|
||
FOREIGN KEY (employee_id) REFERENCES hr_employees(id),
|
||
FOREIGN KEY (role_card_id) REFERENCES hr_role_cards(id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
### 4.4 索引策略
|
||
|
||
| 索引類型 | 使用時機 | 範例 |
|
||
|---------|---------|------|
|
||
| **PRIMARY KEY** | 主鍵 | id |
|
||
| **UNIQUE** | 唯一約束 | email, employee_no |
|
||
| **INDEX** | 常用查詢欄位 | department_id, status |
|
||
| **FOREIGN KEY** | 關聯完整性 | employee_id → hr_employees(id) |
|
||
|
||
### 4.5 資料完整性
|
||
|
||
- ✅ 外鍵約束確保參照完整性
|
||
- ✅ NOT NULL 約束必填欄位
|
||
- ✅ ENUM 限制值域範圍
|
||
- ✅ DEFAULT 提供預設值
|
||
- ✅ ON UPDATE CASCADE 級聯更新
|
||
- ✅ ON DELETE SET NULL/CASCADE 刪除策略
|
||
|
||
---
|
||
|
||
## 5. API 設計
|
||
|
||
### 5.1 API 規範
|
||
|
||
#### 5.1.1 基礎資訊
|
||
|
||
| 項目 | 內容 |
|
||
|------|------|
|
||
| **協定** | HTTPS |
|
||
| **格式** | RESTful JSON |
|
||
| **認證** | JWT Bearer Token |
|
||
| **版本** | v1 |
|
||
| **Base URL (Flask)** | http://127.0.0.1:5002/api |
|
||
| **Base URL (Express)** | http://localhost:3000/api |
|
||
|
||
#### 5.1.2 HTTP 狀態碼
|
||
|
||
| 狀態碼 | 說明 | 使用時機 |
|
||
|--------|------|---------|
|
||
| **200** | OK | 請求成功 |
|
||
| **201** | Created | 資源建立成功 |
|
||
| **400** | Bad Request | 請求參數錯誤 |
|
||
| **401** | Unauthorized | 未授權 |
|
||
| **403** | Forbidden | 禁止訪問 |
|
||
| **404** | Not Found | 資源不存在 |
|
||
| **422** | Unprocessable Entity | 驗證失敗 |
|
||
| **500** | Internal Server Error | 伺服器錯誤 |
|
||
|
||
#### 5.1.3 回應格式
|
||
|
||
**成功回應**:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": { ... },
|
||
"message": "操作成功",
|
||
"timestamp": "2025-12-03T10:00:00.000Z"
|
||
}
|
||
```
|
||
|
||
**錯誤回應**:
|
||
```json
|
||
{
|
||
"success": false,
|
||
"error": {
|
||
"statusCode": 400,
|
||
"message": "錯誤訊息",
|
||
"details": { ... },
|
||
"timestamp": "2025-12-03T10:00:00.000Z",
|
||
"path": "/api/endpoint"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 5.2 核心 API 端點
|
||
|
||
#### 5.2.1 健康檢查
|
||
|
||
```
|
||
GET /health
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"message": "API is running",
|
||
"database": "connected",
|
||
"timestamp": "2025-12-03T10:00:00.000Z"
|
||
}
|
||
```
|
||
|
||
#### 5.2.2 資料庫 API
|
||
|
||
```
|
||
POST /api/db/test
|
||
測試資料庫連線
|
||
|
||
GET /api/db/tables
|
||
列出所有資料表
|
||
```
|
||
|
||
#### 5.2.3 LLM API
|
||
|
||
```
|
||
POST /api/llm/test/gemini
|
||
測試 Gemini API
|
||
|
||
POST /api/llm/test/deepseek
|
||
測試 DeepSeek API
|
||
|
||
POST /api/llm/test/openai
|
||
測試 OpenAI API
|
||
|
||
POST /api/llm/test/claude
|
||
測試 Claude API
|
||
|
||
POST /api/llm/test/all
|
||
測試所有 LLM
|
||
|
||
POST /api/llm/generate
|
||
生成內容
|
||
Request:
|
||
{
|
||
"prompt": "內容提示",
|
||
"provider": "claude",
|
||
"options": {
|
||
"temperature": 0.7,
|
||
"maxTokens": 2000
|
||
}
|
||
}
|
||
|
||
POST /api/llm/help-me-fill
|
||
Help Me AI 智能填寫
|
||
Request:
|
||
{
|
||
"cardType": "performance",
|
||
"filledFields": { ... },
|
||
"emptyFields": [ ... ],
|
||
"context": { ... }
|
||
}
|
||
```
|
||
|
||
#### 5.2.4 四卡系統 API (規劃中)
|
||
|
||
```
|
||
# 角色卡
|
||
GET /api/role-cards
|
||
POST /api/role-cards
|
||
GET /api/role-cards/:id
|
||
PUT /api/role-cards/:id
|
||
DELETE /api/role-cards/:id
|
||
|
||
# 能力卡
|
||
GET /api/competency-cards
|
||
POST /api/competency-cards
|
||
GET /api/competency-cards/:id
|
||
PUT /api/competency-cards/:id
|
||
DELETE /api/competency-cards/:id
|
||
|
||
# 績效卡
|
||
GET /api/performance-cards
|
||
POST /api/performance-cards
|
||
GET /api/performance-cards/:id
|
||
PUT /api/performance-cards/:id
|
||
DELETE /api/performance-cards/:id
|
||
|
||
# 成長卡
|
||
GET /api/growth-cards
|
||
POST /api/growth-cards
|
||
GET /api/growth-cards/:id
|
||
PUT /api/growth-cards/:id
|
||
DELETE /api/growth-cards/:id
|
||
```
|
||
|
||
### 5.3 API 安全
|
||
|
||
| 機制 | 實作方式 |
|
||
|------|---------|
|
||
| **CORS** | Flask-CORS / cors middleware |
|
||
| **認證** | JWT Token |
|
||
| **加密** | HTTPS / TLS 1.3 |
|
||
| **速率限制** | Rate limiting middleware |
|
||
| **輸入驗證** | Schema validation |
|
||
| **SQL 注入防護** | Parameterized queries |
|
||
| **XSS 防護** | Content Security Policy |
|
||
|
||
---
|
||
|
||
## 6. 前端設計
|
||
|
||
### 6.1 UI/UX 設計原則
|
||
|
||
- **簡潔**: 介面清晰,操作直覺
|
||
- **一致**: 統一的視覺風格
|
||
- **響應**: 支援多裝置
|
||
- **無障礙**: WCAG 2.1 AA 標準
|
||
- **效能**: 快速載入與互動
|
||
|
||
### 6.2 色彩系統
|
||
|
||
```css
|
||
:root {
|
||
/* 主色調 */
|
||
--primary: #667eea;
|
||
--primary-dark: #764ba2;
|
||
|
||
/* 語義色 */
|
||
--success: #10b981;
|
||
--warning: #f59e0b;
|
||
--error: #ef4444;
|
||
--info: #3b82f6;
|
||
|
||
/* 中性色 */
|
||
--gray-50: #f9fafb;
|
||
--gray-100: #f3f4f6;
|
||
--gray-200: #e5e7eb;
|
||
--gray-800: #1f2937;
|
||
--gray-900: #111827;
|
||
}
|
||
```
|
||
|
||
### 6.3 響應式斷點
|
||
|
||
| 裝置 | 寬度 | 佈局 |
|
||
|------|------|------|
|
||
| **Mobile** | < 768px | 單欄 |
|
||
| **Tablet** | 768-1279px | 雙欄 |
|
||
| **Desktop** | ≥ 1280px | 三欄 |
|
||
|
||
### 6.4 核心元件
|
||
|
||
```
|
||
components/
|
||
├── ErrorModal.jsx # 錯誤彈窗
|
||
├── LLMConnectionTest.jsx # LLM 連線測試
|
||
├── RoleCard.jsx # 角色卡元件
|
||
├── CompetencyCard.jsx # 能力卡元件
|
||
├── PerformanceCard.jsx # 績效卡元件
|
||
└── GrowthCard.jsx # 成長卡元件
|
||
```
|
||
|
||
---
|
||
|
||
## 7. 安全設計
|
||
|
||
### 7.1 認證與授權
|
||
|
||
```
|
||
使用者登入
|
||
↓
|
||
驗證帳號密碼
|
||
↓
|
||
產生 JWT Token (7天有效)
|
||
↓
|
||
每次請求攜帶 Token
|
||
↓
|
||
後端驗證 Token
|
||
↓
|
||
檢查權限
|
||
↓
|
||
執行操作
|
||
```
|
||
|
||
### 7.2 角色權限
|
||
|
||
| 角色 | 權限 |
|
||
|------|------|
|
||
| **ADMIN** | 所有權限 |
|
||
| **HR** | 檢視全部、管理設定、管理職能字典 |
|
||
| **MANAGER** | 檢視部屬、審批、評核 |
|
||
| **EMPLOYEE** | 檢視自己、自評 |
|
||
|
||
### 7.3 資料加密
|
||
|
||
- **傳輸加密**: TLS 1.3
|
||
- **密碼**: bcrypt 雜湊 (cost factor 12)
|
||
- **敏感資料**: AES-256-GCM
|
||
- **API 金鑰**: 環境變數,不提交版本控制
|
||
|
||
### 7.4 安全檢查清單
|
||
|
||
- [x] SQL 注入防護
|
||
- [x] XSS 防護
|
||
- [x] CSRF 防護
|
||
- [x] 點擊劫持防護
|
||
- [x] 速率限制
|
||
- [x] 輸入驗證
|
||
- [x] 輸出編碼
|
||
- [x] 安全標頭
|
||
- [x] 日誌記錄
|
||
- [x] 錯誤處理
|
||
|
||
---
|
||
|
||
## 8. 部署架構
|
||
|
||
### 8.1 開發環境
|
||
|
||
```
|
||
開發機器
|
||
├── Python 3.8+ / Node.js 16+
|
||
├── MySQL 8.0+
|
||
├── Git
|
||
└── VSCode
|
||
```
|
||
|
||
**啟動方式**:
|
||
```bash
|
||
# Flask
|
||
python app.py
|
||
|
||
# Express
|
||
npm run dev
|
||
```
|
||
|
||
### 8.2 生產環境
|
||
|
||
```
|
||
┌─────────────────────────────────────────┐
|
||
│ Load Balancer / Nginx │
|
||
│ (SSL Termination) │
|
||
└────────────────┬────────────────────────┘
|
||
│
|
||
┌────────────┴────────────┐
|
||
│ │
|
||
┌───▼────────┐ ┌──────▼─────┐
|
||
│ Flask │ │ Express │
|
||
│ (Gunicorn)│ │ (PM2) │
|
||
│ x 4 │ │ x 4 │
|
||
└───┬────────┘ └──────┬─────┘
|
||
│ │
|
||
└────────────┬───────────┘
|
||
│
|
||
┌────────▼────────┐
|
||
│ MySQL Master │
|
||
│ (Primary) │
|
||
└────────┬────────┘
|
||
│
|
||
┌────────▼────────┐
|
||
│ MySQL Replica │
|
||
│ (Read-only) │
|
||
└─────────────────┘
|
||
```
|
||
|
||
### 8.3 Docker 部署
|
||
|
||
**docker-compose.yml**:
|
||
```yaml
|
||
version: '3.8'
|
||
|
||
services:
|
||
flask-api:
|
||
build: ./flask
|
||
ports:
|
||
- "5002:5002"
|
||
environment:
|
||
- DB_HOST=mysql
|
||
- DB_PORT=3306
|
||
depends_on:
|
||
- mysql
|
||
|
||
express-api:
|
||
build: ./express
|
||
ports:
|
||
- "3000:3000"
|
||
environment:
|
||
- DB_HOST=mysql
|
||
- DB_PORT=3306
|
||
depends_on:
|
||
- mysql
|
||
|
||
mysql:
|
||
image: mysql:8.0
|
||
environment:
|
||
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
|
||
MYSQL_DATABASE: ${DB_NAME}
|
||
volumes:
|
||
- mysql-data:/var/lib/mysql
|
||
- ./database:/docker-entrypoint-initdb.d
|
||
|
||
volumes:
|
||
mysql-data:
|
||
```
|
||
|
||
### 8.4 CI/CD 流程
|
||
|
||
```
|
||
Git Push (Gitea)
|
||
↓
|
||
Webhook Trigger
|
||
↓
|
||
Build & Test
|
||
↓
|
||
Docker Image Build
|
||
↓
|
||
Push to Registry
|
||
↓
|
||
Deploy to Server
|
||
↓
|
||
Health Check
|
||
↓
|
||
通知完成
|
||
```
|
||
|
||
---
|
||
|
||
## 9. 效能優化
|
||
|
||
### 9.1 資料庫優化
|
||
|
||
- ✅ 適當的索引策略
|
||
- ✅ 查詢優化 (EXPLAIN)
|
||
- ✅ 連線池管理
|
||
- ✅ 快取常用查詢
|
||
- ✅ 分頁載入
|
||
- ✅ 避免 N+1 查詢
|
||
|
||
### 9.2 API 優化
|
||
|
||
- ✅ Response 壓縮 (gzip)
|
||
- ✅ HTTP/2
|
||
- ✅ CDN 靜態資源
|
||
- ✅ API 快取 (Redis)
|
||
- ✅ 非同步處理
|
||
- ✅ 批次操作
|
||
|
||
### 9.3 前端優化
|
||
|
||
- ✅ Code Splitting
|
||
- ✅ Lazy Loading
|
||
- ✅ 圖片優化
|
||
- ✅ Tree Shaking
|
||
- ✅ Service Worker
|
||
- ✅ Local Storage 快取
|
||
|
||
### 9.4 效能指標
|
||
|
||
| 指標 | 目標值 |
|
||
|------|--------|
|
||
| **頁面載入時間** | < 2 秒 |
|
||
| **API 回應時間** | < 500ms |
|
||
| **首次內容繪製 (FCP)** | < 1.5 秒 |
|
||
| **最大內容繪製 (LCP)** | < 2.5 秒 |
|
||
| **累積佈局偏移 (CLS)** | < 0.1 |
|
||
|
||
---
|
||
|
||
## 10. 附錄
|
||
|
||
### 10.1 相關文件
|
||
|
||
- [功能規格書](../HR績效評核系統_功能規格書_v1.1.md)
|
||
- [README](../README.md)
|
||
- [資料庫文件](../database/README.md)
|
||
- [CORS 解決指南](../CORS_FIX_GUIDE.md)
|
||
- [Flask 設定指南](../FLASK_SETUP.md)
|
||
- [依賴修復指南](../DEPENDENCY_FIX.md)
|
||
|
||
### 10.2 開發規範
|
||
|
||
- **程式碼風格**: PEP 8 (Python), Airbnb (JavaScript)
|
||
- **Git Commit**: Conventional Commits
|
||
- **分支策略**: Git Flow
|
||
- **Code Review**: 必須
|
||
|
||
### 10.3 測試策略
|
||
|
||
| 測試類型 | 覆蓋率目標 | 工具 |
|
||
|---------|-----------|------|
|
||
| **單元測試** | 80%+ | pytest, Jest |
|
||
| **整合測試** | 70%+ | pytest, Supertest |
|
||
| **E2E 測試** | 關鍵流程 | Selenium, Cypress |
|
||
| **效能測試** | - | Apache JMeter |
|
||
| **安全測試** | - | OWASP ZAP |
|
||
|
||
### 10.4 監控與日誌
|
||
|
||
- **應用監控**: Prometheus + Grafana
|
||
- **日誌收集**: ELK Stack (Elasticsearch, Logstash, Kibana)
|
||
- **錯誤追蹤**: Sentry
|
||
- **效能分析**: New Relic / DataDog
|
||
|
||
### 10.5 聯絡資訊
|
||
|
||
- **專案負責人**: Donald
|
||
- **Git Repository**: https://gitea.theaken.com/donald/hr-performance-system
|
||
- **技術支援**: 透過 Gitea Issues
|
||
|
||
---
|
||
|
||
## 文件結尾
|
||
|
||
**本文件受版本控制管理,請勿擅自修改**
|
||
|
||
**最後更新**: 2025-12-03
|
||
**文件版本**: v1.0
|
||
**狀態**: ✅ 已完成
|
||
|
||
---
|
||
|
||
© 2025 HR Performance Management System. All rights reserved.
|