From 6459f8bff3e568e65e6dc617f22c686cf5a8db44 Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期一, 15 七月 2024 16:35:06 +0800 Subject: [PATCH] 组卷 --- src/views/onlineEducation/groupExams/components/examDialog.vue | 140 +++++++++++++++++++++++++++++++++------------- 1 files changed, 99 insertions(+), 41 deletions(-) diff --git a/src/views/onlineEducation/groupExams/components/examDialog.vue b/src/views/onlineEducation/groupExams/components/examDialog.vue index e2ec21c..6f12c6d 100644 --- a/src/views/onlineEducation/groupExams/components/examDialog.vue +++ b/src/views/onlineEducation/groupExams/components/examDialog.vue @@ -4,6 +4,7 @@ v-model="dialogVisible" width="800px" :before-close="handleClose" + destroy-on-close > <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" > <span style="font-size: 20px;font-weight: 800;margin-left: 20px">考试配置</span> @@ -28,15 +29,18 @@ <div style="display: flex"> <div class="group"> <div> - 单选:<el-input style="max-width: 40px"></el-input> 题 + 单选:<el-input style="max-width: 40px" v-model.trim="state.form.singleNum"></el-input> 题 </div> <div style="margin-left: 20px"> - 每题:<el-input style="max-width: 40px"></el-input> 分 + 每题:<el-input style="max-width: 40px" v-model.trim="state.form.singleScore"></el-input> 分 </div> </div> <div class="group" > <div> - 共 <span style="max-width: 30px">xxx</span> 分 + 共 + <span style="max-width: 30px" v-show="state.form.singleNum && state.form.singleScore">{{state.form.singleNum * state.form.singleScore}}</span> +<!-- <span v-else></span>--> + 分 </div> <el-select clearable @@ -54,33 +58,36 @@ :value="item.id" /> </el-select> - <el-radio-group v-model="radio" > + <el-radio-group v-model="state.form.singleMethod" > <el-radio :label="1" style="max-width: 30px">随机</el-radio> - <el-radio :label="2">默认</el-radio> + <el-radio :label="2">顺序</el-radio> </el-radio-group> </div> </div> <div style="display: flex"> <div class="group"> <div> - 多选:<el-input style="max-width: 40px"></el-input> 题 + 多选:<el-input style="max-width: 40px" v-model="state.form.multiNum"></el-input> 题 </div> <div style="margin-left: 20px"> - 每题:<el-input style="max-width: 40px"></el-input> 分 + 每题:<el-input style="max-width: 40px" v-model="state.form.multiScore"></el-input> 分 </div> </div> <div class="group" > - <div> - 共 <span style="max-width: 30px">xxx</span> 分 + <div > + 共 + <span style="max-width: 30px" v-show="state.form.multiNum && state.form.multiScore">{{state.form.multiNum * state.form.multiScore}}</span> +<!-- <span v-else></span>--> + 分 </div> <el-select clearable - v-model="state.form.singleBankId" + v-model="state.form.multiBankId" style="width: 160px;margin: 0 20px" v-loadMoreNew:[reselectSingle]="handleScroll" :popper-class="reselectSingle.name" class="item-width" - placeholder="请选择单选题题库" + placeholder="请选择多选题题库" > <el-option v-for="item in state.bankListSingle" @@ -89,33 +96,36 @@ :value="item.id" /> </el-select> - <el-radio-group v-model="radio" > + <el-radio-group v-model="state.form.multiMethod" > <el-radio :label="1" style="max-width: 30px">随机</el-radio> - <el-radio :label="2">默认</el-radio> + <el-radio :label="2">顺序</el-radio> </el-radio-group> </div> </div> <div style="display: flex"> <div class="group"> <div> - 判断:<el-input style="max-width: 40px"></el-input> 题 + 判断:<el-input style="max-width: 40px" v-model="state.form.judgeNum"></el-input> 题 </div> <div style="margin-left: 20px"> - 每题:<el-input style="max-width: 40px"></el-input> 分 + 每题:<el-input style="max-width: 40px" v-model="state.form.judgeScore"></el-input> 分 </div> </div> <div class="group" > <div> - 共 <span style="max-width: 30px">xxx</span> 分 + 共 + <span style="max-width: 30px" v-show="state.form.judgeNum && state.form.judgeScore">{{state.form.judgeNum * state.form.judgeScore}}</span> +<!-- <span v-else></span>--> + 分 </div> <el-select clearable - v-model="state.form.singleBankId" + v-model="state.form.judgeBankId" style="width: 160px;margin: 0 20px" v-loadMoreNew:[reselectSingle]="handleScroll" :popper-class="reselectSingle.name" class="item-width" - placeholder="请选择单选题题库" + placeholder="请选择判断题题库" > <el-option v-for="item in state.bankListSingle" @@ -124,24 +134,32 @@ :value="item.id" /> </el-select> - <el-radio-group v-model="radio" > + <el-radio-group v-model="state.form.judgeMethod" > <el-radio :label="1" style="max-width: 30px">随机</el-radio> - <el-radio :label="2">默认</el-radio> + <el-radio :label="2">顺序</el-radio> </el-radio-group> </div> </div> - <span class="group" style="margin-bottom: 10px">共计:xxx分</span> + <span class="group" style="margin-bottom: 20px">共计: + {{state.form.judgeNum * state.form.judgeScore+state.form.multiNum * state.form.multiScore+state.form.singleNum * state.form.singleScore}} + 分</span> <div style="display: flex;justify-content: space-between;align-items: center"> - <el-form-item label="合格分数:" prop=""> - <el-input-number v-model="num" :min="1" :max="10" style="margin-right: 10px" /> (大于等于) + <el-form-item label="合格分数:" prop="passScore"> + <el-input-number v-model="state.form.passScore" :min="1" :max="1000" style="margin-right: 10px" /> (大于等于) </el-form-item> - <el-form-item label="限制时长:" prop=""> - <el-input v-model="num1" style="max-width: 200px" > + <el-form-item label="限制时长:" prop="limitTime"> + <el-input v-model="state.form.limitTime" style="max-width: 200px" :disabled="state.form.limited === 0"> <template #append>分钟</template> </el-input> </el-form-item> - </div> + </div> + <el-form-item label="是否限制考试时长:" prop="limited" style="margin-left: 60px"> + <el-radio-group v-model="state.form.limited" @change="changeLimit" > + <el-radio :label="0" style="max-width: 30px">否</el-radio> + <el-radio :label="1">是</el-radio> + </el-radio-group> + </el-form-item> </el-form> <template #footer> <span class="dialog-footer"> @@ -169,7 +187,7 @@ editQuestionBank, getQuestionBank } from "@/api/onlineEducation/questionBank"; -import {checkExamName} from "@/api/onlineEducation/exam"; +import {addExam, checkExamName, editExam} from "@/api/onlineEducation/exam"; const dialogVisible = ref(false); const title = ref(""); @@ -214,11 +232,30 @@ name: '', categoryId: null, companyName: '', - companyId: null + companyId: null, + judgeBankId: null, + judgeMethod: 1, + judgeNum: null, + judgeScore: null, + multiBankId: null, + multiMethod: 1, + multiNum: null, + multiScore: null, + singleBankId: null, + singleMethod: 1, + singleNum: null, + singleScore: null, + limited: 1, + limitTime: null, + passScore: null + }, formRules: { name: [{required: true, trigger: "blur", validator: validateName}], categoryId: [{required: true, message: '请选择课程分类', trigger: 'blur'}], + limited: [{required: true, message: '请选择课程分类', trigger: 'blur'}], + limitTime: [{required: true, message: '请选择课程分类', trigger: 'blur'}], + passScore: [{required: true, message: '请选择课程分类', trigger: 'blur'}] }, classifyList: [], isAdmin: false, @@ -247,9 +284,7 @@ } title.value = type === 'addFirst' || type === 'add' ? '新增' : type ==='edit' ? '编辑' : '' ; if(type === 'edit') { - state.form.id = value.id - state.form.name = value.name - state.form.categoryId = value.categoryId + state.form = value startUsername.value = value.name; }else if(type === 'add' && value ){ state.form.parentId = value.id @@ -258,18 +293,18 @@ } const onSubmit = async () => { - if(state.isAdmin){ - ElMessage({ - type: 'warning', - message: '管理员暂无权限' - }); - return; - } + // if(state.isAdmin){ + // ElMessage({ + // type: 'warning', + // message: '管理员暂无权限' + // }); + // return; + // } const valid = await busRef.value.validate(); if(valid){ if(title.value === '新增'){ const {id, ...data} = JSON.parse(JSON.stringify(state.form)) - const res = await addQuestionBank(data) + const res = await addExam(data) if(res.code === 200){ ElMessage({ type: 'success', @@ -284,7 +319,7 @@ dialogVisible.value = false; }else if(title.value === '编辑'){ const {...data} = JSON.parse(JSON.stringify(state.form)) - const res = await editQuestionBank(data) + const res = await editExam(data) if(res.code === 200){ ElMessage({ type: 'success', @@ -348,7 +383,22 @@ name: '', categoryId: null, companyName: '', - companyId: null + companyId: null, + judgeBankId: null, + judgeMethod: 1, + judgeNum: null, + judgeScore: null, + multiBankId: null, + multiMethod: 1, + multiNum: null, + multiScore: null, + singleBankId: null, + singleMethod: 1, + singleNum: null, + singleScore: null, + limited: 0, + limitTime: null, + passScore: null } } const handleScroll = () => { @@ -372,6 +422,14 @@ ElMessage.warning(res.message) } } + +const changeLimit = (val) => { + state.form.limitTime = null + if(val === 0) { + state.form.limitTime = 0 + } + +} defineExpose({ openDialog }); -- Gitblit v1.9.2