// 评委管理 API const GRAPHQL_ENDPOINT = 'http://localhost:8080/api/graphql'; // GraphQL 查询语句 const GET_ALL_JUDGES_QUERY = ` query GetAllJudges { judges { id name description title company phone gender specialties { id name code } avatarUrl } } `; const GET_JUDGE_QUERY = ` query GetJudge($id: ID!) { judge(id: $id) { id name description title company phone gender specialties { id name code } avatarUrl } } `; const SAVE_JUDGE_MUTATION = ` mutation SaveJudge($input: JudgeInput!) { saveJudge(input: $input) { id name phone gender description } } `; const DELETE_JUDGE_MUTATION = ` mutation DeleteJudge($id: ID!) { deleteJudge(id: $id) } `; const GET_TAGS_QUERY = ` query GetTags { tags { id name code category } } `; const GET_TAGS_BY_CATEGORY_QUERY = ` query GetTagsByCategory($category: String!) { tagsByCategory(category: $category) { id name code } } `; const SAVE_MEDIA_MUTATION = ` mutation SaveMedia($input: MediaInput!) { saveMedia(input: $input) { id name path fullUrl } } `; // GraphQL 请求函数 const graphqlRequest = async (query, variables = {}) => { const response = await fetch(GRAPHQL_ENDPOINT, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ query, variables }) }); const result = await response.json(); if (result.errors) { throw new Error(result.errors[0].message); } return result.data; }; // API 函数 export const getAllJudges = async () => { const data = await graphqlRequest(GET_ALL_JUDGES_QUERY); return data.judges || []; }; export const getJudge = async (id) => { const data = await graphqlRequest(GET_JUDGE_QUERY, { id }); return data.judge; }; // JudgeApi 对象 export const JudgeApi = { // 获取所有评委 getJudges: async () => { const data = await graphqlRequest(GET_ALL_JUDGES_QUERY); return data.judges || []; }, // 获取单个评委 getJudge: async (id) => { const data = await graphqlRequest(GET_JUDGE_QUERY, { id }); return data.judge; }, // 搜索评委 searchJudges: async (name) => { // 先获取所有评委,然后在客户端过滤(实际项目中应该在后端实现) const judges = await JudgeApi.getJudges(); return judges.filter(judge => judge.name && judge.name.toLowerCase().includes(name.toLowerCase()) ); }, // 保存评委 saveJudge: async (input) => { const data = await graphqlRequest(SAVE_JUDGE_MUTATION, { input }); return data.saveJudge; }, // 删除评委 deleteJudge: async (id) => { const data = await graphqlRequest(DELETE_JUDGE_MUTATION, { id }); return data.deleteJudge; }, // 获取所有标签 getTags: async () => { const data = await graphqlRequest(GET_TAGS_QUERY); return data.tags || []; }, // 根据类别获取标签 getTagsByCategory: async (category) => { const data = await graphqlRequest(GET_TAGS_BY_CATEGORY_QUERY, { category }); return data.tagsByCategory || []; }, // 保存媒体 saveMedia: async (input) => { const data = await graphqlRequest(SAVE_MEDIA_MUTATION, { input }); return data.saveMedia; } }; // COS上传服务(暂时为空,可以后续实现) export const CosUploadService = { uploadFile: async (file) => { // 这里可以实现COS上传逻辑 throw new Error('COS上传功能暂未实现'); } };