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 |  172 ++++++++++++++++++++++++++------------------------------
 1 files changed, 80 insertions(+), 92 deletions(-)

diff --git a/web/src/api/activity.js b/web/src/api/activity.js
index b704967..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,17 +56,26 @@
         matchTime
         address
         ratingSchemeId
+        playerCount
         playerMax
         state
         stateName
+        sortOrder
         ratingScheme {
           id
           name
         }
       }
+      judges {
+        id
+        name
+        phone
+        description
+        stageIds
+      }
     }
   }
-`;
+`
 
 const GET_ALL_ACTIVITIES_QUERY = `
   query GetAllActivities {
@@ -78,13 +85,15 @@
       name
       state
       stateName
+      sortOrder
+      playerCount
       parent {
         id
         name
       }
     }
   }
-`;
+`
 
 const SAVE_ACTIVITY_MUTATION = `
   mutation SaveActivity($input: ActivityInput!) {
@@ -101,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