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

完成了学生端返回按钮的跳转逻辑

Jiang Pengyu 1 год назад
Родитель
Сommit
3a9550428b

+ 53 - 9
src/views/AiSpeakingPage/SpeakingRecord.vue

@@ -341,12 +341,18 @@ import engagementApis from "@/apis/engagement";
 import mediaApis from "@/apis/media";
 import * as echarts from "echarts";
 import { ElEmpty, ElMessage } from "element-plus";
-import { Back, Loading } from "@element-plus/icons-vue"; // 引入 Element UI
+import { Back } from "@element-plus/icons-vue"; // 引入 Element UI
 import { useRouter } from "vue-router";
 import {useStore} from "@/store";
+import useApis from "@/apis";
 
 const router = useRouter();
 const store = useStore();
+const apis = useApis();
+
+// 添加courseId ref
+const courseId = ref(0);
+
 const props = defineProps({
   userId: {
     type: Number,
@@ -403,11 +409,11 @@ const correctionStats = ref({
   correctNumber: 0
 });
 
-// 计算批改进度百分比
-const progressPercentage = computed(() => {
-  if (correctionStats.value.engageNumber === 0) return 0;
-  return Math.round((correctionStats.value.correctNumber / correctionStats.value.engageNumber) * 100);
-});
+// 计算批改进度百分比(暂时不使用,保留以防将来需要)
+// const progressPercentage = computed(() => {
+//   if (correctionStats.value.engageNumber === 0) return 0;
+//   return Math.round((correctionStats.value.correctNumber / correctionStats.value.engageNumber) * 100);
+// });
 
 // 计算未批改数量
 const uncorrectedNumber = computed(() => {
@@ -431,6 +437,30 @@ const fetchCorrectionStats = async () => {
   }
 };
 
+// 获取作业详情以获取courseId
+const fetchAssignmentDetails = async () => {
+  try {
+    const response = await apis.getAssignmentById(props.assignmentId);
+    if (response.data.code === 200) {
+      const assignmentData = response.data.data;
+      courseId.value = assignmentData.courseId || 0;
+      console.log('获取到AI口语作业courseId:', courseId.value);
+    }
+  } catch (error) {
+    console.error('获取AI口语作业详情失败:', error);
+    // 如果普通作业API失败,尝试AI口语作业API
+    try {
+      const aiResponse = await apis.getAiSpeakingAssignmentById(props.assignmentId);
+      if (aiResponse.data.code === 200 && aiResponse.data.data.courseId) {
+        courseId.value = aiResponse.data.data.courseId;
+        console.log('从AI口语API获取到courseId:', courseId.value);
+      }
+    } catch (aiError) {
+      console.error('获取AI口语作业详情也失败:', aiError);
+    }
+  }
+};
+
 // 获取下一个学生作业ID
 const getNextStudentAssignment = async () => {
   try {
@@ -939,9 +969,20 @@ onBeforeUnmount(() => {
 const goBack = () => {
   // 根据用户角色决定返回页面
   if (ROLE === 'STUDENT') {
-    // 学生返回 myHomework 页面
-    router.push({
-      name: 'myHomework'
+    // 学生返回 myHomework 页面,并传递courseId
+    if (!courseId.value) {
+      ElMessage.warning('获取课程信息失败,将返回作业列表');
+      router.push({ name: 'myHomework' });
+      return;
+    }
+    
+    console.log('AI口语作业返回,courseId:', courseId.value);
+    router.push({ 
+      name: 'myHomework',
+      query: { 
+        courseId: courseId.value.toString(),
+        fromAssignment: 'true' // 标记是从作业页面返回
+      }
     });
   } else {
     // 老师保持原有逻辑,返回批改页面
@@ -996,6 +1037,9 @@ watch(templateDialogVisible, (val) => {
 // 在数据加载完成后渲染图表
 onMounted(async () => {
   try {
+    // 先获取作业详情以获取courseId
+    await fetchAssignmentDetails();
+    
     const response = await doubaoApis.getRecord(
       props.userId,
       props.assignmentId

+ 33 - 2
src/views/CorrectPage/CorrectPage.vue

@@ -364,6 +364,9 @@ const studentInfo = reactive({
 // 学生回答内容
 const studentAnswer = ref('')
 
+// 课程ID(用于返回时保持菜单选中状态)
+const courseId = ref(0)
+
 // 格式化消息数据用于显示
 const formattedMessages = ref<IDialogue[]>([])
 
@@ -404,6 +407,19 @@ async function fetchCorrectionData() {
   }
 }
 
+// 获取作业详情以获取课程ID
+async function fetchAssignmentDetails() {
+  try {
+    const response = await apis.getAssignmentById(assignmentId)
+    if (response.data.code === 200) {
+      const assignmentData = response.data.data
+      courseId.value = assignmentData.courseId || 0
+    }
+  } catch (error) {
+    console.error('获取作业详情失败:', error)
+  }
+}
+
 // 获取数据
 async function fetchData() {
   await apis.getAIDialogues(assignmentId, studentId)
@@ -441,6 +457,9 @@ async function fetchData() {
   // 获取现有的评分和评语
   await fetchCorrectionData()
   
+  // 获取作业详情(获取课程ID)
+  await fetchAssignmentDetails()
+  
   // 获取批改进度统计
   await fetchCorrectionStats()
 }
@@ -643,8 +662,20 @@ const goBack = () => {
 
 // 返回上一页(学生版)
 const goBackStudent = () => {
-  router.push({ name: 'myHomework' }).then(() => {
-    window.location.reload(); // 强制刷新页面
+  // 如果没有获取到课程ID,则正常返回
+  if (!courseId.value) {
+    ElMessage.warning('获取课程信息失败,将返回作业列表');
+    router.push({ name: 'myHomework' });
+    return;
+  }
+  
+  // 返回时传递课程ID,让myHomework页面保持对应课程的选中状态
+  router.push({ 
+    name: 'myHomework',
+    query: { 
+      courseId: courseId.value.toString(),
+      fromAssignment: 'true' // 标记是从作业页面返回
+    }
   });
 };
 

+ 73 - 1
src/views/HomeworkPage/index.vue

@@ -118,11 +118,12 @@
 <script lang="ts" setup>
   import {ZoomIn, Search} from "@element-plus/icons-vue";
   import {Calendar,Check,Close} from "@element-plus/icons-vue";
-  import {onMounted, reactive, ref, computed} from "vue";
+  import {onMounted, reactive, ref, computed, watch} from "vue";
   import useApis from "@/apis";
   import {useStore} from "@/store";
   import type {CourseVO, IAssignment} from "@/types/vo";
   import router from "@/router";
+  import {useRoute} from "vue-router";
 
   import {useFormatDate} from "@/hooks/useFormatDate";
 
@@ -130,6 +131,9 @@
   const store = useStore()
   const {formatDate} = useFormatDate()
   const role:'teachers' | 'student' = store.user.role === 'STUDENT' ?   'student':'teachers';
+  
+  // 获取路由信息
+  const route = useRoute()
 
   // 课程列表
   const courseList = ref<CourseVO[]>([])
@@ -253,11 +257,43 @@
 
   // 选择课程
   const selectCourse = (courseId: number) => {
+    console.log('selectCourse 被调用,课程ID:', courseId)
     selectedCourseId.value = courseId
     // 筛选当前课程的作业
     currentCourseAssignments.value = allAssignments.value.filter(
       assignment => assignment.courseId === courseId
     )
+    console.log('选中课程后,当前课程作业数量:', currentCourseAssignments.value.length)
+    console.log('allAssignments总数:', allAssignments.value.length)
+  }
+  
+  // 处理路由参数 - 从其他页面返回时自动选中课程
+  const handleRouteParams = () => {
+    const { courseId, fromAssignment } = route.query
+    
+    console.log('handleRouteParams 被调用,参数:', { courseId, fromAssignment })
+    console.log('课程列表长度:', courseList.value.length, '作业总数:', allAssignments.value.length)
+    
+    // 如果有课程ID参数且是从作业页面返回的
+    if (courseId && fromAssignment === 'true') {
+      const targetCourseId = Number(courseId)
+      console.log('目标课程ID:', targetCourseId)
+      
+      // 检查目标课程是否存在
+      const targetCourse = courseList.value.find(course => course.courseId === targetCourseId)
+      if (targetCourse) {
+        console.log('找到目标课程,开始选择课程')
+        selectCourse(targetCourseId)
+        
+        // 清除路由参数,避免重复处理
+        router.replace({ 
+          name: 'myHomework',
+          query: {} 
+        })
+      } else {
+        console.log('未找到目标课程')
+      }
+    }
   }
 
   // 重置搜索
@@ -389,12 +425,15 @@
   }
 
   const fetchHomeworkListByCourseId = (courseId:number) => {
+    console.log('开始获取课程', courseId, '的作业数据')
     apis.getAssignmentByCourseId(courseId)
         .then((res: any) => {
           let total = res.data.data.total
+          console.log('课程', courseId, '总作业数:', total)
           apis.getAssignmentByCourseId(courseId, 1, total)
               .then((res: any) => {
                 let data = res.data.data.records
+                console.log('课程', courseId, '获取到', data.length, '个作业')
                 for(let i = 0; i < data.length; i++) {
                   data[i].endTime = formatDate(data[i].endTime)
                   data[i].courseId = courseId // 添加课程ID
@@ -402,7 +441,16 @@
                   data[i].submissionStatus = getRandomSubmissionStatus()
                   homeworkList.tableData.push(data[i])
                   allAssignments.value.push(data[i]) // 添加到所有作业数组
+                  console.log('添加作业:', data[i].assignmentName, 'courseId:', data[i].courseId)
+                }
+                console.log('课程', courseId, '作业加载完成,当前allAssignments总数:', allAssignments.value.length)
+                
+                // 如果有选中的课程且正好是这个课程ID,立即重新筛选
+                if (selectedCourseId.value === courseId) {
+                  console.log('检测到当前选中课程', courseId, '的作业已加载,重新筛选')
+                  selectCourse(courseId)
                 }
+                
                 processedHomeworkList.tableData = homeworkList.tableData
                 Object.assign(pageInfo, {
                   tableData: getSlice(pageInfo.pages, pageInfo.size),
@@ -424,6 +472,30 @@
     return processedHomeworkList.tableData.slice((page-1)*size, page*size)
   }
 
+  // 监听课程列表变化,数据加载完成后处理路由参数
+  watch(courseList, (newCourseList) => {
+    console.log('courseList 变化,课程数量:', newCourseList.length)
+    if (newCourseList.length > 0) {
+      handleRouteParams()
+    }
+  }, { immediate: false })
+
+  // 监听作业数据变化,确保作业数据也加载完成
+  watch(allAssignments, (newAssignments) => {
+    console.log('allAssignments 变化,作业数量:', newAssignments.length)
+    
+    // 如果有选中的课程且作业数据更新了,重新筛选作业
+    if (selectedCourseId.value && newAssignments.length > 0) {
+      console.log('重新筛选选中课程的作业,课程ID:', selectedCourseId.value)
+      selectCourse(selectedCourseId.value)
+    }
+    
+    // 如果作业数据加载完成,再次尝试处理路由参数
+    if (newAssignments.length > 0) {
+      handleRouteParams()
+    }
+  }, { immediate: false })
+
   onMounted(() => {
     fetchData()
   })