From 0a5557a65304d3c5f8fc35200cfbb38f85778970 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期一, 17 六月 2024 13:52:18 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/api/request.js                 |   59 ++++++-----
 src/api/exam.js                    |   74 ++++++++------
 src/views/exam/exam/MarkPaper.vue  |  132 +++++++++++++++++++++++--
 src/router.js                      |    9 +
 src/views/exam/exam/ExamManage.vue |   10 +-
 5 files changed, 206 insertions(+), 78 deletions(-)

diff --git a/src/api/exam.js b/src/api/exam.js
index 04b3180..d1a7644 100644
--- a/src/api/exam.js
+++ b/src/api/exam.js
@@ -1,61 +1,69 @@
-import axios from "./request";
+import axios from './request'
 
 // 鑾峰彇鑰冭瘯鍒嗛〉
 export const getExams = (params) => {
-    return axios({
-        url: "/api/exam/page",
-        method: "GET",
-        params: params
-    })
+  return axios({
+    url: '/api/admin/exam/page',
+    method: 'GET',
+    params: params
+  })
 }
 
 // 鑾峰彇鑰冭瘯鍒楄〃
 export const getExamList = () => {
-    return axios({
-        url: "/api/exam/list",
-        method: "GET"
-    })
+  return axios({
+    url: '/api/admin/exam/list',
+    method: 'GET'
+  })
 }
 
 // 閫氳繃id鑾峰彇鑰冭瘯
 export const getExamById = (params) => {
-    return axios({
-        url: "/api/exam/" + params,
-        method: "GET"
-    })
+  return axios({
+    url: '/api/admin/exam/' + params,
+    method: 'GET'
+  })
+}
+
+// 閫氳繃id鑾峰彇鑰冭瘯
+export const getExamMarkPaperInfo = (id) => {
+  return axios({
+    url: '/api/admin/exam/mark/paper/' + id,
+    method: 'GET'
+  })
 }
 
 // 閫氳繃id鍒犻櫎鑰冭瘯
 export const deleteExamById = (params) => {
-    return axios({
-        url: "/api/exam/" + params,
-        method: "DELETE"
-    })
+  return axios({
+    url: '/api/admin/exam/' + params,
+    method: 'DELETE'
+  })
 }
 
 // 鎵归噺鍒犻櫎鑰冭瘯
 export const deleteExamByIds = (params) => {
-    return axios({
-        url: "/api/exam/batch",
-        method: "DELETE",
-        data: params
-    })
+  return axios({
+    url: '/api/admin/exam/batch',
+    method: 'DELETE',
+    data: params
+  })
 }
 
 // 淇敼鑰冭瘯
 export const editExam = (params) => {
-    return axios({
-        url: "/api/exam/",
-        method: "PUT",
-        data: params
-    })
+  return axios({
+    url: '/api/admin/exam/',
+    method: 'PUT',
+    data: params
+  })
 }
 
 // 娣诲姞鑰冭瘯
 export const addExam = (params) => {
-    return axios({
-        url: "/api/exam/",
-        method: "POST",
-        data: params
-    })
+  return axios({
+    url: '/api/admin/exam/',
+    method: 'POST',
+    data: params
+  })
 }
