diff --git a/screen-vue/src/router/index.js b/screen-vue/src/router/index.js index 728d2ee..9835e39 100644 --- a/screen-vue/src/router/index.js +++ b/screen-vue/src/router/index.js @@ -51,12 +51,12 @@ router.beforeEach((to, from, next) => { try { const token = localStorage.getItem('token') if (token && token.trim() !== '') { - next() + next(); } else { - next({ path: '/login', query: { redirect: to.fullPath } }) + next({ path: '/login', query: { redirect: to.fullPath } }); } } catch (error) { - next('/login') + next('/login'); } }) diff --git a/screen-vue/src/utils/request.js b/screen-vue/src/utils/request.js index ab18657..0c8062f 100644 --- a/screen-vue/src/utils/request.js +++ b/screen-vue/src/utils/request.js @@ -12,11 +12,11 @@ const service = axios.create({ service.interceptors.request.use( (config) => { - // 登录接口不添加token - if (!config.url?.includes('/userLogin')) { + const excludePaths = ['/userLogin', '/register']; + if (!excludePaths.some(path => config.url?.includes(path))) { const token = localStorage.getItem('token'); if (token) { - config.headers.Authorization = token; + config.headers.Authorization = `Bearer ${token}`; } } return config @@ -33,8 +33,7 @@ service.interceptors.response.use( if (res.code !== 200) { ElMessage.error(res.msg || '接口请求失败'); if (res.code === 401) { - localStorage.removeItem('token'); - router.push('/login').catch(err => console.warn('路由跳转失败', err)); + handleLoginExpired(); } return Promise.reject(res); } @@ -42,8 +41,55 @@ service.interceptors.response.use( }, (error) => { console.error('【响应拦截器错误】', error); + + if (isLoginExpiredError(error)) { + handleLoginExpired(); + return Promise.reject(new Error('登录状态已失效,请重新登录')); + } + + if (!error.response) { + if (error.message.includes('Network Error') || error.message.includes('timeout')) { + ElMessage.error('网络异常,请检查网络连接或稍后重试'); + } else { + ElMessage.error('请求失败,请稍后重试'); + } + return Promise.reject(error); + } + + ElMessage.error(error.response.data?.msg || error.message || '接口请求失败'); return Promise.reject(error); } ) +function isLoginExpiredError(error) { + if (error.response && error.response.status === 401) { + return true; + } + + const errorMsg = error.message.toLowerCase(); + const expiredKeywords = [ + 'token expired', 'invalid token', '未授权', + '登录失效', '认证失败', '401' + ]; + const networkKeywords = ['network error', 'timeout', '网络']; + + return ( + expiredKeywords.some(keyword => errorMsg.includes(keyword.toLowerCase())) && + !networkKeywords.some(keyword => errorMsg.includes(keyword.toLowerCase())) + ); +} + +function handleLoginExpired() { + localStorage.removeItem('token'); + + if (router.currentRoute.path !== '/login') { + const redirect = encodeURIComponent(router.currentRoute.fullPath); + router.push(`/login?redirect=${redirect}`).catch(err => { + console.warn('路由跳转失败', err); + }); + + ElMessage.error('登录状态已失效,请重新登录'); + } +} + export default service \ No newline at end of file diff --git a/screen-vue/src/views/desktop/index.vue b/screen-vue/src/views/desktop/index.vue index 2864870..1373a51 100644 --- a/screen-vue/src/views/desktop/index.vue +++ b/screen-vue/src/views/desktop/index.vue @@ -35,9 +35,6 @@
-
- -
@@ -50,9 +47,8 @@ import { ref, onMounted } from 'vue'; import HomeIndex from './screen/Home/index.vue'; import ErpIndex from './screen/Erp/index.vue'; import WorkIndex from './screen/Work/index.vue'; -import TestIndex from './screen/Test/index.vue'; -const screenTitle = ref('数字化可视化'); +const screenTitle = ref('数字化可视化看板'); const currentYear = new Date().getFullYear().toString(); const FormValues = ref({ @@ -62,7 +58,6 @@ const FormValues = ref({ const allTabs = [ { key: 'home', name: '首页' }, { key: 'work', name: '工作' }, - { key: 'test', name: '测试' }, { key: 'erp', name: '财务' }, ] diff --git a/screen-vue/src/views/desktop/screen/Test/components/ChartBar.vue b/screen-vue/src/views/desktop/screen/Test/components/ChartBar.vue deleted file mode 100644 index 53beae1..0000000 --- a/screen-vue/src/views/desktop/screen/Test/components/ChartBar.vue +++ /dev/null @@ -1,148 +0,0 @@ - - - - - \ No newline at end of file diff --git a/screen-vue/src/views/desktop/screen/Test/components/ChartDjt.vue b/screen-vue/src/views/desktop/screen/Test/components/ChartDjt.vue deleted file mode 100644 index d47a40d..0000000 --- a/screen-vue/src/views/desktop/screen/Test/components/ChartDjt.vue +++ /dev/null @@ -1,156 +0,0 @@ - - - - - \ No newline at end of file diff --git a/screen-vue/src/views/desktop/screen/Test/components/ChartDuo.vue b/screen-vue/src/views/desktop/screen/Test/components/ChartDuo.vue deleted file mode 100644 index 98c7de5..0000000 --- a/screen-vue/src/views/desktop/screen/Test/components/ChartDuo.vue +++ /dev/null @@ -1,225 +0,0 @@ - - - - - \ No newline at end of file diff --git a/screen-vue/src/views/desktop/screen/Test/components/ChartLine.vue b/screen-vue/src/views/desktop/screen/Test/components/ChartLine.vue deleted file mode 100644 index 4fd7950..0000000 --- a/screen-vue/src/views/desktop/screen/Test/components/ChartLine.vue +++ /dev/null @@ -1,181 +0,0 @@ - - - - - \ No newline at end of file diff --git a/screen-vue/src/views/desktop/screen/Test/components/ChartPic.vue b/screen-vue/src/views/desktop/screen/Test/components/ChartPic.vue deleted file mode 100644 index 5c21998..0000000 --- a/screen-vue/src/views/desktop/screen/Test/components/ChartPic.vue +++ /dev/null @@ -1,175 +0,0 @@ - - - - - \ No newline at end of file diff --git a/screen-vue/src/views/desktop/screen/Test/components/ChartTwo.vue b/screen-vue/src/views/desktop/screen/Test/components/ChartTwo.vue deleted file mode 100644 index 5ad18bd..0000000 --- a/screen-vue/src/views/desktop/screen/Test/components/ChartTwo.vue +++ /dev/null @@ -1,234 +0,0 @@ - - - - - \ No newline at end of file diff --git a/screen-vue/src/views/desktop/screen/Test/components/ChartYbp.vue b/screen-vue/src/views/desktop/screen/Test/components/ChartYbp.vue deleted file mode 100644 index d699272..0000000 --- a/screen-vue/src/views/desktop/screen/Test/components/ChartYbp.vue +++ /dev/null @@ -1,146 +0,0 @@ - - - - - \ No newline at end of file diff --git a/screen-vue/src/views/desktop/screen/Test/index.vue b/screen-vue/src/views/desktop/screen/Test/index.vue deleted file mode 100644 index 88c56af..0000000 --- a/screen-vue/src/views/desktop/screen/Test/index.vue +++ /dev/null @@ -1,246 +0,0 @@ - - - - - \ No newline at end of file