| | |
| | | const GRAPHQL_ENDPOINT = '/api/graphql' |
| | | import { API_CONFIG, graphqlRequest } from '@/config/api' |
| | | |
| | | // GraphQL请求函数 |
| | | async function graphqlRequest(query, variables = {}) { |
| | | const response = await fetch(GRAPHQL_ENDPOINT, { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | }, |
| | | body: JSON.stringify({ |
| | | query, |
| | | variables, |
| | | }), |
| | | }) |
| | | // GraphQL请求函数 - 使用统一的graphqlRequest |
| | | |
| | | if (!response.ok) { |
| | | const errorText = await response.text(); |
| | | throw new Error(`HTTP error! status: ${response.status}, body: ${errorText}`) |
| | | } |
| | | |
| | | const result = await response.json() |
| | | // 获取所有地区 |
| | | export const getRegions = async () => { |
| | | const query = ` |
| | | query GetRegions { |
| | | regions { |
| | | id |
| | | name |
| | | description |
| | | createTime |
| | | updateTime |
| | | } |
| | | } |
| | | ` |
| | | |
| | | if (result.errors) { |
| | | throw new Error(result.errors.map(e => e.message).join('\n')) |
| | | try { |
| | | const data = await graphqlRequest(query) |
| | | return data.regions || [] |
| | | } catch (error) { |
| | | throw new Error(error.message || '获取地区列表失败') |
| | | } |
| | | |
| | | 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 |
| | | // 根据ID获取地区 |
| | | export const getRegion = async (id) => { |
| | | const query = ` |
| | | query GetRegion($id: ID!) { |
| | | region(id: $id) { |
| | | id |
| | | name |
| | | description |
| | | createTime |
| | | updateTime |
| | | } |
| | | } |
| | | ` |
| | | |
| | | try { |
| | | const data = await graphqlRequest(query, { id }) |
| | | return data.region |
| | | } catch (error) { |
| | | throw new Error(error.message || '获取地区详情失败') |
| | | } |
| | | ` |
| | | } |
| | | |
| | | const GET_ALL_REGIONS = ` |
| | | query GetAllRegions { |
| | | allRegions { id name pid code level leafFlag fullPath state createTime } |
| | | // 保存地区(新增或更新) |
| | | export const saveRegion = async (regionData) => { |
| | | const mutation = ` |
| | | mutation SaveRegion($input: RegionInput!) { |
| | | saveRegion(input: $input) { |
| | | id |
| | | name |
| | | description |
| | | createTime |
| | | updateTime |
| | | } |
| | | } |
| | | ` |
| | | |
| | | try { |
| | | const data = await graphqlRequest(mutation, { input: regionData }) |
| | | return data.saveRegion |
| | | } catch (error) { |
| | | throw new Error(error.message || '保存地区失败') |
| | | } |
| | | ` |
| | | } |
| | | |
| | | const GET_REGION = ` |
| | | query GetRegion($id: ID!) { |
| | | region(id: $id) { id name pid code level leafFlag fullPath state createTime createUserId updateTime updateUserId version } |
| | | // 删除地区 |
| | | export const deleteRegion = async (id) => { |
| | | const mutation = ` |
| | | mutation DeleteRegion($id: ID!) { |
| | | deleteRegion(id: $id) |
| | | } |
| | | ` |
| | | |
| | | try { |
| | | const data = await graphqlRequest(mutation, { id }) |
| | | return data.deleteRegion |
| | | } catch (error) { |
| | | throw new Error(error.message || '删除地区失败') |
| | | } |
| | | ` |
| | | } |
| | | |
| | | const GET_PROVINCES = ` |
| | | query GetProvinces { |
| | | provinces { id name pid code level state } |
| | | // 获取所有省份 |
| | | export const getProvinces = async () => { |
| | | const query = ` |
| | | query GetProvinces { |
| | | provinces { |
| | | id |
| | | name |
| | | pid |
| | | level |
| | | } |
| | | } |
| | | ` |
| | | |
| | | try { |
| | | const data = await graphqlRequest(query) |
| | | return data.provinces || [] |
| | | } catch (error) { |
| | | throw new Error(error.message || '获取省份列表失败') |
| | | } |
| | | ` |
| | | } |
| | | |
| | | const GET_CITIES = ` |
| | | query GetCities($provinceId: ID!) { |
| | | cities(provinceId: $provinceId) { id name pid code level state } |
| | | // 根据省份ID获取城市 |
| | | export const getCities = async (provinceId) => { |
| | | const query = ` |
| | | query GetCities($provinceId: ID!) { |
| | | cities(provinceId: $provinceId) { |
| | | id |
| | | name |
| | | pid |
| | | level |
| | | } |
| | | } |
| | | ` |
| | | |
| | | try { |
| | | const data = await graphqlRequest(query, { provinceId }) |
| | | return data.cities || [] |
| | | } catch (error) { |
| | | throw new Error(error.message || '获取城市列表失败') |
| | | } |
| | | ` |
| | | } |
| | | |
| | | const GET_DISTRICTS = ` |
| | | query GetDistricts($cityId: ID!) { |
| | | districts(cityId: $cityId) { id name pid code level state } |
| | | // 根据城市ID获取区县 |
| | | export const getDistricts = async (cityId) => { |
| | | const query = ` |
| | | query GetDistricts($cityId: ID!) { |
| | | districts(cityId: $cityId) { |
| | | id |
| | | name |
| | | pid |
| | | level |
| | | } |
| | | } |
| | | ` |
| | | |
| | | try { |
| | | const data = await graphqlRequest(query, { cityId }) |
| | | return data.districts || [] |
| | | } catch (error) { |
| | | throw new Error(error.message || '获取区县列表失败') |
| | | } |
| | | ` |
| | | } |
| | | |
| | | 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 --- |
| | | |
| | | // RegionApi 对象,包含所有区域相关的API方法 |
| | | 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; |
| | | } |
| | | getRegions, |
| | | getRegion, |
| | | saveRegion, |
| | | deleteRegion, |
| | | getProvinces, |
| | | getCities, |
| | | getDistricts |
| | | } |