diff --git a/src/api/request.js b/src/api/request.js
index 3a41c94..4278b2c 100644
--- a/src/api/request.js
+++ b/src/api/request.js
@@ -1,7 +1,7 @@
-import axios from "axios";
-import router from "../router";
-import {Message} from 'element-ui';
-import vue from "vue";
+import axios from 'axios'
+import router from '../router'
+import { Message } from 'element-ui'
+import vue from 'vue'
 
 const instance = axios.create({
   baseURL: process.env.VUE_APP_URL,
@@ -9,46 +9,53 @@
   // 涓嶆惡甯ookie
   withCredentials: true,
   headers: {
-    "Content-Type": "application/json"
+    'Content-Type': 'application/json'
   }
-});
+})
 
 // 娣诲姞璇锋眰鎷︽埅鍣�
 instance.interceptors.request.use(function (config) {
-  return config;
+  return config
 }, function (error) {
-  Message.error("璇锋眰瀛樺湪闂锛岃妫�鏌�")
-  return Promise.reject(error);
-});
+  Message.error('璇锋眰瀛樺湪闂锛岃妫�鏌�')
+  return Promise.reject(error)
+})
 
 // 娣诲姞鍝嶅簲鎷︽埅鍣�
 instance.interceptors.response.use(function (response) {
   if (response.data.code === 1) {
-    return response;
-    // 楠岃瘉鐮侀敊璇斁琛岋紝浠ヤ究鍒锋柊楠岃瘉鐮�
-  }
-  // 澶勭悊鑷畾涔夌姸鎬佺爜
-  else if (response.data.code === 1998) {
-    return response;
+    return response
+  } else if (response.data.code === 401) {
+    Message.error('鐧诲綍宸茶繃鏈燂紝璇烽噸鏂扮櫥褰�')
+    vue.prototype.$$router.push({ path: '/login' })
+    return Promise.reject(response.data)
+  } else if (response.data.code === 403) {
+    Message.error('鏉冮檺涓嶈冻锛屾棤娉曡闂�')
+    return Promise.reject(response.data)
   } else {
-    Message.error(response.data.msg);
-    return Promise.reject(response.data.msg);
+    Message.error(response.data.message)
+    return Promise.reject(response.data.message)
   }
+},
 
-}, function (error) {
+function (error) {
+  console.log(error, '閿欒')
   // 澶勭悊http鐘舵�佺爜
   if (error.response.data) {
-    error.message = error.response.data.msg;
+    error.message = error.response.data.msg
   }
   if (error.response.code === 401) {
-    error.message = "鐧诲綍宸茶繃鏈燂紝璇烽噸鏂扮櫥褰�";
+    error.message = '鐧诲綍宸茶繃鏈燂紝璇烽噸鏂扮櫥褰�'
     vue.prototype.$$router.push({ path: '/login' })
   }
   if (error.response.code === 403) {
-    error.message = "鏉冮檺涓嶈冻";
+    error.message = '鏉冮檺涓嶈冻'
   }
-  Message.error(error.message);
-  return Promise.reject(error);
-});
+  Message.error(error.message)
+  return Promise.reject(error)
+}
 
-export default instance;
+)
+
+
+export default instance
diff --git a/src/router.js b/src/router.js
index 4be4188..922ffb7 100644
--- a/src/router.js
+++ b/src/router.js
@@ -45,6 +45,13 @@
         component: () => import('@/views/exam/exam/ExamManage'),
         name: 'Exam',
         meta: { title: '鑰冭瘯绠$悊', icon: 'exam', affix: true }
+      },
+      {
+        path: '/exam/mark/paper',
+        component: () => import('@/views/exam/exam/MarkPaper'),
+        name: 'MarkPaper',
+        meta: { title: '闃呭嵎'},
+        hidden: true
       }
     ]
   },
@@ -63,7 +70,7 @@
         component: () => import('@/views/class-management/ClassStaff'),
         name: 'Classes',
         hidden: true,
-        meta: { title: '鐝骇鎴愬憳绠$悊', icon: 'classes', affix: true }
+        meta: { title: '鐝骇鎴愬憳绠$悊', icon: 'classes' }
       }
     ]
   },
diff --git a/src/views/exam/exam/ExamManage.vue b/src/views/exam/exam/ExamManage.vue
index 472322f..87e9bfd 100644
--- a/src/views/exam/exam/ExamManage.vue
+++ b/src/views/exam/exam/ExamManage.vue
@@ -73,7 +73,7 @@
           >淇敼
           </el-button>
           <el-button type="danger" size="small" @click="deleteExam(scope.row.id)">鍒犻櫎</el-button>
-          <el-button type="success" size="small" @click="markPaper(scope.row)">闃呭嵎</el-button>
+          <el-button v-if="scope.row.status === 'finished'" type="success" size="small" @click="markPaper(scope.row)">闃呭嵎</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -152,7 +152,7 @@
         status: '',
         startTime: '',
         endTime: '',
-        time: [],
+        time: []
       },
       examRules: {
         examName: [
@@ -172,7 +172,7 @@
         ],
         time: [
           { required: true, message: '璇烽�夋嫨鑰冭瘯鏃堕棿', trigger: 'change' }
-        ],
+        ]
       },
       total: 0,
       title: '瀹夋帓鑰冭瘯',
@@ -183,7 +183,7 @@
         pageIndex: 1,
         pageSize: 10
       },
