reghao 7 месяцев назад
Родитель
Сommit
678d11fd48

+ 2 - 2
src/api/exam.js

@@ -49,8 +49,8 @@ export function getPapers(param) {
   return get(examApi.getPaper, param)
 }
 
-export function getPaper(paperId, status) {
-  return get(examApi.getPaper + '/' + paperId + '?status=' + status)
+export function getPaper(paperId, viewType) {
+  return get(examApi.getPaper + '/' + paperId + '?viewType=' + viewType)
 }
 
 export function getPaperKeyValues() {

+ 12 - 12
src/views/exam/ExamList.vue

@@ -67,25 +67,25 @@
             <el-button
               v-if="scope.row.status === 1"
               size="mini"
-              type="success"
+              type="primary"
               @click="prepareExam(scope.$index, scope.row)"
             >去考试</el-button>
             <el-button
               v-else-if="scope.row.status === 2"
               size="mini"
-              type="warning"
-              @click="waitMark(scope.$index, scope.row)"
-            >待批改</el-button>
-            <el-button
-              v-else-if="scope.row.status === 3"
-              size="mini"
               type="danger"
               @click="markPaper(scope.$index, scope.row)"
             >去批改</el-button>
             <el-button
-              v-else
+              v-else-if="scope.row.status === 3"
               size="mini"
               type="warning"
+              @click="waitMark(scope.$index, scope.row)"
+            >待批改</el-button>
+            <el-button
+              v-else
+              size="mini"
+              type="success"
               @click="viewResult(scope.$index, scope.row)"
             >看结果</el-button>
           </template>
@@ -240,21 +240,21 @@ export default {
       const routeUrl = this.$router.resolve({
         path: '/exam/paper/card/' + paperId,
         query: {
-          status: 2
+          viewType: 2
         }
       })
       window.open(routeUrl.href, '_blank')
     },
     waitMark(index, row) {
       const paperId = row.examId
-      this.$message.info('待批改 -> ' + paperId)
+      this.$message.info('试卷待批改')
     },
     markPaper(index, row) {
       const paperId = row.examId
       const routeUrl = this.$router.resolve({
         path: '/exam/paper/card/' + paperId,
         query: {
-          status: 3
+          viewType: 3
         }
       })
       window.open(routeUrl.href, '_blank')
@@ -265,7 +265,7 @@ export default {
       const routeUrl = this.$router.resolve({
         path: '/exam/paper/card/' + paperId,
         query: {
-          status: 4
+          viewType: 4
         }
       })
       window.open(routeUrl.href, '_blank')

+ 1 - 1
src/views/exam/ExamPaper.vue

@@ -201,7 +201,7 @@ export default {
       const routeUrl = this.$router.resolve({
         path: '/exam/paper/card/' + paperId,
         query: {
-          status: 1
+          viewType: 1
         }
       })
       window.open(routeUrl.href, '_blank')

+ 5 - 9
src/views/exam/ExamPaperAdd.vue

@@ -183,7 +183,8 @@
         </el-form>
       </el-card>
     </el-main>
-    <el-dialog title="添加试题" :visible.sync="showQuestionDialog" width="80%" center>
+
+    <el-dialog title="添加试卷试题" :visible.sync="showQuestionDialog" width="80%" center>
       <el-row>
         <el-select
           v-model="queryInfo.subjectId"
@@ -517,7 +518,7 @@ export default {
       this.queryInfo.pageSize = this.pageSize
       this.getQuestionInfo()
     },
-    // 题库变化
+    // 科目变化
     subjectChange(val) {
       this.queryInfo.subjectId = val
       this.queryInfo.pageNumber = this.currentPage
@@ -617,21 +618,16 @@ export default {
 
         if (this.makeModel === 1 && !this.addExamQuestion1.some(item => item.bankId === '')) {
           var questions = []
-          const questionIds = []
-          const scores = []
           this.addExamQuestion1.forEach(item => {
             questions.push({
               pos: item.pos,
               questionId: item.questionId,
+              type: item.typeCode,
               score: item.score,
               children: item.children
             })
-            questionIds.push(item.questionId)
-            scores.push(item.score)
           })
-          // exam.questionIds = questionIds.join(',')
-          // exam.scores = scores.join(',')
-          exam.questions = questions
+          exam.paperQuestions = questions
           this.addExamPaper(exam)
         } else if (this.makeModel === 2) {
           const bankNames = []

+ 147 - 24
src/views/exam/ExamQuestionCard.vue

@@ -33,7 +33,7 @@
                     <el-radio :label="3">C</el-radio>
                     <el-radio :label="4">D</el-radio>
                   </el-radio-group>
-                  <el-row v-if="status !== 2">
+                  <el-row v-if="paperInfo.viewType !== 2">
                     <el-divider />
                     <el-row>
                       <span style="color: red">正确答案</span>
@@ -41,6 +41,19 @@
                     <el-row v-for="(item2, index2) in userAnswerMap[item1.questionId].correctAnswer" :key="index2">
                       {{ item2 }}
                     </el-row>
+                    <el-row v-if="paperInfo.viewType >= 3">
+                      <el-divider />
+                      <el-row>
+                        <el-row style="color: red">批改试卷</el-row>
+                        <el-row>本题分数: {{ userAnswerMap[item1.questionId].correctScore }}</el-row>
+                        <el-row v-if="paperInfo.viewType === 3">
+                          批改分数: <el-input-number v-model="userAnswerMap[item1.questionId].submitScore" :min="0" :max="20" style="margin-left: 5px" />
+                        </el-row>
+                        <el-row v-else>
+                          我的得分: {{ userAnswerMap[item1.questionId].submitScore }}
+                        </el-row>
+                      </el-row>
+                    </el-row>
                   </el-row>
                 </div>
               </el-card>
@@ -67,7 +80,7 @@
                     <el-checkbox label="3">C</el-checkbox>
                     <el-checkbox label="4">D</el-checkbox>
                   </el-checkbox-group>
-                  <el-row v-if="status !== 2">
+                  <el-row v-if="paperInfo.viewType !== 2">
                     <el-divider />
                     <el-row>
                       <span style="color: red">正确答案</span>
@@ -75,6 +88,19 @@
                     <el-row v-for="(item2, index2) in userAnswerMap[item1.questionId].correctAnswer" :key="index2">
                       {{ item2 }}
                     </el-row>
+                    <el-row v-if="paperInfo.viewType >= 3">
+                      <el-divider />
+                      <el-row>
+                        <el-row style="color: red">批改试卷</el-row>
+                        <el-row>本题分数: {{ userAnswerMap[item1.questionId].correctScore }}</el-row>
+                        <el-row v-if="paperInfo.viewType === 3">
+                          批改分数: <el-input-number v-model="userAnswerMap[item1.questionId].submitScore" :min="0" :max="20" style="margin-left: 5px" />
+                        </el-row>
+                        <el-row v-else>
+                          我的得分: {{ userAnswerMap[item1.questionId].submitScore }}
+                        </el-row>
+                      </el-row>
+                    </el-row>
                   </el-row>
                 </div>
               </el-card>
@@ -96,7 +122,7 @@
                     <el-radio :label="1">正确</el-radio>
                     <el-radio :label="2">错误</el-radio>
                   </el-radio-group>
-                  <el-row v-if="status !== 2">
+                  <el-row v-if="paperInfo.viewType !== 2">
                     <el-divider />
                     <el-row>
                       <span style="color: red">正确答案</span>
@@ -104,6 +130,19 @@
                     <el-row>
                       {{ userAnswerMap[item1.questionId].correctAnswer[0] }}
                     </el-row>
+                    <el-row v-if="paperInfo.viewType >= 3">
+                      <el-divider />
+                      <el-row>
+                        <el-row style="color: red">批改试卷</el-row>
+                        <el-row>本题分数: {{ userAnswerMap[item1.questionId].correctScore }}</el-row>
+                        <el-row v-if="paperInfo.viewType === 3">
+                          批改分数: <el-input-number v-model="userAnswerMap[item1.questionId].submitScore" :min="0" :max="20" style="margin-left: 5px" />
+                        </el-row>
+                        <el-row v-else>
+                          我的得分: {{ userAnswerMap[item1.questionId].submitScore }}
+                        </el-row>
+                      </el-row>
+                    </el-row>
                   </el-row>
                 </div>
               </el-card>
@@ -128,7 +167,7 @@
                       }"
                     />
                   </div>
-                  <el-row v-if="status !== 2">
+                  <el-row v-if="paperInfo.viewType !== 2">
                     <el-divider />
                     <el-row>
                       <span style="color: red">正确答案</span>
@@ -136,6 +175,19 @@
                     <el-row>
                       {{ userAnswerMap[item1.questionId].correctAnswer[0] }}
                     </el-row>
+                    <el-row v-if="paperInfo.viewType >= 3">
+                      <el-divider />
+                      <el-row>
+                        <el-row style="color: red">批改试卷</el-row>
+                        <el-row>本题分数: {{ userAnswerMap[item1.questionId].correctScore }}</el-row>
+                        <el-row v-if="paperInfo.viewType === 3">
+                          批改分数: <el-input-number v-model="userAnswerMap[item1.questionId].submitScore" :min="0" :max="20" style="margin-left: 5px" />
+                        </el-row>
+                        <el-row v-else>
+                          我的得分: {{ userAnswerMap[item1.questionId].submitScore }}
+                        </el-row>
+                      </el-row>
+                    </el-row>
                   </el-row>
                 </div>
               </el-card>
@@ -154,7 +206,7 @@
                     :init="init"
                     style="width: 50%"
                   />
-                  <el-row v-if="status !== 2">
+                  <el-row v-if="paperInfo.viewType !== 2">
                     <el-divider />
                     <el-row>
                       <span style="color: red">正确答案</span>
@@ -162,6 +214,19 @@
                     <el-row>
                       {{ userAnswerMap[item1.questionId].correctAnswer[0] }}
                     </el-row>
+                    <el-row v-if="paperInfo.viewType >= 3">
+                      <el-divider />
+                      <el-row>
+                        <el-row style="color: red">批改试卷</el-row>
+                        <el-row>本题分数: {{ userAnswerMap[item1.questionId].correctScore }}</el-row>
+                        <el-row v-if="paperInfo.viewType === 3">
+                          批改分数: <el-input-number v-model="userAnswerMap[item1.questionId].submitScore" :min="0" :max="20" style="margin-left: 5px" />
+                        </el-row>
+                        <el-row v-else>
+                          我的得分: {{ userAnswerMap[item1.questionId].submitScore }}
+                        </el-row>
+                      </el-row>
+                    </el-row>
                   </el-row>
                 </div>
               </el-card>
@@ -195,9 +260,26 @@
     </el-main>
     <el-footer height="220">
       <el-row style="margin-top: 10px">
-        <el-button type="primary" icon="el-icon-upload" style="float: right; padding: 3px 0" plain @click="onSubmitPaper">
+        <el-button
+          v-if="paperInfo.viewType === 2"
+          type="primary"
+          icon="el-icon-upload"
+          style="float: right; padding: 3px 0"
+          plain
+          @click="onSubmitPaper"
+        >
           提交试卷
         </el-button>
+        <el-button
+          v-if="paperInfo.viewType === 3"
+          type="primary"
+          icon="el-icon-upload"
+          style="float: right; padding: 3px 0"
+          plain
+          @click="onSubmitMarkPaper"
+        >
+          提交批改结果
+        </el-button>
       </el-row>
     </el-footer>
   </el-container>
@@ -213,7 +295,7 @@ import 'tinymce/themes/silver/theme.min.js'
 import 'tinymce/icons/default/icons'
 import Editor from '@tinymce/tinymce-vue'
 
-import { cacheUserAnswer, getPaper, submitExam } from '@/api/exam'
+import { cacheUserAnswer, getPaper, submitExam, submitExamMark } from '@/api/exam'
 
 export default {
   name: 'ExamQuestionCard',
@@ -272,10 +354,10 @@ export default {
         }
       ],
       userAnswerMap: null,
-      paperId: 0,
-      status: 0,
       paperInfo: {
+        paperId: 0,
         name: '',
+        viewType: 0,
         status: 0,
         duration: 0,
         totalScore: 0
@@ -287,15 +369,15 @@ export default {
   },
   created() {
     document.title = '试卷详情'
-    this.paperId = this.$route.params.paperId
-    const statusStr = this.$route.query.status
-    this.status = parseInt(statusStr)
-    if (this.status === 1) {
+    this.paperInfo.paperId = this.$route.params.paperId
+    const viewTypeStr = this.$route.query.viewType
+    this.paperInfo.viewType = parseInt(viewTypeStr)
+    if (this.paperInfo.viewType === 1) {
       document.title = '试卷预览'
-    } else if (this.status === 2) {
-    } else if (this.status === 3) {
+    } else if (this.paperInfo.viewType === 2) {
+    } else if (this.paperInfo.viewType === 3) {
       document.title = '试卷批改'
-    } else if (this.status === 4) {
+    } else if (this.paperInfo.viewType === 4) {
       document.title = '试卷结果'
     }
 
@@ -313,7 +395,7 @@ export default {
       })
     },
     getPaperDetail() {
-      getPaper(this.paperId, this.status).then((resp) => {
+      getPaper(this.paperInfo.paperId, this.paperInfo.viewType).then((resp) => {
         if (resp.code === 0) {
           const respData = resp.data
           this.paperInfo.name = respData.name
@@ -351,8 +433,8 @@ export default {
         }
 
         var userResult = {}
-        userResult.paperId = this.paperId
-        userResult.userAnswers = userAnswers
+        userResult.paperId = this.paperInfo.paperId
+        userResult.submitUserAnswers = userAnswers
         submitExam(userResult).then(resp => {
           if (resp.code === 0) {
             this.$notify({
@@ -385,15 +467,12 @@ export default {
       this.cacheAnswer()
     },
     onCheckboxChange(val, item) {
-      // this.$message.info('change event: ' + val + ' -> ' + item.questionId)
       this.cacheAnswer()
     },
     onInputBlur(val, item) {
-      // this.$message.info('blur event: ' + val + ' -> ' + item.questionId)
       this.cacheAnswer()
     },
     onEditorBlur(val) {
-      // this.$message.info('editor blur -> ' + this.editorContent)
       this.cacheAnswer()
     },
     cacheAnswer() {
@@ -406,8 +485,8 @@ export default {
       }
 
       var userResult = {}
-      userResult.paperId = this.paperId
-      userResult.userAnswers = userAnswers
+      userResult.paperId = this.paperInfo.paperId
+      userResult.submitUserAnswers = userAnswers
       cacheUserAnswer(userResult).then(resp => {
         if (resp.code !== 0) {
           console.log(resp.msg)
@@ -415,6 +494,50 @@ export default {
       }).catch((e) => {
         console.log(e)
       })
+    },
+    onSubmitMarkPaper() {
+      this.$confirm('当前试题暂未做完, 是否继续提交o(╥﹏╥)o ?', 'Tips', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        var userAnswers = []
+        for (const key in this.userAnswerMap) {
+          const userAnswer = {}
+          userAnswer.questionId = key
+          userAnswer.answers = this.userAnswerMap[key]
+          userAnswers.push(this.userAnswerMap[key])
+        }
+
+        var userResult = {}
+        userResult.paperId = this.paperInfo.paperId
+        userResult.submitUserAnswers = userAnswers
+        submitExamMark(userResult).then(resp => {
+          if (resp.code === 0) {
+            this.$notify({
+              title: 'Tips',
+              message: '阅卷结果已提交',
+              type: 'success',
+              duration: 2000
+            })
+            this.$router.push('/exam/mark')
+          }
+        }).catch((error) => {
+          this.$notify({
+            title: 'Tips',
+            message: error.message,
+            type: 'error',
+            duration: 2000
+          })
+        })
+      }).catch(() => {
+        this.$notify({
+          title: 'Tips',
+          message: '提交已取消',
+          type: 'info',
+          duration: 2000
+        })
+      })
     }
   }
 }