From c4a9cad1c50e89365e2a58b50e259af642ed3b8c Mon Sep 17 00:00:00 2001 From: Codex Assistant <codex@example.com> Date: 星期二, 07 十月 2025 16:12:20 +0800 Subject: [PATCH] feat(review): 调整评审详情展示顺序与样式,描述支持多行,项目信息列宽40/60 fix(auth): 登录页与首页循环跳转保护;api.ts 在登录页不再重定向;401分支在登录页不跳转 fix(router): /login 放行策略优化,避免死循环;评审列表跳转到 /project-review/:id/detail fix(frontend): 补齐 utils/appConfig.ts,避免启动白屏 fix(review): 详情页提交评分缺少stageId时回退使用项目详情的stageId feat(backend): ActivityPlayerDetailResponse.playerInfo 补充 avatarUrl/avatar,服务组装时填充用户头像 chore(dev): 启动脚本注入本地JWT密钥,重启前后端 --- web/src/api/projectReview.js | 74 +++++++++++++++++++++++++++---------- 1 files changed, 54 insertions(+), 20 deletions(-) diff --git a/web/src/api/projectReview.js b/web/src/api/projectReview.js index 37e9148..1002038 100644 --- a/web/src/api/projectReview.js +++ b/web/src/api/projectReview.js @@ -54,6 +54,7 @@ activityName projectName description + stageId submissionFiles { id name @@ -100,12 +101,31 @@ currentJudgeRating(activityPlayerId: $activityPlayerId) { id totalScore - comments - ratingItems { - itemId - itemName + status + remark + items { + ratingItemId + ratingItemName score - maxScore + weightedScore + } + } + } +` + +// 鑾峰彇鎸囧畾璇勫鐨勮瘎鍒嗘槑缁� +const GET_JUDGE_RATING_DETAIL_QUERY = ` + query GetJudgeRatingDetail($activityPlayerId: ID!, $judgeId: ID!) { + judgeRatingDetail(activityPlayerId: $activityPlayerId, judgeId: $judgeId) { + id + totalScore + status + remark + items { + ratingItemId + ratingItemName + score + weightedScore } } } @@ -126,15 +146,17 @@ */ export const getActiveActivities = async () => { try { - const data = await graphqlRequest(GET_ACTIVITY_STAGES_QUERY) + console.log('=== 璋冪敤 getActiveActivities ===') + const result = await graphqlRequest(GET_ACTIVITY_STAGES_QUERY) + console.log('GraphQL 杩斿洖鏁版嵁:', result) // 鍚庣宸茬粡杩囨护浜嗘瘮璧涢樁娈碉紝鐩存帴杩斿洖 - const activities = data.allActivityStages || [] + const activities = result.data.allActivityStages || [] + console.log('澶勭悊鍚庣殑 activities:', activities) - console.log('鑾峰彇鍒扮殑姣旇禌闃舵:', activities) return activities } catch (error) { - console.error('鑾峰彇姣旇禌闃舵澶辫触:', error) + console.error('getActiveActivities 閿欒:', error) throw new Error(error.message || '鑾峰彇姣旇禌闃舵澶辫触') } } @@ -144,13 +166,13 @@ */ export const getCompetitionProjects = async (activityId, page = 0, size = 10) => { try { - const data = await graphqlRequest(GET_COMPETITION_PROJECTS_QUERY, { + const result = await graphqlRequest(GET_COMPETITION_PROJECTS_QUERY, { activityId, page, size }) - const projects = data.activityPlayerApplications || [] + const projects = result.data.activityPlayerApplications || [] // 涓烘瘡涓」鐩幏鍙栬瘎鍒嗙粺璁� const enrichedProjects = await Promise.all( @@ -207,8 +229,8 @@ */ export const getProjectDetail = async (id) => { try { - const data = await graphqlRequest(GET_PROJECT_DETAIL_QUERY, { id }) - return data.activityPlayerDetail + const result = await graphqlRequest(GET_PROJECT_DETAIL_QUERY, { id }) + return result.data.activityPlayerDetail } catch (error) { throw new Error(error.message || '鑾峰彇椤圭洰璇︽儏澶辫触') } @@ -219,10 +241,10 @@ */ export const getRatingStats = async (activityPlayerId) => { try { - const data = await graphqlRequest(GET_RATING_STATS_QUERY, { activityPlayerId }) + const result = await graphqlRequest(GET_RATING_STATS_QUERY, { activityPlayerId }) - const ratings = data.judgeRatingsForPlayer || [] - const averageScore = data.averageScoreForPlayer || 0 + const ratings = result.data.judgeRatingsForPlayer || [] + const averageScore = result.data.averageScoreForPlayer || 0 // 鍙绠楀凡璇勫垎鐨勮瘎濮� const ratedJudges = ratings.filter(rating => rating.hasRated) @@ -248,10 +270,22 @@ */ export const getCurrentJudgeRating = async (activityPlayerId) => { try { - const data = await graphqlRequest(GET_CURRENT_JUDGE_RATING_QUERY, { activityPlayerId }) - return data.currentJudgeRating + const result = await graphqlRequest(GET_CURRENT_JUDGE_RATING_QUERY, { activityPlayerId }) + return result.data.currentJudgeRating } catch (error) { throw new Error(error.message || '鑾峰彇褰撳墠璇勫璇勫垎澶辫触') + } +} + +/** + * 鑾峰彇鎸囧畾璇勫鐨勮瘎鍒嗘槑缁� + */ +export const getJudgeRatingDetail = async (activityPlayerId, judgeId) => { + try { + const result = await graphqlRequest(GET_JUDGE_RATING_DETAIL_QUERY, { activityPlayerId, judgeId }) + return result.data.judgeRatingDetail + } catch (error) { + throw new Error(error.message || '鑾峰彇璇勫璇勫垎鏄庣粏澶辫触') } } @@ -260,8 +294,8 @@ */ export const submitRating = async (ratingInput) => { try { - const data = await graphqlRequest(SUBMIT_RATING_MUTATION, { input: ratingInput }) - return data.saveActivityPlayerRating + const result = await graphqlRequest(SUBMIT_RATING_MUTATION, { input: ratingInput }) + return result.data.saveActivityPlayerRating } catch (error) { throw new Error(error.message || '鎻愪氦璇勫垎澶辫触') } -- Gitblit v1.8.0