提交 590d575d authored 作者: 王鹏飞's avatar 王鹏飞

bug fixes

上级 9a22a3b3
......@@ -46,7 +46,7 @@
</el-form>
<div class="buttons">
<el-button type="primary" @click="prevStep">上一步</el-button>
<el-button type="primary" style="margin-left: 20px" @click="handleSave">保存</el-button>
<el-button type="primary" style="margin-left: 20px" :disabled="loading" @click="handleSave">保存</el-button>
</div>
</div>
<BatchSetting
......@@ -76,7 +76,8 @@ export default {
questions: [], // 选择的完整试题列表
questionTypeGroups: {}, // 试题类型组
visible: false,
batchSettingQuestionType: null // 批量设置试题类型
batchSettingQuestionType: null, // 批量设置试题类型
loading: false
}
},
computed: {
......@@ -111,8 +112,10 @@ export default {
},
// 批量获取试题列表,根据选中的试题
batchGetQuestionList() {
this.loading = true
const ids = this.multipleSelection.map(item => item.id)
batchGetQuestionList({ ids }).then(res => {
batchGetQuestionList({ ids })
.then(res => {
this.questions = res.data
this.questionTypeGroups = this.questions.reduce((result, item) => {
const map = { 1: '单选题', 2: '多选题', 3: '问答题', 5: '案例题', 6: '判断题', 7: '实操题', 8: '情景题' }
......@@ -131,10 +134,13 @@ export default {
return result
}, {})
})
.finally(() => {
this.loading = false
})
},
// 是否可以批量设置分数
canBatchSetting(value) {
return [1, 2, 6].includes(value)
return [1, 2, 3, 6].includes(value)
},
// 批量设置分数
showBatchSetting(data) {
......
......@@ -96,6 +96,7 @@ export default {
// 删除选中试题
handleRemove() {
this.questions = this.questions.filter(item => !this.multipleSelection.includes(item.id))
this.multipleSelection = []
},
// 保存试卷
handleSubmit() {
......
......@@ -10,7 +10,13 @@
v-on="$listeners"
>
<template v-if="item.children && item.children.length">
<question-list :list="item.children" :key="item.id" v-bind="$attrs" v-on="$listeners">
<question-list
:list="item.children"
:key="item.id"
@change="handleChange(item)"
v-bind="$attrs"
v-on="$listeners"
>
<template #selection>
<slot name="selection" v-bind="item"></slot>
</template>
......@@ -30,6 +36,14 @@ import QuestionListItem from './QuestionListItem.vue'
export default {
name: 'QuestionList',
props: { list: { type: Array, default: () => [] } },
components: { QuestionListItem }
components: { QuestionListItem },
methods: {
handleChange(data) {
// 直接修改父级分数
data.score = data.children.reduce((total, item) => {
return total + item.score
}, 0)
}
}
}
</script>
<template>
<el-card style="margin-bottom: 20px" shadow="hover">
<el-card style="margin-bottom: 20px" shadow="hover" :id="`question_index_${index}`">
<div class="question-item">
<div class="question-item-selection">
<slot name="selection"></slot>
......@@ -18,6 +18,7 @@
:min="0"
:disabled="disableScore || hasChildren"
style="width: 80px"
@change="changeScore"
></el-input-number>
</div>
</div>
......@@ -58,12 +59,12 @@
</el-radio-group>
</template>
</div>
<div class="question-item-ft">
<dl>
<div class="question-item-ft" v-if="correctAnswerText || data.question_analysis">
<dl v-if="correctAnswerText">
<dt>正确答案:</dt>
<dd class="is-answer">{{ correctAnswerText }}</dd>
</dl>
<dl>
<dl v-if="data.question_analysis">
<dt>试题解析:</dt>
<dd><div v-html="data.question_analysis"></div></dd>
</dl>
......@@ -84,11 +85,8 @@ export default {
hasChildren: { type: Boolean, default: false }
},
data() {
return {
question: {}
}
return {}
},
computed: {
// 试题类型
questionType() {
......@@ -110,14 +108,15 @@ export default {
},
// 处理后的options数据
currentQuestionOptions() {
if (!this.data.question_options) {
const options = this.data.question_options || []
if (!options.length) {
return []
}
return this.data.question_options.map((item, index) => {
return options.map((item, index) => {
// 英文字母 + 名称
item.abc = this.A_Z[index]
item.abc_option = `${this.A_Z[index]}. ${item.option}`
return item
const abc = this.A_Z[index]
const abcOption = `${this.A_Z[index]}. ${item.option}`
return { ...item, abc, abc_option: abcOption }
})
},
// 正确答案显示的英文字母
......@@ -128,6 +127,11 @@ export default {
}, [])
return result.join('、')
}
},
methods: {
changeScore() {
this.$emit('change', this.data)
}
}
}
</script>
......
......@@ -35,6 +35,9 @@ export default {
},
methods: {
handleClick(index) {
const qItemEl = document.querySelector(`#question_index_${index + 1}`)
const top = qItemEl.getBoundingClientRect().top
window.scrollTo(0, top + document.documentElement.scrollTop - 84)
this.currentIndex = index
this.$emit('indexClick', `${index + 1}`)
}
......
......@@ -14,11 +14,13 @@
<el-descriptions-item label="及格分数">{{ detail.pass_score }}</el-descriptions-item>
<el-descriptions-item label="考试时长">{{ detail.paper_times }}分钟</el-descriptions-item>
<el-descriptions-item label="最短交卷时长">{{ detail.minimum_paper_handing_time }}分钟</el-descriptions-item>
<el-descriptions-item label="试题顺序">{{ detail.paper_question_order_name }}</el-descriptions-item>
<el-descriptions-item label="试题顺序" v-if="detail.paper_type === 1">
{{ detail.paper_question_order_name }}
</el-descriptions-item>
<el-descriptions-item label="多次考试">{{ detail.is_multiple_exams_name }}</el-descriptions-item>
<el-descriptions-item label="多次考试成绩计算规则" v-if="detail.is_multiple_exams_name === '是'">{{
detail.multiple_test_score_rule_name
}}</el-descriptions-item>
<el-descriptions-item label="多次考试成绩计算规则" v-if="detail.is_multiple_exams === 1">
{{ detail.multiple_test_score_rule_name }}
</el-descriptions-item>
</el-descriptions>
</app-card>
<!-- 试卷列表 -->
......
......@@ -69,7 +69,7 @@
:controls="false"
v-model="form.pass_score"
:min="0"
:max="200"
:max="form.paper_total_score || 200"
placeholder="请输入及格分数"
style="width: 100%"
:precision="0"
......@@ -140,6 +140,13 @@ export default {
props: { id: { type: String } },
components: { QuestionTypeTreeselect },
data() {
const checkPassScore = (rule, value, callback) => {
if (value > this.form.paper_total_score) {
callback(new Error('及格分数不能大于试卷总分'))
} else {
callback()
}
}
return {
form: {
paper_title: '', // 试卷名称
......@@ -162,7 +169,10 @@ export default {
paper_type: [{ message: '请选择组卷模式', required: true, trigger: 'change' }],
paper_total_score: [{ message: '请输入试卷总分', required: true, trigger: 'blur' }],
paper_question_order: [{ message: '请选择试题顺序', required: true, trigger: 'change' }],
pass_score: [{ message: '请输入及格分数', required: true, trigger: 'blur' }],
pass_score: [
{ message: '请输入及格分数', required: true, trigger: 'blur' },
{ validator: checkPassScore, trigger: 'blur' }
],
paper_times: [{ message: '请输入考试时长', required: true, trigger: 'blur' }],
minimum_paper_handing_time: [{ message: '请输入考试时长', required: true, trigger: 'blur' }],
is_multiple_exams: [{ message: '请选择是否多次考试', required: true, trigger: 'change' }]
......@@ -188,10 +198,6 @@ export default {
},
// 保存
handleSubmit() {
if (this.form.pass_score >= this.form.paper_total_score) {
this.$message.warning('及格分数要小于试卷总分')
return
}
this.$refs.form.validate().then(() => {
// 保存成功回到列表
if (this.isEdit) {
......@@ -207,10 +213,6 @@ export default {
},
// 保存并选择试题
handleSubmitSelect() {
if (this.form.pass_score >= this.form.paper_total_score) {
this.$message.warning('及格分数要小于试卷总分')
return
}
this.$refs.form.validate().then(async () => {
if (this.isEdit) {
this.updatePaper(() => {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论