reghao il y a 1 an
Parent
commit
9d487f694f

+ 8 - 0
src/api/exam.js

@@ -69,6 +69,14 @@ export function getExamResult(examId) {
   return get(examApi.getExamResult + '/' + examId)
 }
 
+export function getExamMarkList() {
+  return get('/api/content/exam/result/mark')
+}
+
+export function getExamScoreList() {
+  return get('/api/content/exam/result/score')
+}
+
 export function getExamCount() {
   return get('/api/content/exam/statistic/count')
 }

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

@@ -50,7 +50,7 @@
               </el-menu-item>
               <el-menu-item index="/exam/result">
                 <i class="el-icon-film" />
-                <span slot="title">考试结果</span>
+                <span slot="title">我的成绩</span>
               </el-menu-item>
             </el-menu-item-group>
           </el-submenu>

+ 128 - 17
src/views/exam/ExamMarkIndex.vue

@@ -1,11 +1,87 @@
 <template>
-  <el-main>
-  </el-main>
+  <el-container>
+    <el-header height="220">
+      <el-row>
+        <el-select
+          v-model="queryInfo.subjectId"
+          clearable
+          placeholder="请选择试卷"
+          style="margin-left: 5px"
+          @change="paperChange"
+        >
+          <el-option
+            v-for="item in allSubject"
+            :key="item.key"
+            :label="item.value"
+            :value="item.key"
+          />
+        </el-select>
+      </el-row>
+    </el-header>
+
+    <el-main>
+      <el-table
+        :data="dataList"
+        border
+        style="width: 100%"
+      >
+        <el-table-column
+          fixed="left"
+          label="No"
+          type="index"
+        />
+        <el-table-column
+          prop="name"
+          label="试卷名称"
+          width="150"
+        />
+        <el-table-column
+          prop="examTime"
+          label="考试时间"
+          width="150"
+        />
+        <el-table-column
+          prop="totalScore"
+          label="考试总分"
+        />
+        <el-table-column
+          prop="student"
+          label="参考学生"
+        />
+        <el-table-column
+          fixed="right"
+          label="操作"
+          width="320"
+        >
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="warning"
+              @click="previewPaper(scope.$index, scope.row)"
+            >阅卷</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination
+        background
+        :small="screenWidth <= 768"
+        layout="prev, pager, next"
+        :page-size="pageSize"
+        :current-page="currentPage"
+        :total="totalSize"
+        @current-change="handleCurrentChange"
+        @prev-click="handleCurrentChange"
+        @next-click="handleCurrentChange"
+      />
+    </el-main>
+  </el-container>
 </template>
 
 <script>
