单败重构

This commit is contained in:
Kunagisa 2025-08-01 01:29:18 +08:00
parent 47f97cd291
commit 5aabaddc31
3 changed files with 731 additions and 457 deletions

View File

@ -46,76 +46,77 @@ const rankData = ref([])
const fetchRankData = async () => {
try {
const response = await getSignUpResultList()
console.log('RankContestant 原始数据:', response)
//
const filteredPlayers = response.filter(player => player.tournament_id === props.tournamentId)
console.log('RankContestant 筛选后数据:', filteredPlayers)
//
const playersWithPoints = filteredPlayers.map(player => {
//
let points = parseFloat(player.points || 0)
//
const playerStats = {}
filteredPlayers.forEach((player, index) => {
const playerName = player.sign_name
const win = parseInt(player.win || 0)
const lose = parseInt(player.lose || 0)
const round = player.round || '0'
//
if (!player.points) {
const wins = parseInt(player.win) || 0
//
const multiplier = player.bracket_type === 'losers' ? 0.5 : 1
points = wins * multiplier
}
//
const rank = player.rank || ''
return {
console.log(`RankContestant 处理第${index + 1}条数据:`, {
id: player.id,
rank: rank,
username: player.sign_name,
faction: player.faction || player.team_name || '',
win: parseInt(player.win) || 0,
lose: parseInt(player.lose) || 0,
points: points,
status: player.status || '',
bracket_type: player.bracket_type || 'winners', //
score: `${player.win}${player.lose}负 (${points.toFixed(1)}分)`
sign_name: playerName,
round: round,
win: win,
lose: lose,
status: player.status
})
if (!playerStats[playerName]) {
playerStats[playerName] = {
username: playerName,
faction: player.faction || player.team_name || '',
totalWin: 0,
totalLose: 0,
totalPoints: 0,
rounds: []
}
}
playerStats[playerName].totalWin += win
playerStats[playerName].totalLose += lose
playerStats[playerName].rounds.push(round)
//
playerStats[playerName].totalPoints = playerStats[playerName].totalWin
})
//
const sortedPlayers = [...playersWithPoints].sort((a, b) => {
//
if (a.rank && b.rank) {
return parseInt(a.rank) - parseInt(b.rank)
}
// winlose
if (a.status === 'win' && b.status === 'lose') return -1
if (a.status === 'lose' && b.status === 'win') return 1
//
if (b.points !== a.points) {
return b.points - a.points
}
//
if (a.bracket_type !== b.bracket_type) {
return a.bracket_type === 'winners' ? -1 : 1
}
//
if (b.win !== a.win) {
return b.win - a.win
}
//
return a.lose - b.lose
})
console.log('RankContestant 分组后统计:', playerStats)
//
const results = sortedPlayers.map((player, index) => ({
...player,
rank: player.rank || (index + 1).toString()
}))
//
const sortedPlayers = Object.values(playerStats)
.sort((a, b) => {
//
if (b.totalWin !== a.totalWin) {
return b.totalWin - a.totalWin
}
//
return a.totalLose - b.totalLose
})
.map((player, index) => ({
id: index + 1, // 使ID
rank: (index + 1).toString(),
username: player.username,
faction: player.faction,
win: player.totalWin,
lose: player.totalLose,
points: player.totalPoints,
status: '',
bracket_type: 'winners',
score: `${player.totalWin}${player.totalLose}负 (${player.totalPoints.toFixed(1)}分)`,
rounds: player.rounds.join(',')
}))
rankData.value = results
console.log('RankContestant 最终排名结果:', sortedPlayers)
rankData.value = sortedPlayers
} catch (error) {
console.error('获取排名数据失败:', error)
}

File diff suppressed because it is too large Load Diff

View File

@ -86,7 +86,6 @@
<tournament-bracket
v-else-if="competition.status === 'starting'"
:tournament-id="parseInt(route.query.id)"
@refreshPlayers="fetchRegisteredPlayers"
/>
</template>
@ -919,22 +918,71 @@ const fetchFinalResults = async () => {
try {
const tournamentId = parseInt(route.query.id)
const response = await getSignUpResultList()
//
const results = response
.filter(player => player.tournament_id === tournamentId)
console.log('原始API数据:', response)
//
const tournamentData = response.filter(player => player.tournament_id === tournamentId)
console.log('筛选后的赛事数据:', tournamentData)
console.log('数据条数:', tournamentData.length)
//
const playerStats = {}
tournamentData.forEach((player, index) => {
const playerName = player.sign_name
const win = parseInt(player.win || 0)
const lose = parseInt(player.lose || 0)
const round = player.round || '0'
console.log(`处理第${index + 1}条数据:`, {
id: player.id,
sign_name: playerName,
round: round,
win: win,
lose: lose,
status: player.status
})
if (!playerStats[playerName]) {
playerStats[playerName] = {
username: playerName,
qq: player.qq || '',
faction: player.faction || 'random',
totalWin: 0,
totalLose: 0,
rounds: []
}
}
playerStats[playerName].totalWin += win
playerStats[playerName].totalLose += lose
playerStats[playerName].rounds.push(round)
})
console.log('分组后的玩家统计:', playerStats)
//
const results = Object.values(playerStats)
.sort((a, b) => {
//
if (b.totalWin !== a.totalWin) {
return b.totalWin - a.totalWin
}
//
return a.totalLose - b.totalLose
})
.map((player, index) => ({
rank: index + 1,
username: player.sign_name,
username: player.username,
qq: player.qq,
faction: player.faction,
score: `${player.win}${player.lose}`
score: `${player.totalWin}${player.totalLose}`,
rounds: player.rounds.join(',')
}))
.sort((a, b) => {
const aScore = parseInt(a.score.split('胜')[0])
const bScore = parseInt(b.score.split('胜')[0])
return bScore - aScore
})
console.log('最终排名结果:', results)
finalResults.value = results
} catch (error) {
console.error('获取最终结果失败:', error)