From 5f68218079689e319688a4dadf3a1193855756f0 Mon Sep 17 00:00:00 2001 From: DevOps Date: Thu, 15 Jan 2026 16:52:08 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=80=89=E6=89=8B/?= =?UTF-8?q?=E9=9B=86=E4=BD=93=E5=88=97=E8=A1=A8=E9=87=8D=E5=A4=8D=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E6=B7=BB=E5=8A=A0=E9=9B=86=E4=BD=93=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=B7=B2=E6=8A=A5=E5=90=8D=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add-team.vue: 添加选手列表去重逻辑 - event-register.vue: loadTeamList添加去重和已报名标记 - event-register.vue: toggleTeam添加已报名警告 - 集体项目UI显示已报名标签 --- src/pages/add-team/add-team.vue | 9 +++ src/pages/event-register/event-register.vue | 61 ++++++++++++++++++--- 2 files changed, 62 insertions(+), 8 deletions(-) diff --git a/src/pages/add-team/add-team.vue b/src/pages/add-team/add-team.vue index 22fffe1..7febf2c 100644 --- a/src/pages/add-team/add-team.vue +++ b/src/pages/add-team/add-team.vue @@ -119,6 +119,15 @@ export default { list = res } + // Deduplicate by id + const seen = new Set() + list = list.filter(item => { + const key = item.id + if (seen.has(key)) return false + seen.add(key) + return true + }) + this.playerList = list.map(item => ({ id: item.id, name: item.name || item.playerName diff --git a/src/pages/event-register/event-register.vue b/src/pages/event-register/event-register.vue index 623a2ad..2245721 100644 --- a/src/pages/event-register/event-register.vue +++ b/src/pages/event-register/event-register.vue @@ -66,13 +66,16 @@ - + - {{ item.name }} + + {{ item.name }} + 已报名 + 成员数:{{ item.memberCount || 0 }}人 @@ -482,12 +485,43 @@ export default { }) let list = res.records || (Array.isArray(res) ? res : []) - this.teamList = list.map(item => ({ - id: item.id, - name: item.teamName || item.name, - memberCount: item.memberCount || 0, - selected: false - })) + + // Deduplicate by id + const seen = new Set() + list = list.filter(item => { + const key = item.id + if (seen.has(key)) return false + seen.add(key) + return true + }) + + // Get current project IDs + const projectIds = this.selectedProjects.map(p => p.id) + + // Check which teams have already registered for these projects + let registeredTeamNames = [] + if (projectIds.length > 0 && this.eventId) { + try { + const regRes = await athleteAPI.getRegisteredAthletes({ + competitionId: this.eventId, + projectIds: projectIds.join(',') + }) + registeredTeamNames = (regRes || []).filter(r => r.teamName).map(r => r.teamName) + } catch (e) { + console.log('查询已报名集体失败:', e) + } + } + + this.teamList = list.map(item => { + const teamName = item.teamName || item.name + return { + id: item.id, + name: teamName, + memberCount: item.memberCount || 0, + selected: false, + hasRegistered: registeredTeamNames.includes(teamName) + } + }) } catch (err) { console.error('加载集体列表失败:', err) this.teamList = [] @@ -530,6 +564,17 @@ export default { }, toggleTeam(item) { + // Warn if team has already registered for this project + if (item.hasRegistered && !item.selected) { + uni.showModal({ + title: '提示', + content: '该集体已报名此项目,重复报名将被系统拒绝', + confirmText: '知道了', + showCancel: false + }) + return + } + const index = this.teamList.findIndex(t => t.id === item.id) if (index !== -1) { this.$set(this.teamList[index], 'selected', !this.teamList[index].selected)