重构赛事信息(修改树状图前)
This commit is contained in:
parent
605d60ec7e
commit
47f97cd291
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user