From 376f701422a5a7b58eed6c804eee8516f251d3c4 Mon Sep 17 00:00:00 2001 From: sunzhuangzhuang <961120009@qq.com> Date: Wed, 3 Sep 2025 14:20:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/index.js | 96 +++++++++++++++++++++++-------------------- src/stores/user.js | 13 +++++- src/utils/api.js | 6 +-- src/views/Login.vue | 50 ++++++++++++++-------- src/views/MyLogin.vue | 57 +++++++++++++++---------- src/views/Payment.vue | 36 +--------------- 6 files changed, 136 insertions(+), 122 deletions(-) diff --git a/src/router/index.js b/src/router/index.js index ab052ad..230de6a 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -137,7 +137,7 @@ const routes = [ component: () => import('@/views/Payment.vue'), meta: { title: '支付激活', - requiresAuth: true + requiresAuth: true } }, { @@ -248,37 +248,37 @@ const routes = [ } }, { - path: '/buydetail', - name: 'BuyDetail', - component: () => import('../views/BuyDetails.vue'), - meta: { title: '确认订单' } - }, - { - path: '/pay/:orderId', - name: 'Pay', - component: () => import('@/views/Pay.vue'), - meta: { title: '确认支付' }, - props: route => ({ orderId: route.query.orderId }) - }, - { - path: '/cart', - name: 'Cart', - component: () => import('@/views/Cart.vue'), - meta: { title: '购物车' } - }, - { - path: '/address', - name: 'Address', - component: () => import('@/views/Address.vue'), - meta: { title: '地址管理', requiresAuth: true } - }, - { - path: '/payloading', - name: 'PayLoading', - component: () => import('@/views/PayLoading.vue'), - meta: { title: '支付确认' }, - props: route => ({ orderId: route.query.orderId }) - }, + path: '/buydetail', + name: 'BuyDetail', + component: () => import('../views/BuyDetails.vue'), + meta: { title: '确认订单' } + }, + { + path: '/pay/:orderId', + name: 'Pay', + component: () => import('@/views/Pay.vue'), + meta: { title: '确认支付' }, + props: route => ({ orderId: route.query.orderId }) + }, + { + path: '/cart', + name: 'Cart', + component: () => import('@/views/Cart.vue'), + meta: { title: '购物车' } + }, + { + path: '/address', + name: 'Address', + component: () => import('@/views/Address.vue'), + meta: { title: '地址管理', requiresAuth: true } + }, + { + path: '/payloading', + name: 'PayLoading', + component: () => import('@/views/PayLoading.vue'), + meta: { title: '支付确认' }, + props: route => ({ orderId: route.query.orderId }) + }, { path: '/:pathMatch(.*)*', name: 'NotFound', @@ -304,19 +304,19 @@ const router = createRouter({ // 路由守卫 router.beforeEach(async (to, from, next) => { NProgress.start() - + const userStore = useUserStore() - + // 设置页面标题 if (to.meta.title) { document.title = `${to.meta.title} - 炬融圈` } - + // 检查维护模式 try { - const {data} = await api.get('/system/maintenance-status', { showLoading: false }) - console.log(data,'data'); - + const { data } = await api.get('/system/maintenance-status', { showLoading: false }) + console.log(data, 'data'); + if (data.success) { if (data.data.maintenance_mode) { // 维护模式开启,且不在维护页面,跳转到维护页面 @@ -336,7 +336,7 @@ router.beforeEach(async (to, from, next) => { // 如果检查维护状态失败,继续正常流程 console.warn('检查维护状态失败:', error) } - + // 检查是否需要认证 if (to.meta.requiresAuth) { // 检查是否是代理页面 @@ -344,10 +344,10 @@ router.beforeEach(async (to, from, next) => { // 代理页面认证逻辑 const agentInfo = localStorage.getItem('agentInfo') const agentToken = localStorage.getItem('token') - + if (!agentInfo || !agentToken) { next({ - path: '/agent/login', + path: '/mylogin', query: { redirect: to.fullPath } }) return @@ -357,7 +357,7 @@ router.beforeEach(async (to, from, next) => { if (!userStore.isAuthenticated) { // 尝试从本地存储恢复登录状态 await userStore.checkAuth() - + if (!userStore.isAuthenticated) { next({ name: 'MyLogin', @@ -366,9 +366,13 @@ router.beforeEach(async (to, from, next) => { return } } - + // 检查支付状态(管理员除外) + console.log(userStore.user); + if (userStore.user && userStore.user.role !== 'admin' && userStore.user.payment_status === 'unpaid') { + console.log('进来了'); + // 如果当前不在支付页面,静默重定向到支付页面(不显示额外通知) if (to.name !== 'Payment') { next({ @@ -376,17 +380,19 @@ router.beforeEach(async (to, from, next) => { query: { redirect: to.fullPath } }) return + } else { + next() } } } } - + // 如果已登录用户访问登录/注册页面,重定向到转账管理(改成了主页) if (to.meta.hideForAuth && userStore.isAuthenticated) { next({ name: 'MainPage' }) return } - + next() }) diff --git a/src/stores/user.js b/src/stores/user.js index 75a8b20..5cb6528 100644 --- a/src/stores/user.js +++ b/src/stores/user.js @@ -48,13 +48,24 @@ export const useUserStore = defineStore('user', () => { ElMessage.success(response.data.message || '登录成功') return { success: true, data: response.data } } else if (response.data.needPayment) { + console.log(response.data.needPayment,'response.data.needPayment'); + console.log({ + success: false, + needPayment: true, + userId: response.data.userId, + message: response.data.message + }); + setToken(response.data.token) + setUser(response.data.user) // 用户需要支付激活,不显示错误消息,由前端页面处理 - return { + const returnData = { success: false, needPayment: true, userId: response.data.userId, message: response.data.message } + console.log('即将返回needPayment数据:', returnData); + return returnData } else { const message = response.data.message || '登录失败' ElMessage.error(message) diff --git a/src/utils/api.js b/src/utils/api.js index 2c64765..120c199 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -72,10 +72,10 @@ api.interceptors.response.use( // 判断当前是否在代理相关页面 const currentPath = router.currentRoute.value.path if (currentPath.startsWith('/agent')) { - router.push('/agent/login') + router.push('/agent/mylogin') ElMessage.error('代理登录已过期,请重新登录') } else { - router.push({ name: 'Login' }) + router.push({ name: 'MyLogin' }) ElMessage.error('登录已过期,请重新登录') } break @@ -86,7 +86,7 @@ api.interceptors.response.use( // 清除token并跳转到登录页 localStorage.removeItem('token') delete api.defaults.headers.common['Authorization'] - router.push({ name: 'Login' }) + router.push({ name: 'MyLogin' }) ElMessage.error(data.message || '账户已被拉黑,请联系管理员') } else if (data.code === 'PAYMENT_REQUIRED') { // 需要支付,跳转到支付页面 diff --git a/src/views/Login.vue b/src/views/Login.vue index 28e0f7e..256ba58 100644 --- a/src/views/Login.vue +++ b/src/views/Login.vue @@ -173,22 +173,40 @@ const handleLogin = async () => { captchaText: captchaInfo.captchaText } - const result = await userStore.login(loginData) - - if (result.success) { - // 登录成功,跳转到目标页面或转账管理 - const redirectPath = route.query.redirect || '/transfers' - router.push(redirectPath) - } else if (result.needPayment) { - // 用户需要支付激活,直接跳转到支付页面 - ElMessage.info('账户尚未激活,正在跳转到支付页面...') - router.push({ - path: '/payment', - query: { - userId: result.userId, - from: 'login' - } - }) + console.log('开始调用登录接口'); + try { + const result = await userStore.login(loginData) + console.log('登录接口调用完成'); + console.log(result,'result'); + + if (result.success) { + // 登录成功,跳转到目标页面或转账管理 + const redirectPath = route.query.redirect || '/transfers' + router.push(redirectPath) + } else if (result.needPayment) { + // 用户需要支付激活,直接跳转到支付页面 + ElMessage.info('账户尚未激活,正在跳转到支付页面...') + router.push({ + path: '/payment', + query: { + userId: result.userId, + from: 'login' + } + }) + } + } catch (loginError) { + console.error('登录调用异常:', loginError) + // 如果是支付相关的错误,也要处理 + if (loginError.needPayment) { + ElMessage.info('账户尚未激活,正在跳转到支付页面...') + router.push({ + path: '/payment', + query: { + userId: loginError.userId, + from: 'login' + } + }) + } } } catch (error) { console.error('登录失败:', error) diff --git a/src/views/MyLogin.vue b/src/views/MyLogin.vue index a07ba06..16234ba 100644 --- a/src/views/MyLogin.vue +++ b/src/views/MyLogin.vue @@ -181,7 +181,7 @@ const handleLogin = async () => { const valid = await loginFormRef.value.validate() if (!valid) return - // // 验证验证码 + // 验证验证码 // const captchaValid = await captchaRef.value.verifyCaptcha(loginForm.captcha) // if (!captchaValid) { // loginForm.captcha = '' @@ -199,12 +199,40 @@ const handleLogin = async () => { captchaText: captchaInfo.captchaText } - const result = await userStore.login(loginData) - - if (result.success) { - // 登录成功,跳转到目标页面或转账管理 - const redirectPath = route.query.redirect || '/mainpage' - router.push(redirectPath) + console.log('开始调用登录接口'); + try { + const result = await userStore.login(loginData) + console.log('登录接口调用完成'); + console.log(result,'result'); + + if (result.success) { + // 登录成功,跳转到目标页面或转账管理 + const redirectPath = route.query.redirect || '/transfers' + router.push(redirectPath) + } else if (result.needPayment) { + // 用户需要支付激活,直接跳转到支付页面 + ElMessage.info('账户尚未激活,正在跳转到支付页面...') + router.push({ + path: '/payment', + query: { + userId: result.userId, + from: 'login' + } + }) + } + } catch (loginError) { + console.error('登录调用异常:', loginError) + // 如果是支付相关的错误,也要处理 + if (loginError.needPayment) { + ElMessage.info('账户尚未激活,正在跳转到支付页面...') + router.push({ + path: '/payment', + query: { + userId: loginError.userId, + from: 'login' + } + }) + } } } catch (error) { console.error('登录失败:', error) @@ -216,21 +244,6 @@ const handleLogin = async () => { } } -// 快速登录(演示用) -const quickLogin = async (type) => { - if (type === 'admin') { - loginForm.username = 'admin' - loginForm.password = 'admin123' - } else { - loginForm.username = 'user' - loginForm.password = 'user123' - } - - // 清空验证码,让用户手动输入 - loginForm.captcha = '' - ElMessage.info('请输入验证码后登录') -} - // 忘记密码 const showForgotPassword = () => { ElMessageBox.alert( diff --git a/src/views/Payment.vue b/src/views/Payment.vue index 427565a..8fffd80 100644 --- a/src/views/Payment.vue +++ b/src/views/Payment.vue @@ -7,14 +7,6 @@
-
- 用户名: - {{ userInfo.username }} -
-
- 手机号: - {{ userInfo.phone }} -
支付金额: ¥{{ paymentAmount }} @@ -78,8 +70,7 @@ const paymentLoading = ref(false) const paymentStatus = ref('') const paymentAmount = ref(99) // 注册费用 const userInfo = reactive({ - username: '', - phone: '' + userId: '', }) // 获取用户信息 @@ -91,31 +82,6 @@ const getUserInfo = async () => { userInfo.phone = userStore.user.phone return } - - // 如果store中没有用户信息,尝试从URL参数获取 - const token = route.query.token - const userId = route.query.userId - - if (token && userId) { - // 设置临时token以获取用户信息 - const response = await api.get(`/users/${userId}`, { - headers: { - Authorization: `Bearer ${token}` - } - }) - - if (response.data.success) { - userInfo.username = response.data.user.username - userInfo.phone = response.data.user.phone - } - } else { - // 如果没有URL参数,尝试获取当前用户信息 - const response = await api.get('/auth/me') - if (response.data.success) { - userInfo.username = response.data.user.username - userInfo.phone = response.data.user.phone - } - } } catch (error) { console.error('获取用户信息失败:', error) ElMessage.error('获取用户信息失败')