feat(user): 重构用户端竞赛流程,集成后端API并优化交互体验

- 新增 `activityinfo` store 管理活动信息,支持持久化
- 重构 `competition` store,分离数据层与流程控制,新增音效管理
- 新增游戏API模块 (`game.ts`),实现抽题、题目详情、提交结果等接口
- 用户端页面全面对接后端数据:首页轮播展示活动列表,组别/队伍页动态加载,封面页显示题目卡片
- 抽题页改为竹签翻转动画,游戏页集成题目详情与倒计时
- 优化布局组件,支持点击返回首页,统一路由参数传递
- 更新类型定义,支持富文本题目渲染
- 添加 `activityinfo` 拼写检查词条
This commit is contained in:
2026-02-10 08:45:26 +08:00
parent 0fd8ef527a
commit 61a7412fc1
23 changed files with 962 additions and 643 deletions

View File

@ -58,7 +58,7 @@ export function fetchCreateQuestion(data: Api.Competition.CreateQuestionRequest[
}
/** 根据活动ID获取活动题目列表 */
export function fetchGetQuestionList(id: number) {
export function fetchGetQuestionList(id: string) {
return request<App.Service.Response<Api.Competition.QuestionListRecord[]>>({
url: `/Base/ActivityMain/GetActivity_QuestionByActivityID?ID=${id}`,
method: 'get',

View File

@ -0,0 +1,50 @@
import { request } from '../request'
/**
* 游戏相关接口 步骤
* 1.GetQuestionByActivityIDAndStatus 抽题时候获取题目大纲信息
* 2.GetQuestionListDetailRound 获取抽题目详情
* 3.fetchSubmitQuestionResult点击开始答题后把基础信息数据传给service
*/
/** 抽题时候获取题目大纲信息 */
export function fetchGetQuestionOutline(ActivityID: number, status: number = 0) {
return request<App.Service.Response<Api.Competition.QuestionListRecord[]>>({
url: `/Base/ActivityMain/GetQuestionByActivityIDAndStatus/?ActivityID=${ActivityID}&status=${status}`,
method: 'post',
data: {
ActivityID,
status,
},
})
}
/** 抽题目详情 */
export function fetchGetQuestionDetail(ActivityID: string, questionID: number) {
return request<App.Service.Response<Api.Competition.QuestionListDetailRound>>({
url: `/Base/ActivityMain/GetQuestionListDetailRound/?MainID=${ActivityID}&questionID=${questionID}`,
method: 'post',
data: {
MainID: ActivityID,
questionID,
},
})
}
/** 提交抽题结果 */
export function fetchSubmitQuestionResult(data: Api.Competition.QuestionAddParams) {
return request<App.Service.Response<Api.Competition.QuestionListDetailRound>>({
url: `/Base/ActivityMain/AddActivity_TeamQuestionUse/?RoomID=${data.RoomID}&MainID=${data.MainID}&TeamGroupID=${data.TeamGroupID}&QuestionID=${data.QuestionID}&QuestionDetaiID=${data.QuestionDetaiID}`,
method: 'post',
data,
})
}
/** 获取游戏现场统计结果 */
export function fetchGetGameStatistics(data: Api.Competition.QuestionAddParams) {
return request<App.Service.Response>({
url: `/Base/ActivityMain/GetTeamQuestionUseByTeamGroupIDAndQuestionID/?RoomID=${data.RoomID}&MainID=${data.MainID}&TeamGroupID=${data.TeamGroupID}&QuestionID=${data.QuestionID}&QuestionDetaiID=${data.QuestionDetaiID}`,
method: 'post',
data,
})
}