报名页面的队员校验缓存问题

This commit is contained in:
马梓彭 2026-10-28 14:43:38 +08:00
parent c1ce081e92
commit e7c414e509

View File

@ -1749,14 +1749,18 @@ const validateMemberForGroup = async (member, group) => {
} }
try { try {
const validationMemberIds = getValidationMemberIdsForGroup(member, group);
const { succeeded, data } = await usereventregistrationMemberValidatePost({ const { succeeded, data } = await usereventregistrationMemberValidatePost({
eventId: currentEventId.value, eventId: currentEventId.value,
memberId: member.userId ?? member.id, memberId: member.userId ?? member.id,
memberIds: getValidationMemberIdsForGroup(member, group), memberIds: validationMemberIds,
groupId: group.id groupId: group.id
}); });
if (succeeded && data) { if (succeeded && data) {
validationMemberIds.forEach(memberId => {
delete memberValidationMap.value[`${group.id}_${memberId}`];
});
const key = `${group.id}_${member.userId ?? member.id}`; const key = `${group.id}_${member.userId ?? member.id}`;
memberValidationMap.value[key] = data; memberValidationMap.value[key] = data;
return data; return data;
@ -1788,27 +1792,22 @@ const validateAllMembers = async () => {
const isMultiTeamMode = isTeamProject(group) && groupTeamsMap.value[gId] && const isMultiTeamMode = isTeamProject(group) && groupTeamsMap.value[gId] &&
(groupTeamsMap.value[gId].length > 1 || getGroupMaxTeams(gId) > 1); (groupTeamsMap.value[gId].length > 1 || getGroupMaxTeams(gId) > 1);
let membersToValidate = [];
if (isMultiTeamMode) { if (isMultiTeamMode) {
// 多团队模式:收集所有团队的队员 // 多团队模式:每支队伍都需要独立校验
for (const team of groupTeamsMap.value[gId]) { 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 { } else {
// 单团队模式 const groupMembers = groupMemberMap.value[gId] ?? [];
membersToValidate = 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 = () => { 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) => { const removeMemberFromGroup = (groupId, memberId) => {
if (!groupMemberMap.value[groupId]) return; if (!groupMemberMap.value[groupId]) return;
groupMemberMap.value[groupId] = groupMemberMap.value[groupId].filter((m) => (m.userId ?? m.id) !== memberId); groupMemberMap.value[groupId] = groupMemberMap.value[groupId].filter((m) => (m.userId ?? m.id) !== memberId);
delete memberValidationMap.value[`${groupId}_${memberId}`];
// 触发实时验证 // 触发实时验证
debounceValidateAllMembers(); debounceValidateAllMembers();
@ -2226,6 +2226,7 @@ const removeMemberFromTeam = (groupId, teamIndex, memberId) => {
if (!team) return; if (!team) return;
team.members = team.members.filter((m) => (m.userId ?? m.id) !== memberId); team.members = team.members.filter((m) => (m.userId ?? m.id) !== memberId);
delete memberValidationMap.value[`${groupId}_${memberId}`];
// 触发实时验证 // 触发实时验证
debounceValidateAllMembers(); debounceValidateAllMembers();