Explorar o código

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

Developer hai 1 semana
pai
achega
877efed69a

+ 58 - 0
docs/superpowers/specs/2026-08-30-questionnaire-report-merge-design.md

@@ -0,0 +1,58 @@
+# 问卷管理合并报告管理设计
+
+## 背景
+
+当前 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。
+- 不通过前端删除历史报告记录或修正已有失败记录;修复仅影响新的页面查询和操作。
+
+## 验收标准
+
+- 从问卷管理页面可以看到问卷列表,不需要先进入报告管理。
+- 点击任意问卷的“报告列表”后能展开该问卷的评估记录和报告。
+- 报告生成中的记录显示生成中,失败记录可以重新生成,成功记录可以预览/导出。
+- 四类报告的现有打开地址和权限行为不被破坏。
+- 独立报告管理旧路由仍可访问。
+- 前端单元测试和生产构建通过。