From 4fa9591629721797386fc11836e3a9deb69cd58c Mon Sep 17 00:00:00 2001 From: lrj <owen.stl@gmail.com> Date: 星期三, 24 九月 2025 17:00:37 +0800 Subject: [PATCH] 修改评分逻辑,支持多个评委 --- web/src/views/activity-player/rating.vue | 121 ++++++++++++++++++++++++++++++++++++---- 1 files changed, 109 insertions(+), 12 deletions(-) diff --git a/web/src/views/activity-player/rating.vue b/web/src/views/activity-player/rating.vue index d21ea7b..d6aa53a 100644 --- a/web/src/views/activity-player/rating.vue +++ b/web/src/views/activity-player/rating.vue @@ -30,9 +30,13 @@ <!-- 鍙充晶闈㈡澘锛氳瘎鍒嗚〃鍗� --> <div class="right-panel"> <RatingForm - v-if="detail.ratingForm" - :rating-form="detail.ratingForm" + v-if="ratingScheme" + :rating-form="ratingScheme" :activity-player-id="detail.id" + :current-judge-name="currentJudgeInfo?.name" + :judge-ratings="judgeRatings" + :average-score="averageScore" + :existing-rating="currentJudgeRating" @submit="handleRatingSubmit" /> <div v-else class="no-rating"> @@ -51,7 +55,14 @@ import { ref, onMounted } from 'vue' import { useRoute } from 'vue-router' import { ElMessage, ElSkeleton, ElEmpty } from 'element-plus' -import { getActivityPlayerDetail, saveActivityPlayerRating } from '@/api/activityPlayer' +import { + getActivityPlayerDetail, + saveActivityPlayerRating, + getJudgeRatingsForPlayer, + getCurrentJudgeRating, + getAverageScoreForPlayer, + getCurrentJudgeInfo +} from '@/api/activityPlayer' import PlayerInfoCard from '@/components/PlayerInfoCard.vue' import SubmissionFiles from '@/components/SubmissionFiles.vue' import RatingForm from '@/components/RatingForm.vue' @@ -59,16 +70,97 @@ const route = useRoute() const loading = ref(true) const detail = ref(null) +const ratingScheme = ref(null) +const currentJudgeInfo = ref(null) +const judgeRatings = ref([]) +const currentJudgeRating = ref(null) +const averageScore = ref(0) const loadDetail = async () => { try { loading.value = true - const id = route.params.id - const response = await getActivityPlayerDetail(id) + const response = await getActivityPlayerDetail(route.params.id) + console.log('API鍝嶅簲:', response) + + // 妫�鏌ュ搷搴旀暟鎹粨鏋� + if (!response) { + throw new Error('API鍝嶅簲鏁版嵁涓虹┖') + } + + if (!response.activityPlayerDetail) { + throw new Error('鏈壘鍒伴�夋墜璇︽儏鏁版嵁') + } + detail.value = response.activityPlayerDetail + + // 浣跨敤浠庡悗绔幏鍙栫殑鐪熷疄璇勫垎妯℃澘鏁版嵁 + if (detail.value.ratingForm) { + ratingScheme.value = { + schemeId: detail.value.ratingForm.schemeId, + schemeName: detail.value.ratingForm.schemeName, + items: detail.value.ratingForm.items || [], + totalMaxScore: detail.value.ratingForm.totalMaxScore || 0 + } + console.log('浣跨敤鐪熷疄璇勫垎妯℃澘鏁版嵁:', ratingScheme.value) + } else { + console.warn('鏈壘鍒拌瘎鍒嗘ā鏉挎暟鎹紝浣跨敤榛樿妯℃澘') + // 濡傛灉娌℃湁璇勫垎妯℃澘鏁版嵁锛屼娇鐢ㄩ粯璁ゆā鏉� + ratingScheme.value = { + schemeId: "1", + schemeName: "榛樿璇勫垎鏍囧噯", + items: [ + { id: "1", name: "缁煎悎璇勫垎", maxScore: 100, orderNo: 1 } + ], + totalMaxScore: 100 + } + } + + // 鑾峰彇褰撳墠璇勫淇℃伅 + try { + const judgeInfoResponse = await getCurrentJudgeInfo() + console.log('璇勫淇℃伅鍝嶅簲:', judgeInfoResponse) + if (judgeInfoResponse && judgeInfoResponse.currentJudgeInfo) { + currentJudgeInfo.value = judgeInfoResponse.currentJudgeInfo + } + } catch (error) { + console.error('鑾峰彇璇勫淇℃伅澶辫触:', error) + } + + // 鑾峰彇鎵�鏈夎瘎濮旇瘎鍒嗙姸鎬� + try { + const judgeRatingsResponse = await getJudgeRatingsForPlayer(route.params.id) + console.log('璇勫璇勫垎鐘舵�佸搷搴�:', judgeRatingsResponse) + if (judgeRatingsResponse && judgeRatingsResponse.judgeRatingsForPlayer) { + judgeRatings.value = judgeRatingsResponse.judgeRatingsForPlayer + } + } catch (error) { + console.error('鑾峰彇璇勫璇勫垎鐘舵�佸け璐�:', error) + } + + // 鑾峰彇褰撳墠璇勫鐨勮瘎鍒� + try { + const currentRatingResponse = await getCurrentJudgeRating(route.params.id) + console.log('褰撳墠璇勫璇勫垎鍝嶅簲:', currentRatingResponse) + if (currentRatingResponse && currentRatingResponse.currentJudgeRating) { + currentJudgeRating.value = currentRatingResponse.currentJudgeRating + } + } catch (error) { + console.error('鑾峰彇褰撳墠璇勫璇勫垎澶辫触:', error) + } + + // 鑾峰彇骞冲潎鍒� + try { + const averageScoreResponse = await getAverageScoreForPlayer(route.params.id) + console.log('骞冲潎鍒嗗搷搴�:', averageScoreResponse) + if (averageScoreResponse && averageScoreResponse.averageScoreForPlayer !== undefined) { + averageScore.value = averageScoreResponse.averageScoreForPlayer + } + } catch (error) { + console.error('鑾峰彇骞冲潎鍒嗗け璐�:', error) + } } catch (error) { - console.error('鍔犺浇鎶ュ悕璇︽儏澶辫触:', error) - ElMessage.error('鍔犺浇鎶ュ悕璇︽儏澶辫触') + console.error('鍔犺浇璇︽儏澶辫触:', error) + ElMessage.error('鍔犺浇璇︽儏澶辫触') } finally { loading.value = false } @@ -78,13 +170,15 @@ try { console.log('璇勫垎鎻愪氦:', ratingData) - // 鏋勯�犳彁浜ゆ暟鎹� + // 鏋勯�犳彁浜ゆ暟鎹� - 灏� scores 瀵硅薄杞崲涓� ratings 鏁扮粍 + const ratings = Object.entries(ratingData.scores || {}).map(([itemId, score]) => ({ + itemId: parseInt(itemId), + score: score + })) + const input = { activityPlayerId: detail.value.id, - ratings: ratingData.ratings.map(item => ({ - itemId: item.itemId, - score: item.score - })), + ratings: ratings, comment: ratingData.comment || '' } @@ -93,6 +187,9 @@ if (result.saveActivityPlayerRating) { ElMessage.success('璇勫垎鎻愪氦鎴愬姛') + + // 閲嶆柊鍔犺浇鏁版嵁浠ユ洿鏂拌瘎鍒嗙姸鎬� + await loadDetail() } else { ElMessage.error('璇勫垎鎻愪氦澶辫触') } -- Gitblit v1.8.0