diff --git a/src/api/match/usereventregistration.js b/src/api/match/usereventregistration.js index ce9afa3..9c79f92 100644 --- a/src/api/match/usereventregistration.js +++ b/src/api/match/usereventregistration.js @@ -329,3 +329,18 @@ export const usereventregistrationCheckGroupSelectionLimitPost = (data) => { return http.post('/usereventregistration/check-group-selection-limit', data); }; +/** +* 验证用户报名状态 +* @param {Object} data - 验证信息 +* @param {number} data.eventId - 赛事ID +* @returns {Promise<{ +* isRegistered: boolean, +* registrationId: number, +* registrationStatus: string, +* message: string +* }>} +*/ +export const usereventregistrationRegistrationStatusCheckPost = (data) => { + return http.post('/usereventregistration/registration-status/check', data); +}; + diff --git a/src/views/user/registration/index.vue b/src/views/user/registration/index.vue index 08c2d4d..a722599 100644 --- a/src/views/user/registration/index.vue +++ b/src/views/user/registration/index.vue @@ -452,6 +452,7 @@ import { usereventregistrationRegistrationLimitCheckPost, usereventregistrationGroupTeamLimitGet, usereventregistrationOrderStatusGet, + usereventregistrationRegistrationStatusCheckPost, } from '/@/api/match/usereventregistration'; import { teamPageGet, teamDetailGet } from '/@/api/match/unitUser'; import QRCode from 'qrcodejs2-fixes'; @@ -997,6 +998,21 @@ const openRegistrationDialog = async (row) => { registerLoading.value = true; try { + // 首先验证用户是否已报名该赛事 + const checkStatusRes = await usereventregistrationRegistrationStatusCheckPost({ eventId }); + if (checkStatusRes.succeeded && checkStatusRes.data?.isRegistered) { + // 如果已报名,显示提示并阻止继续 + ElMessageBox.alert( + checkStatusRes.data.message || '您已报名该赛事,请先取消报名后再重新报名', + '提示', + { + confirmButtonText: '确定', + type: 'warning' + } + ); + return; + } + const { succeeded, data } = await usereventregistrationDetailGet(eventId); if (!succeeded) { ElMessage.error(data ?? '项目加载失败'); @@ -1022,7 +1038,8 @@ const openRegistrationDialog = async (row) => { projects.value = Array.isArray(data?.projects) ? data.projects : []; isShowRegisterDialog.value = true; activeStep.value = 0; - } catch { + } catch (error) { + console.error('打开报名弹窗失败:', error); ElMessage.error('项目加载失败'); } finally { registerLoading.value = false;