|
|
@ -9,7 +9,7 @@ |
|
|
|
|
|
|
|
|
<el-form-item :label="t('questionType')" prop="question_type"> |
|
|
<el-form-item :label="t('questionType')" prop="question_type"> |
|
|
<el-select class="input-width" v-model="formData.question_type" clearable |
|
|
<el-select class="input-width" v-model="formData.question_type" clearable |
|
|
:placeholder="t('questionTypePlaceholder')"> |
|
|
:placeholder="t('questionTypePlaceholder')" @change="typeChenge(index)"> |
|
|
<el-option label="请选择" value=""></el-option> |
|
|
<el-option label="请选择" value=""></el-option> |
|
|
<el-option v-for="(item, index) in question_typeList" :key="index" :label="item.name" |
|
|
<el-option v-for="(item, index) in question_typeList" :key="index" :label="item.name" |
|
|
:value="item.value" /> |
|
|
:value="item.value" /> |
|
|
@ -34,15 +34,17 @@ |
|
|
<upload-image v-model="formData.question_content" /> |
|
|
<upload-image v-model="formData.question_content" /> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
<!-- <el-form-item :label="t('optionJson')" prop="option_json"> |
|
|
|
|
|
<el-input v-model="formData.option_json" clearable :placeholder="t('optionJsonPlaceholder')" class="input-width" /> |
|
|
|
|
|
</el-form-item> --> |
|
|
|
|
|
|
|
|
|
|
|
<el-form-item :label="t('optionJson')"> |
|
|
<el-form-item :label="t('optionJson')"> |
|
|
<div v-for="(option, index) in formData.option_json" :key="index" class="option-item"> |
|
|
<div v-for="(option, index) in formData.option_json" :key="index" class="option-item"> |
|
|
<el-card class="box-card" shadow="never"> |
|
|
<el-card class="box-card" shadow="never"> |
|
|
|
|
|
|
|
|
<el-form-item label="类型" label-width="60"> |
|
|
<el-form-item label="编号" label-width="60" > |
|
|
|
|
|
<el-input v-model="option.option" placeholder="请输入编号" disabled/> |
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
|
|
|
<el-form-item label="类型" label-width="60" style="margin-top:5px;"> |
|
|
<el-select v-model="option.option_content_type" placeholder="请选择类型"> |
|
|
<el-select v-model="option.option_content_type" placeholder="请选择类型"> |
|
|
<el-option label="文本" value="text" /> |
|
|
<el-option label="文本" value="text" /> |
|
|
<el-option label="图片" value="image" /> |
|
|
<el-option label="图片" value="image" /> |
|
|
@ -57,26 +59,39 @@ |
|
|
<upload-file v-model="option.option_content" /> |
|
|
<upload-file v-model="option.option_content" /> |
|
|
</template> |
|
|
</template> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
<el-form-item label="答案" label-width="60"> |
|
|
|
|
|
<el-switch v-model="option.correct_answer" |
|
|
|
|
|
:disabled="formData.question_type === 'single_choice' && option.correct_answer" |
|
|
|
|
|
@change="handleCorrectAnswerChange(index)" /> |
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
|
|
|
<el-form-item label="操作" label-width="60"> |
|
|
<el-form-item label="操作" label-width="60"> |
|
|
<el-button @click="removeOption(index)" type="danger" size="small" plain>删除</el-button> |
|
|
|
|
|
|
|
|
<el-radio-group v-model="option.correct_answer" v-if="formData.question_type == 'single_choice'" @change="radioChange(index)" > |
|
|
|
|
|
<el-radio :label="true">正确答案</el-radio> |
|
|
|
|
|
</el-radio-group> |
|
|
|
|
|
|
|
|
|
|
|
<el-checkbox |
|
|
|
|
|
v-model="option.correct_answer" |
|
|
|
|
|
label="正确答案" |
|
|
|
|
|
:value="true" |
|
|
|
|
|
@change="handleCorrectAnswerChange(index)" |
|
|
|
|
|
v-if="formData.question_type == 'multiple_choice' || formData.question_type == 'true_false'" |
|
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<el-button @click="removeOption(index)" type="danger" size="small" plain style="margin-left:5px;">删除</el-button> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</el-card> |
|
|
</el-card> |
|
|
</div> |
|
|
</div> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
<el-form-item> |
|
|
<el-form-item> |
|
|
<el-button type="primary" @click="addOption">添加选项</el-button> |
|
|
<el-button type="primary" @click="addOption">添加选项</el-button> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<el-form-item label="正确答案" prop="correct_answer"> |
|
|
|
|
|
<el-input v-model="formData.correct_answer" clearable placeholder="请输入正确答案" class="input-width" /> |
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</el-form> |
|
|
</el-form> |
|
|
@ -111,29 +126,69 @@ |
|
|
question_type: '', |
|
|
question_type: '', |
|
|
question_content_type: '', |
|
|
question_content_type: '', |
|
|
question_content: '', |
|
|
question_content: '', |
|
|
option_json: [] |
|
|
option_json: [], |
|
|
|
|
|
correct_answer:'' |
|
|
} |
|
|
} |
|
|
|
|
|
const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; |
|
|
|
|
|
|
|
|
const addOption = () => { |
|
|
const addOption = () => { |
|
|
|
|
|
|
|
|
|
|
|
const index = formData.option_json.length; |
|
|
formData.option_json.push({ |
|
|
formData.option_json.push({ |
|
|
option_content_type: 'text', |
|
|
option_content_type: 'text', |
|
|
option_content: '', |
|
|
option_content: '', |
|
|
correct_answer: false |
|
|
correct_answer: false, |
|
|
|
|
|
option:alphabet[index] || '' |
|
|
}) |
|
|
}) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const removeOption = (index) => { |
|
|
const removeOption = (index) => { |
|
|
formData.option_json.splice(index, 1) |
|
|
formData.option_json.splice(index, 1) |
|
|
|
|
|
|
|
|
|
|
|
formData.option_json.forEach((opt, i) => { |
|
|
|
|
|
opt.option = alphabet[i]; |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
handleCorrectAnswerChange(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const typeChenge = () => { |
|
|
|
|
|
formData.option_json.forEach((opt, i) => { |
|
|
|
|
|
opt.correct_answer = false; |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
formData.correct_answer = ''; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const handleCorrectAnswerChange = (changedIndex) => { |
|
|
const handleCorrectAnswerChange = (changedIndex) => { |
|
|
if (formData.question_type === 'single_choice') { |
|
|
const correct_answer = []; |
|
|
formData.options.forEach((opt, i) => { |
|
|
formData.option_json.forEach((opt, i) => { |
|
|
if (i !== changedIndex) opt.correct_answer = false |
|
|
if (opt.correct_answer){ |
|
|
}) |
|
|
correct_answer.push(opt.option); |
|
|
} |
|
|
} |
|
|
|
|
|
}) |
|
|
|
|
|
formData.correct_answer = correct_answer.join(","); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const radioChange = (changedIndex) => { |
|
|
|
|
|
formData.option_json.forEach((opt, i) => { |
|
|
|
|
|
opt.correct_answer = false; |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
formData.option_json[changedIndex].correct_answer = true; |
|
|
|
|
|
|
|
|
|
|
|
formData.correct_answer = formData.option_json[changedIndex].option; |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const formData : Record<string, any> = reactive({ ...initialFormData }) |
|
|
const formData : Record<string, any> = reactive({ ...initialFormData }) |
|
|
|