From ba94ceae1315174798ae1967ef62268c6d16cd5b Mon Sep 17 00:00:00 2001 From: Codex Assistant <codex@example.com> Date: 星期一, 06 十月 2025 22:07:06 +0800 Subject: [PATCH] feat: 评审与活动相关改动 - backend(GraphQL): Activity schema 增加 updateActivityState(id, state);实现 resolver/service 仅更新 state=2 作为逻辑删除 - backend(GraphQL): region.graphqls 新增 Query leafRegions - backend(GraphQL): player.graphqls 的 projectReviewApplications 增加可选参数 regionId - backend(Service): listProjectReviewApplications 绑定 regionId 参数,修复 QueryParameterException - frontend(web): 新增 api/activity.js 的 updateActivityState 并接入 activity-list 删除逻辑 - frontend(web): review-list.vue 权限仅校验登录,移除角色限制;查询参数修正为 name/regionId - frontend(web): 删除未引用的 ActivityList.vue - frontend(web): projectReviewNew.js GraphQL 查询增加 name 参数 --- web/src/api/activity.js | 165 ++++++++++++++++++++++++------------------------------ 1 files changed, 73 insertions(+), 92 deletions(-) diff --git a/web/src/api/activity.js b/web/src/api/activity.js index 9039862..8c42f87 100644 --- a/web/src/api/activity.js +++ b/web/src/api/activity.js @@ -1,11 +1,11 @@ // 姣旇禌绠$悊 API -const GRAPHQL_ENDPOINT = 'http://localhost:8080/api/graphql'; +import { API_CONFIG, graphqlRequest } from '@/config/api' // GraphQL 鏌ヨ璇彞 const GET_ACTIVITIES_QUERY = ` - query GetActivities($page: Int!, $size: Int!, $name: String) { - activities(page: $page, size: $size, name: $name) { + query GetActivities($page: Int!, $size: Int!, $name: String, $state: Int) { + activities(page: $page, size: $size, name: $name, state: $state) { content { id name @@ -13,22 +13,19 @@ signupDeadline matchTime address + playerCount playerMax state stateName - playerCount createTime - ratingScheme { - id - name - } + updateTime } totalElements page size } } -`; +` const GET_ACTIVITY_QUERY = ` query GetActivity($id: ID!) { @@ -41,6 +38,7 @@ matchTime address ratingSchemeId + playerCount playerMax state stateName @@ -58,9 +56,11 @@ matchTime address ratingSchemeId + playerCount playerMax state stateName + sortOrder ratingScheme { id name @@ -75,7 +75,7 @@ } } } -`; +` const GET_ALL_ACTIVITIES_QUERY = ` query GetAllActivities { @@ -85,13 +85,15 @@ name state stateName + sortOrder + playerCount parent { id name } } } -`; +` const SAVE_ACTIVITY_MUTATION = ` mutation SaveActivity($input: ActivityInput!) { @@ -108,105 +110,84 @@ stateName } } -`; +` const DELETE_ACTIVITY_MUTATION = ` mutation DeleteActivity($id: ID!) { deleteActivity(id: $id) } -`; +` + +const UPDATE_ACTIVITY_STATE_MUTATION = ` + mutation UpdateActivityState($id: ID!, $state: Int!) { + updateActivityState(id: $id, state: $state) + } +` // API 鍑芥暟 -export const getActivities = async (page = 0, size = 10, name = '') => { - const response = await fetch(GRAPHQL_ENDPOINT, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query: GET_ACTIVITIES_QUERY, - variables: { page, size, name } - }) - }); +export const getActivities = async (page = 0, size = 10, name = '', state) => { + try { + const variables = { + page, + size, + name + } - const result = await response.json(); - if (result.errors) { - throw new Error(result.errors[0].message); + if (state !== undefined && state !== null && state !== '') { + variables.state = Number(state) + } + + const result = await graphqlRequest(GET_ACTIVITIES_QUERY, variables) + return result.data.activities + } catch (error) { + console.error('鑾峰彇姣旇禌鍒楄〃澶辫触:', error) + throw new Error(error && error.message ? error.message : '鑾峰彇姣旇禌鍒楄〃澶辫触') } - return result.data.activities; -}; +} export const getActivity = async (id) => { - const response = await fetch(GRAPHQL_ENDPOINT, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query: GET_ACTIVITY_QUERY, - variables: { id } - }) - }); - - const result = await response.json(); - if (result.errors) { - throw new Error(result.errors[0].message); + try { + const result = await graphqlRequest(GET_ACTIVITY_QUERY, { id }) + return result.data.activity + } catch (error) { + throw new Error(error && error.message ? error.message : '鑾峰彇姣旇禌璇︽儏澶辫触') } - return result.data.activity; -}; +} export const getAllActivities = async () => { - const response = await fetch(GRAPHQL_ENDPOINT, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query: GET_ALL_ACTIVITIES_QUERY - }) - }); - - const result = await response.json(); - if (result.errors) { - throw new Error(result.errors[0].message); + try { + const result = await graphqlRequest(GET_ALL_ACTIVITIES_QUERY) + return result.data.allActivities + } catch (error) { + console.error('鑾峰彇鎵�鏈夋瘮璧涘け璐�:', error) + throw new Error(error && error.message ? error.message : '鑾峰彇鎵�鏈夋瘮璧涘け璐�') } - return result.data.allActivities; -}; +} export const saveActivity = async (activityData) => { - const response = await fetch(GRAPHQL_ENDPOINT, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query: SAVE_ACTIVITY_MUTATION, - variables: { input: activityData } - }) - }); - - const result = await response.json(); - if (result.errors) { - throw new Error(result.errors[0].message); + try { + const data = await graphqlRequest(SAVE_ACTIVITY_MUTATION, { input: activityData }) + return data.data.saveActivity + } catch (error) { + console.error('淇濆瓨姣旇禌澶辫触:', error) + throw new Error(error && error.message ? error.message : '淇濆瓨姣旇禌澶辫触') } - return result.data.saveActivity; -}; +} export const deleteActivity = async (id) => { - const response = await fetch(GRAPHQL_ENDPOINT, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query: DELETE_ACTIVITY_MUTATION, - variables: { id } - }) - }); - - const result = await response.json(); - if (result.errors) { - throw new Error(result.errors[0].message); + try { + const data = await graphqlRequest(DELETE_ACTIVITY_MUTATION, { id }) + return data.data.deleteActivity + } catch (error) { + throw new Error(error && error.message ? error.message : '鍒犻櫎姣旇禌澶辫触') } - return result.data.deleteActivity; -}; \ No newline at end of file +} + +export const updateActivityState = async (id, state) => { + try { + const data = await graphqlRequest(UPDATE_ACTIVITY_STATE_MUTATION, { id, state }) + return data.data.updateActivityState + } catch (error) { + throw new Error(error && error.message ? error.message : '鏇存柊姣旇禌鐘舵�佸け璐�') + } +} \ No newline at end of file -- Gitblit v1.8.0