const GRAPHQL_ENDPOINT = '/api/graphql'
|
|
// GraphQL请求函数
|
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 errorText = await response.text();
|
throw new Error(`HTTP error! status: ${response.status}, body: ${errorText}`)
|
}
|
|
const result = await response.json()
|
|
if (result.errors) {
|
throw new Error(result.errors.map(e => e.message).join('\n'))
|
}
|
|
return result.data
|
}
|
|
// --- GraphQL Query Strings ---
|
|
const GET_REGIONS = `
|
query GetRegions($name: String, $state: Int, $page: Int!, $size: Int!) {
|
regions(name: $name, state: $state, page: $page, size: $size) {
|
content { id name pid code level leafFlag fullPath state createTime createUserId updateTime updateUserId version }
|
totalElements totalPages currentPage pageSize
|
}
|
}
|
`
|
|
const GET_ALL_REGIONS = `
|
query GetAllRegions {
|
allRegions { id name pid code level leafFlag fullPath state createTime }
|
}
|
`
|
|
const GET_REGION = `
|
query GetRegion($id: ID!) {
|
region(id: $id) { id name pid code level leafFlag fullPath state createTime createUserId updateTime updateUserId version }
|
}
|
`
|
|
const GET_PROVINCES = `
|
query GetProvinces {
|
provinces { id name pid code level state }
|
}
|
`
|
|
const GET_CITIES = `
|
query GetCities($provinceId: ID!) {
|
cities(provinceId: $provinceId) { id name pid code level state }
|
}
|
`
|
|
const GET_DISTRICTS = `
|
query GetDistricts($cityId: ID!) {
|
districts(cityId: $cityId) { id name pid code level state }
|
}
|
`
|
|
const GET_REGION_CHILDREN = `
|
query GetRegionChildren($parentId: ID!) {
|
regionChildren(parentId: $parentId) { id name pid code level leafFlag state }
|
}
|
`
|
|
const SAVE_REGION = `
|
mutation SaveRegion($input: RegionInput!) {
|
saveRegion(input: $input) { id name pid code level leafFlag fullPath state createTime updateTime version }
|
}
|
`
|
|
const DELETE_REGION = `
|
mutation DeleteRegion($id: ID!) {
|
deleteRegion(id: $id)
|
}
|
`
|
|
const TOGGLE_REGION_STATE = `
|
mutation ToggleRegionState($id: ID!) {
|
toggleRegionState(id: $id) { id name state updateTime }
|
}
|
`
|
|
// --- API Functions ---
|
|
export const RegionApi = {
|
getRegions: async (name, state, page, size) => {
|
const data = await graphqlRequest(GET_REGIONS, { name, state, page, size });
|
return data.regions;
|
},
|
getAllRegions: async () => {
|
const data = await graphqlRequest(GET_ALL_REGIONS);
|
return data.allRegions;
|
},
|
getRegion: async (id) => {
|
const data = await graphqlRequest(GET_REGION, { id });
|
return data.region;
|
},
|
getProvinces: async () => {
|
const data = await graphqlRequest(GET_PROVINCES);
|
return data.provinces || [];
|
},
|
getCities: async (provinceId) => {
|
const data = await graphqlRequest(GET_CITIES, { provinceId });
|
return data.cities || [];
|
},
|
getDistricts: async (cityId) => {
|
const data = await graphqlRequest(GET_DISTRICTS, { cityId });
|
return data.districts || [];
|
},
|
getChildren: async (parentId) => {
|
const data = await graphqlRequest(GET_REGION_CHILDREN, { parentId });
|
return data.regionChildren;
|
},
|
saveRegion: async (input) => {
|
const data = await graphqlRequest(SAVE_REGION, { input });
|
return data.saveRegion;
|
},
|
deleteRegion: async (id) => {
|
const data = await graphqlRequest(DELETE_REGION, { id });
|
return data.deleteRegion;
|
},
|
toggleRegionState: async (id) => {
|
const data = await graphqlRequest(TOGGLE_REGION_STATE, { id });
|
return data.toggleRegionState;
|
}
|
}
|