lrj
3 小时以前 bec58fa7fe4fae2deac88200d8d939e12ec8a08f
web/src/api/projectReview.js
@@ -2,10 +2,10 @@
// GraphQL 查询语句
// 获取进行中的比赛列表(包括阶段)
const GET_ACTIVE_ACTIVITIES_QUERY = `
  query GetActiveActivities {
    allActivities {
// 获取进行中的比赛阶段列表
const GET_ACTIVITY_STAGES_QUERY = `
  query GetActivityStages {
    allActivityStages {
      id
      pid
      name
@@ -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
      }
    }
  }
@@ -121,32 +141,23 @@
// API 函数
/**
 * 获取进行中的比赛阶段列表(state=1且pid>0的比赛阶段)
 * 按比赛分组排序,显示格式为"比赛名 + 阶段名"
 * 获取进行中的比赛阶段列表
 * 后端已经过滤了比赛阶段(pid>0且state=1),直接返回
 */
export const getActiveActivities = async () => {
  try {
    const data = await graphqlRequest(GET_ACTIVE_ACTIVITIES_QUERY)
    console.log('=== 调用 getActiveActivities ===')
    const result = await graphqlRequest(GET_ACTIVITY_STAGES_QUERY)
    console.log('GraphQL 返回数据:', result)
    
    // 过滤出state=1且pid>0的比赛阶段
    const stages = data.allActivities.filter(activity =>
      activity.state === 1 && activity.pid > 0
    )
    // 后端已经过滤了比赛阶段,直接返回
    const activities = result.data.allActivityStages || []
    console.log('处理后的 activities:', activities)
    
    // 按比赛ID(pid)分组排序,确保同一比赛的不同阶段放在一起
    stages.sort((a, b) => {
      // 首先按比赛ID排序
      if (a.pid !== b.pid) {
        return a.pid - b.pid
      }
      // 同一比赛内按阶段ID排序
      return a.id - b.id
    })
    return stages
    return activities
  } catch (error) {
    console.error('获取活动列表失败:', error)
    throw new Error(error.message || '获取活动列表失败')
    console.error('getActiveActivities 错误:', error)
    throw new Error(error.message || '获取比赛阶段失败')
  }
}
@@ -155,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(
@@ -218,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 || '获取项目详情失败')
  }
@@ -230,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)
@@ -259,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 || '获取评委评分明细失败')
  }
}
@@ -271,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 || '提交评分失败')
  }