import { Client, cacheExchange, fetchExchange } from '@urql/vue'
|
|
// GraphQL 客户端配置
|
export const graphqlClient = new Client({
|
url: 'http://localhost:8080/api/graphql',
|
exchanges: [cacheExchange, fetchExchange],
|
})
|
|
// GraphQL 查询和变更
|
export const JUDGE_QUERIES = {
|
// 获取所有评委
|
GET_JUDGES: `
|
query GetJudges {
|
judges {
|
id
|
name
|
phone
|
gender
|
description
|
avatarUrl
|
specialties {
|
id
|
name
|
code
|
}
|
}
|
}
|
`,
|
|
// 根据姓名搜索评委
|
SEARCH_JUDGES: `
|
query SearchJudges($name: String!) {
|
judgesByName(name: $name) {
|
id
|
name
|
phone
|
gender
|
description
|
avatarUrl
|
specialties {
|
id
|
name
|
code
|
}
|
}
|
}
|
`,
|
|
// 获取评委详情
|
GET_JUDGE: `
|
query GetJudge($id: ID!) {
|
judge(id: $id) {
|
id
|
name
|
phone
|
gender
|
description
|
avatarUrl
|
specialties {
|
id
|
name
|
code
|
}
|
}
|
}
|
`,
|
|
// 获取上传凭证
|
GET_UPLOAD_CREDENTIALS: `
|
query GetUploadCredentials {
|
getUploadCredentials {
|
bucket
|
region
|
key
|
presignedUrl
|
expiration
|
}
|
}
|
`,
|
|
// 获取所有标签
|
GET_TAGS: `
|
query GetTags {
|
tags {
|
id
|
name
|
code
|
}
|
}
|
`,
|
|
// 根据分类获取标签
|
GET_TAGS_BY_CATEGORY: `
|
query GetTagsByCategory($category: String!) {
|
tagsByCategory(category: $category) {
|
id
|
name
|
code
|
}
|
}
|
`
|
}
|
|
export const JUDGE_MUTATIONS = {
|
// 保存评委
|
SAVE_JUDGE: `
|
mutation SaveJudge($input: JudgeInput!) {
|
saveJudge(input: $input) {
|
id
|
name
|
phone
|
gender
|
description
|
specialties {
|
id
|
name
|
code
|
}
|
}
|
}
|
`,
|
|
// 删除评委
|
DELETE_JUDGE: `
|
mutation DeleteJudge($id: ID!) {
|
deleteJudge(id: $id)
|
}
|
`,
|
|
// 保存媒体信息
|
SAVE_MEDIA: `
|
mutation SaveMedia($input: MediaInput!) {
|
saveMedia(input: $input) {
|
id
|
name
|
path
|
fileSize
|
fileExt
|
mediaType
|
targetType
|
targetId
|
}
|
}
|
`
|
}
|
|
// 类型定义
|
export interface Judge {
|
id: string
|
name: string
|
phone?: string
|
gender?: number
|
description?: string
|
avatarUrl?: string
|
specialties?: Tag[]
|
}
|
|
export interface Tag {
|
id: string
|
name: string
|
code: string
|
}
|
|
export interface JudgeInput {
|
id?: string
|
name: string
|
phone?: string
|
gender?: number
|
description?: string
|
avatarMediaId?: string
|
specialtyIds?: string[]
|
majorIds?: number[]
|
}
|
|
export interface CosCredentials {
|
bucket: string
|
region: string
|
key: string
|
presignedUrl: string
|
expiration: string
|
}
|
|
export interface Media {
|
id: string
|
fileName: string
|
filePath: string
|
fileSize?: number
|
fileType?: string
|
storageType?: string
|
bucketName?: string
|
region?: string
|
}
|