fix: 修复选手/集体列表重复问题,添加集体项目已报名标记
- add-team.vue: 添加选手列表去重逻辑 - event-register.vue: loadTeamList添加去重和已报名标记 - event-register.vue: toggleTeam添加已报名警告 - 集体项目UI显示已报名标签
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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">
|
||||
@@ -482,12 +485,43 @@ export default {
|
||||
})
|
||||
|
||||
let list = res.records || (Array.isArray(res) ? res : [])
|
||||
this.teamList = list.map(item => ({
|
||||
|
||||
// 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: item.teamName || item.name,
|
||||
name: teamName,
|
||||
memberCount: item.memberCount || 0,
|
||||
selected: false
|
||||
}))
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user