| | |
| | | // Dashboard API |
| | | const GRAPHQL_ENDPOINT = 'http://localhost:8080/api/graphql'; |
| | | import { graphqlRequest } from '../config/api' |
| | | |
| | | // GraphQL 查询语句 |
| | | // Dashboard 指标查询 |
| | | const GET_DASHBOARD_STATS_QUERY = ` |
| | | query GetDashboardStats { |
| | | dashboardStats { |
| | |
| | | totalJudges |
| | | } |
| | | } |
| | | `; |
| | | ` |
| | | |
| | | // API 函数 |
| | | export const getDashboardStats = async () => { |
| | | const response = await fetch(GRAPHQL_ENDPOINT, { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | }, |
| | | body: JSON.stringify({ |
| | | query: GET_DASHBOARD_STATS_QUERY |
| | | }) |
| | | }); |
| | | |
| | | const result = await response.json(); |
| | | if (result.errors) { |
| | | throw new Error(result.errors[0].message); |
| | | // 报名趋势统计 |
| | | const GET_REGISTRATION_TREND_QUERY = ` |
| | | query RegistrationTrend($days: Int) { |
| | | registrationTrend(days: $days) { |
| | | date |
| | | count |
| | | } |
| | | } |
| | | return result.data.dashboardStats; |
| | | }; |
| | | ` |
| | | |
| | | // 区域报名统计 |
| | | const GET_REGION_REGISTRATION_STATS_QUERY = ` |
| | | query RegistrationRegionStats { |
| | | registrationRegionStats { |
| | | regionId |
| | | regionName |
| | | leafFlag |
| | | count |
| | | } |
| | | } |
| | | ` |
| | | |
| | | export const getDashboardStats = async () => { |
| | | const result = await graphqlRequest(GET_DASHBOARD_STATS_QUERY) |
| | | return result.data.dashboardStats |
| | | } |
| | | |
| | | export const getRegistrationTrend = async (days = 15) => { |
| | | const result = await graphqlRequest(GET_REGISTRATION_TREND_QUERY, { days }) |
| | | return result.data.registrationTrend || [] |
| | | } |
| | | |
| | | export const getRegionRegistrationStats = async () => { |
| | | const result = await graphqlRequest(GET_REGION_REGISTRATION_STATS_QUERY) |
| | | return result.data.registrationRegionStats || [] |
| | | } |