Browse Source

优化选择题判分批量设置逻辑

dengshaobo 4 weeks ago
parent
commit
153d75cca8
1 changed files with 45 additions and 3 deletions
  1. 45 3
      src/views/exam/question.vue

+ 45 - 3
src/views/exam/question.vue

@@ -22,11 +22,11 @@
             设置试题结构:
             <div class="item_search">
                 <div class="search_name">题目从</div>
-                <el-select  v-model="queryParams.start"   placeholder="请选择"  class="select_width" >
+                <el-select  v-model="queryParams.start"   placeholder="请选择"  filterable  class="select_width" >
                     <el-option :label="number" :value="number" v-for="number in questionRange"></el-option>
                 </el-select>
                 <div class="search_name">至</div>
-                <el-select  v-model="queryParams.end"   placeholder="请选择"  class="select_width" >
+                <el-select  v-model="queryParams.end"   placeholder="请选择"  filterable  class="select_width" >
                     <el-option :label="number" :value="number" v-for="number in questionRange"></el-option>
                 </el-select>
             </div>
@@ -332,7 +332,15 @@ const onTemplateChanged=(templateData: any)=>{
 //切换题目类型
 const TypeChange=(item:any)=>{
     console.log("打印题目类型",item)
-    
+    if (item.questionType == 2) {
+        //切换到多选题:默认给分分布规则为「全对得满分,少选得0分,选错不得分」
+        item.multipleRule = '1'
+        item.multipleRuleDesc = '0'
+    } else {
+        //切换到单选/判断题:清空多选题给分规则相关字段,避免脏数据
+        item.multipleRule = ''
+        item.multipleRuleDesc = ''
+    }
 }
 
 
@@ -425,6 +433,25 @@ const FinishQuestion=async ()=>{
         ElMessage.error("请添加题目!")
         return
     }
+    //校验:每题满分必须都设置
+    const missingScoreRow = tableData.value.find((item: any) => {
+        return item.fullScore === '' || item.fullScore === null || item.fullScore === undefined
+    })
+    if (missingScoreRow) {
+        ElMessage.error(`请完善题目「${missingScoreRow.questionName}」的满分`)
+        return
+    }
+    //校验:多选题必须设置给分分布规则
+    const isRuleDescEmpty = (val: any) => val === '' || val === null || val === undefined || String(val).trim() === ''
+    const missingRuleRow = tableData.value.find((item: any) => {
+        if (item.questionType != 2) return false
+        if (!item.multipleRule) return true
+        return isRuleDescEmpty(item.multipleRuleDesc)
+    })
+    if (missingRuleRow) {
+        ElMessage.error(`请完善题目「${missingRuleRow.questionName}」的多选题给分分布规则`)
+        return
+    }
     ElMessageBox.confirm('确认完成吗?', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
@@ -816,6 +843,21 @@ const EnterSetQuestion=()=>{
         ElMessage.error('结束题号不能小于起始题号');
         return;
     }
+    //校验:题目类型必选
+    if (!queryParams.value.questionType) {
+        ElMessage.error('请选择题目类型');
+        return;
+    }
+    //校验:每题满分必填
+    if (queryParams.value.fullMark === '' || queryParams.value.fullMark === null || queryParams.value.fullMark === undefined) {
+        ElMessage.error('请输入每题满分');
+        return;
+    }
+    //校验:多选题必须填写少选得分
+    if (queryParams.value.questionType == 2 && (shaoxuan.value === '' || shaoxuan.value === null || shaoxuan.value === undefined)) {
+        ElMessage.error('请输入多选题少选得分');
+        return;
+    }
     const params={
         examSubjectId: examSubjectId.value,//考试科目id
         questionMin: queryParams.value.start,//起始题号