2026-08-30-questionnaire-report-merge-design.md 3.9 KB

问卷管理合并报告管理设计

背景

当前 PC 端将问卷管理和报告管理拆成两个入口:问卷管理展示问卷模板,报告管理通过问卷下拉框查询已发布问卷及报告。用户希望以问卷管理为主,在每条问卷记录中直接查看对应报告的生成状态并打开报告,减少页面跳转和重复筛选。

目标与范围

  • 保留问卷管理作为唯一业务入口。
  • 在问卷管理列表中增加“报告列表”操作,按问卷展开对应的发布/作答记录及其报告。
  • 展示报告生成状态,并支持打开可用报告和重新生成失败报告。
  • 复用现有报告查询、预览、重新生成和报告地址逻辑。
  • 保留旧报告管理路由的兼容能力;菜单是否显示由现有动态菜单配置控制,不修改后端菜单数据。
  • 不改变小程序端、报告生成协议和数据库结构。

交互设计

  1. 问卷管理列表保留新增、编辑、发布、详情、删除等操作。
  2. 对每条问卷增加“报告列表”按钮。点击后在该问卷行下展开报告区域,再次点击收起。
  3. 展开区域列出该问卷对应的已发布评估记录,使用现有报告管理卡片信息:项目/企业、团队、截止日期、作答人数和团队人数。
  4. 每条评估记录下展示报告记录表,列出报告名称、创建时间、生成时间、状态和操作。
  5. 报告状态沿用现有映射:生成中、未发送、已发送、生成失败;未知状态显示“未知”。
  6. 成功报告支持预览和导出,已生成报告支持发送;失败报告支持重新生成。报告预览使用现有 report-pdf 组件。
  7. 展开时加载报告数据;加载失败只提示错误,不影响问卷主列表。重新生成后刷新当前展开区域。
  8. 旧的报告管理路由不删除,历史书签仍可打开;完成菜单侧的切换后,用户从主菜单进入问卷管理。

数据与接口

  • 问卷模板:继续使用 getQuestionnaireList
  • 团队评估记录:使用 getTeamQuestionnaireList,查询参数中的 questionnaireId 使用当前问卷模板 ID。
  • 团队报告:使用 getTeamReportWjList(relationId)
  • 报告预览:使用 getReportPdfData(reportId)
  • 重新生成:使用 reCreateReport(reportId)
  • 发送与删除:继续复用现有报告管理接口和权限标识。
  • 生成报告:继续使用当前 DeerFlow 接口 /core/team/questionnaire/genReport/{teamQuestionnaireId},不恢复旧的 genTeamReport

组件边界

  • questionnaireList.vue 负责问卷列表、展开状态、评估记录查询和问卷级操作。
  • reportList/index.vue 负责评估记录卡片、报告表格、报告状态展示和预览入口;通过事件向父页面请求删除、发送、重新生成和刷新。
  • 报告查询和操作 API 保持在 src/api/agent/index.js,不复制接口实现。
  • 如需避免问卷列表内的重复状态处理,提取纯函数只负责将接口报告记录映射为展示字段,不改变服务端返回值。

错误处理与兼容

  • 报告接口返回非 0 code 时,使用现有消息提示并保留问卷列表。
  • 没有发布记录或报告时显示“暂无报告”,不显示空白卡片。
  • 旧报告页面暂不删除,避免动态菜单或历史链接访问 404。
  • 不通过前端删除历史报告记录或修正已有失败记录;修复仅影响新的页面查询和操作。

验收标准

  • 从问卷管理页面可以看到问卷列表,不需要先进入报告管理。
  • 点击任意问卷的“报告列表”后能展开该问卷的评估记录和报告。
  • 报告生成中的记录显示生成中,失败记录可以重新生成,成功记录可以预览/导出。
  • 四类报告的现有打开地址和权限行为不被破坏。
  • 独立报告管理旧路由仍可访问。
  • 前端单元测试和生产构建通过。