Initial commit: HR Position System

- Database schema with MySQL support
- LLM API integration (Gemini 2.5 Flash, DeepSeek, OpenAI)
- Error handling with copyable error messages
- CORS fix for API calls
- Complete setup documentation

🤖 Generated with Claude Code
https://claude.com/claude-code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-04 00:46:53 +08:00
commit 29c1633e49
13 changed files with 6184 additions and 0 deletions

438
SETUP.md Normal file
View File

@@ -0,0 +1,438 @@
# HR 基礎資料維護系統 - 安裝與配置指南
## 📋 目錄
1. [系統需求](#系統需求)
2. [環境配置](#環境配置)
3. [資料庫設置](#資料庫設置)
4. [Gitea 版本控制設置](#gitea-版本控制設置)
5. [LLM API 配置](#llm-api-配置)
6. [啟動系統](#啟動系統)
7. [功能測試](#功能測試)
8. [常見問題](#常見問題)
---
## 系統需求
### 軟體需求
- **Python**: 3.8 或更高版本
- **MySQL**: 5.7 或更高版本
- **Git**: 2.0 或更高版本 (用於版本控制)
- **現代瀏覽器**: Chrome, Firefox, Edge (最新版本)
### 硬體需求
- **記憶體**: 最少 2GB RAM
- **硬碟**: 最少 500MB 可用空間
- **網路**: 穩定的網際網路連線 (用於 LLM API)
---
## 環境配置
### 1. 複製或下載項目
```bash
cd d:/00001_Vibe_coding/1204剛為
```
### 2. 創建虛擬環境 (建議)
```bash
# Windows
python -m venv venv
venv\Scripts\activate
# Linux/Mac
python3 -m venv venv
source venv/bin/activate
```
### 3. 安裝依賴套件
```bash
pip install -r requirements_full.txt
```
如果出現錯誤,可以嘗試逐個安裝:
```bash
pip install flask flask-cors pymysql python-dotenv requests gitpython
```
### 4. 配置環境變數
項目根目錄下已有 [.env](./.env) 文件,請根據實際情況修改:
```env
# MySQL Database Configuration
DB_HOST=mysql.theaken.com
DB_PORT=33306
DB_NAME=db_A102
DB_USER=A102
DB_PASSWORD=Bb123456
# Gitea Version Control Configuration
GITEA_URL=https://gitea.theaken.com/
GITEA_USER=donald
GITEA_PASSWORD=!QAZ2wsx
GITEA_TOKEN=9e0a888d1a25bde9cf2ad5dff2bb7ee6d68d6ff0
# LLM API Keys (需要自行申請並填寫)
GEMINI_API_KEY=your_gemini_api_key_here
DEEPSEEK_API_KEY=your_deepseek_api_key_here
OPENAI_API_KEY=your_openai_api_key_here
```
⚠️ **重要**: `.env` 文件包含敏感資訊,已加入 `.gitignore`,請勿上傳到版本控制系統。
---
## 資料庫設置
### 1. 測試資料庫連線
```bash
python init_database.py
```
此腳本會:
- 測試資料庫連線
- 創建 `hr_position_system` 資料庫架構
- 建立所有必要的資料表
- 插入參照資料
### 2. 驗證資料表
成功執行後,應該會看到以下資料表:
- `positions` - 崗位基礎資料表
- `jobs` - 職務基礎資料表
- `job_descriptions` - 崗位描述表
- `reference_codes` - 參照資料代碼表
- `audit_logs` - 審計日誌表
### 3. 手動執行 SQL (可選)
如果自動腳本失敗,可以手動執行:
```bash
# 使用 MySQL 客戶端
mysql -h mysql.theaken.com -P 33306 -u A102 -p db_A102 < database_schema.sql
```
---
## Gitea 版本控制設置
### 1. 測試 Gitea 連線
```bash
python init_gitea.py
```
此腳本會:
- 測試 Gitea 伺服器連線
- 創建新的 Git 倉庫 (如果不存在)
- 配置本地 Git remote
- 創建初始提交
### 2. 推送到 Gitea
```bash
git push -u origin main
```
### 3. 訪問 Gitea 倉庫
在瀏覽器中訪問: [https://gitea.theaken.com/donald/hr-position-system](https://gitea.theaken.com/donald/hr-position-system)
---
## LLM API 配置
系統支援三種 LLM API:
### 1. Google Gemini
1. 訪問 [Google AI Studio](https://makersuite.google.com/app/apikey)
2. 創建 API Key
3. 將 API Key 填入 `.env` 文件的 `GEMINI_API_KEY`
### 2. DeepSeek
1. 訪問 [DeepSeek 官網](https://www.deepseek.com/)
2. 註冊並獲取 API Key
3. 將 API Key 填入 `.env` 文件的 `DEEPSEEK_API_KEY`
### 3. OpenAI
1. 訪問 [OpenAI Platform](https://platform.openai.com/api-keys)
2. 創建 API Key
3. 將 API Key 填入 `.env` 文件的 `OPENAI_API_KEY`
### 4. 測試 LLM API
```bash
python llm_config.py
```
此腳本會測試所有已配置的 API 連線狀態。
---
## 啟動系統
### 方法 1: 使用更新版的 app (包含 LLM 功能)
```bash
# 備份原有的 app.py
mv app.py app_original.py
# 使用新版 app
mv app_updated.py app.py
# 啟動系統
python app.py
```
### 方法 2: 直接使用更新版
```bash
python app_updated.py
```
### 啟動成功
您應該會看到類似以下的輸出:
```
╔══════════════════════════════════════════════════════════════╗
║ HR 基礎資料維護系統 - Flask Backend ║
╠══════════════════════════════════════════════════════════════╣
║ 伺服器啟動中... ║
║ 訪問網址: http://localhost:5000 ║
...
╚══════════════════════════════════════════════════════════════╝
✓ LLM 功能已啟用
已配置的 API: gemini, deepseek, openai
```
---
## 功能測試
### 1. 訪問主頁面
在瀏覽器中打開: [http://localhost:5000](http://localhost:5000)
### 2. 測試 LLM API 連線
訪問 API 測試頁面: [http://localhost:5000/api-test](http://localhost:5000/api-test)
在此頁面可以:
- 查看所有 LLM API 配置狀態
- 單獨測試每個 API 連線
- 一次測試所有 API
### 3. 測試 REST API
使用 Postman 或 curl 測試 API:
```bash
# 獲取崗位列表
curl http://localhost:5000/api/positions
# 獲取職務列表
curl http://localhost:5000/api/jobs
# 測試 LLM API 配置
curl http://localhost:5000/api/llm/config
# 測試 Gemini API
curl http://localhost:5000/api/llm/test/gemini
```
### 4. 測試崗位資料 CRUD
1. **新增崗位**: 點擊「新增崗位」按鈕
2. **填寫表單**: 輸入崗位基本資料
3. **AI 自動填充**: 點擊「✨ I'm feeling lucky」按鈕
4. **保存資料**: 點擊「保存並退出」
### 5. 測試錯誤處理
系統已集成全局錯誤處理:
- 所有 API 錯誤會自動顯示錯誤對話框
- 網路錯誤會有友好的提示訊息
- 可以在瀏覽器控制台查看詳細錯誤信息
---
## 常見問題
### Q1: 資料庫連線失敗
**問題**: 執行 `init_database.py` 時出現連線錯誤
**解決方案**:
1. 檢查 `.env` 文件中的資料庫配置是否正確
2. 確認資料庫伺服器是否可訪問:
```bash
ping mysql.theaken.com
```
3. 檢查防火牆是否阻擋了 33306 端口
4. 確認資料庫用戶名和密碼正確
### Q2: Gitea 推送失敗
**問題**: `git push` 時要求輸入密碼
**解決方案**:
1. 使用 Token 進行認證:
```bash
git remote set-url origin https://donald:9e0a888d1a25bde9cf2ad5dff2bb7ee6d68d6ff0@gitea.theaken.com/donald/hr-position-system.git
```
2. 或配置 Git credential helper
### Q3: LLM API 測試失敗
**問題**: LLM API 連線測試顯示失敗
**解決方案**:
1. 檢查 API Key 是否正確填寫在 `.env` 文件中
2. 確認 API Key 是否有效 (未過期)
3. 檢查網路連線是否正常
4. 查看是否有 API 配額限制
### Q4: 端口被占用
**問題**: 啟動 Flask 時提示 `Address already in use`
**解決方案**:
1. 更改端口:
```python
app.run(host='0.0.0.0', port=5001, debug=True)
```
2. 或關閉占用 5000 端口的進程:
```bash
# Windows
netstat -ano | findstr :5000
taskkill /PID <PID> /F
# Linux/Mac
lsof -i :5000
kill -9 <PID>
```
### Q5: 前端頁面無法訪問
**問題**: 瀏覽器顯示 404 Not Found
**解決方案**:
1. 確認 Flask 已正確啟動
2. 檢查 `index.html` 是否存在於項目根目錄
3. 清除瀏覽器緩存並重新載入
### Q6: LLM 功能未啟用
**問題**: 系統提示「LLM 功能未啟用」
**解決方案**:
1. 確認 `llm_config.py` 文件存在
2. 確認已安裝 `requests` 套件:
```bash
pip install requests
```
3. 使用 `app_updated.py` 而非原始的 `app.py`
---
## 系統架構
```
┌─────────────────────────────────────────┐
│ 使用者瀏覽器 │
│ ┌───────────────────────────────────┐ │
│ │ index.html (主應用) │ │
│ │ api_test.html (API測試頁) │ │
│ │ error_handler.js (錯誤處理) │ │
│ └───────────────────────────────────┘ │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ Flask Backend (app.py) │
│ ┌───────────────────────────────────┐ │
│ │ 崗位資料 API │ │
│ │ 職務資料 API │ │
│ │ 參照資料 API │ │
│ │ LLM API (llm_config.py) │ │
│ └───────────────────────────────────┘ │
└─────────────────────────────────────────┘
┌─────┴─────┐
▼ ▼
┌──────────┐ ┌──────────┐
│ MySQL │ │ LLM APIs │
│ Database │ │ (Gemini, │
│ │ │ DeepSeek,│
│ │ │ OpenAI) │
└──────────┘ └──────────┘
```
---
## 檔案說明
| 檔案 | 說明 |
|------|------|
| `.env` | 環境變數配置 |
| `.gitignore` | Git 忽略檔案配置 |
| `database_schema.sql` | MySQL 資料庫架構 |
| `init_database.py` | 資料庫初始化腳本 |
| `init_gitea.py` | Gitea 倉庫初始化腳本 |
| `llm_config.py` | LLM API 配置模組 |
| `app.py` | Flask 後端主程式 (原始版) |
| `app_updated.py` | Flask 後端主程式 (包含 LLM) |
| `error_handler.js` | 全局錯誤處理模組 |
| `api_test.html` | LLM API 測試頁面 |
| `index.html` | 主應用頁面 |
| `requirements_full.txt` | Python 依賴套件列表 |
| `SDD.md` | 軟體設計文件 |
| `SETUP.md` | 本安裝指南 |
---
## 技術支援
如遇到問題,請:
1. 查看瀏覽器控制台的錯誤訊息
2. 檢查 Flask 終端的錯誤日誌
3. 參考本文檔的[常見問題](#常見問題)章節
4. 查看系統設計文件 `SDD.md`
---
## 更新日誌
### Version 1.0 (2024-12-03)
- ✅ 初始版本發布
- ✅ 資料庫架構設計與初始化
- ✅ Gitea 版本控制整合
- ✅ LLM API 整合 (Gemini, DeepSeek, OpenAI)
- ✅ 全局錯誤處理機制
- ✅ API 測試頁面
- ✅ 環境配置自動化
---
**文件版本**: 1.0
**最後更新**: 2024-12-03
**維護者**: HR System Development Team