|
|
@@ -64,9 +64,9 @@
|
|
|
<el-alert title="Excel格式要求" type="info" :closable="false" show-icon>
|
|
|
<template slot="default">
|
|
|
<p><strong>Excel格式要求:</strong></p>
|
|
|
- <p>• 第一行必须是标题行:题目类型、题目、选项A、选项B、选项C、选项D、正确答案、解析、分数</p>
|
|
|
+ <p>• 第一行必须是标题行:题目类型、题目、选项A、选项B、选项C、选项D、选项E、选项F、正确答案、解析、分数</p>
|
|
|
<p>• 题目类型:单选题、多选题、判断题、填空题、问答题</p>
|
|
|
- <p>• 正确答案:单选题填选项字母(A/B/C/D),多选题用逗号分隔(A,B),判断题填对/错,填空题填答案,问答题可留空</p>
|
|
|
+ <p>• 正确答案:单选题填选项字母(A/B/C/D/E/F),多选题用逗号分隔(A,B),判断题填对/错,填空题填答案,问答题可留空</p>
|
|
|
<p>• 分数:每道题的分值,建议单选题2-5分,多选题5-10分,判断题1-2分,填空题3-8分,问答题10-20分</p>
|
|
|
<p>• 支持富文本格式</p>
|
|
|
</template>
|
|
|
@@ -181,12 +181,12 @@ export default {
|
|
|
downloadTemplate() {
|
|
|
// 创建模板数据
|
|
|
const templateData = [
|
|
|
- ['题目类型', '题目', '选项A', '选项B', '选项C', '选项D', '正确答案', '解析', '分数'],
|
|
|
- ['单选题', '这是一道单选题示例?', '选项A内容', '选项B内容', '选项C内容', '选项D内容', 'A', '这是单选题的解析', '5'],
|
|
|
- ['多选题', '这是一道多选题示例?', '选项A内容', '选项B内容', '选项C内容', '选项D内容', 'A,B', '这是多选题的解析', '10'],
|
|
|
- ['判断题', '这是一道判断题示例?', '', '', '', '', '对', '这是判断题的解析', '2'],
|
|
|
- ['填空题', '这是一道填空题示例,答案是___', '', '', '', '', '答案内容', '这是填空题的解析', '8'],
|
|
|
- ['问答题', '这是一道问答题示例?', '', '', '', '', '', '这是问答题的解析', '15']
|
|
|
+ ['题目类型', '题目', '选项A', '选项B', '选项C', '选项D', '选项E', '选项F', '正确答案', '解析', '分数'],
|
|
|
+ ['单选题', '这是一道单选题示例?', '选项A内容', '选项B内容', '选项C内容', '选项D内容', '', '', 'A', '这是单选题的解析', '5'],
|
|
|
+ ['多选题', '这是一道多选题示例?', '选项A内容', '选项B内容', '选项C内容', '选项D内容', '', '', 'A,B', '这是多选题的解析', '10'],
|
|
|
+ ['判断题', '这是一道判断题示例?', '', '', '', '', '', '', '对', '这是判断题的解析', '2'],
|
|
|
+ ['填空题', '这是一道填空题示例,答案是___', '', '', '', '', '', '', '答案内容', '这是填空题的解析', '8'],
|
|
|
+ ['问答题', '这是一道问答题示例?', '', '', '', '', '', '', '', '这是问答题的解析', '15']
|
|
|
];
|
|
|
|
|
|
// 创建工作簿
|
|
|
@@ -201,6 +201,8 @@ export default {
|
|
|
{ width: 20 }, // 选项B列
|
|
|
{ width: 20 }, // 选项C列
|
|
|
{ width: 20 }, // 选项D列
|
|
|
+ { width: 20 }, // 选项E列
|
|
|
+ { width: 20 }, // 选项F列
|
|
|
{ width: 12 }, // 正确答案列
|
|
|
{ width: 30 }, // 解析列
|
|
|
{ width: 8 } // 分数列
|
|
|
@@ -263,9 +265,9 @@ export default {
|
|
|
const nameWithoutExt = fileName.replace(/\.[^/.]+$/, "");
|
|
|
this.formData.name = this.formData.name || nameWithoutExt;
|
|
|
|
|
|
- if (allData.length < 3) return this.$message.error("Excel 数据行数不足");
|
|
|
+ if (allData.length < 2) return this.$message.error("Excel 数据行数不足");
|
|
|
|
|
|
- const rows = allData.slice(2).filter(r => r.some(c => c !== ""));
|
|
|
+ const rows = allData.slice(1).filter(r => r.some(c => c !== ""));
|
|
|
this.previewData = rows.map((r, index) => ({
|
|
|
_id: index,
|
|
|
topic_type: r[0] || "",
|
|
|
@@ -274,13 +276,13 @@ export default {
|
|
|
answer_B: r[3] || "",
|
|
|
answer_C: r[4] || "",
|
|
|
answer_D: r[5] || "",
|
|
|
- correct_answer: r[6] || "",
|
|
|
- topic_analysis: r[7] || "",
|
|
|
- score: Number(r[8]) || 0,
|
|
|
+ answer_E: r[6] || "",
|
|
|
+ answer_F: r[7] || "",
|
|
|
+ correct_answer: r[8] || "",
|
|
|
+ topic_analysis: r[9] || "",
|
|
|
+ score: Number(r[10]) || 0,
|
|
|
show_type: 1, // 导入的数据固定为文本类型
|
|
|
answer_type: 2, // 导入的数据固定为不可提交图片答案
|
|
|
- answer_E: "", // 默认空值
|
|
|
- answer_F: "", // 默认空值
|
|
|
topic_image_id: "", // 默认空值
|
|
|
sort: index + 1, // 按顺序排序
|
|
|
status: 1, // 默认有效状态
|