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

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