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();