-      tableData: [],
+      tableData: []
     }
   },
   mounted () {
@@ -294,7 +294,7 @@
     },
     routerTo (url) {
       this.$router.push(url)
-    },
+    }
   },
 }
 </script>
diff --git a/src/views/exam/exam/MarkPaper.vue b/src/views/exam/exam/MarkPaper.vue
index 2095c78..560799d 100644
--- a/src/views/exam/exam/MarkPaper.vue
+++ b/src/views/exam/exam/MarkPaper.vue
@@ -1,36 +1,113 @@
 <template>
-  <div>
-    <div>
-      <div></div>
-      <div></div>
-    </div>
-    <div></div>
+  <div class="app-container">
+    <el-row :gutter="20">
+      <el-col :span="5">
+        <div class="nameClass">
+          <div class="bottom5">鑰冭瘯鍚嶇О</div>
+          <div class="title">{{examInfo.examName}}</div>
+        </div>
+      </el-col>
+      <el-col :span="5">
+        <div class="nameClass">
+          <div class="bottom5">璇曞嵎鍚嶇О</div>
+          <div class="title">{{examInfo.examPaperName}}</div>
+        </div>
+      </el-col>
+      <el-col :span="4">
+        <div class="staticNum">
+          <div class="bottom5">搴旇�冧汉鏁�</div>
+          <div class="title">{{examInfo.shouldJoinNum}}</div>
+        </div>
+      </el-col>
+      <el-col :span="4">
+        <div class="staticNum">
+          <div class="bottom5">缂鸿�冧汉鏁�</div>
+          <div class="title">{{examInfo.missJoinNum}}</div>
+        </div>
+      </el-col>
+      <el-col :span="4">
+        <div class="staticNum">
+          <div class="bottom5">鍙傚姞浣嗘湭瀹屾垚浜烘暟</div>
+          <div class="title">{{examInfo.joinButNotFinishNum}}</div>
+        </div>
+      </el-col>
+    </el-row>
+    <!-- 琛ㄦ牸 -->
+    <el-table
+      :data="examInfo.studentExamInfoVOList"
+      border
+      style="width: 100%;margin-top: 20px"
+    >
+      <el-table-column
+        align="center"
+        prop="id"
+        label="瀛﹀彿"
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="realName"
+        label="濮撳悕"
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="phone"
+        label="鐢佃瘽"
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="phone"
+        label="绯荤粺鑷姩浼板垎(閫夋嫨棰樺瀷)"
+      >
+      </el-table-column>
+      <el-table-column
+        label="鎿嶄綔"
+        align="center"
+        width="300px"
+      >
+        <template slot-scope="scope">
+          <el-button @click="markPaper(scope.row)" type="warning">闃呭嵎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
   </div>
 </template>
 
 <script>
-import { getExamInfo } from '@/api/exam'
+import { getExamMarkPaperInfo } from '@/api/exam'
 
 export default {
   name: 'MarkPaper',
   mounted () {
     this.examInfo.examName = this.$route.query.examName
-    this.examInfo.id = this.$route.query.examId
-    this.getExamInfo()
+    this.examInfo.examId = this.$route.query.examId
+    if (this.examInfo.examId) {
+      this.getExamInfo()
+    }
   },
   data () {
     return {
       examInfo: {
         examName: '',
-        id: null,
-        paperList: []
+        examPaperName: '',
+        suggestTime: 0,
+        shouldJoinNum: 0,
+        joinNum: 0,
+        missJoinNum: 0,
+        joinButNotFinishNum: 0,
+        examId: null,
+        studentExamInfoVOList: []
       }
-
     }
   },
   methods: {
+    markPaper (row) {
+      // todo鎵撳紑闃呭嵎椤甸潰
+    },
     getExamInfo () {
-      getExamInfo(this.examInfo.id).then(res => {
+      getExamMarkPaperInfo(this.examInfo.examId).then(res => {
         this.examInfo = res.data.data
       })
     }
@@ -40,4 +117,33 @@
 
 <style scoped>
 
+.title {
+  font-size: 18px;
+}
+.bottom5 {
+  margin-bottom: 5px;
+}
+.nameInfo {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+}
+.nameClass {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  height: 70px;
+  background-color: #cb5858;
+}
+.staticNum {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  background-color: #0a76a4;
+  height: 70px;
+}
 </style>

--
Gitblit v1.8.0