- 前后端分离架构 (Nuxt 3 + Element Plus) - SQLite 数据库 (better-sqlite3) - 比赛项目管理 (田赛/径赛/团体赛) - 队伍管理 (5 个组别) - 成绩录入与积分统计 - 记分板展示 (排名/奖牌榜) - 移动端响应式适配 - 侧边栏布局 + 抽屉菜单 - 自动生成初始化数据接口
34 lines
836 B
TypeScript
34 lines
836 B
TypeScript
import db from '../../db'
|
|
|
|
export default defineEventHandler((event) => {
|
|
const query = getQuery(event)
|
|
const { group } = query
|
|
|
|
let sql = `
|
|
SELECT t.id, t.name, t.team_group,
|
|
COALESCE(ts.total_score, 0) as total_score,
|
|
COALESCE(ts.gold_count, 0) as gold_count,
|
|
COALESCE(ts.silver_count, 0) as silver_count,
|
|
COALESCE(ts.bronze_count, 0) as bronze_count
|
|
FROM teams t
|
|
LEFT JOIN team_scores ts ON t.id = ts.team_id
|
|
WHERE 1=1
|
|
`
|
|
const params: any[] = []
|
|
|
|
if (group) {
|
|
sql += ' AND t.team_group = ?'
|
|
params.push(group)
|
|
}
|
|
|
|
sql += ' ORDER BY ts.total_score DESC, ts.gold_count DESC, ts.silver_count DESC, ts.bronze_count DESC'
|
|
|
|
const stmt = db.prepare(sql)
|
|
const scoreboard = stmt.all(...params)
|
|
|
|
return {
|
|
success: true,
|
|
data: scoreboard
|
|
}
|
|
})
|