// 评委管理 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上传功能暂未实现');
|
}
|
};
|