beabigegg 45a42f8e64 3RD
2025-09-01 08:51:39 +08:00
3RD
2025-09-01 08:51:39 +08:00
2nd
2025-08-29 19:02:19 +08:00
3RD
2025-09-01 08:51:39 +08:00
1ST
2025-08-29 16:25:46 +08:00
1ST
2025-08-29 16:25:46 +08:00
3RD
2025-09-01 08:51:39 +08:00
1ST
2025-08-29 16:25:46 +08:00
2nd
2025-08-29 19:02:19 +08:00
1ST
2025-08-29 16:25:46 +08:00
1ST
2025-08-29 16:25:46 +08:00
1ST
2025-08-29 16:25:46 +08:00
1ST
2025-08-29 16:25:46 +08:00

PANJIT To-Do List System V1

一個基於 Next.js + Flask 的企業級待辦事項管理系統,支援 AD/LDAP 登入、多人協作、Email 提醒等功能。

🚀 系統特色

  • AD/LDAP 登入 - 企業級身份驗證
  • 多人協作 - 支援多負責人/多追蹤者
  • Fire 一鍵提醒 - 立即郵件提醒功能 (2分鐘冷卻 + 每日20封限額)
  • 排程提醒 - 到期前/當天/逾期自動提醒 + 週摘要
  • Excel 匯入 - 完整模板驗證與錯誤處理
  • 完整稽核 - 所有操作記錄追蹤
  • 響應式設計 - 支援桌面與行動裝置

🏗️ 技術架構

前端 (Frontend)

  • Next.js 14 - React 全端框架
  • TypeScript - 類型安全開發
  • Material-UI - 企業級 UI 組件
  • Redux Toolkit - 狀態管理
  • TanStack Query - 服務端狀態管理

後端 (Backend)

  • Flask - Python Web 框架
  • SQLAlchemy - ORM 資料庫管理
  • MySQL - 主要資料庫
  • Celery + Redis - 背景任務處理
  • JWT - 身份驗證
  • python-ldap - AD/LDAP 整合

部署 (Deployment)

  • Docker - 容器化部署
  • Nginx - 反向代理
  • MySQL 8.0 - 資料庫服務
  • Redis - 快取與任務佇列

📋 系統需求

  • Node.js >= 18.0
  • Python >= 3.11
  • MySQL >= 8.0
  • Redis >= 6.0

🛠️ 本地開發安裝

1. 克隆專案

git clone <repository-url>
cd TODOLIST

2. 資料庫準備

方式一:使用 Docker (推薦)

# 啟動 MySQL 和 Redis
docker-compose up mysql redis -d

# 等待資料庫啟動完成 (大約30秒)
docker-compose logs mysql

方式二:本地 MySQL

# 建立資料庫
mysql -u root -p
CREATE DATABASE todo_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'todouser'@'localhost' IDENTIFIED BY 'todopass';
GRANT ALL PRIVILEGES ON todo_system.* TO 'todouser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

# 初始化資料庫結構
mysql -u todouser -p todo_system < mysql/init/01-init.sql

3. 後端設定

cd backend

# 建立虛擬環境
python -m venv venv
venv\Scripts\activate  # Windows
# source venv/bin/activate  # Linux/macOS

# 安裝依賴
pip install -r requirements.txt

# 複製環境設定檔並修改
copy .env.example .env  # Windows
# cp .env.example .env  # Linux/macOS

# 編輯 .env 檔案,設定資料庫連線資訊

重要環境變數設定

編輯 backend/.env 檔案:

# MySQL 連線 (如使用Docker保持預設值即可)
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=todouser
MYSQL_PASSWORD=todopass
MYSQL_DATABASE=todo_system

# SMTP 設定 (依照公司環境設定)
SMTP_SERVER=mail.your-company.com
SMTP_PORT=25
SMTP_SENDER_EMAIL=todo-system@your-company.com

# AD/LDAP 設定 (依照公司環境設定)
LDAP_SERVER=ldap://dc.your-company.com
LDAP_SEARCH_BASE=DC=your-company,DC=com

4. 前端設定

cd frontend

# 安裝依賴
npm install

# 複製環境設定檔
copy .env.example .env.local  # Windows
# cp .env.example .env.local  # Linux/macOS

# 編輯 .env.local 設定 API URL

編輯 frontend/.env.local

NEXT_PUBLIC_API_URL=http://localhost:5000
NEXT_PUBLIC_AD_DOMAIN=your-company.com.tw
NEXT_PUBLIC_EMAIL_DOMAIN=your-company.com.tw

5. 啟動應用程式

後端啟動

cd backend

# 啟動 Flask 應用程式
python app.py

# 後端將在 http://localhost:5000 啟動

前端啟動 (另開終端)

cd frontend

# 啟動開發服務器
npm run dev

# 前端將在 http://localhost:3000 啟動

Celery 背景任務 (另開終端)

cd backend

# 啟動 Celery Worker
celery -A celery_app.celery worker --loglevel=info

# 啟動 Celery Beat (排程任務)
celery -A celery_app.celery beat --loglevel=info

🌐 訪問應用程式

📁 專案結構

