Просмотр исходного кода

feat: 课程详情页 老师登录时可查看课程下的eval和coder测试

mjh 4 лет назад
Родитель
Сommit
cd29e8ba23
4 измененных файлов с 76 добавлено и 28 удалено
  1. 5 0
      src/api/coder.js
  2. 12 3
      src/api/eval.js
  3. 57 25
      src/views/CoursePage/CourseDetail.vue
  4. 2 0
      src/views/PortalPage/PortalPage.vue

+ 5 - 0
src/api/coder.js

@@ -22,9 +22,14 @@ function getExampleCoderExams({page, limit, status}) {
   });
 }
 
+function getTeacherCoderExamsByCourseId(courseId) {
+  return axios.get(`${prefix}/exam/teacher/course`, {params: {courseId,}});
+}
+
 const coderAPIs = {
   getStudentCoderExams,
   getExampleCoderExams,
+  getTeacherCoderExamsByCourseId,
 };
 
 export default coderAPIs;

+ 12 - 3
src/api/eval.js

@@ -6,10 +6,10 @@ function getAllEvalExams(data) {
   return axios.get(`${prefix}/exam/all`, data);
 }
 
-function getStudentEvalExams({pageSize, pageNum, state}){
+function getStudentEvalExams({pageSize, pageNum, state}) {
   return axios.get(`${prefix}/exam/student`, {
     // pageSize、pageNum非必需,state必需,"0 所有, 1 未开始,2 进行中,3 已结束"
-    params:{
+    params: {
       pageSize,
       pageNum,
       state,
@@ -17,14 +17,23 @@ function getStudentEvalExams({pageSize, pageNum, state}){
   });
 }
 
-function getExampleEvalExams(){
+function getExampleEvalExams() {
   return axios.get(`${prefix}/exam/recommend`);
 }
 
+function getTeacherEvalExamsByCourseId(courseId) {
+  return axios.get(`${prefix}/exam/teacher/course`, {
+    params: {
+      courseId,
+    }
+  });
+}
+
 const evalAPIs = {
   getAllEvalExams,
   getStudentEvalExams,
   getExampleEvalExams,
+  getTeacherEvalExamsByCourseId,
 };
 
 export default evalAPIs;

+ 57 - 25
src/views/CoursePage/CourseDetail.vue

@@ -44,9 +44,9 @@
 
       <div v-if="isCreator || isCourseSelected" class="course-tabs">
         <el-radio-group v-model="tabName" size="large">
-          <el-radio-button label="tasks">任务时间轴</el-radio-button>
-          <el-radio-button label="notice">通知</el-radio-button>
-          <el-radio-button label="courseware">课件列表</el-radio-button>
+          <el-radio-button label="task" @click="switchTab('task')">任务</el-radio-button>
+          <el-radio-button label="notice" @click="switchTab('notice')">通知</el-radio-button>
+          <el-radio-button label="courseware" @click="switchTab('courseware')">课件</el-radio-button>
         </el-radio-group>
         <div>
           <el-popover v-if="isCreator && tabName==='notice'"
@@ -92,17 +92,20 @@
         </div>
       </div>
 
-      <div class="course-tab-content">
-        <div v-if="tabName==='tasks'" class="tab-tasks">
-          <!--          <el-timeline>-->
-          <!--            <el-timeline-item-->
-          <!--              v-for="(task, index) in tasks"-->
-          <!--              :key="index"-->
-          <!--              :timestamp="task.timestamp"-->
-          <!--            >-->
-          <!--              {{ task.content }}-->
-          <!--            </el-timeline-item>-->
-          <!--          </el-timeline>-->
+      <div v-if="isCreator || isCourseSelected" class="course-tab-content">
+        <div v-if="tabName==='task'">
+<!--          <el-timeline>-->
+<!--            <el-timeline-item-->
+<!--              v-for="(task, index) in tasks"-->
+<!--              :key="index"-->
+<!--              :timestamp="task.timestamp"-->
+<!--            >-->
+<!--              {{ task.content }}-->
+<!--            </el-timeline-item>-->
+<!--          </el-timeline>-->
+          evalExamList: {{this.evalExamList}}
+          <br/>
+          coderExamList: {{this.coderExamList}}
         </div>
         <div v-else-if="tabName==='notice'" class="tab-notice">
           <NoticeItem v-for="(item,index) in announcementList" :key="index" :ref="'noticeItem'+item.id"
@@ -176,9 +179,12 @@ export default {
       isCourseSelected: false,
       noImgUrl: variables.noImgUrl,
       themeColor,
-      tabName: "notice",
+      tabName: "task",
       noticePopover: false,
-
+      //
+      evalExamList: [],
+      coderExamList: [],
+      //
       announcementFormDialog: false,
       announcementForm: {
         dialogTitle: "添加发布",
@@ -266,14 +272,14 @@ export default {
         this.$apis.checkCourseSelection(this.$route.params.id, this.$store.state.user.id)
           .then(res => {
             this.isCourseSelected = res.data.data;
-            this.$apis.getAnnouncementsByCourseId(this.$route.params.id)
-              .then(res => {
-                this.announcementList = res.data.data;
-              });
+            if (this.isCreator || this.isCourseSelected) {
+              this.switchTab(this.tabName);
+            }
           });
       });
   },
   methods: {
+    //
     timestampToTime(timestamp) {
       const date = new Date(timestamp);
       const Y = date.getFullYear() + "-";
@@ -281,8 +287,7 @@ export default {
       const D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate());
       return Y + M + D;
     },
-
-    //
+    // 公告相关
     selAndInitAnnouncement(type) {
       this.announcementForm.type = type;
       this.announcementFormDialog = true;
@@ -394,7 +399,6 @@ export default {
           console.log(action);
         });
     },
-
     //
     handleFileUploading() {
     },
@@ -402,8 +406,7 @@ export default {
     },
     handleDownloadFileIconClick(url) {
     },
-
-    //
+    // 选课、退课
     handleSelectCourse() {
       ElMessageBox.prompt("请输入选课码", "选课:" + this.courseInfo.name, {
         confirmButtonText: "立即选课",
@@ -461,6 +464,35 @@ export default {
         .catch(() => {
         });
     },
+    // tab页相关
+    switchTab(tabName) {
+      switch (tabName) {
+        case "task":
+          if (this.courseInfo.evalId !== null) {
+            this.$apis.getTeacherEvalExamsByCourseId(this.courseInfo.evalId)
+              .then(res => {
+                this.evalExamList = res.data.data;
+              });
+          }
+          if (this.courseInfo.coderId !== null) {
+            this.$apis.getTeacherCoderExamsByCourseId(this.courseInfo.coderId)
+              .then(res => {
+                this.coderExamList = res.data.data;
+              });
+          }
+          break;
+        case "notice":
+          this.$apis.getAnnouncementsByCourseId(this.$route.params.id)
+            .then(res => {
+              this.announcementList = res.data.data;
+            });
+          break;
+        case "courseware":
+          break;
+        default:
+          break;
+      }
+    },
   },
 };
 </script>

+ 2 - 0
src/views/PortalPage/PortalPage.vue

@@ -209,6 +209,8 @@ export default {
     this.courseList = (await this.$apis.getExampleCourses()).data.data;
     this.evalExamList = (await this.$apis.getExampleEvalExams()).data.data;
     this.coderExamList = (await this.$apis.getExampleCoderExams({})).data.data.res;
+    console.log(this.evalExamList);
+    console.log(this.coderExamList);
 
     if (this.isLogin && this.isStudent) {
       this.$apis.getStudentCourses().then(res => {