- 前后端分离架构 (Nuxt 3 + Element Plus) - SQLite 数据库 (better-sqlite3) - 比赛项目管理 (田赛/径赛/团体赛) - 队伍管理 (5 个组别) - 成绩录入与积分统计 - 记分板展示 (排名/奖牌榜) - 移动端响应式适配 - 侧边栏布局 + 抽屉菜单 - 自动生成初始化数据接口
57 lines
1.2 KiB
TypeScript
57 lines
1.2 KiB
TypeScript
import db from '../../db'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const body = await readBody(event)
|
|
const { event_id, team_id, score, rank } = body
|
|
|
|
if (!event_id || !team_id || !score) {
|
|
throw createError({
|
|
statusCode: 400,
|
|
message: '缺少必要参数'
|
|
})
|
|
}
|
|
|
|
const stmt = db.prepare(
|
|
'INSERT INTO results (event_id, team_id, score, rank) VALUES (?, ?, ?, ?)'
|
|
)
|
|
const result = stmt.run(event_id, team_id, score, rank || null)
|
|
|
|
// 更新团队积分
|
|
if (rank) {
|
|
let points = 0
|
|
let medalType = ''
|
|
|
|
if (rank === 1) {
|
|
points = 7
|
|
medalType = 'gold'
|
|
} else if (rank === 2) {
|
|
points = 5
|
|
medalType = 'silver'
|
|
} else if (rank === 3) {
|
|
points = 3
|
|
medalType = 'bronze'
|
|
}
|
|
|
|
if (points > 0) {
|
|
const updateStmt = db.prepare(`
|
|
UPDATE team_scores
|
|
SET total_score = total_score + ?,
|
|
${medalType}_count = ${medalType}_count + 1
|
|
WHERE team_id = ?
|
|
`)
|
|
updateStmt.run(points, team_id)
|
|
}
|
|
}
|
|
|
|
return {
|
|
success: true,
|
|
data: {
|
|
id: result.lastInsertRowid,
|
|
event_id,
|
|
team_id,
|
|
score,
|
|
rank
|
|
}
|
|
}
|
|
})
|