From 1714221e703a2f822c0bc198b07eb7bd9d549d7c 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 15:13:24 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E7=99=BB=E5=BD=95=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E8=BF=81=E7=A7=BB=E6=96=B0=E7=99=BB=E5=BD=95=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/modules/auth.ts | 2 +- src/views/Login.vue | 90 +++++++++++++++++++++++++++++++---------- 2 files changed, 69 insertions(+), 23 deletions(-) diff --git a/src/api/modules/auth.ts b/src/api/modules/auth.ts index b6b9a03..d2c0ad1 100644 --- a/src/api/modules/auth.ts +++ b/src/api/modules/auth.ts @@ -80,7 +80,7 @@ export class AuthApi { email: data.email || '', phone: data.phone || '', username: data.email || data.phone || '', - nickname: '用户', + nickname: data.email || data.phone || '', // 使用登录账号作为昵称 avatar: '', role: 'student', status: 'active', diff --git a/src/views/Login.vue b/src/views/Login.vue index 6b4330f..eed700f 100644 --- a/src/views/Login.vue +++ b/src/views/Login.vue @@ -210,20 +210,34 @@ const handleSubmit = async () => { // 显示加载状态 userStore.isLoading = true - // 调用登录API - 使用学号登录 - const response = await AuthApi.login({ - username: formData.studentId, // 使用username字段传递学号 + console.log('🚀 开始登录:', { account: formData.studentId, password: '***' }) + console.log('🔍 表单密码长度:', formData.password?.length) + + // 判断输入的是手机号还是邮箱 + const isPhone = /^[0-9]+$/.test(formData.studentId) + + const loginParams = { + ...(isPhone ? { phone: formData.studentId } : { email: formData.studentId }), password: formData.password - }) + } - if (response.code === 200) { - const { user, token, refreshToken } = response.data + console.log('🔍 准备发送的登录参数:', loginParams) - // 保存token到store和本地存储 - userStore.token = token - localStorage.setItem('X-Access-Token', token) - localStorage.setItem('token', token) - localStorage.setItem('refreshToken', refreshToken) + // 调用登录API + const response = await AuthApi.login(loginParams) + + console.log('✅ 登录响应:', response) + + if (response.code === 200 || response.code === 0) { + // 先保存token + const token = response.data?.token || response.result?.token + if (token) { + userStore.token = token + localStorage.setItem('X-Access-Token', token) + localStorage.setItem('token', token) + + console.log('✅ Token已保存:', token) + } // 如果选择了记住我,设置更长的过期时间 if (rememberMe.value) { @@ -249,28 +263,56 @@ const handleSubmit = async () => { console.log('✅ 用户信息获取成功并保存到store:', userStore.user) } else { - // 如果获取用户信息失败,使用登录接口返回的基本用户信息 - console.warn('⚠️ 获取用户信息失败,使用登录返回的基本信息') - userStore.user = user - localStorage.setItem('user', JSON.stringify(user)) + // 如果获取用户信息失败,创建基本用户信息 + console.warn('⚠️ 获取用户信息失败,使用基本信息') + const basicUser = { + id: 1, + email: isPhone ? '' : formData.studentId, + phone: isPhone ? formData.studentId : '', + username: formData.studentId, + nickname: formData.studentId, + avatar: '', + role: activeTab.value as 'student' | 'teacher', + status: 'active' as const, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString() + } + userStore.user = basicUser + localStorage.setItem('user', JSON.stringify(basicUser)) } } catch (userInfoError) { - // 如果获取用户信息失败,使用登录接口返回的基本用户信息 - console.warn('⚠️ 获取用户信息异常,使用登录返回的基本信息:', userInfoError) - userStore.user = user - localStorage.setItem('user', JSON.stringify(user)) + // 如果获取用户信息异常,创建基本用户信息 + console.warn('⚠️ 获取用户信息异常,使用基本信息:', userInfoError) + const basicUser = { + id: 1, + email: isPhone ? '' : formData.studentId, + phone: isPhone ? formData.studentId : '', + username: formData.studentId, + nickname: formData.studentId, + avatar: '', + role: activeTab.value as 'student' | 'teacher', + status: 'active' as const, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString() + } + userStore.user = basicUser + localStorage.setItem('user', JSON.stringify(basicUser)) } message.success('登录成功!') + console.log('🎉 登录流程完成,用户信息已更新') // 根据用户类型跳转到不同页面 const redirect = router.currentRoute.value.query.redirect as string if (activeTab.value === 'teacher') { - router.push(redirect || '/teacher') + console.log('🔄 准备跳转到教师端...') + await router.push(redirect || '/teacher') } else { - router.push(redirect || '/') + console.log('🔄 准备跳转到首页...') + await router.push(redirect || '/') } } else { + console.error('❌ 登录失败,响应码:', response.code) message.error(response.message || '登录失败') } } catch (error: any) { @@ -278,11 +320,15 @@ const handleSubmit = async () => { // 处理不同类型的错误 if (error.response?.status === 401) { - message.error('学号或密码错误') + message.error('邮箱或密码错误') } else if (error.response?.status === 429) { message.error('登录尝试过于频繁,请稍后再试') } else if (error.response?.data?.message) { + // 显示后端返回的具体错误信息 message.error(error.response.data.message) + } else if (error.message) { + // 显示错误对象中的消息 + message.error(error.message) } else { message.error('网络错误,请检查网络连接') }