From 1de57f2089187f09edb8c773d3d563aadd62853b Mon Sep 17 00:00:00 2001 From: gaoxq <376340421@qq.com> Date: Mon, 2 Mar 2026 13:57:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E5=B1=8F=E9=A1=B5=E9=9D=A2=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- screen-vue/src/components/Layout/index.vue | 2 +- screen-vue/src/router/index.js | 30 ++-- screen-vue/src/utils/request.js | 77 +++++----- screen-vue/src/views/screen/Home/index.vue | 10 -- .../mybigscreen/Auth/routeController.java | 6 - .../mybigscreen/Config/LoginInterceptor.java | 27 +++- .../com/mini/mybigscreen/Model/Result.java | 142 +++++++++++++++--- .../biz/mapper/ErpAccountMapper.java | 4 +- .../biz/mapper/ErpCategoryMapper.java | 4 +- .../biz/mapper/ErpTransactionFlowMapper.java | 4 +- .../biz/mapper/HomeMenuMapper.java | 5 +- .../biz/mapper/HomeModuleMapper.java | 4 +- .../biz/mapper/HomeModuleUserMapper.java | 4 +- .../biz/mapper/HomeUserMapper.java | 4 +- 14 files changed, 227 insertions(+), 96 deletions(-) diff --git a/screen-vue/src/components/Layout/index.vue b/screen-vue/src/components/Layout/index.vue index a5ff42a..a1c3d40 100644 --- a/screen-vue/src/components/Layout/index.vue +++ b/screen-vue/src/components/Layout/index.vue @@ -200,7 +200,7 @@ const getMenuList = async () => { } setMenuNameMap(menuList.value); } catch (error) { - ElMessage.error(error); + console.log(error); } } diff --git a/screen-vue/src/router/index.js b/screen-vue/src/router/index.js index 56d585c..b73619d 100644 --- a/screen-vue/src/router/index.js +++ b/screen-vue/src/router/index.js @@ -5,7 +5,6 @@ import Layout from '@/components/Layout/index.vue' import Dashboard from '@/views/desktop/index.vue' import bigScreen from '@/views/screen/index.vue' -// 扫描规则保持不变 const modules = import.meta.glob('../views/**/index.vue', { eager: false, import: 'default' @@ -47,16 +46,16 @@ const generateRoutes = () => { } const routes = [ - { - path: '/', - redirect: '/login' - }, { path: '/login', name: 'Login', component: Login, meta: { isPublic: true } }, + { + path: '/', + redirect: '/login' + }, { path: '/bigScreen', name: 'bigScreen', @@ -64,12 +63,12 @@ const routes = [ meta: { requiresAuth: true } }, { - path: '/', + path: '/layout', component: Layout, meta: { requiresAuth: true }, children: [ { - path: 'dashboard', + path: '/dashboard', name: 'Dashboard', component: Dashboard }, @@ -91,21 +90,30 @@ const router = createRouter({ } }) +// 优化路由守卫逻辑:更健壮的登录校验 router.beforeEach((to, from, next) => { + // 公开页面直接放行 if (to.meta.isPublic) { next() return } + // 非公开页面校验token try { const token = localStorage.getItem('token') - if (token && token.trim() !== '') { - next(); + // 严格校验token有效性 + if (token && typeof token === 'string' && token.trim() !== '') { + next() } else { - next({ path: '/login', query: { redirect: to.fullPath } }); + next({ + path: '/login', + query: { redirect: to.fullPath }, + replace: true // 替换历史记录,避免回退问题 + }) } } catch (error) { - next('/login'); + console.error('路由守卫校验token失败:', error) + next({ path: '/login', replace: true }) } }) diff --git a/screen-vue/src/utils/request.js b/screen-vue/src/utils/request.js index 8e7fe03..d4ca119 100644 --- a/screen-vue/src/utils/request.js +++ b/screen-vue/src/utils/request.js @@ -10,71 +10,80 @@ const service = axios.create({ } }) -const WHITE_LIST = ['/userLogin', '/register'] +const WHITE_LIST = ['userLogin', 'register'] service.interceptors.request.use( (config) => { - const isWhite = WHITE_LIST.some(item => config.url?.includes(item)) + const requestUrl = config.url || ''; + const isWhite = WHITE_LIST.some(item => requestUrl.includes(item)); + if (isWhite) { - return config + return config; } - const token = localStorage.getItem('token') + const token = localStorage.getItem('token'); if (!token) { - handleLoginExpired() - return Promise.reject() + handleLoginExpired(); + return Promise.reject({ config, message: '未获取到token' }); } - config.headers.Authorization = `Bearer ${token}` - return config + config.headers.Authorization = `Bearer ${token}`; + return config; }, (error) => { - return Promise.reject(error) + return Promise.reject(error); } ) service.interceptors.response.use( (response) => { - const res = response.data - - if (typeof res === 'string' && res.includes('')) { - handleLoginExpired() - return Promise.reject() - } - + const res = response.data; + + // 1. 处理登录失效 if (res.code === 401) { - handleLoginExpired() - return Promise.reject() + handleLoginExpired(); + return Promise.reject(res); } - if (res.code !== 200) { - ElMessage.error(res.msg || '请求失败') - return Promise.reject(res) + // 2. 处理业务成功 + if (res.code === 200) { + return res.data; } - return res.data + // 3. 处理其他业务错误(如500) + ElMessage.error(res.msg || '请求失败'); + return Promise.reject(res); }, (error) => { - const isWhite = error.config && WHITE_LIST.some(item => error.config.url?.includes(item)) + const requestUrl = error?.config?.url || ''; + const isWhite = WHITE_LIST.some(item => requestUrl.includes(item)); + if (isWhite) { - ElMessage.error('服务异常') - return Promise.reject(error) + const errMsg = error?.response?.data?.msg || '登录请求失败,请检查网络或账号信息'; + ElMessage.error(errMsg); + return Promise.reject(error); } - if (error.response?.status === 401) { - handleLoginExpired() - return Promise.reject(error) + + if (error?.response?.status === 401) { + handleLoginExpired(); + return Promise.reject(error); } - ElMessage.error('请求异常,请稍后重试') - return Promise.reject(error) + + if (!error.response) { + ElMessage.error('网络异常,请检查网络连接后重试'); + return Promise.reject(error); + } + + return Promise.reject(error); } ) function handleLoginExpired() { - localStorage.removeItem('token') + localStorage.removeItem('token'); if (router.currentRoute.path !== '/login') { - router.push('/login').catch(() => {}) - ElMessage.error('登录已失效,请重新登录') + router.push('/login').catch(() => {}); + ElMessage.error('登录已失效,请重新登录'); } } -export default service \ No newline at end of file +export default service; \ No newline at end of file diff --git a/screen-vue/src/views/screen/Home/index.vue b/screen-vue/src/views/screen/Home/index.vue index c03e447..e0c2a20 100644 --- a/screen-vue/src/views/screen/Home/index.vue +++ b/screen-vue/src/views/screen/Home/index.vue @@ -78,16 +78,6 @@ const switchMenu = (id) => { console.log(`切换到菜单:${menuList.value.find(item => item.id === id)?.name}`); }; -watch( - () => props.formParams, - (newVal) => { - console.log('表单参数更新:', newVal); - }, - { - deep: true, - immediate: true - } -);