Files
hzdyjs/docs/变更管理/code-adjust-record-2025-07-24-lixuming-4.md
T
2025-07-25 11:27:52 +08:00

2.5 KiB
Raw Blame History

心理健康测评明细导出功能修复记录

导出功能认证失败问题修复(2025-07-24 16:30)

问题描述

导出的心理健康测评明细Excel文件中,没有显示测评数据,只显示错误信息:

{"code":401,"msg":"认证失败,无法访问系统资源","data":null}

问题分析

导出功能使用XMLHttpRequest发送请求时,没有正确添加所有必要的认证请求头,导致后端API认证失败。根据项目规范,API请求需要包含以下必要的Header:

  • Authorization: Bearer格式的Token
  • clientid: 客户端标识
  • referer: 请求来源

解决方案

  1. 修改前端导出功能代码,添加必要的请求头:

    • 添加 clientid: 'web' 请求头
    • 添加 referer: window.location.href 请求头
  2. 增加错误处理逻辑,解析并显示详细的错误信息:

    • 当请求失败时,尝试解析返回的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