+import {getSubjectKV, getPapers, getExamMarkList} from '@/api/exam'
+
 export default {
-  name: 'ExamMarker',
+  name: 'ExamPaper',
   data() {
     return {
       // 屏幕宽度, 为了控制分页条的大小
@@ -15,32 +91,67 @@ export default {
       totalSize: 0,
       dataList: [],
       // **********************************************************************
-      searchForm: {
-        page: 1,
-        type: '1',
-        content: null
+      queryInfo: {
+        pageNumber: 1,
+        pageSize: 10,
+        paperId: null,
+        marked: false
       },
-      // 开始考试的提示框
-      startExamDialog: false,
-      // 当前选中的考试的信息
-      currentSelectedExam: {
-        examId: 114511
-      }
+      allSubject: []
     }
   },
   created() {
     document.title = '阅卷管理'
-    this.getData(this.searchForm)
+    this.getData(this.queryInfo)
+    this.getSubjects()
   },
   methods: {
     handleCurrentChange(pageNumber) {
       this.currentPage = pageNumber
-      this.getData(this.searchForm)
+      this.queryInfo.pageNumber = this.currentPage
+      this.queryInfo.pageSize = this.pageSize
+      this.getData(this.queryInfo)
       // 回到顶部
       scrollTo(0, 0)
     },
-    getData(searchForm) {
-      this.dataList = []
+    getData(queryInfo) {
+      getExamMarkList(queryInfo).then(resp => {
+        if (resp.code === 0) {
+          this.dataList = resp.data.list
+          this.totalSize = resp.data.totalSize
+        } else {
+          this.$notify({
+            title: '提示',
+            message: resp.msg,
+            type: 'warning',
+            duration: 3000
+          })
+        }
+      }).catch(error => {
+        this.$notify({
+          title: '提示',
+          message: error.message,
+          type: 'error',
+          duration: 3000
+        })
+      })
+    },
+    getSubjects() {
+      getSubjectKV().then((resp) => {
+        if (resp.code === 0) {
+          this.allSubject = resp.data
+        }
+      })
+    },
+    // 题库变化
+    paperChange(val) {
+      this.queryInfo.paperId = val
+      this.queryInfo.pageNumber = this.currentPage
+      this.queryInfo.pageSize = this.pageSize
+      this.getData(this.queryInfo)
+    },
+    previewPaper(index, row) {
+      this.$message('预览试卷')
     }
   }
 }

+ 128 - 18
src/views/exam/ExamResultIndex.vue

@@ -1,11 +1,87 @@
 <template>
-  <el-main>
-  </el-main>
+  <el-container>
+    <el-header height="220">
+      <el-row>
+        <el-select
+          v-model="queryInfo.subjectId"
+          clearable
+          placeholder="请选择科目"
+          style="margin-left: 5px"
+          @change="subjectChange"
+        >
+          <el-option
+            v-for="item in allSubject"
+            :key="item.key"
+            :label="item.value"
+            :value="item.key"
+          />
+        </el-select>
+      </el-row>
+    </el-header>
+
+    <el-main>
+      <el-table
+        :data="dataList"
+        border
+        style="width: 100%"
+      >
+        <el-table-column
+          fixed="left"
+          label="No"
+          type="index"
+        />
+        <el-table-column
+          prop="name"
+          label="试卷名称"
+          width="150"
+        />
+        <el-table-column
+          prop="examTime"
+          label="考试时间"
+          width="150"
+        />
+        <el-table-column
+          prop="totalScore"
+          label="考试总分"
+        />
+        <el-table-column
+          prop="userScore"
+          label="我的得分"
+        />
+        <el-table-column
+          fixed="right"
+          label="操作"
+          width="320"
+        >
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="warning"
+              @click="previewPaper(scope.$index, scope.row)"
+            >查看</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination
+        background
+        :small="screenWidth <= 768"
+        layout="prev, pager, next"
+        :page-size="pageSize"
+        :current-page="currentPage"
+        :total="totalSize"
+        @current-change="handleCurrentChange"
+        @prev-click="handleCurrentChange"
+        @next-click="handleCurrentChange"
+      />
+    </el-main>
+  </el-container>
 </template>
 
 <script>
+import {getSubjectKV, getExamScoreList} from '@/api/exam'
+
 export default {
-  name: 'ExamMarker',
+  name: 'ExamPaper',
   data() {
     return {
       // 屏幕宽度, 为了控制分页条的大小
@@ -15,32 +91,66 @@ export default {
       totalSize: 0,
       dataList: [],
       // **********************************************************************
-      searchForm: {
-        page: 1,
-        type: '1',
-        content: null
+      queryInfo: {
+        pageNumber: 1,
+        pageSize: 10,
+        subjectId: null
       },
-      // 开始考试的提示框
-      startExamDialog: false,
-      // 当前选中的考试的信息
-      currentSelectedExam: {
-        examId: 114511
-      }
+      allSubject: []
     }
   },
   created() {
-    document.title = '考试结果列表'
-    this.getData(this.searchForm)
+    document.title = '我的成绩'
+    this.getData(this.queryInfo)
+    this.getSubjects()
   },
   methods: {
     handleCurrentChange(pageNumber) {
       this.currentPage = pageNumber
-      this.getData(this.searchForm)
+      this.queryInfo.pageNumber = this.currentPage
+      this.queryInfo.pageSize = this.pageSize
+      this.getData(this.queryInfo)
       // 回到顶部
       scrollTo(0, 0)
     },
-    getData(searchForm) {
-      this.dataList = []
+    getData(queryInfo) {
+      getExamScoreList(queryInfo).then(resp => {
+        if (resp.code === 0) {
+          this.dataList = resp.data.list
+          this.totalSize = resp.data.totalSize
+        } else {
+          this.$notify({
+            title: '提示',
+            message: resp.msg,
+            type: 'warning',
+            duration: 3000
+          })
+        }
+      }).catch(error => {
+        this.$notify({
+          title: '提示',
+          message: error.message,
+          type: 'error',
+          duration: 3000
+        })
+      })
+    },
+    getSubjects() {
+      getSubjectKV().then((resp) => {
+        if (resp.code === 0) {
+          this.allSubject = resp.data
+        }
+      })
+    },
+    // 题库变化
+    subjectChange(val) {
+      this.queryInfo.paperId = val
+      this.queryInfo.pageNumber = this.currentPage
+      this.queryInfo.pageSize = this.pageSize
+      this.getData(this.queryInfo)
+    },
+    previewPaper(index, row) {
+      this.$message('查看试卷')
     }
   }
 }

+ 18 - 2
src/views/exam/ExamResultPage.vue

@@ -109,6 +109,20 @@
               <h3 style="font-weight: 400">我的回答:</h3>
               <p style="font-weight: 400;color: orange"> {{ userAnswer[index] }} </p>
             </div>
+            <div v-if="markExam">
+              <span>评分:</span>
+              <el-input-number
+                v-model="item.score"
+                :min="0"
+                :max="parseInt(item.score)"
+              />
+              <el-input
+                v-model="markForm.review"
+                type="textarea"
+                :rows="3"
+                placeholder="请输入评语"
+              />
+            </div>
           </div>
         </div>
       </el-card>
@@ -144,8 +158,10 @@ export default {
       bigImgDialog: false,
       // 用户回答的答案
       userAnswer: [],
-      // 单题的分值
-      questionScore: new Map()
+      markExam: true,
+      markForm: {
+        review: null
+      }
     }
   },
   created() {