| | |
| | | createMockResponse |
| | | } from './mockData.js' |
| | | |
| | | const GRAPHQL_ENDPOINT = '/api/graphql' |
| | | import { API_CONFIG, graphqlRequest } from '@/config/api' |
| | | |
| | | // 模拟数据开关 - 设置为true时使用模拟数据 |
| | | // 已切换到真实数据模式 |
| | | const USE_MOCK_DATA = false |
| | | |
| | | async function graphqlRequest(query, variables = {}) { |
| | | const response = await fetch(GRAPHQL_ENDPOINT, { |
| | | method: 'POST', |
| | | headers: { 'Content-Type': 'application/json' }, |
| | | body: JSON.stringify({ query, variables }) |
| | | }) |
| | | if (!response.ok) { |
| | | const text = await response.text() |
| | | throw new Error(`HTTP ${response.status}: ${text}`) |
| | | // GraphQL查询语句 |
| | | const GET_ACTIVITY_PLAYERS_QUERY = ` |
| | | query GetActivityPlayers($activityId: ID!, $page: Int!, $size: Int!, $name: String) { |
| | | activityPlayers(activityId: $activityId, page: $page, size: $size, name: $name) { |
| | | content { |
| | | id |
| | | playerId |
| | | activityId |
| | | signupTime |
| | | state |
| | | stateName |
| | | player { |
| | | id |
| | | name |
| | | phone |
| | | regionId |
| | | region { |
| | | id |
| | | name |
| | | } |
| | | } |
| | | } |
| | | totalElements |
| | | page |
| | | size |
| | | } |
| | | } |
| | | const result = await response.json() |
| | | if (result.errors) throw new Error(result.errors.map(e => e.message).join('\n')) |
| | | return result.data |
| | | ` |
| | | |
| | | const GET_ACTIVITY_PLAYER_QUERY = ` |
| | | query GetActivityPlayer($id: ID!) { |
| | | activityPlayer(id: $id) { |
| | | id |
| | | playerId |
| | | activityId |
| | | signupTime |
| | | state |
| | | stateName |
| | | player { |
| | | id |
| | | name |
| | | phone |
| | | regionId |
| | | region { |
| | | id |
| | | name |
| | | } |
| | | } |
| | | activity { |
| | | id |
| | | name |
| | | description |
| | | } |
| | | attachments { |
| | | id |
| | | fileName |
| | | fileUrl |
| | | fileSize |
| | | uploadTime |
| | | } |
| | | } |
| | | } |
| | | ` |
| | | |
| | | const SAVE_ACTIVITY_PLAYER_MUTATION = ` |
| | | mutation SaveActivityPlayer($input: ActivityPlayerInput!) { |
| | | saveActivityPlayer(input: $input) { |
| | | id |
| | | playerId |
| | | activityId |
| | | signupTime |
| | | state |
| | | stateName |
| | | } |
| | | } |
| | | ` |
| | | |
| | | const DELETE_ACTIVITY_PLAYER_MUTATION = ` |
| | | mutation DeleteActivityPlayer($id: ID!) { |
| | | deleteActivityPlayer(id: $id) |
| | | } |
| | | ` |
| | | |
| | | // API函数 |
| | | export const getActivityPlayers = async (activityId, page = 0, size = 10, name = '') => { |
| | | if (USE_MOCK_DATA) { |
| | | return mockActivityPlayers |
| | | } |
| | | |
| | | try { |
| | | const data = await graphqlRequest(GET_ACTIVITY_PLAYERS_QUERY, { activityId, page, size, name }) |
| | | return data.activityPlayers |
| | | } catch (error) { |
| | | throw new Error(error.message || '获取比赛报名列表失败') |
| | | } |
| | | } |
| | | |
| | | export const getActivityPlayer = async (id) => { |
| | | if (USE_MOCK_DATA) { |
| | | return mockActivityPlayerDetail |
| | | } |
| | | |
| | | try { |
| | | const data = await graphqlRequest(GET_ACTIVITY_PLAYER_QUERY, { id }) |
| | | return data.activityPlayer |
| | | } catch (error) { |
| | | throw new Error(error.message || '获取比赛报名详情失败') |
| | | } |
| | | } |
| | | |
| | | export const saveActivityPlayer = async (activityPlayerData) => { |
| | | if (USE_MOCK_DATA) { |
| | | return { ...activityPlayerData, id: Date.now().toString() } |
| | | } |
| | | |
| | | try { |
| | | const data = await graphqlRequest(SAVE_ACTIVITY_PLAYER_MUTATION, { input: activityPlayerData }) |
| | | return data.saveActivityPlayer |
| | | } catch (error) { |
| | | throw new Error(error.message || '保存比赛报名失败') |
| | | } |
| | | } |
| | | |
| | | export const deleteActivityPlayer = async (id) => { |
| | | if (USE_MOCK_DATA) { |
| | | return true |
| | | } |
| | | |
| | | try { |
| | | const data = await graphqlRequest(DELETE_ACTIVITY_PLAYER_MUTATION, { id }) |
| | | return data.deleteActivityPlayer |
| | | } catch (error) { |
| | | throw new Error(error.message || '删除比赛报名失败') |
| | | } |
| | | } |
| | | |
| | | const GET_ACTIVITY_PLAYER_DETAIL = ` |
| | |
| | | fullPath |
| | | } |
| | | activityName |
| | | projectName |
| | | description |
| | | feedback |
| | | state |
| | | submissionFiles { |
| | | id |
| | | name |
| | | url |
| | | thumbUrl |
| | | fileExt |
| | | fileSize |
| | | mediaType |
| | |
| | | })) |
| | | } |
| | | return graphqlRequest(GET_CURRENT_JUDGE_INFO) |
| | | } |
| | | |
| | | // 审核相关mutations |
| | | const APPROVE_ACTIVITY_PLAYER = ` |
| | | mutation ApproveActivityPlayer($activityPlayerId: ID!, $feedback: String) { |
| | | approveActivityPlayer(activityPlayerId: $activityPlayerId, feedback: $feedback) |
| | | } |
| | | ` |
| | | |
| | | const REJECT_ACTIVITY_PLAYER = ` |
| | | mutation RejectActivityPlayer($activityPlayerId: ID!, $feedback: String!) { |
| | | rejectActivityPlayer(activityPlayerId: $activityPlayerId, feedback: $feedback) |
| | | } |
| | | ` |
| | | |
| | | const UPDATE_PLAYER_FEEDBACK = ` |
| | | mutation UpdatePlayerFeedback($activityPlayerId: ID!, $feedback: String!) { |
| | | updatePlayerFeedback(activityPlayerId: $activityPlayerId, feedback: $feedback) |
| | | } |
| | | ` |
| | | |
| | | /** |
| | | * 审核通过 |
| | | */ |
| | | export function approveActivityPlayer(activityPlayerId, feedback = '') { |
| | | return graphqlRequest(APPROVE_ACTIVITY_PLAYER, { activityPlayerId, feedback }) |
| | | } |
| | | |
| | | /** |
| | | * 审核驳回 |
| | | */ |
| | | export function rejectActivityPlayer(activityPlayerId, feedback) { |
| | | return graphqlRequest(REJECT_ACTIVITY_PLAYER, { activityPlayerId, feedback }) |
| | | } |
| | | |
| | | /** |
| | | * 更新审核意见 |
| | | */ |
| | | export function updatePlayerFeedback(activityPlayerId, feedback) { |
| | | return graphqlRequest(UPDATE_PLAYER_FEEDBACK, { activityPlayerId, feedback }) |
| | | } |