feat(admin): 新增用户端答题流程页面与相关功能模块

- 新增用户端答题流程主页面,包含封面、介绍、答题、答题图解四个状态
- 新增用户端组件:封面、介绍页、答题页、答题图解页、题目渲染器及通用布局组件
- 新增用户端类型定义、模拟数据及业务常量
- 新增用户路由及类型声明,包含组别和队伍选择页面
- 新增管理端首页模块:数据卡片、头部横幅、折线图、饼图、创意横幅和项目新闻
- 新增富文本编辑器组件,支持图片和视频上传至OSS
- 优化题库分类树,改为扁平化列表结构
- 完善比赛创建功能,增加轮次类型、题目分数类型及关联AP字段
- 修复模板删除函数调用参数错误
- 添加 pinyin-pro 依赖以支持拼音处理功能
This commit is contained in:
2026-02-05 18:00:11 +08:00
parent ce5ee2a289
commit ca42c6a876
49 changed files with 3569 additions and 179 deletions

View File

@ -15,6 +15,40 @@ export const mockData: CompetitionData = {
name: '星·辞海遨游',
},
nodes: [
{
nodeId: 'N3',
roundTitle: '第二轮',
moduleName: '诗词理解',
batchName: '选择题',
description: '请选择正确的选项时间为30秒。',
uiTemplate: 'TEMPLATE_POETRY_MULTIPLE_CHOICE',
config: { timeLimit: 300, questionCount: 2, scorePerQuestion: 2 },
questions: [
{
id: 'Q3',
content: {
title: '《闻王昌龄左迁龙标遥有此寄》中,“左迁”的意思是()',
options: [
{ label: 'A', text: '贬官,降职', image: img },
{ label: 'B', text: '搬家', image: img },
{ label: 'C', text: '一路向西游玩', image: img },
],
},
answer: ['A'],
},
{
id: 'Q4',
content: {
title: '《静夜思》中,“举头望明月”的下一句是()',
options: [
{ label: 'A', text: '低头思故乡', image: img },
{ label: 'B', text: '疑是地上霜', image: img },
],
},
answer: ['A'],
},
],
},
{
nodeId: 'N1',
roundTitle: '第一轮',
@ -26,12 +60,18 @@ export const mockData: CompetitionData = {
questions: [
{
id: 'Q1',
content: { pinyin: 'jiū,表示小鸟的叫声', hint: '表示小鸟的叫声' },
content: {
title: 'jiū,表示小鸟的叫声',
meta: { hint: '表示小鸟的叫声' },
},
answer: ['啾'],
},
{
id: 'Q2',
content: { pinyin: 'yāo', hint: '形容草木茂盛美丽' },
content: {
title: 'yāo',
meta: { hint: '形容草木茂盛美丽' },
},
answer: ['夭'],
},
],
@ -41,24 +81,25 @@ export const mockData: CompetitionData = {
roundTitle: '第二轮',
moduleName: '汉字听一听',
batchName: '同音字',
description: '请根据拼音书写同音字时间为30秒。',
description: '诗词理解',
uiTemplate: 'TEMPLATE_DICTATION_HOMOPHONE',
config: { timeLimit: 5, questionCount: 2, scorePerQuestion: 1 },
questions: [
{
id: 'Q3',
content: { mainText: 'táng' },
content: { title: 'táng' },
answer: ['唐', '塘', '糖', '搪', '溏', '瑭', '鄌', '螗', '糖', '堂', '膛', '螳', '鄳', '樘', '镗', '棠', '饧'],
},
{
id: 'Q4',
content: { mainText: 'jù' },
content: { title: 'jù' },
answer: ['剧', '据', '巨', '拒', '聚', '炬', '距', '惧', '具', '俱', '沮', '咀', '矩', '锯'],
},
],
},
{
nodeId: 'N3',
nodeId: 'N4',
roundTitle: '第三轮',
moduleName: '汉字加一加',
batchName: '部件组合',
@ -68,13 +109,13 @@ export const mockData: CompetitionData = {
questions: [
{
id: 'Q5',
content: { component: '车' },
content: { title: '车' },
answer: ['辆', '轿', '转', '软', '轮', '辐', '输', '轨', '轩', '轻', '轶', '辄', '轴', '轧', '轼', '辊', '辕', '辙', '辍', '辗', '轸', '轭', '辚', '辖', '较', '辘', '轫', '轵', '辋', '轲', '轺', '臻', '软', '辌', '轷', '轻', '辁', '辒', '蚺', '韫', '轱', '辂', '轻', '轹', '辅', '舻', '辐', '斩', '连', '阵', '军', '轰', '库', '辈', '载', '辈', '晕', '辔'],
},
],
},
{
nodeId: 'N4',
nodeId: 'N5',
roundTitle: '第四轮',
moduleName: '词语听写',
batchName: '拼音写词',
@ -84,18 +125,24 @@ export const mockData: CompetitionData = {
questions: [
{
id: 'Q6',
content: { pinyin: 'zhì rè', hint: '形容温度极高' },
content: {
title: 'zhì rè',
meta: { hint: '形容温度极高' },
},
answer: ['炙热'],
},
{
id: 'Q7',
content: { pinyin: 'hào hàn', hint: '形容广大繁多' },
content: {
title: 'hào hàn',
meta: { hint: '形容广大繁多' },
},
answer: ['浩瀚'],
},
],
},
{
nodeId: 'N5',
nodeId: 'N6',
roundTitle: '第五轮',
moduleName: '成语写一写',
batchName: '文字要求',
@ -105,13 +152,13 @@ export const mockData: CompetitionData = {
questions: [
{
id: 'Q8',
content: { requirement: '请写出含有反义字的四字成语。' },
content: { title: '请写出含有反义字的四字成语。' },
answer: ['七上八下', '前因后果', '大同小异', '东张西望', '左顾右盼', '南辕北辙', '深入浅出', '出生入死', '死去活来', '天翻地覆', '黑白分明'],
},
],
},
{
nodeId: 'N6',
nodeId: 'N7',
roundTitle: '第六轮',
moduleName: '成语写一写',
batchName: '看图写成语',
@ -121,16 +168,47 @@ export const mockData: CompetitionData = {
questions: [
{
id: 'Q9',
content: { hint: '比喻事情已定', image: img },
content: {
title: '',
titleImage: img,
meta: { hint: '比喻事情已定' },
},
answer: ['板上钉钉'],
},
{
id: 'Q10',
content: { hint: '比喻事情已定', image: img },
content: {
title: '',
titleImage: img,
meta: { hint: '比喻事情已定' },
},
answer: ['板上钉钉'],
},
],
},
{
nodeId: 'N8',
roundTitle: '第七轮',
moduleName: '汉字辨析',
batchName: '选字填空',
description: '请选择正确的汉字填入括号中。',
uiTemplate: 'TEMPLATE_POETRY_MULTIPLE_CHOICE',
config: { timeLimit: 20, questionCount: 1, scorePerQuestion: 2 },
questions: [
{
id: 'Q11',
content: {
title: '下列哪个字是“没”的繁体字?',
options: [
{ label: 'A', text: '没', renderType: 'tianzige' },
{ label: 'B', text: '沒', renderType: 'tianzige' },
{ label: 'C', text: '殁', renderType: 'tianzige' },
],
},
answer: ['B'],
},
],
},
],
}
@ -141,4 +219,5 @@ export const uiTemplatesMapping = {
TEMPLATE_WORD_DICTATION: '词语听写',
TEMPLATE_IDIOM_TEXT_REQ: '成语-文字要求',
TEMPLATE_IDIOM_IMAGE: '成语-看图',
TEMPLATE_POETRY_MULTIPLE_CHOICE: '诗词理解-选择题',
}