完成評審評分機制

This commit is contained in:
2025-09-18 18:34:31 +08:00
parent 2101767690
commit ffa1e45f63
54 changed files with 5730 additions and 709 deletions

147
SCORING-FORM-DEBUG.md Normal file
View File

@@ -0,0 +1,147 @@
# 評分表單調試修復報告
## 問題分析
用戶反映手動評審評分表單無法選擇評審和團隊,經過分析發現以下問題:
### 1. 數據載入問題
- 前端組件嘗試從API載入數據但API回應格式可能不正確
- 缺少適當的錯誤處理和加載狀態指示
### 2. 數據格式不匹配
- API回應的數據結構與前端期望的格式不一致
- 缺少對空數據的處理
## 修復內容
### 1. 增強錯誤處理 (`components/admin/scoring-management.tsx`)
#### 添加調試日誌
```typescript
console.log('🔍 開始載入競賽數據競賽ID:', selectedCompetition.id)
console.log('評審API回應:', judgesData)
console.log('應用API回應:', appsData)
console.log('團隊API回應:', teamsData)
```
#### 改善數據驗證
```typescript
if (judgesData.success && judgesData.data && judgesData.data.judges) {
setCompetitionJudges(judgesData.data.judges)
} else {
console.error('❌ 評審數據載入失敗:', judgesData.message || 'API回應格式錯誤')
setCompetitionJudges([])
}
```
### 2. 添加加載狀態指示
#### 新增狀態管理
```typescript
const [isLoadingData, setIsLoadingData] = useState(false)
```
#### 加載狀態UI
```typescript
{isLoadingData ? (
<SelectItem value="" disabled>
<div className="flex items-center space-x-2">
<Loader2 className="w-4 h-4 animate-spin" />
<span>載入評審中...</span>
</div>
</SelectItem>
) : competitionJudges.length > 0 ? (
// 顯示評審選項
) : (
<SelectItem value="" disabled>
<span className="text-gray-500">暫無評審數據</span>
</SelectItem>
)}
```
### 3. 改善數據映射
#### 修正API數據結構
```typescript
// 評審數據
if (judgesData.success && judgesData.data && judgesData.data.judges) {
setCompetitionJudges(judgesData.data.judges)
}
// 應用數據
if (appsData.success && appsData.data && appsData.data.apps) {
participants.push(...appsData.data.apps.map((app: any) => ({
id: app.id,
name: app.name,
type: 'individual',
creator: app.creator
})))
}
// 團隊數據
if (teamsData.success && teamsData.data && teamsData.data.teams) {
participants.push(...teamsData.data.teams.map((team: any) => ({
id: team.id,
name: team.name,
type: 'team',
creator: team.members && team.members.find((m: any) => m.role === '隊長')?.name || '未知隊長'
})))
}
```
### 4. 創建測試工具
#### 資料庫測試腳本 (`scripts/test-data-loading.js`)
- 直接測試資料庫連接
- 驗證競賽、評審、應用、團隊數據
- 檢查數據關聯性
#### API測試頁面 (`app/test-api/page.tsx`)
- 提供Web界面測試API端點
- 實時查看API回應
- 方便調試數據格式問題
## 測試結果
### 資料庫測試結果
```
🏆 競賽: AA (ID: be47d842-91f1-11f0-8595-bd825523ae01)
👨‍⚖️ 評審: 1 個 (aa - ITBU)
📱 應用: 0 個
👥 團隊: 1 個 (aaa - 隊長: Wu Petty)
📊 評分記錄: 0 個
```
### 發現的問題
1. **競賽有評審和團隊數據**
2. **沒有應用數據** ⚠️ (這可能是正常的,如果競賽只允許團隊參賽)
3. **API端點存在且正常**
## 使用方式
### 1. 測試API端點
訪問 `http://localhost:3000/test-api` 來測試API回應
### 2. 查看調試日誌
打開瀏覽器開發者工具的Console查看詳細的載入日誌
### 3. 檢查數據載入
- 選擇競賽後查看Console中的載入日誌
- 確認API回應格式正確
- 檢查是否有錯誤訊息
## 下一步建議
1. **檢查競賽設置**:確認競賽是否正確配置了評審和參賽者
2. **驗證API回應**使用測試頁面檢查API是否返回正確數據
3. **檢查網路請求**在瀏覽器Network標籤中查看API請求狀態
4. **添加更多調試信息**:如果問題持續,可以添加更詳細的日誌
## 技術特點
- **完整的錯誤處理**防止因API失敗導致的界面崩潰
- **用戶友好的加載狀態**:清楚顯示數據載入進度
- **詳細的調試信息**:便於問題排查和修復
- **測試工具**:提供多種方式驗證系統狀態
修復完成後,評分表單應該能夠正確載入和顯示評審及參賽者選項。