Administrator 94dbd0d34c refactor: 将记分板功能模块化为可复用组件
- 创建 app/modules/scoreboard 模块目录
- 添加配置常量 (EVENT_CATEGORIES, TEAM_GROUPS, EVENT_TYPES)
- 添加 API 工具函数 (fetchEvents, fetchTeams, fetchResults 等)
- 添加可复用组件 (ModuleLayout, StatCard, DataTable)
- 添加模块导出文件 (mod.ts)
- 添加模块使用文档 (README.md)
- 更新首页使用模块 API 函数

后续可通过 import { xxx } from '~/modules/scoreboard' 导入使用
2026-03-17 22:33:01 +08:00

107 lines
2.3 KiB
TypeScript

/**
* 记分板模块 API 工具函数
*/
/**
* 获取配置信息
*/
export const fetchConfig = async () => {
const res = await $fetch('/api/config')
return res.data
}
/**
* 获取比赛项目列表
*/
export const fetchEvents = async (params?: { category?: string; group?: string }) => {
const query = new URLSearchParams()
if (params?.category) query.append('category', params.category)
if (params?.group) query.append('group', params.group)
const res = await $fetch(`/api/events?${query}`)
return res.data
}
/**
* 创建比赛项目
*/
export const createEvent = async (data: {
name: string
category: string
event_group: string
unit: string
}) => {
const res = await $fetch('/api/events', {
method: 'POST',
body: data
})
return res.data
}
/**
* 获取队伍列表
*/
export const fetchTeams = async (params?: { group?: string }) => {
const query = new URLSearchParams()
if (params?.group) query.append('group', params.group)
const res = await $fetch(`/api/teams?${query}`)
return res.data
}
/**
* 创建队伍
*/
export const createTeam = async (data: { name: string; team_group: string }) => {
const res = await $fetch('/api/teams', {
method: 'POST',
body: data
})
return res.data
}
/**
* 获取成绩列表
*/
export const fetchResults = async (params?: { event_id?: number; team_id?: number }) => {
const query = new URLSearchParams()
if (params?.event_id) query.append('event_id', String(params.event_id))
if (params?.team_id) query.append('team_id', String(params.team_id))
const res = await $fetch(`/api/results?${query}`)
return res.data
}
/**
* 录入成绩
*/
export const createResult = async (data: {
event_id: number
team_id: number
score: string
rank?: number
}) => {
const res = await $fetch('/api/results', {
method: 'POST',
body: data
})
return res.data
}
/**
* 获取记分板数据
*/
export const fetchScoreboard = async (params?: { group?: string }) => {
const query = new URLSearchParams()
if (params?.group) query.append('group', params.group)
const res = await $fetch(`/api/scoreboard?${query}`)
return res.data
}
/**
* 初始化示例数据
*/
export const seedData = async () => {
const res = await $fetch('/api/seed', {
method: 'POST'
})
return res
}