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; } }