Bläddra i källkod

tmp: 录视频版本

mjh 4 år sedan
förälder
incheckning
559a8a6d1e

+ 2 - 2
src/components/GlobalHeader.vue

@@ -9,10 +9,10 @@
       <el-menu-item v-if="isStudent" index="2">
         任务
       </el-menu-item>
-      <el-menu-item v-if="isStudent" index="3">
+      <el-menu-item index="3">
         课程广场
       </el-menu-item>
-      <el-menu-item v-if="isStudent" index="4">
+      <el-menu-item index="4">
         测试广场
       </el-menu-item>
       <el-menu-item index="5">

+ 3 - 1
src/router/index.js

@@ -78,8 +78,10 @@ const router = createRouter({
   routes,
 });
 
+const unauthorizedRoutes = ["Portal", "Auth", "Course", "Test"];
+
 router.beforeEach((to, from, next) => {
-  if (to.name === "Portal" || to.name === "Auth") {
+  if (unauthorizedRoutes.indexOf(to.name) !== -1) {
     next();
   } else if (!store.state.user.token) {
     ElMessage({

+ 2 - 1
src/views/CoursePage/CourseDetail.vue

@@ -153,7 +153,7 @@
           </div>
           <div v-else-if="tabName==='notice'">
             <el-collapse>
-              <el-collapse-item v-for="(item,index) in announcementList" :key="index" :name="index"
+              <el-collapse-item v-for="(item,index) in announcementList" :key="item.id" :name="index"
                                 @click="readAnnouncement(item)">
                 <template #title>
                   <NoticeItem :ref="'noticeItem'+item.id"
@@ -280,6 +280,7 @@ import NoticeItem from "./components/NoticeItem";
 import FileEntry from "./components/FileEntry";
 import { ElMessageBox, ElMessage } from "element-plus";
 import variables from "@/utils/variables";
+import announcement from "@/api/announcement";
 
 export default {
   name: "CourseDetail",

+ 14 - 5
src/views/CoursePage/CoursePage.vue

@@ -13,7 +13,7 @@
             <el-icon>
               <Folder/>
             </el-icon>
-            <span style="padding-left: 20px">全部课程</span>
+            <span style="padding-left: 20px">{{ isLogin ? "全部课程" : "公开课程" }}</span>
           </el-menu-item>
           <el-menu-item index="2">
             <el-icon>
@@ -45,18 +45,23 @@
                 @click="$router.push('/manage')">管理页面</span>
           查看相关课程。
         </div>
+        <div v-if="this.activeIndex === '2' && !isLogin">
+          请先
+          <span style="cursor: pointer;color: #409eff"
+                @click="$router.push('/auth')">登录</span>
+        </div>
       </el-card>
     </el-col>
   </el-row>
 </template>
 
 <script>
-import { Back, Folder, FolderChecked } from "@element-plus/icons-vue";
+import {Back, Folder, FolderChecked} from "@element-plus/icons-vue";
 import CourseCard from "@/components/CourseCard";
 
 export default {
   name: "CoursePage",
-  components: { FolderChecked, Folder, Back, CourseCard },
+  components: {FolderChecked, Folder, Back, CourseCard},
   data() {
     return {
       activeIndex: "1",
@@ -67,7 +72,7 @@ export default {
   computed: {
     activeName() {
       if (this.activeIndex === "1") {
-        return "全部课程";
+        return this.isLogin ? "全部课程" : "公开课程";
       } else {
         return "我的课程";
       }
@@ -84,7 +89,11 @@ export default {
   },
 
   async created() {
-    this.courses_all = (await (this.$apis.getAllCourses())).data.data;
+    if (!this.isLogin) {
+      this.courses_all = (await (this.$apis.getExampleCourses())).data.data;
+    } else {
+      this.courses_all = (await (this.$apis.getAllCourses())).data.data;
+    }
     if (this.isStudent && this.isLogin) {
       this.courses_my = (await (this.$apis.getStudentCourses())).data.data;
     }

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

@@ -225,10 +225,14 @@ export default {
       return this.exampleCourseList.slice((this.showCourseList_current - 1) * 6, this.showCourseList_current * 6);
     },
     showExampleCoderTestList() {
-      return this.exampleCoderTestList.filter(i => this.state(i) === "RUNNING").slice(0, 6);
+      return this.exampleCoderTestList
+        // .filter(i => this.state(i) === "RUNNING")
+        .slice(0, 6);
     },
     showExampleEvalTestList() {
-      return this.exampleEvalTestList.filter(i => this.state(i) === "RUNNING").slice(0, 6);
+      return this.exampleEvalTestList
+        // .filter(i => this.state(i) === "RUNNING")
+        .slice(0, 6);
     },
   },
 

+ 25 - 12
src/views/TestPage/TestPage.vue

@@ -36,21 +36,25 @@
           <el-tabs v-model="activeTestPaneName" style="width: 100%">
             <el-tab-pane label="评测题" name="eval">
               <div v-for="(item, key) in evalExamList" :key="key">
-                <div>
-                  <el-divider style="margin: 10px 0 20px 0" content-position="left">{{ key }}</el-divider>
-                </div>
-                <div class="test-page-main">
-                  <TestCard v-for="exam in item" :key="exam.id" :testVO="exam" :isPublicTest="true"/>
+                <div v-if="item.length !== 0">
+                  <div>
+                    <el-divider style="margin: 10px 0 20px 0" content-position="left">{{ key }}</el-divider>
+                  </div>
+                  <div class="test-page-main">
+                    <TestCard v-for="exam in item" :key="exam.id" :testVO="exam" :isPublicTest="true"/>
+                  </div>
                 </div>
               </div>
             </el-tab-pane>
             <el-tab-pane label="代码题" name="coder">
               <div v-for="(item, key) in coderExamList" :key="key">
-                <div>
-                  <el-divider style="margin: 10px 0 20px 0;" content-position="left">{{ key }}</el-divider>
-                </div>
-                <div class="test-page-main">
-                  <TestCard v-for="exam in item" :key="exam.id" :testVO="exam"/>
+                <div v-if="item.length !== 0">
+                  <div>
+                    <el-divider style="margin: 10px 0 20px 0;" content-position="left">{{ key }}</el-divider>
+                  </div>
+                  <div class="test-page-main">
+                    <TestCard v-for="exam in item" :key="exam.id" :testVO="exam"/>
+                  </div>
                 </div>
               </div>
             </el-tab-pane>
@@ -88,18 +92,24 @@
                 @click="$router.push('/manage')">管理页面</span>
           查看相关测试。
         </div>
+
+        <div v-if="this.activeIndex === '2' && !isLogin">
+          请先
+          <span style="cursor: pointer;color: #409eff"
+                @click="$router.push('/auth')">登录</span>
+        </div>
       </el-card>
     </el-col>
   </el-row>
 </template>
 
 <script>
-import { Back, Document, DocumentChecked } from "@element-plus/icons-vue";
+import {Back, Document, DocumentChecked} from "@element-plus/icons-vue";
 import TestCard from "@/components/TestCard";
 
 export default {
   name: "TestPage",
-  components: { TestCard, Back, Document, DocumentChecked, },
+  components: {TestCard, Back, Document, DocumentChecked,},
   data() {
     return {
       activeIndex: "1",
@@ -125,6 +135,9 @@ export default {
     isStudent() {
       return this.$store.getters.isStudent;
     },
+    isLogin() {
+      return this.$store.getters.isLogin;
+    },
   },
   mounted() {
     this.$apis.getRecommendEvalExamsGroupByCourse().then(res => {