Compare commits

..
2 Commits
Author SHA1 Message Date
DevOps 56a1897b7d fix: 修复选手列表重复问题 - 只查询registrationStatus=0的选手信息记录
根本原因:报名时会创建新的registrationStatus=1参赛记录,而查询选手列表时没有过滤,导致显示重复
解决方案:在查询选手列表时添加registrationStatus=0参数,只查询选手信息库
2026-01-15 17:20:02 +08:00
DevOps 5f68218079 fix: 修复选手/集体列表重复问题,添加集体项目已报名标记
- add-team.vue: 添加选手列表去重逻辑
- event-register.vue: loadTeamList添加去重和已报名标记
- event-register.vue: toggleTeam添加已报名警告
- 集体项目UI显示已报名标签
2026-01-15 16:52:08 +08:00
2 changed files with 66 additions and 10 deletions
+11 -1
View File
@@ -109,7 +109,8 @@ export default {
const res = await athleteAPI.getAthleteList({
current: 1,
size: 100,
createUser: userInfo.userId
createUser: userInfo.userId,
registrationStatus: 0 // Only query player info records
})
let list = []
@@ -119,6 +120,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
+55 -9
View File
@@ -66,13 +66,16 @@
</view>
<view class="player-list">
<view class="player-item" v-for="(item, index) in teamList" :key="index">
<view class="player-item" v-for="(item, index) in teamList" :key="index" :class="{ 'registered': item.hasRegistered }">
<view class="player-checkbox" @click="toggleTeam(item)">
<image v-if="item.selected" class="checkbox-img" src="/static/images/选中@3x.png" mode="aspectFit"></image>
<image v-else class="checkbox-img" src="/static/images/未选中@3x.png" mode="aspectFit"></image>
</view>
<view class="player-info">
<view class="player-name">{{ item.name }}</view>
<view class="player-name">
{{ item.name }}
<text v-if="item.hasRegistered" class="registered-tag">已报名</text>
</view>
<view class="player-id">成员数{{ item.memberCount || 0 }}</view>
</view>
<view class="player-actions">
@@ -425,7 +428,8 @@ export default {
const res = await athleteAPI.getAthleteList({
current: 1,
size: 100,
createUser: userInfo.userId
createUser: userInfo.userId,
registrationStatus: 0 // Only query player info records, not registration records
})
let list = res.records || (Array.isArray(res) ? res : [])
@@ -482,12 +486,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 +565,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)