2.5 KiB
2.5 KiB
心理健康测评明细导出功能修复记录
导出功能认证失败问题修复(2025-07-24 16:30)
问题描述
导出的心理健康测评明细Excel文件中,没有显示测评数据,只显示错误信息:
{"code":401,"msg":"认证失败,无法访问系统资源","data":null}
问题分析
导出功能使用XMLHttpRequest发送请求时,没有正确添加所有必要的认证请求头,导致后端API认证失败。根据项目规范,API请求需要包含以下必要的Header:
- Authorization: Bearer格式的Token
- clientid: 客户端标识
- referer: 请求来源
解决方案
-
修改前端导出功能代码,添加必要的请求头:
- 添加
clientid: 'web'请求头 - 添加
referer: window.location.href请求头
- 添加
-
增加错误处理逻辑,解析并显示详细的错误信息:
- 当请求失败时,尝试解析返回的JSON错误信息
- 显示具体的错误消息,提高用户体验
修改代码
// 使用XMLHttpRequest发送请求
const xhr = new XMLHttpRequest();
xhr.open('POST', import.meta.env.VITE_APP_BASE_API + '/xljk/evaluation/detail/export', true);
xhr.responseType = 'blob';
// 添加请求头
xhr.setRequestHeader('Authorization', 'Bearer ' + localStorage.getItem('token'));
xhr.setRequestHeader('clientid', 'web');
xhr.setRequestHeader('referer', window.location.href);
// 错误处理
xhr.onload = function() {
loading.close();
if (xhr.status === 200) {
// 成功处理逻辑...
} else {
try {
// 尝试解析错误信息
const reader = new FileReader();
reader.onload = function() {
try {
const errorResponse = JSON.parse(reader.result as string);
ElMessage.error(`导出失败: ${errorResponse.msg || '未知错误'}`);
} catch (e) {
ElMessage.error('导出失败,请稍后重试');
}
};
reader.readAsText(xhr.response);
} catch (e) {
ElMessage.error('导出失败,请稍后重试');
}
}
};
测试结果
修复后,导出功能可以正常工作,成功导出Excel文件,包含完整的心理健康测评明细数据。
相关文件
web/src/views/xljk/evaluation/detail.vue
注意事项
- 所有API请求必须包含完整的认证请求头
- 根据项目规范,API接口需要遵循统一的认证格式,包括Bearer格式Token、clientid和referer等必需Header
- 错误处理应尽可能提供详细的错误信息,提高用户体验
修复人员:李旭明
修复时间:2025-07-24 16:30