重构赛事信息(修改树状图前)

This commit is contained in:
Kunagisa 2025-07-31 00:59:05 +08:00
parent 605d60ec7e
commit 47f97cd291

View File

@ -268,15 +268,6 @@ const statusMap = {
'finish': '已结束'
}
// const factionMap = {
// 'allied': '',
// 'soviet': '',
// 'empire': '',
// 'ob': 'OB',
// 'voice': '',
// 'random': ''
// }
//
const competition = ref({
name: '',
@ -411,6 +402,17 @@ const handleUpdate = async () => {
}
await updateTournament(tournamentId, updateData)
// tournament_name
if (editForm.value.name !== competition.value.name) {
await updateAllPlayersTournamentName(tournamentId, editForm.value.name)
}
// ""
if (selectedStatus.value === 'starting') {
await generateOpponentsForAllPlayers(tournamentId)
}
successDialog.value = { visible: true, message: '更新成功!' }
closeEditDialog()
fetchTournamentDetail() //
@ -426,7 +428,46 @@ const handleUpdate = async () => {
const handleDelete = async () => {
try {
isDeleting.value = true
const tournamentId = route.query.id
const tournamentId = parseInt(route.query.id)
//
const [signupList, resultList] = await Promise.all([
getSignUpList(),
getSignUpResultList()
])
//
const tournamentSignups = signupList.filter(signup =>
signup.tournament_id === tournamentId
)
//
const tournamentResults = resultList.filter(result =>
result.tournament_id === tournamentId
)
console.log(`准备删除赛事 ${tournamentId},共有 ${tournamentSignups.length} 个报名记录,${tournamentResults.length} 个结果记录`)
//
const deletePromises = []
//
for (const signup of tournamentSignups) {
deletePromises.push(deleteSignUp(signup.id))
}
//
for (const result of tournamentResults) {
deletePromises.push(deleteSignUpResult(result.id))
}
//
if (deletePromises.length > 0) {
await Promise.all(deletePromises)
console.log('所有报名玩家删除完成')
}
//
await deleteTournament(tournamentId)
successDialog.value = { visible: true, message: '删除成功!' }
router.push('/competition')
@ -517,17 +558,19 @@ const fetchRegisteredPlayers = async () => {
result.tournament_id === tournamentId
)
//
registeredPlayers.value = tournamentResults.map(result => {
//
const signup = tournamentSignups.find(s => s.username === result.sign_name)
return {
...result,
faction: signup?.faction || 'random', //
qq: signup?.qq || '' // QQ
}
})
// 0
registeredPlayers.value = tournamentResults
.filter(result => result.round === '0' || result.round === 0 || !result.round)
.map(result => {
//
const signup = tournamentSignups.find(s => s.username === result.sign_name)
return {
...result,
faction: signup?.faction || 'random', //
qq: signup?.qq || '' // QQ
}
})
console.log('合并后的玩家数据:', registeredPlayers.value)
} catch (error) {
@ -613,6 +656,13 @@ const handleStatusUpdate = async () => {
console.log('更新赛事状态,发送数据:', updateData)
await updateTournament(tournamentId, updateData)
// ""
if (selectedStatus.value === 'starting') {
console.log('状态变为进行中,开始生成对手...')
await generateOpponentsForAllPlayers(tournamentId)
}
successDialog.value = { visible: true, message: '状态更新成功!' }
closeStatusDialog()
fetchTournamentDetail() //
@ -704,6 +754,166 @@ const saveChanges = async () => {
}
}
//
const updateAllPlayersTournamentName = async (tournamentId, newTournamentName) => {
try {
console.log('开始更新所有玩家的赛事名称...')
//
const response = await getSignUpResultList()
const players = response.filter(player => player.tournament_id == tournamentId)
console.log(`找到 ${players.length} 个玩家需要更新赛事名称`)
if (players.length === 0) {
console.log('没有找到需要更新的玩家')
return
}
// tournament_name
const updatePromises = players.map(player =>
updateSignUpResult(player.id, {
...player,
tournament_name: newTournamentName
})
)
//
await Promise.all(updatePromises)
console.log('所有玩家的赛事名称更新完成')
} catch (error) {
console.error('更新玩家赛事名称失败:', error)
throw error
}
}
//
const generateOpponentsForAllPlayers = async (tournamentId) => {
try {
console.log('=== 开始为所有玩家生成对手 ===')
console.log('当前赛事ID:', tournamentId)
//
const response = await getSignUpResultList()
console.log('获取到的所有结果数据:', response)
const players = response.filter(player => player.tournament_id == tournamentId)
console.log('筛选后的玩家数据:', players)
console.log(`找到 ${players.length} 个玩家需要生成对手`)
if (players.length === 0) {
console.log('没有找到需要生成对手的玩家')
return
}
//
console.log('=== 原始玩家信息 ===')
players.forEach((player, index) => {
console.log(`玩家${index + 1}:`, {
id: player.id,
sign_name: player.sign_name,
team_name: player.team_name,
tournament_id: player.tournament_id,
tournament_name: player.tournament_name
})
})
//
const shuffledPlayers = [...players].sort(() => Math.random() - 0.5)
console.log('=== 随机打乱后的玩家顺序 ===')
shuffledPlayers.forEach((player, index) => {
console.log(`${index + 1}位:`, player.sign_name)
})
//
const updatePromises = []
const pairs = []
console.log('=== 开始生成配对 ===')
for (let i = 0; i < shuffledPlayers.length; i += 2) {
if (i + 1 < shuffledPlayers.length) {
//
const player1 = shuffledPlayers[i]
const player2 = shuffledPlayers[i + 1]
console.log(`配对 ${i/2 + 1}: ${player1.sign_name} vs ${player2.sign_name}`)
pairs.push({
player1: player1.sign_name,
player2: player2.sign_name,
type: '对战'
})
// player1
const updateData1 = {
...player1,
rival_name: player2.sign_name,
win: '0',
lose: '0',
status: 'tie',
round: '0'
}
console.log(`更新 ${player1.sign_name} 的对手信息:`, updateData1)
updatePromises.push(updateSignUpResult(player1.id, updateData1))
// player2
const updateData2 = {
...player2,
rival_name: player1.sign_name,
win: '0',
lose: '0',
status: 'tie',
round: '0'
}
console.log(`更新 ${player2.sign_name} 的对手信息:`, updateData2)
updatePromises.push(updateSignUpResult(player2.id, updateData2))
} else {
//
const player = shuffledPlayers[i]
console.log(`轮空: ${player.sign_name}`)
pairs.push({
player1: player.sign_name,
player2: null,
type: '轮空'
})
const updateData = {
...player,
rival_name: '轮空',
win: '0',
lose: '0',
status: 'tie',
round: '0'
}
console.log(`更新 ${player.sign_name} 的轮空信息:`, updateData)
updatePromises.push(updateSignUpResult(player.id, updateData))
}
}
console.log('=== 配对结果总结 ===')
pairs.forEach((pair, index) => {
if (pair.type === '对战') {
console.log(`配对${index + 1}: ${pair.player1} vs ${pair.player2}`)
} else {
console.log(`配对${index + 1}: ${pair.player1} (轮空)`)
}
})
console.log(`总共需要更新 ${updatePromises.length} 个玩家记录`)
//
console.log('=== 开始批量更新 ===')
await Promise.all(updatePromises)
console.log('=== 所有玩家的对手生成完成 ===')
} catch (error) {
console.error('生成对手失败:', error)
throw error
}
}
//
const fetchFinalResults = async () => {
try {