From f04f35b562760afbac0c477357e2a29f77aec3b9 Mon Sep 17 00:00:00 2001 From: lrj <owen.stl@gmail.com> Date: 星期四, 02 十月 2025 13:51:47 +0800 Subject: [PATCH] fix: 修复评审次数重复显示问题 --- web/src/api/activityPlayer.js | 314 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 301 insertions(+), 13 deletions(-) diff --git a/web/src/api/activityPlayer.js b/web/src/api/activityPlayer.js index 4dd43eb..204ce15 100644 --- a/web/src/api/activityPlayer.js +++ b/web/src/api/activityPlayer.js @@ -1,18 +1,152 @@ -const GRAPHQL_ENDPOINT = '/api/graphql' +import { + mockActivityPlayerDetail, + mockRatingScheme, + mockCurrentJudgeInfo, + mockJudgeRatings, + mockCurrentJudgeRating, + mockAverageScore, + createMockResponse +} from './mockData.js' -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}`) +import { API_CONFIG, graphqlRequest } from '@/config/api' + +// 妯℃嫙鏁版嵁寮�鍏� - 璁剧疆涓簍rue鏃朵娇鐢ㄦā鎷熸暟鎹� +const USE_MOCK_DATA = false + +// 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 = ` @@ -26,12 +160,21 @@ description avatarUrl } + regionInfo { + id + name + fullPath + } activityName + projectName description + feedback + state submissionFiles { id name url + thumbUrl fileExt fileSize mediaType @@ -55,6 +198,11 @@ * 鑾峰彇姣旇禌鎶ュ悕璇︽儏锛堢敤浜庤瘎鍒嗭級 */ export function getActivityPlayerDetail(id) { + if (USE_MOCK_DATA) { + return Promise.resolve(createMockResponse({ + activityPlayerDetail: mockActivityPlayerDetail + })) + } return graphqlRequest(GET_ACTIVITY_PLAYER_DETAIL, { id }) } @@ -68,5 +216,145 @@ * 淇濆瓨姣旇禌鎶ュ悕璇勫垎 */ export function saveActivityPlayerRating(input) { + if (USE_MOCK_DATA) { + console.log('妯℃嫙淇濆瓨璇勫垎鏁版嵁:', input) + return Promise.resolve(createMockResponse({ + saveActivityPlayerRating: true + })) + } return graphqlRequest(SAVE_ACTIVITY_PLAYER_RATING, { input }) +} + +const GET_JUDGE_RATINGS_FOR_PLAYER = ` + query GetJudgeRatingsForPlayer($activityPlayerId: ID!) { + judgeRatingsForPlayer(activityPlayerId: $activityPlayerId) { + judgeId + judgeName + totalScore + status + isCurrentJudge + } + } +` + +/** + * 鑾峰彇鎸囧畾閫夋墜鐨勬墍鏈夎瘎濮旇瘎鍒嗙姸鎬� + */ +export function getJudgeRatingsForPlayer(activityPlayerId) { + if (USE_MOCK_DATA) { + return Promise.resolve(createMockResponse({ + judgeRatingsForPlayer: mockJudgeRatings + })) + } + return graphqlRequest(GET_JUDGE_RATINGS_FOR_PLAYER, { activityPlayerId }) +} + +const GET_CURRENT_JUDGE_RATING = ` + query GetCurrentJudgeRating($activityPlayerId: ID!) { + currentJudgeRating(activityPlayerId: $activityPlayerId) { + id + totalScore + status + remark + items { + ratingItemId + ratingItemName + score + weightedScore + } + } + } +` + +/** + * 鑾峰彇褰撳墠璇勫瀵规寚瀹氶�夋墜鐨勮瘎鍒� + */ +export function getCurrentJudgeRating(activityPlayerId) { + if (USE_MOCK_DATA) { + return Promise.resolve(createMockResponse({ + currentJudgeRating: mockCurrentJudgeRating + })) + } + return graphqlRequest(GET_CURRENT_JUDGE_RATING, { activityPlayerId }) +} + +const GET_AVERAGE_SCORE_FOR_PLAYER = ` + query GetAverageScoreForPlayer($activityPlayerId: ID!) { + averageScoreForPlayer(activityPlayerId: $activityPlayerId) + } +` + +/** + * 鑾峰彇鎸囧畾閫夋墜鐨勫钩鍧囧垎 + */ +export function getAverageScoreForPlayer(activityPlayerId) { + if (USE_MOCK_DATA) { + return Promise.resolve(createMockResponse({ + averageScoreForPlayer: mockAverageScore + })) + } + return graphqlRequest(GET_AVERAGE_SCORE_FOR_PLAYER, { activityPlayerId }) +} + +const GET_CURRENT_JUDGE_INFO = ` + query GetCurrentJudgeInfo { + currentJudgeInfo { + judgeId + judgeName + title + company + } + } +` + +/** + * 鑾峰彇褰撳墠璇勫淇℃伅 + */ +export function getCurrentJudgeInfo() { + if (USE_MOCK_DATA) { + return Promise.resolve(createMockResponse({ + currentJudgeInfo: mockCurrentJudgeInfo + })) + } + 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 }) } \ No newline at end of file -- Gitblit v1.8.0