大屏项目初始化

This commit is contained in:
2026-03-02 00:21:05 +08:00
parent 7d3d82c0ab
commit d906e58f78

View File

@@ -10,124 +10,71 @@ const service = axios.create({
} }
}) })
const WHITE_LIST_PATHS = ['userLogin', 'register']; const WHITE_LIST = ['/userLogin', '/register']
const isInWhiteList = (url) => {
if (!url) return false;
const urlPath = url.split('?')[0];
const apiName = urlPath.substring(urlPath.lastIndexOf('/') + 1);
return WHITE_LIST_PATHS.includes(apiName);
};
const checkTokenExist = (config) => {
if (isInWhiteList(config.url)) {
return true;
}
const token = localStorage.getItem('token');
if (!token) {
handleLoginExpired();
return false;
}
config.headers.Authorization = `Bearer ${token}`;
return true;
};
service.interceptors.request.use( service.interceptors.request.use(
(config) => { (config) => {
if (!checkTokenExist(config)) { const isWhite = WHITE_LIST.some(item => config.url?.includes(item))
if (!isInWhiteList(config.url)) { if (isWhite) {
return Promise.reject(new Error('未检测到登录凭证,请先登录')); return config
}
return Promise.resolve(config);
} }
const token = localStorage.getItem('token')
if (!token) {
handleLoginExpired()
return Promise.reject()
}
config.headers.Authorization = `Bearer ${token}`
return config return config
}, },
(error) => { (error) => {
console.error('【请求拦截器错误】', error); return Promise.reject(error)
return Promise.reject(error);
} }
); )
service.interceptors.response.use( service.interceptors.response.use(
(response) => { (response) => {
const res = response.data; const res = response.data
if (typeof res === 'string' && res.includes('<html>')) { if (typeof res === 'string' && res.includes('<html>')) {
handleLoginExpired(); handleLoginExpired()
return Promise.reject(new Error('登录状态已失效,请重新登录')); return Promise.reject()
}
if (res.code === 401) {
handleLoginExpired()
return Promise.reject()
} }
if (res.code !== 200) { if (res.code !== 200) {
ElMessage.error(res.msg || '接口请求失败'); ElMessage.error(res.msg || '请求失败')
if (res.code === 401) { return Promise.reject(res)
handleLoginExpired();
}
return Promise.reject(res);
} }
return res.data;
return res.data
}, },
(error) => { (error) => {
if (error.config && isInWhiteList(error.config.url)) { const isWhite = error.config && WHITE_LIST.some(item => error.config.url?.includes(item))
ElMessage.error(error.response?.data?.msg || '登录失败,请检查账号密码'); if (isWhite) {
return Promise.reject(error); ElMessage.error('服务异常')
return Promise.reject(error)
} }
if (error.response?.status === 401) {
if (isLoginExpiredError(error)) { handleLoginExpired()
handleLoginExpired(); return Promise.reject(error)
return Promise.reject(new Error('登录状态已失效,请重新登录'));
} }
ElMessage.error('请求异常,请稍后重试')
if (!error.response) { return Promise.reject(error)
const errMsg = error.message.toLowerCase();
if (errMsg.includes('network error') || errMsg.includes('timeout')) {
ElMessage.error('网络异常,请检查网络连接');
} else {
ElMessage.error('请求失败,请稍后重试');
}
return Promise.reject(error);
}
const responseData = error.response.data;
if (typeof responseData === 'string' && responseData.includes('<html>')) {
handleLoginExpired();
return Promise.reject(new 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)) &&
!networkKeywords.some(keyword => errorMsg.includes(keyword))
);
}
function handleLoginExpired() { function handleLoginExpired() {
localStorage.removeItem('token'); localStorage.removeItem('token')
if (router.currentRoute.path !== '/login') { if (router.currentRoute.path !== '/login') {
const redirect = encodeURIComponent(router.currentRoute.fullPath); router.push('/login').catch(() => {})
router.push({ ElMessage.error('登录已失效,请重新登录')
path: '/login',
query: { redirect }
}).catch(err => {
console.warn('路由跳转失败', err);
});
ElMessage.error('登录状态已失效,请重新登录');
} }
} }
export default service; export default service