dedsudiyu дней назад: 3
Родитель
Сommit
477315bda4

+ 8 - 0
src/api/safetyEducationExaminationNew/index.js

@@ -424,6 +424,14 @@ export function examElExamMakeupCandidates(data) {
     data: data
   })
 }
+//考试安排查询已开始补考的候选人
+export function examElExamMakeupResults(data) {
+  return request({
+    url: '/exam/elExam/makeup-results',
+    method: 'post',
+    data: data
+  })
+}
 //考试结果列表
 export function examElExamResultPage(data) {
   return request({

+ 8 - 3
src/views/safetyEducationExaminationNew/examManagement/examinationArrange/index.vue

@@ -58,8 +58,8 @@
           </el-form-item>
           <el-form-item label="" prop="makeup">
             <el-select v-model="queryParams.makeup" placeholder="是否补考" style="width: 140px">
-              <el-option label="正常考试" value="0"/>
-              <el-option label="补考" value="1"/>
+              <el-option label="无补考" value="0"/>
+              <el-option label="补考" value="1"/>
             </el-select>
           </el-form-item>
           <el-form-item label="" prop="searchValue">
@@ -257,6 +257,7 @@
           obj.startTime = "";
           obj.endTime = "";
         }
+        obj.examKind = 1;
         examElExamPage(obj).then(response => {
 
           this.$set(this,'dataList',response.data.records);
@@ -273,7 +274,11 @@
         }else if(type == 2){
           //补考
           this.$set(this,'pageType',3);
-          this.$set(this,'propsData',{id:row.id});
+          this.$set(this,'propsData',{
+            id:row.id,
+            makeupExamId:row.makeupExamId,
+            makeupStarted:row.makeupStarted,
+          });
         }else if(type == 3){
           //编辑
           this.$set(this,'pageType',2);

+ 114 - 10
src/views/safetyEducationExaminationNew/examManagement/examinationArrange/studentsTakingMakeUpExams.vue

@@ -4,10 +4,10 @@
     <div class="page-container-top-max-big-box">
       <p class="top-1-p">补考安排</p>
       <p class="top-2-p" @click="backPage()">返回</p>
-      <p class="top-4-p" @click="submitButton()">保存</p>
+      <p class="top-4-p" @click="submitButton()" v-if="makeupStarted == 0">保存</p>
     </div>
     <div class="content-box">
-      <div class="max-add-form-box">
+      <div class="max-add-form-box" v-if="makeupStarted == 0">
         <el-form class="add-form-box" :model="newData" ref="form" label-width="140px" :rules="rules">
           <div class="form-flex-box">
             <el-form-item label="复用原试卷" prop="reuseOriginalPaper">
@@ -53,6 +53,25 @@
               >
               </el-input-number>
             </el-form-item>
+            <el-form-item label="考试时长" prop="answerDuration">
+              <div class="stepper-row">
+                <div class="number-stepper">
+                  <div class="number-stepper">
+                    <el-input-number
+                      class="form-input-number"
+                      style="width:160px"
+                      :min="0"
+                      :max="9999"
+                      :step="1" :precision="0" step-strictly
+                      v-model="newData.answerDuration"
+                    >
+                    </el-input-number>
+                  </div>
+                </div>
+                <span class="unit-text">分钟</span>
+                <span class="tip-text" style="margin-left:12px;">限制答卷最大时长</span>
+              </div>
+            </el-form-item>
           </div>
         </el-form>
       </div>
@@ -170,9 +189,10 @@
   import examDetails from '@/views/safetyEducationExaminationNew/components/examDetails.vue'
   import selectTestPaper from './selectTestPaper.vue'
   import {
-    systemUserGetAcademicYear,
+    systemUserGetAcademicYear,examElExamMakeupResults,
     examElExamMakeupAdd,examElExamMakeupCandidates,
-    examElDisciplineTypeList, systemDeptCurrentDept
+    examElDisciplineTypeList, systemDeptCurrentDept,
+    examElExamDetail
   } from '@/api/safetyEducationExaminationNew/index'
 
   export default {
@@ -185,6 +205,13 @@
       propsData: {}
     },
     data() {
+      const validateData = (rule, value, callback) => {
+        if (value == 0) {
+          callback(new Error('总分数不能为0'))
+        } else {
+          callback()
+        }
+      }
       return {
         //日期选择范围限制
         pickerOptions: {
@@ -196,6 +223,7 @@
           parentExamId:null,
           reuseOriginalPaper: 1,
           attemptLimit: 1,
+          answerDuration: 0,
           paperId: null,
           paperName: '',
           examTimeRange: [],
@@ -209,6 +237,10 @@
             { required: true, message: "请选择可补考次数", trigger: "blur" },
             { required: true, message: "请选择可补考次数", validator: this.spaceJudgment, trigger: "blur" }
           ],
+          answerDuration: [
+            { required: true, message: '请选择考试时长', trigger: 'change' },
+            { validator: validateData, trigger: 'blur' }
+          ],
           examTimeRange: [
             { required: true, message: "请选择补考时间", trigger: "blur" },
             { required: true, message: "请选择补考时间", validator: this.spaceJudgment, trigger: "blur" }
@@ -234,20 +266,39 @@
         //弹窗相关
         drawerTitle: '',
         drawerType: '',
-        drawer: false
+        drawer: false,
+        //补考是否已开始 0未开始 1开始
+        makeupStarted:null,
       }
     },
     created() {
 
     },
     mounted() {
+      this.$set(this,'makeupStarted',this.propsData.makeupStarted);
+      if(this.propsData.makeupExamId&&this.propsData.makeupStarted==0){
+        this.examElExamDetail();
+      }
       this.$set(this.newData,'parentExamId',this.propsData.id);
-      this.getList()
       this.examElDisciplineTypeList()
       this.systemDeptCurrentDept()
       this.systemUserGetAcademicYear()
+      this.getList()
     },
     methods: {
+      //补考详情
+      examElExamDetail(){
+        examElExamDetail({id:this.propsData.id}).then(response => {
+          this.$set(this,'newData',{
+            reuseOriginalPaper:response.data.reuseOriginalPaper,
+            paperName:response.data.paperName,
+            paperId:response.data.paperId,
+            examTimeRange:[response.data.startTime.replace("T", "0"),response.data.endTime.replace("T", "0")],
+            attemptLimit:response.data.attemptLimit,
+            answerDuration:response.data.answerDuration,
+          });
+        })
+      },
       //导出
       exportButton(){
         let self = this;
@@ -300,6 +351,7 @@
           reuseOriginalPaper:this.newData.reuseOriginalPaper,
           paperId:this.newData.reuseOriginalPaper?this.newData.paperId:'',
           attemptLimit:this.newData.attemptLimit,
+          answerDuration:this.newData.answerDuration,
           startTime:this.newData.examTimeRange[0].replace(" ", "T"),
           endTime:this.newData.examTimeRange[1].replace(" ", "T"),
         }
@@ -334,10 +386,17 @@
       getList() {
         let obj = JSON.parse(JSON.stringify(this.queryParams))
         obj.examId = this.newData.parentExamId
-        examElExamMakeupCandidates(obj).then(response => {
-          this.$set(this, 'dataList', response.data.records)
-          this.$set(this, 'total', response.data.total)
-        })
+        if(this.makeupStarted == 0){
+          examElExamMakeupCandidates(obj).then(response => {
+            this.$set(this, 'dataList', response.data.records)
+            this.$set(this, 'total', response.data.total)
+          })
+        }else if (this.makeupStarted == 1){
+          examElExamMakeupResults(obj).then(response => {
+            this.$set(this, 'dataList', response.data.records)
+            this.$set(this, 'total', response.data.total)
+          })
+        }
       },
       //查询全部专业类别
       examElDisciplineTypeList() {
@@ -387,6 +446,51 @@
 
         .form-flex-box {
           display: flex;
+
+          .stepper-row {
+            display: flex;
+            align-items: center;
+          }
+
+          .number-stepper {
+            display: inline-flex;
+            align-items: center;
+            border-radius: 4px;
+            overflow: hidden;
+
+            .stepper-btn {
+              width: 32px;
+              height: 32px;
+              background: #f5f7fa;
+              border: none;
+              cursor: pointer;
+              font-size: 16px;
+              color: #333;
+
+              &:hover {
+                background: #e6f0fe;
+              }
+            }
+
+            .stepper-val {
+              min-width: 44px;
+              text-align: center;
+              font-size: 14px;
+              padding: 0 4px;
+            }
+          }
+
+          .unit-text {
+            margin-left: 8px;
+            color: #333;
+            white-space: nowrap;
+            font-size: 14px;
+          }
+
+          .tip-text {
+            color: #999;
+            font-size: 13px;
+          }
         }
 
         .checkButton-p {