问卷管理合并报告管理设计
背景
当前 PC 端将问卷管理和报告管理拆成两个入口:问卷管理展示问卷模板,报告管理通过问卷下拉框查询已发布问卷及报告。用户希望以问卷管理为主,在每条问卷记录中直接查看对应报告的生成状态并打开报告,减少页面跳转和重复筛选。
目标与范围
- 保留问卷管理作为唯一业务入口。
- 在问卷管理列表中增加“报告列表”操作,按问卷展开对应的发布/作答记录及其报告。
- 展示报告生成状态,并支持打开可用报告和重新生成失败报告。
- 复用现有报告查询、预览、重新生成和报告地址逻辑。
- 保留旧报告管理路由的兼容能力;菜单是否显示由现有动态菜单配置控制,不修改后端菜单数据。
- 不改变小程序端、报告生成协议和数据库结构。
交互设计
- 问卷管理列表保留新增、编辑、发布、详情、删除等操作。
- 对每条问卷增加“报告列表”按钮。点击后在该问卷行下展开报告区域,再次点击收起。
- 展开区域列出该问卷对应的已发布评估记录,使用现有报告管理卡片信息:项目/企业、团队、截止日期、作答人数和团队人数。
- 每条评估记录下展示报告记录表,列出报告名称、创建时间、生成时间、状态和操作。
- 报告状态沿用现有映射:生成中、未发送、已发送、生成失败;未知状态显示“未知”。
- 成功报告支持预览和导出,已生成报告支持发送;失败报告支持重新生成。报告预览使用现有
report-pdf 组件。
- 展开时加载报告数据;加载失败只提示错误,不影响问卷主列表。重新生成后刷新当前展开区域。
- 旧的报告管理路由不删除,历史书签仍可打开;完成菜单侧的切换后,用户从主菜单进入问卷管理。
数据与接口
- 问卷模板:继续使用
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。
- 不通过前端删除历史报告记录或修正已有失败记录;修复仅影响新的页面查询和操作。
验收标准
- 从问卷管理页面可以看到问卷列表,不需要先进入报告管理。
- 点击任意问卷的“报告列表”后能展开该问卷的评估记录和报告。
- 报告生成中的记录显示生成中,失败记录可以重新生成,成功记录可以预览/导出。
- 四类报告的现有打开地址和权限行为不被破坏。
- 独立报告管理旧路由仍可访问。
- 前端单元测试和生产构建通过。