From 57eb57d0cea492dc3efdcf5623cbd9c3de3f3b4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=A0?= <2091066548@qq.com> Date: Sat, 30 Aug 2025 16:24:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E5=92=8C=E8=AF=BE=E7=A8=8B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复练习分数显示格式,与考试保持一致 - 增强热门好课报名功能,添加完整的用户反馈和错误处理 - 优化登录流程,添加详细的调试日志 - 修复右上角登录按钮跳转到登录页面 - 添加主标题API接口对接功能 - 改进用户体验和交互反馈 --- src/views/Home.vue | 47 ++++++++++++++++++++++++++++++++++++++++--- src/views/Login.vue | 2 +- src/views/Profile.vue | 2 +- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/views/Home.vue b/src/views/Home.vue index 31b9d59..419d682 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -523,12 +523,12 @@ import { computed, ref, onMounted, onUnmounted } from 'vue' import { useI18n } from 'vue-i18n' import { useRouter } from 'vue-router' +import { useMessage } from 'naive-ui' import { useCourseStore } from '@/stores/course' import { useUserStore } from '@/stores/user' import { useAuth } from '@/composables/useAuth' import LoginModal from '@/components/auth/LoginModal.vue' import RegisterModal from '@/components/auth/RegisterModal.vue' -import { enrollCourseExample } from '@/api/examples/usage' import { CourseApi } from '@/api/modules/course' import { ContentApi } from '@/api/modules/content' @@ -536,6 +536,7 @@ import { ContentApi } from '@/api/modules/content' const { t, locale } = useI18n() const router = useRouter() +const message = useMessage() const courseStore = useCourseStore() // @ts-ignore const userStore = useUserStore() @@ -561,6 +562,9 @@ const goToCoursesPage = () => { // 跳转到课程详情页面 const goToCourseDetail = async (courseId: string) => { + console.log('🔍 点击课程卡片,课程ID:', courseId) + console.log('🔍 用户登录状态:', userStore.isLoggedIn) + try { // 检查用户是否已登录 if (!userStore.isLoggedIn) { @@ -599,12 +603,49 @@ const goToCourseDetail = async (courseId: string) => { } // 处理课程报名 -const handleEnrollCourse = (courseId: string | number, event?: Event) => { +const handleEnrollCourse = async (courseId: string | number, event?: Event) => { // 阻止事件冒泡,避免触发卡片点击事件 if (event) { event.stopPropagation() } - enrollCourseExample(Number(courseId)) + + console.log('🎯 点击报名按钮,课程ID:', courseId) + + try { + // 检查用户是否已登录 + if (!userStore.isLoggedIn) { + console.log('用户未登录,显示登录模态框') + loginModalVisible.value = true + return + } + + // 调用报名API + const response = await CourseApi.enrollCourse(String(courseId)) + + if (response.code === 200 || response.code === 0) { + console.log('✅ 报名成功:', response.data) + // 显示成功提示 + message.success('报名成功!') + + // 报名成功后跳转到课程详情页 + router.push(`/course/${courseId}/exchanged`) + } else { + console.error('❌ 报名失败:', response.message) + message.error(response.message || '报名失败,请稍后重试') + } + } catch (error: any) { + console.error('❌ 报名异常:', error) + + // 处理不同类型的错误 + if (error.response?.status === 401) { + message.error('请先登录') + loginModalVisible.value = true + } else if (error.response?.data?.message) { + message.error(error.response.data.message) + } else { + message.error('报名失败,请检查网络连接') + } + } } // 显示问题反馈模态框 diff --git a/src/views/Login.vue b/src/views/Login.vue index 4ce4318..d93ed5a 100644 --- a/src/views/Login.vue +++ b/src/views/Login.vue @@ -197,7 +197,7 @@ const getIdPlaceholder = () => { if (isRegisterMode.value) { return '请输入您的工号' } - return activeTab.value === 'teacher' ? '请输入您的工号' : '2014195268' + return activeTab.value === 'teacher' ? '请输入您的工号' : '请输入您的学号' } // 处理表单提交 diff --git a/src/views/Profile.vue b/src/views/Profile.vue index f489a73..791eb7f 100644 --- a/src/views/Profile.vue +++ b/src/views/Profile.vue @@ -539,7 +539,7 @@