- 前后端分离架构 (Nuxt 3 + Element Plus) - SQLite 数据库 (better-sqlite3) - 比赛项目管理 (田赛/径赛/团体赛) - 队伍管理 (5 个组别) - 成绩录入与积分统计 - 记分板展示 (排名/奖牌榜) - 移动端响应式适配 - 侧边栏布局 + 抽屉菜单 - 自动生成初始化数据接口
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import Database from 'better-sqlite3'
|
|
import { join, dirname } from 'path'
|
|
import { fileURLToPath } from 'url'
|
|
import fs from 'fs'
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
const projectRoot = join(__dirname, '..', '..')
|
|
const dataDir = join(projectRoot, 'data')
|
|
const dbPath = join(dataDir, 'sports.db')
|
|
|
|
if (!fs.existsSync(dataDir)) {
|
|
fs.mkdirSync(dataDir, { recursive: true })
|
|
}
|
|
|
|
const db = new Database(dbPath)
|
|
|
|
// 初始化数据库表
|
|
db.exec(`
|
|
CREATE TABLE IF NOT EXISTS events (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
category TEXT NOT NULL,
|
|
event_group TEXT NOT NULL,
|
|
unit TEXT NOT NULL,
|
|
status TEXT DEFAULT 'pending',
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS teams (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
team_group TEXT NOT NULL,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS results (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
event_id INTEGER NOT NULL,
|
|
team_id INTEGER NOT NULL,
|
|
score TEXT NOT NULL,
|
|
rank INTEGER,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (event_id) REFERENCES events(id),
|
|
FOREIGN KEY (team_id) REFERENCES teams(id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS team_scores (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
team_id INTEGER NOT NULL,
|
|
total_score INTEGER DEFAULT 0,
|
|
gold_count INTEGER DEFAULT 0,
|
|
silver_count INTEGER DEFAULT 0,
|
|
bronze_count INTEGER DEFAULT 0,
|
|
FOREIGN KEY (team_id) REFERENCES teams(id)
|
|
);
|
|
`)
|
|
|
|
export default db
|