Files
TODO_list_system/README.md
beabigegg 00061adeb7 6th
2025-09-01 16:42:41 +08:00

302 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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.

# PANJIT To-Do 專案管理系統
一套完整的企業級待辦事項管理系統支援AD認證、郵件通知、Excel匯入匯出等功能。
## 🚀 功能特色
### 核心功能
- **待辦事項管理**:新增、編輯、刪除、狀態管理
- **多重視圖**:列表視圖、日曆視圖、看板視圖
- **權限控制**:創建者、負責人、追蹤者角色管理
- **狀態追蹤**:新建立、進行中、已阻塞、已完成
### 身份認證
- **AD 整合**支援Active Directory單一登入
- **角色權限**:管理員、一般使用者權限管控
- **安全防護**JWT Token認證機制
### 通知系統
- **郵件通知**:狀態變更、到期提醒自動通知
- **即時推播**:系統內通知面板
- **自定義設定**:個人化通知偏好
### 資料處理
- **Excel 匯入**:批量匯入待辦事項
- **Excel 匯出**:支援多種匯出格式
- **報表功能**:統計分析報表
### 使用者介面
- **響應式設計**:支援桌面、平板、手機
- **深色模式**:亮色/暗色/自動切換
- **多語言支援**:繁體中文介面
- **動畫效果**:流暢的使用者體驗
## 🛠 技術架構
### 前端技術棧
- **框架**Next.js 14 (React 18)
- **UI 庫**Material-UI (MUI) 5
- **狀態管理**Redux Toolkit + React Query
- **樣式方案**Emotion + CSS-in-JS
- **動畫庫**Framer Motion
- **類型檢查**TypeScript
- **構建工具**Next.js + SWC
### 後端技術棧
- **框架**Flask 2.3
- **資料庫**MySQL + SQLAlchemy ORM
- **認證系統**Flask-JWT-Extended
- **LDAP 整合**ldap3 (Windows 相容)
- **任務佇列**Celery + Redis
- **郵件服務**Flask-Mail + SMTP
- **檔案處理**pandas + openpyxl
- **API 文檔**Flask-RESTful
### 基礎設施
- **資料庫**MySQL 8.0
- **快取系統**Redis
- **檔案儲存**:本地檔案系統
- **日誌管理**colorlog
- **部署環境**Windows Server
## 📋 系統需求
### 開發環境
- **Node.js**16.x 或以上版本
- **Python**3.10 或以上版本
- **MySQL**8.0 或以上版本
- **Redis**6.0 或以上版本
### 生產環境
- **作業系統**Windows Server 2016+ 或 Linux
- **記憶體**:最低 4GB建議 8GB
- **磁碟空間**:最低 10GB
- **網路**:可連接 SMTP 和 LDAP 伺服器
## 🚀 快速開始
### 1. 專案複製
```bash
git clone <repository-url>
cd TODOLIST
```
### 2. 後端設置
```bash
# 進入後端目錄
cd backend
# 建立虛擬環境 (Windows)
python -m venv venv
venv\Scripts\activate
# 安裝依賴
pip install -r requirements.txt
# 設置環境變數
copy .env.example .env
# 編輯 .env 文件,填入正確的設定值
# 初始化資料庫
python init_db.py
# 啟動後端服務
python app.py
```
### 3. 前端設置
```bash
# 進入前端目錄
cd frontend
# 安裝依賴
npm install
# 設置環境變數
copy .env.example .env.local
# 編輯 .env.local 文件
# 啟動開發服務器
npm run dev
```
### 4. 背景任務 (可選)
```bash
# 在另一個終端啟動 Celery Worker
cd backend
celery -A celery_app worker --loglevel=info
# 啟動任務調度器
celery -A celery_app beat --loglevel=info
```
## ⚙️ 設定說明
### 環境變數配置
#### 後端設定 (backend/.env)
```env
# 資料庫連線
DATABASE_URL=mysql+pymysql://username:password@host:port/database
MYSQL_HOST=mysql.example.com
MYSQL_PORT=3306
MYSQL_USER=your_user
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=your_database
# JWT 設定
JWT_SECRET_KEY=your-super-secret-key
JWT_ACCESS_TOKEN_EXPIRES=86400
# LDAP 設定
LDAP_SERVER=your-ldap-server.com
LDAP_PORT=389
LDAP_BIND_USER_DN=CN=ServiceAccount,CN=Users,DC=example,DC=com
LDAP_BIND_USER_PASSWORD=service_password
LDAP_SEARCH_BASE=OU=Users,DC=example,DC=com
# SMTP 設定
SMTP_SERVER=smtp.example.com
SMTP_PORT=25
SMTP_SENDER_EMAIL=noreply@example.com
# Redis 設定
REDIS_URL=redis://localhost:6379/0
```
#### 前端設定 (frontend/.env.local)
```env
NEXT_PUBLIC_API_BASE_URL=http://localhost:5000/api
NEXT_PUBLIC_APP_NAME=PANJIT To-Do System
```
## 📝 部署指南
### 生產環境部署
1. **資料庫準備**
- 建立 MySQL 資料庫
- 執行資料庫遷移腳本
- 設定資料庫備份策略
2. **應用程式部署**
- 設定 IIS 或 Apache 反向代理
- 配置 SSL 證書
- 設定環境變數
3. **背景服務設定**
- 配置 Celery Windows Service
- 設定 Redis 服務自動啟動
- 配置日誌輪轉
## 🔐 權限矩陣
### 待辦事項權限控制
| 操作/角色 | 建立者 | 負責人 | 追蹤者 | 其他使用者 |
|----------|--------|--------|--------|------------|
| **查看(非公開)** | ✅ | ✅ | ❌ | ❌ |
| **查看(公開)** | ✅ | ✅ | ✅ | ✅ |
| **編輯** | ✅ | ❌ | ❌ | ❌ |
| **刪除** | ✅ | ❌ | ❌ | ❌ |
| **更改狀態** | ✅ | ❌ | ❌ | ❌ |
| **指派負責人** | ✅ | ❌ | ❌ | ❌ |
| **設為公開/私人** | ✅ | ❌ | ❌ | ❌ |
| **追蹤(公開)** | ✅ | ✅ | ✅ | ✅ |
| **追蹤(非公開)** | ❌ | ❌ | ❌ | ❌ |
### 權限說明
#### 可見性規則
- **公開待辦事項**:所有使用者皆可查看
- **非公開待辦事項**:僅建立者和負責人可查看
- 追蹤者只能存在於公開的待辦事項
#### 編輯權限
- **完全控制**:僅建立者擁有編輯、刪除、狀態變更等所有權限
- **唯讀權限**:負責人、追蹤者及其他使用者僅能查看,無法編輯
#### 追蹤功能
- 只有公開的待辦事項才能被追蹤
- 任何人都可以追蹤公開的待辦事項
- 非公開的待辦事項不支援追蹤功能
## 🧪 測試
### 單元測試
```bash
# 後端測試
cd backend
pytest tests/ -v
# 前端測試
cd frontend
npm run test
```
### 類型檢查
```bash
# 前端類型檢查
cd frontend
npm run type-check
```
### 代碼規範檢查
```bash
# 前端 ESLint 檢查
cd frontend
npm run lint
```
## 📚 API 文檔
主要 API 端點:
### 認證相關
- `POST /api/auth/login` - 使用者登入
- `POST /api/auth/logout` - 使用者登出
- `GET /api/auth/me` - 取得當前使用者資訊
### 待辦事項
- `GET /api/todos` - 取得待辦清單
- `POST /api/todos` - 建立新待辦事項
- `PUT /api/todos/{id}` - 更新待辦事項
- `DELETE /api/todos/{id}` - 刪除待辦事項
### Excel 功能
- `POST /api/excel/import` - Excel 匯入
- `GET /api/excel/export` - Excel 匯出
- `GET /api/excel/template` - 下載匯入模板
## 🤝 開發貢獻
### 代碼規範
- 使用 TypeScript 進行前端開發
- 遵循 ESLint 和 Prettier 設定
- 後端使用 Python Type Hints
- 提交前執行測試
### Git 工作流程
1. 建立功能分支
2. 開發並測試功能
3. 提交 Pull Request
4. 代碼審查
5. 合併到主分支
## 🐛 問題排解
### 常見問題
**Q: 登入失敗,顯示 LDAP 連線錯誤**
A: 檢查 LDAP 設定和網路連線,確認服務帳號權限
**Q: 郵件通知無法發送**
A: 驗證 SMTP 設定,檢查防火牆和郵件伺服器設定
**Q: 前端無法連接後端 API**
A: 確認 CORS 設定和 API 基礎 URL 配置
**Q: Excel 匯入失敗**
A: 檢查文件格式和欄位映射,參考匯入模板