赛事记录更换队员错误显示区域调整

This commit is contained in:
马梓彭 2026-04-20 14:35:18 +08:00
parent dbb380f579
commit 7f66787c4f
2 changed files with 33 additions and 15 deletions

View File

@ -299,6 +299,7 @@ export const usereventrecordMemberValidatePost = (data) => {
* @param {Array<number>} data.memberIds - 队员ID列表
* @param {Array<number>} data.groupIds - 组别ID列表
* @param {Array<{groupId: number, memberIds: Array<number>}>} data.groupMembers - 组别队员分配
* @param {number} [data.excludeRegistrationId] - 要排除的报名ID(更换队员时使用)
* @returns {Promise<{
* hasLimit: boolean,
* limitDetails: Array<{

View File

@ -289,18 +289,6 @@
</el-tag>
<span v-if="!(changeMembersMap[item.registrationItemId]?.length)" class="assign-card-placeholder">点击此卡片后,从右侧选择队员</span>
</div>
<!-- 队员验证错误提示 -->
<div v-if="hasValidationErrorsForItem(item)" class="validation-error-section">
<div class="validation-error-item"
v-for="m in (changeMembersMap[item.registrationItemId] ?? [])"
:key="m.userId ?? m.id">
<el-alert v-if="!getMemberValidationResult(m, item).isValid"
:title="getMemberValidationResult(m, item).message"
type="error" :closable="false"
size="small" style="margin-top: 4px;" />
</div>
</div>
</div>
<el-empty v-if="!changeMembersItems.length" description="暂无项目" />
</div>
@ -344,8 +332,17 @@
<!-- 验证提示区域 -->
<div class="validation-notes-section" style="margin-top: 16px;">
<!-- 年龄性别不符合要求提示 -->
<el-alert v-if="hasAnyValidationErrors()" title="队员信息不符合组别要求" type="error" :closable="false" style="margin-bottom: 12px;" />
<!-- 所有队员验证错误提示 -->
<template v-if="hasAnyValidationErrors()">
<el-alert title="队员信息不符合组别要求" type="error" :closable="false" style="margin-bottom: 12px;" />
<div class="validation-error-list">
<el-alert v-for="(itemError, idx) in getAllValidationErrors()"
:key="idx"
:title="itemError.message"
type="error" :closable="false"
size="small" style="margin-top: 4px;" />
</div>
</template>
<!-- 限报提示 -->
<template v-if="hasAnyRegistrationLimit()">
@ -1261,6 +1258,25 @@ const hasAnyValidationErrors = () => {
return changeMembersItems.value.some(item => hasValidationErrorsForItem(item));
};
// 获取所有验证错误
const getAllValidationErrors = () => {
const errors = [];
for (const item of changeMembersItems.value) {
const members = changeMembersMap.value[item.registrationItemId] || [];
for (const member of members) {
const result = getMemberValidationResult(member, item);
if (!result.isValid && result.message) {
errors.push({
item: item,
member: member,
message: `【${formatItemTitle(item)}】${member.name}:${result.message}`
});
}
}
}
return errors;
};
// 检查是否有任何报名限制
const hasAnyRegistrationLimit = () => {
return registrationLimitCheckResult.value?.hasLimit ?? false;
@ -1471,7 +1487,8 @@ const validateAllMembers = async () => {
// 检查报名限制
const { succeeded, data } = await usereventrecordRegistrationLimitCheckPost({
eventId: changeMembersData.value.eventId,
groupMembers: groupMembers
groupMembers: groupMembers,
excludeRegistrationId: changeMembersData.value.registrationId
});
if (succeeded && data) {