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
|
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 => ({
|
this.playerList = list.map(item => ({
|
||||||
id: item.id,
|
id: item.id,
|
||||||
name: item.name || item.playerName
|
name: item.name || item.playerName
|
||||||
|
|||||||
@@ -66,13 +66,16 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="player-list">
|
<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)">
|
<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-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>
|
<image v-else class="checkbox-img" src="/static/images/未选中@3x.png" mode="aspectFit"></image>
|
||||||
</view>
|
</view>
|
||||||
<view class="player-info">
|
<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 class="player-id">成员数:{{ item.memberCount || 0 }}人</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="player-actions">
|
<view class="player-actions">
|
||||||
@@ -482,12 +485,43 @@ export default {
|
|||||||
})
|
})
|
||||||
|
|
||||||
let list = res.records || (Array.isArray(res) ? res : [])
|
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,
|
id: item.id,
|
||||||
name: item.teamName || item.name,
|
name: teamName,
|
||||||
memberCount: item.memberCount || 0,
|
memberCount: item.memberCount || 0,
|
||||||
selected: false
|
selected: false,
|
||||||
}))
|
hasRegistered: registeredTeamNames.includes(teamName)
|
||||||
|
}
|
||||||
|
})
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('加载集体列表失败:', err)
|
console.error('加载集体列表失败:', err)
|
||||||
this.teamList = []
|
this.teamList = []
|
||||||
@@ -530,6 +564,17 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
toggleTeam(item) {
|
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)
|
const index = this.teamList.findIndex(t => t.id === item.id)
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
this.$set(this.teamList[index], 'selected', !this.teamList[index].selected)
|
this.$set(this.teamList[index], 'selected', !this.teamList[index].selected)
|
||||||
|
|||||||
Reference in New Issue
Block a user