TODOLIST/
├── backend/              # Flask 後端
│   ├── routes/           # API 路由
│   ├── models.py         # 資料模型
│   ├── config.py         # 設定檔
│   ├── app.py            # Flask 應用程式入口
│   ├── tasks.py          # Celery 背景任務
│   └── utils/            # 工具函數
├── frontend/             # Next.js 前端
│   ├── src/
│   │   ├── app/          # Next.js 應用程式路由
│   │   ├── components/   # React 組件
│   │   ├── store/        # Redux 狀態管理
│   │   ├── lib/          # API 客戶端
│   │   └── types/        # TypeScript 類型定義
├── mysql/
│   └── init/             # 資料庫初始化 SQL
├── nginx/                # Nginx 設定
├── docker-compose.yml    # Docker 編排設定
└── PRD.md               # 產品需求文件

🔧 開發指令

後端開發

cd backend

# 啟動開發服務器 (自動重載)
flask run --debug

# 資料庫遷移
flask db upgrade

# 執行 Python 腳本
python -m scripts.init_admin_user

前端開發

cd frontend

# 開發模式
npm run dev

# 類型檢查
npm run type-check

# 程式碼檢查
npm run lint

# 建置生產版本
npm run build

# 啟動生產服務器
npm start

📊 功能說明

1. 使用者登入

  • 使用 AD/LDAP 帳號登入
  • 首次登入自動建立使用者偏好設定
  • JWT Token 驗證機制

2. 待辦管理

  • 建立/編輯/刪除待辦事項
  • 支援多負責人與多追蹤者
  • 狀態管理NEW/DOING/BLOCKED/DONE
  • 優先級LOW/MEDIUM/HIGH/URGENT
  • 到期日設定與星號標記

3. 通知系統

  • Fire 一鍵提醒立即發送郵件2分鐘冷卻每日20封限制
  • 排程提醒到期前3天、當天、逾期1天自動提醒
  • 週摘要每週一早上9點發送個人待辦摘要

4. Excel 匯入

  • 下載正式模板檔案
  • 逐列錯誤驗證與報告
  • AD 帳號存在性檢查
  • 重複項目檢測

5. 權限控制

  • 建立者:完整編輯權限
  • 負責人:完整編輯權限
  • 追蹤者:僅檢視權限,可接收通知

🛡️ 安全性

  • JWT Token 身份驗證
  • CORS 跨域保護
  • SQL Injection 防護 (SQLAlchemy)
  • XSS 防護 (React)
  • LDAP 注入防護
  • API Rate Limiting (建議生產環境啟用)

📝 API 文檔

主要 API 端點

  • POST /api/auth/login - 使用者登入
  • GET /api/todos - 取得待辦清單
  • POST /api/todos - 建立待辦事項
  • PATCH /api/todos/{id} - 更新待辦事項
  • DELETE /api/todos/{id} - 刪除待辦事項
  • POST /api/todos/{id}/fire-email - Fire 一鍵提醒
  • GET /api/imports/template - 下載 Excel 模板
  • POST /api/imports - 上傳 Excel 檔案

完整 API 文檔請查看:http://localhost:5000/api/docs

🚀 生產部署

使用 Docker Compose

# 建置並啟動所有服務
docker-compose up -d

# 檢查服務狀態
docker-compose ps

# 查看日誌
docker-compose logs -f backend frontend

環境變數設定

生產環境請務必修改:

  • SECRET_KEY - Flask 密鑰
  • JWT_SECRET_KEY - JWT 密鑰
  • 資料庫密碼
  • SMTP 設定
  • LDAP 設定

🔍 故障排除

常見問題

  1. 資料庫連線失敗

    # 檢查 MySQL 是否啟動
    docker-compose ps mysql
    
    # 檢查連線設定
    mysql -h localhost -u todouser -p todo_system
    
  2. LDAP 連線失敗

    • 檢查 LDAP 服務器設定
    • 確認網路連線
    • 驗證搜尋基底 DN 設定
  3. 郵件發送失敗

    • 檢查 SMTP 服務器設定
    • 確認防火牆設定
    • 驗證寄件者郵箱權限
  4. 前端無法連接後端

    • 檢查 NEXT_PUBLIC_API_URL 設定
    • 確認 CORS 設定
    • 檢查後端服務是否正常啟動

日誌檢查

# 後端日誌
tail -f backend/logs/app.log

# Docker 日誌
docker-compose logs -f backend
docker-compose logs -f frontend

# Celery 任務日誌
docker-compose logs -f celery-worker

👥 開發團隊

  • 產品設計: PANJIT IT Team
  • 後端開發: Flask + SQLAlchemy
  • 前端開發: Next.js + TypeScript
  • 系統架構: Docker + Nginx

📄 授權

本專案為 PANJIT 內部使用,請勿外傳。


🔖 版本資訊

  • 版本: V1.0
  • 更新日期: 2025-08-28
  • Python: 3.11+
  • Node.js: 18.0+
  • 資料庫: MySQL 8.0

如有問題請聯繫 IT 部門或查看相關文檔。

Description
No description provided
Readme 336 KiB
Languages
TypeScript 59.7%
Python 35.9%
HTML 1.4%
Batchfile 0.8%
CSS 0.8%
Other 1.4%