Bladeren bron

Merge branch 'feature/CourseSquareBugFix' of FanYanPeng/EAIFrontend into lll-ecloud

JiangPengYu 11 maanden geleden
bovenliggende
commit
b77a639d31

+ 5 - 2
src/layout/Header/Header.vue

@@ -9,7 +9,6 @@
 
     <div class="header-menu">
       <el-menu mode="horizontal"
-               router
                :default-active="useRoute().path" @select="handleSelect" :ellipsis="false" class="menu">
         <template v-if="role == 'student'">
           <el-menu-item v-for="item in studentMenuItems" :key="item.key" :index="item.path" class="header-menu-item">
@@ -80,7 +79,11 @@ const teacherMenuItems = [
 ];
 
 const handleSelect = (index: string) => {
-  // emitter.emit('change-page', index);
+  router.push(index).then(() => {
+    window.location.reload();
+  }).catch((err) => {
+    console.error('Route navigation error:', err);
+  });
 };
 
 const handleCommand = (command: string) => {

+ 1 - 1
src/router/index.ts

@@ -253,7 +253,7 @@ const router = createRouter({
  */
   router.beforeEach(async (to) => {
     const store = useStore();
-    const publicPaths = [ '/login','/register', '/passwordChange', '/admin/login',];
+    const publicPaths = [ '/login','/register', '/passwordChange', '/admin/login','/login'];
     // 1. 检查URL中的token
     const urlToken = new URLSearchParams(window.location.search).get('token');
     if (urlToken) {

+ 0 - 1
src/types/dto.ts

@@ -46,7 +46,6 @@ export interface CourseDTO {
     startTime: string; // 起始时间不能缺失 (ISO 8601 日期时间字符串)
     endTime: string; // 截止时间不能缺失 (ISO 8601 日期时间字符串)
     description: string; // 课程描述不能缺失
-    enrollCode: string; // 选课码不能缺失
 }
 
 export interface CourseUpdateDTO {

+ 2 - 3
src/views/CoursePage/CoursePage.vue

@@ -69,10 +69,10 @@
         >
         </el-input>
       </el-form-item>
-      <el-form-item label="选课码" style="display: flex; align-items: center">
+      <!-- <el-form-item label="选课码" style="display: flex; align-items: center">
         <el-input v-model="newCourse.enrollCode" placeholder="请输入选课码" style="flex: 1; margin-right: 10px;"></el-input>
         <el-button type="primary" plain size="mini" @click="newCourse.enrollCode = Math.random().toString(36).substr(2, 6).toUpperCase()">随机生成</el-button>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="开始时间">
         <el-date-picker v-model="newCourse.startTime" type="datetime" placeholder="截止时间" style="width: 180px"/>
       </el-form-item>
@@ -172,7 +172,6 @@
     startTime: "",
     endTime: "",
     description: "",
-    enrollCode: ""
   })
 
   const query = reactive<CourseQuery>({

+ 1 - 1
src/views/CourseSquare/component/AllCourse/MoreCourse.vue

@@ -15,7 +15,7 @@
       <div class="course-items-container">
         <el-card v-for="item in getCoursesSlice(0, 5)" :key="item.courseId" class="course-item active" @click="handleClick(item.courseId)">
           <div style="width: 200px; height: 120px">
-            <img :src="convertImageUrl(item.courseImages[0], item.courseName)" :alt="item.courseName" class="course-item-img">
+            <img :src="convertImageUrl(item.courseImages?.[0] ?? null, item.courseName)" :alt="item.courseName" class="course-item-img">
           </div>
           <div class="course-item-content">
             <div style="font-weight: bold; font-size: 16px; margin: 5px 0">{{item.courseName}}</div>

+ 3 - 1
src/views/CourseSquare/component/Course/index.vue

@@ -16,7 +16,7 @@
     <div class="course-items-container">
       <el-card v-for="item in getCoursesSlice()" :key="item.courseId" class="course-item active" @click="handleClick(item.courseId)">
         <div style="width: 200px; height: 120px">
-          <img :src="convertImageUrl(item.courseImages[0], item.courseName)" :alt="item.courseName" class="course-item-img">
+          <img :src="convertImageUrl(item.courseImages?.[0] ?? null, item.courseName)" :alt="item.courseName" class="course-item-img">
         </div>
         <div class="course-item-content">
           <div style="font-weight: bold; font-size: 16px; margin: 5px 0">{{item.courseName}}</div>
@@ -66,6 +66,7 @@
 
   //只获取前五个课程
   const getCoursesSlice = () => {
+    console.log(courses.course)
     return courses.course.slice(0, 5)
   }
 
@@ -107,6 +108,7 @@
   const fetchAllCourse = () => {
     apis.getAllCourse(query, 0, 10)
         .then((res: any) => {
+          console.log(res)
           courses.course = res.data.data.records
         })
         .catch((err: any) => {

+ 11 - 4
src/views/Home/Role.vue

@@ -5,7 +5,7 @@
 -->
 <template>
   <div id="home-container" class="home-container">
-    <router-view v-if="isRouterAlive"></router-view>
+    <router-view v-if="isRouterAlive" :key="$route.fullPath"></router-view>
   </div>
 </template>
 
@@ -35,9 +35,9 @@
   路由变换
    */
   const changePage = (value: string) => {
-    // console.log(role)
+    // router-view的key设置为$route.fullPath会自动处理重新渲染
+    // 这里保留原来的路由跳转逻辑作为备用
     if(role == 'student'){
-      // console.log("学生")
       switch (value){
         case 'CourseSquare':
           router.push("/home/courseSquare");
@@ -49,7 +49,6 @@
           router.push("/home/myHomework");
           break;
       }
-      // changePage.value = value
     } else if(role == 'teachers'){
       switch (value){
         case 'CourseSquare':
@@ -71,9 +70,17 @@
   emitter.on("change-page", (value:string)=> {
     changePage(value)
   })
+  
+  //绑定强制刷新事件
+  emitter.on("force-reload", () => {
+    console.log('Force reload triggered');
+    reload();
+  })
+  
   //解绑事件
   onUnmounted(()=>{
     emitter.off('change-page')
+    emitter.off('force-reload')
   })
 </script>