Files
meida/docs/开发任务包/F3-报告流.md
T

32 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# F3 · 报告流(提交 → 轮询 → 32 维结果展示)
> 分支:`task/f3-fe` | worktree:`G:\meida-app-f3` | 只改:`pages/ReportCreatePage.ets`、`pages/ReportResultPage.ets`(填桩)、`ets/components/f3/`(自建)
> 先读《README-FE批次.md》,严格遵守(diagnosis 结构见其 §4,**恒 32 项、skipped 显式**)。
## ReportCreatePage(问卷 + 模拟照片 + 提交轮询)
1. **问卷表单**(必填项做前端校验):性别(单选 女/男/不便告知)、身高 cm(TextInput 数字)、体重 kg、生日(DatePicker)、核心诉求(多选:显高/显瘦/显白/显气质/遮肉/修饰肩颈,至少 1 项)、心理风格(9 型单选:戏剧/睿智/自然/古典/优雅/浪漫/前卫/少女/少年)
2. **照片(模拟)**:TextInput 填 `photo_object_key`,输入框上方显式灰字说明"V1 骨架:COS 直传未接入,此处模拟对象键"(键格式提示 `report_photo/...jpg`;留空时自动生成 `report_photo/{userId}/{随机}.jpg`)
3. 提交:组装 `questionnaire` Record(键名对齐:`gender,height_cm,weight_kg,birthday,core_goals[],psych_style`)+ `photo_object_key` + `request_key`(随机 hex)→ `POST /api/v1/reports`
- 40920(本期已生成)→ 对话框提示并给「查看我的报告」按钮跳结果页(携带最近 reportId——无则提示稍后在任务中心看)
- 成功 → 进入**轮询态**:`GET /api/v1/tasks/{task_id}` 每 3s 一次(`setInterval` 或递归 setTimeout,页面销毁清理),进度条 + stage_text 展示;SUCCEEDED → `router.replaceUrl` 结果页(params 带 reportId);FAILED → ErrorView + 重试(重新提交同 request_key 即幂等重放,注释说明)
4. 轮询期间允许返回(清定时器)
## ReportResultPage(结果展示)
1. `GET /api/v1/reports/{id}`(reportId 从 `router.getParams()` 取)
2. **文案区**:`result.copy.summary` + sections 渲染(title + paragraphs);`result.validation.degraded === true` 时顶部黄条提示"本报告由规则引擎直接生成"(透明化降级)
3. **32 维诊断区**(核心):`result.diagnosis.dimensions`
- 按 `basic_coverage` 分组思路简化为:**已分析**(status=ok)与**未覆盖**(skipped,灰色 + evidence 作为原因文案)两组
- 每维卡片:name_cn + value(数组 join '、')+ 来源标签(中文映射:questionnaire=你填写/vision=照片分析/rule=规则推导/derived=推导/kb=知识库)+ 置信度(百分比);confidence < 0.7 加"仅供参考"小标(NFR-UX-05)
- rule_hits 非空时折叠显示"依据规则 N 条"
4. 顶部状态:version、status、completed_at;「重新生成」按钮 → `POST /api/v1/reports/{id}/regenerate` → 成功后拿新 task_id 回到轮询态(同页复用轮询逻辑或跳回 Create 页携带参数——选实现简单者,注释说明)
5. 加载态 LoadingView / 失败态 ErrorView(含重试)
## 验收
1. 构建门禁 `BUILD SUCCESSFUL`
2. 32 维渲染对空值/skipped/数组 value/低置信度四种形态都有处理(本地构造假数据自查 UI 分支,不依赖后端也能看——用临时默认 @State 假数据再删,提交里不留假数据)
3. 轮询有清理、40920/FAILED/降级三条异常路径有 UI
4. 单次提交:`feat(app): report flow with polling and 32-dimension result view(F3)`