From e7c414e5094bf522ca531b871ec8e20b7938d497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=A2=93=E5=BD=AD?= Date: Wed, 28 Oct 2026 14:43:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E5=90=8D=E9=A1=B5=E9=9D=A2=E7=9A=84?= =?UTF-8?q?=E9=98=9F=E5=91=98=E6=A0=A1=E9=AA=8C=E7=BC=93=E5=AD=98=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/user/registration/index.vue | 37 ++++++++++++++------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/views/user/registration/index.vue b/src/views/user/registration/index.vue index 1929787..390e27a 100644 --- a/src/views/user/registration/index.vue +++ b/src/views/user/registration/index.vue @@ -1749,14 +1749,18 @@ const validateMemberForGroup = async (member, group) => { } try { + const validationMemberIds = getValidationMemberIdsForGroup(member, group); const { succeeded, data } = await usereventregistrationMemberValidatePost({ eventId: currentEventId.value, memberId: member.userId ?? member.id, - memberIds: getValidationMemberIdsForGroup(member, group), + memberIds: validationMemberIds, groupId: group.id }); if (succeeded && data) { + validationMemberIds.forEach(memberId => { + delete memberValidationMap.value[`${group.id}_${memberId}`]; + }); const key = `${group.id}_${member.userId ?? member.id}`; memberValidationMap.value[key] = data; return data; @@ -1788,27 +1792,22 @@ const validateAllMembers = async () => { const isMultiTeamMode = isTeamProject(group) && groupTeamsMap.value[gId] && (groupTeamsMap.value[gId].length > 1 || getGroupMaxTeams(gId) > 1); - let membersToValidate = []; - if (isMultiTeamMode) { - // 多团队模式:收集所有团队的队员 + // 多团队模式:每支队伍都需要独立校验 for (const team of groupTeamsMap.value[gId]) { - membersToValidate = membersToValidate.concat(team.members); + const teamMembers = team.members ?? []; + if (teamMembers.length > 0) { + hasAnyMembers = true; + validationTasks.push(validateMemberForGroup(teamMembers[teamMembers.length - 1], group)); + } } } else { - // 单团队模式 - membersToValidate = groupMemberMap.value[gId] || []; + const groupMembers = groupMemberMap.value[gId] ?? []; + if (groupMembers.length > 0) { + hasAnyMembers = true; + validationTasks.push(validateMemberForGroup(groupMembers[groupMembers.length - 1], group)); + } } - - if (membersToValidate.length > 0) { - hasAnyMembers = true; - } - - // // 为每个队员创建验证任务 - // for (const member of membersToValidate) { - // validationTasks.push(validateMemberForGroup(member, group)); - // } - validationTasks.push(validateMemberForGroup(membersToValidate[membersToValidate.length - 1], group)); } // 并行执行所有验证任务 @@ -1909,7 +1908,7 @@ const hasValidationErrorsForGroup = (group) => { // 检查是否有任何验证错误 const hasAnyValidationErrors = () => { - return Object.values(memberValidationMap.value).some(result => result?.isValid === false); + return selectedGroupItems.value.some(group => hasValidationErrorsForGroup(group)); }; // 检查是否有任何报名限制 @@ -2022,6 +2021,7 @@ const assignMemberToActiveGroup = (member) => { const removeMemberFromGroup = (groupId, memberId) => { if (!groupMemberMap.value[groupId]) return; groupMemberMap.value[groupId] = groupMemberMap.value[groupId].filter((m) => (m.userId ?? m.id) !== memberId); + delete memberValidationMap.value[`${groupId}_${memberId}`]; // 触发实时验证 debounceValidateAllMembers(); @@ -2226,6 +2226,7 @@ const removeMemberFromTeam = (groupId, teamIndex, memberId) => { if (!team) return; team.members = team.members.filter((m) => (m.userId ?? m.id) !== memberId); + delete memberValidationMap.value[`${groupId}_${memberId}`]; // 触发实时验证 debounceValidateAllMembers();