From 2ba97b83ec69d94879337e84354e0fcc887d3a9f Mon Sep 17 00:00:00 2001 From: chenpanliang <3245129380@qq.com> Date: Wed, 27 Aug 2025 20:24:31 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(=E7=99=BB=E5=BD=95):=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=80=9A=E8=BF=87URL=E5=8F=82=E6=95=B0=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E7=99=BB=E5=BD=95=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在路由守卫和登录逻辑中添加对URL参数的处理,当URL中包含token、username和level时,可以直接登录并跳转到对应页面,无需API验证。同时启用路由的认证元信息配置。 --- my-vue-app/src/router/index.js | 52 ++++++++++++++++++++++++---- my-vue-app/src/utils/https.js | 2 +- my-vue-app/src/views/login/login.vue | 25 ++++++++++--- 3 files changed, 67 insertions(+), 12 deletions(-) diff --git a/my-vue-app/src/router/index.js b/my-vue-app/src/router/index.js index 48e73d9..401b155 100644 --- a/my-vue-app/src/router/index.js +++ b/my-vue-app/src/router/index.js @@ -17,37 +17,37 @@ const routes = [ path: '/login', name: 'Login', component: Login, - // meta: { requiresAuth: false } + meta: { requiresAuth: false } }, { path: '/sale', name: 'Sale', component: Sale, - // meta: { requiresAuth: true, minLevel: 1 } + meta: { requiresAuth: true, minLevel: 1 } }, { path: '/manager', name: 'Manager', component: Manager, - // meta: { requiresAuth: true, minLevel: 2 } + meta: { requiresAuth: true, minLevel: 2 } }, { path: '/senior-manager', name: 'SeniorManager', component: SeniorManager, - // meta: { requiresAuth: true, minLevel: 3 } + meta: { requiresAuth: true, minLevel: 3 } }, { path: '/second-top', name: 'SecondTop', component: SecondTop, - // meta: { requiresAuth: true, minLevel: 4 } + meta: { requiresAuth: true, minLevel: 4 } }, { path: '/top', name: 'Top', component: TopOne, - // meta: { requiresAuth: true, minLevel: 5 } + meta: { requiresAuth: true, minLevel: 5 } } ] @@ -57,9 +57,47 @@ const router = createRouter({ }) // 路由守卫 -router.beforeEach((to, from, next) => { +router.beforeEach(async (to, from, next) => { const userStore = useUserStore() + // 检查URL参数中是否包含token和用户信息(来自其他页面的跳转) + const urlToken = to.query.token + const urlUsername = to.query.username + const urlLevel = to.query.level + + // 如果URL中包含token和用户信息,进行自动登录 + if (urlToken && urlUsername && urlLevel) { + try { + // 解码用户名(URL编码的中文) + const decodedUsername = decodeURIComponent(urlUsername) + + // 直接设置用户信息到store(跳过API验证,因为token来自可信源) + userStore.login(urlToken, decodedUsername, parseInt(urlLevel), '', '') + + // 根据用户等级跳转到对应页面 + const defaultRoutes = { + 1: '/sale', + 2: '/manager', + 3: '/senior-manager', + 4: '/second-top', + 5: '/top' + } + + const targetRoute = defaultRoutes[parseInt(urlLevel)] || '/sale' + + // 如果当前路由就是目标路由,直接通过;否则重定向 + if (to.path === targetRoute) { + next() + } else { + next(targetRoute) + } + return + } catch (error) { + console.error('自动登录失败:', error) + // 如果自动登录失败,继续正常的路由守卫逻辑 + } + } + // 如果路由不需要认证,直接通过 if (!to.meta.requiresAuth) { next() diff --git a/my-vue-app/src/utils/https.js b/my-vue-app/src/utils/https.js index a747212..8fc31d1 100644 --- a/my-vue-app/src/utils/https.js +++ b/my-vue-app/src/utils/https.js @@ -32,7 +32,7 @@ service.interceptors.request.use( _t: Date.now() } } - + // https://mldash.nycjy.cn/login // 显示加载状态 if (config.showLoading !== false) { // 可以在这里添加全局loading diff --git a/my-vue-app/src/views/login/login.vue b/my-vue-app/src/views/login/login.vue index 643814a..197fd83 100644 --- a/my-vue-app/src/views/login/login.vue +++ b/my-vue-app/src/views/login/login.vue @@ -552,12 +552,25 @@ const cancelSecuritySetup = () => { } // Token验证登录函数 -const handleTokenLogin = async (token) => { +const handleTokenLogin = async (token, username = null, userLevel = null) => { loading.value = true errorMessage.value = '' try { - // 使用token进行验证登录 + // 如果URL中包含用户信息,直接使用(跳过API验证) + if (username && userLevel) { + // 解码用户名 + const decodedUsername = decodeURIComponent(username) + + // 直接设置用户信息到store + userStore.login(token, decodedUsername, parseInt(userLevel), '', '') + + // 根据用户等级跳转到对应页面 + navigateToUserPage(parseInt(userLevel)) + return + } + + // 使用token进行API验证登录 const response = await http.post('/api/v1/token_login', { token: token }) @@ -586,9 +599,13 @@ const handleTokenLogin = async (token) => { // 组件挂载时检查路由参数中的token onMounted(() => { const token = route.query.token + const username = route.query.username + const userLevel = route.query.level + if (token) { - // 如果路由参数中有token,直接进行token验证登录 - handleTokenLogin(token) + // 如果路由参数中有token,进行token验证登录 + // 如果同时有用户信息,直接使用;否则通过API验证 + handleTokenLogin(token, username, userLevel) } }) From 2a52e8f0f696d2634edae35586cd49a8a1d37f88 Mon Sep 17 00:00:00 2001 From: chenpanliang <3245129380@qq.com> Date: Wed, 27 Aug 2025 21:21:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E6=81=A2=E5=A4=8D=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E7=8E=AF=E5=A2=83API=E5=9F=BA=E7=A1=80=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将开发环境IP地址注释掉,使用正式生产环境的API基础路径 --- my-vue-app/src/utils/https.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/my-vue-app/src/utils/https.js b/my-vue-app/src/utils/https.js index 8fc31d1..089b8ae 100644 --- a/my-vue-app/src/utils/https.js +++ b/my-vue-app/src/utils/https.js @@ -5,8 +5,8 @@ import { useUserStore } from '@/stores/user' // 创建axios实例 const service = axios.create({ - // baseURL: 'https://mldash.nycjy.cn/' || '', // API基础路径,支持完整URL - baseURL: 'http://192.168.15.121:8890' || '', // API基础路径,支持完整URL + baseURL: 'https://mldash.nycjy.cn/' || '', // API基础路径,支持完整URL + // baseURL: 'http://192.168.15.121:8890' || '', // API基础路径,支持完整URL timeout: 100000, // 请求超时时间 headers: { 'Content-Type': 'application/json;charset=UTF-8'