- 创建 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' 导入使用
107 lines
2.3 KiB
TypeScript
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
|
|
}
|