🎉 initial commit
This commit is contained in:
297
src/mocks/questions.mock.ts
Normal file
297
src/mocks/questions.mock.ts
Normal file
@@ -0,0 +1,297 @@
|
||||
import { defineMock } from '@alova/mock';
|
||||
|
||||
// 模拟题目数据
|
||||
const mockQuestions = [
|
||||
{
|
||||
id: '1',
|
||||
title: '朱熹的生卒年份',
|
||||
content: '朱熹(朱子)生于哪一年,卒于哪一年?',
|
||||
type: 'single',
|
||||
options: [
|
||||
{ key: 'A', value: '1130-1200', isCorrect: true },
|
||||
{ key: 'B', value: '1120-1190' },
|
||||
{ key: 'C', value: '1140-1210' },
|
||||
{ key: 'D', value: '1125-1195' }
|
||||
],
|
||||
correctAnswer: ['A'],
|
||||
score: 10,
|
||||
difficulty: 'easy',
|
||||
category: '朱子生平',
|
||||
tags: ['朱熹', '生平', '基础知识'],
|
||||
createTime: '2024-01-01 10:00:00',
|
||||
updateTime: '2024-01-01 10:00:00'
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
title: '朱子理学的核心思想',
|
||||
content: '朱子理学的核心思想包括哪些?(多选)',
|
||||
type: 'multiple',
|
||||
options: [
|
||||
{ key: 'A', value: '理气论', isCorrect: true },
|
||||
{ key: 'B', value: '心性论', isCorrect: true },
|
||||
{ key: 'C', value: '格物致知', isCorrect: true },
|
||||
{ key: 'D', value: '王道思想' }
|
||||
],
|
||||
correctAnswer: ['A', 'B', 'C'],
|
||||
score: 15,
|
||||
difficulty: 'medium',
|
||||
category: '朱子思想',
|
||||
tags: ['理学', '哲学', '思想'],
|
||||
createTime: '2024-01-01 11:00:00',
|
||||
updateTime: '2024-01-01 11:00:00'
|
||||
},
|
||||
{
|
||||
id: '3',
|
||||
title: '朱子的著作',
|
||||
content: '《四书章句集注》是朱子的代表作品吗?',
|
||||
type: 'single',
|
||||
options: [
|
||||
{ key: 'A', value: '是', isCorrect: true },
|
||||
{ key: 'B', value: '不是' }
|
||||
],
|
||||
correctAnswer: ['A'],
|
||||
score: 8,
|
||||
difficulty: 'easy',
|
||||
category: '朱子著作',
|
||||
tags: ['著作', '四书'],
|
||||
createTime: '2024-01-01 12:00:00',
|
||||
updateTime: '2024-01-01 12:00:00'
|
||||
},
|
||||
{
|
||||
id: '4',
|
||||
title: '朱子的家乡',
|
||||
content: '朱熹的出生地是哪里?',
|
||||
type: 'single',
|
||||
options: [
|
||||
{ key: 'A', value: '江西婺源' },
|
||||
{ key: 'B', value: '福建尤溪', isCorrect: true },
|
||||
{ key: 'C', value: '福建建阳' },
|
||||
{ key: 'D', value: '浙江金华' }
|
||||
],
|
||||
correctAnswer: ['B'],
|
||||
score: 12,
|
||||
difficulty: 'medium',
|
||||
category: '朱子生平',
|
||||
tags: ['家乡', '生平'],
|
||||
createTime: '2024-01-01 13:00:00',
|
||||
updateTime: '2024-01-01 13:00:00'
|
||||
},
|
||||
{
|
||||
id: '5',
|
||||
title: '朱子教育思想',
|
||||
content: '朱子在教育方面提出了哪些重要观点?(多选)',
|
||||
type: 'multiple',
|
||||
options: [
|
||||
{ key: 'A', value: '因材施教', isCorrect: true },
|
||||
{ key: 'B', value: '学思并重', isCorrect: true },
|
||||
{ key: 'C', value: '博学笃行', isCorrect: true },
|
||||
{ key: 'D', value: '死记硬背' }
|
||||
],
|
||||
correctAnswer: ['A', 'B', 'C'],
|
||||
score: 20,
|
||||
difficulty: 'hard',
|
||||
category: '朱子教育',
|
||||
tags: ['教育', '思想', '方法'],
|
||||
createTime: '2024-01-01 14:00:00',
|
||||
updateTime: '2024-01-01 14:00:00'
|
||||
}
|
||||
];
|
||||
|
||||
// 题目分类
|
||||
const mockCategories = [
|
||||
{ name: '朱子生平', count: 2 },
|
||||
{ name: '朱子思想', count: 1 },
|
||||
{ name: '朱子著作', count: 1 },
|
||||
{ name: '朱子教育', count: 1 }
|
||||
];
|
||||
|
||||
// 题库管理接口的mock数据
|
||||
export default defineMock({
|
||||
// 获取题目列表
|
||||
'[GET]/admin/questions': ({ query }) => {
|
||||
let filteredQuestions = [...mockQuestions];
|
||||
|
||||
// 关键词搜索
|
||||
if (query.keyword) {
|
||||
filteredQuestions = filteredQuestions.filter(q =>
|
||||
q.title.includes(query.keyword!) ||
|
||||
q.content.includes(query.keyword!) ||
|
||||
q.category.includes(query.keyword!)
|
||||
);
|
||||
}
|
||||
|
||||
// 题型筛选
|
||||
if (query.type) {
|
||||
filteredQuestions = filteredQuestions.filter(q => q.type === query.type);
|
||||
}
|
||||
|
||||
// 难度筛选
|
||||
if (query.difficulty) {
|
||||
filteredQuestions = filteredQuestions.filter(q => q.difficulty === query.difficulty);
|
||||
}
|
||||
|
||||
// 分类筛选
|
||||
if (query.category) {
|
||||
filteredQuestions = filteredQuestions.filter(q => q.category === query.category);
|
||||
}
|
||||
|
||||
// 分页
|
||||
const page = parseInt(query.page) || 1;
|
||||
const pageSize = parseInt(query.pageSize) || 10;
|
||||
const total = filteredQuestions.length;
|
||||
const start = (page - 1) * pageSize;
|
||||
const end = start + pageSize;
|
||||
|
||||
return {
|
||||
code: 200,
|
||||
message: 'success',
|
||||
data: {
|
||||
list: filteredQuestions.slice(start, end),
|
||||
total,
|
||||
page,
|
||||
pageSize
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
// 获取题目详情
|
||||
'[GET]/admin/questions/{id}': ({ params }) => {
|
||||
const question = mockQuestions.find(q => q.id === params.id);
|
||||
if (!question) {
|
||||
return {
|
||||
status: 404,
|
||||
body: {
|
||||
code: 404,
|
||||
message: '题目不存在',
|
||||
data: null
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
code: 200,
|
||||
message: 'success',
|
||||
data: question
|
||||
};
|
||||
},
|
||||
|
||||
// 创建题目
|
||||
'[POST]/admin/questions': ({ data }) => {
|
||||
const newQuestion = {
|
||||
...data,
|
||||
id: (mockQuestions.length + 1).toString(),
|
||||
createTime: new Date().toLocaleString('zh-CN'),
|
||||
updateTime: new Date().toLocaleString('zh-CN')
|
||||
};
|
||||
|
||||
mockQuestions.push(newQuestion);
|
||||
|
||||
return {
|
||||
code: 200,
|
||||
message: 'success',
|
||||
data: {
|
||||
message: '创建成功',
|
||||
id: newQuestion.id
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
// 更新题目
|
||||
'[PUT]/admin/questions/{id}': ({ params, data }) => {
|
||||
const index = mockQuestions.findIndex(q => q.id === params.id);
|
||||
if (index === -1) {
|
||||
return {
|
||||
status: 404,
|
||||
body: {
|
||||
code: 404,
|
||||
message: '题目不存在',
|
||||
data: null
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
mockQuestions[index] = {
|
||||
...data,
|
||||
id: params.id,
|
||||
createTime: mockQuestions[index].createTime,
|
||||
updateTime: new Date().toLocaleString('zh-CN')
|
||||
};
|
||||
|
||||
return {
|
||||
code: 200,
|
||||
message: 'success',
|
||||
data: { message: '更新成功' }
|
||||
};
|
||||
},
|
||||
|
||||
// 删除题目
|
||||
'[DELETE]/admin/questions/{id}': ({ params }) => {
|
||||
const index = mockQuestions.findIndex(q => q.id === params.id);
|
||||
if (index === -1) {
|
||||
return {
|
||||
status: 404,
|
||||
body: {
|
||||
code: 404,
|
||||
message: '题目不存在',
|
||||
data: null
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
mockQuestions.splice(index, 1);
|
||||
|
||||
return {
|
||||
code: 200,
|
||||
message: 'success',
|
||||
data: { message: '删除成功' }
|
||||
};
|
||||
},
|
||||
|
||||
// 批量删除题目
|
||||
'[DELETE]/admin/questions/batch': ({ data }) => {
|
||||
let deletedCount = 0;
|
||||
data.ids.forEach(id => {
|
||||
const index = mockQuestions.findIndex(q => q.id === id);
|
||||
if (index !== -1) {
|
||||
mockQuestions.splice(index, 1);
|
||||
deletedCount++;
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
code: 200,
|
||||
message: 'success',
|
||||
data: {
|
||||
message: `成功删除${deletedCount}个题目`
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
// 获取题目分类列表
|
||||
'[GET]/admin/questions/categories': () => {
|
||||
return {
|
||||
code: 200,
|
||||
message: 'success',
|
||||
data: mockCategories
|
||||
};
|
||||
},
|
||||
|
||||
// 导出题目模板
|
||||
'[GET]/admin/questions/template': () => {
|
||||
const blob = new Blob(['模板内容'], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
|
||||
return blob;
|
||||
},
|
||||
|
||||
// 批量导入题目
|
||||
'[POST]/admin/questions/import': () => {
|
||||
return {
|
||||
code: 200,
|
||||
message: 'success',
|
||||
data: {
|
||||
message: '导入成功',
|
||||
successCount: 5,
|
||||
failCount: 0
|
||||
}
|
||||
};
|
||||
}
|
||||
}, true);
|
||||
Reference in New Issue
Block a user