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 @@
-
-
-
-
-
-
-
-
-
-
-
中间上部 (60%)
-
核心工作内容/进度展示
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file