3.3 KiB
3.3 KiB
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(问卷 + 模拟照片 + 提交轮询)
- 问卷表单(必填项做前端校验):性别(单选 女/男/不便告知)、身高 cm(TextInput 数字)、体重 kg、生日(DatePicker)、核心诉求(多选:显高/显瘦/显白/显气质/遮肉/修饰肩颈,至少 1 项)、心理风格(9 型单选:戏剧/睿智/自然/古典/优雅/浪漫/前卫/少女/少年)
- 照片(模拟):TextInput 填
photo_object_key,输入框上方显式灰字说明"V1 骨架:COS 直传未接入,此处模拟对象键"(键格式提示report_photo/...jpg;留空时自动生成report_photo/{userId}/{随机}.jpg) - 提交:组装
questionnaireRecord(键名对齐: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 即幂等重放,注释说明)
- 轮询期间允许返回(清定时器)
ReportResultPage(结果展示)
GET /api/v1/reports/{id}(reportId 从router.getParams()取)- 文案区:
result.copy.summary+ sections 渲染(title + paragraphs);result.validation.degraded === true时顶部黄条提示"本报告由规则引擎直接生成"(透明化降级) - 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 条"
- 按
- 顶部状态:version、status、completed_at;「重新生成」按钮 →
POST /api/v1/reports/{id}/regenerate→ 成功后拿新 task_id 回到轮询态(同页复用轮询逻辑或跳回 Create 页携带参数——选实现简单者,注释说明) - 加载态 LoadingView / 失败态 ErrorView(含重试)
验收
- 构建门禁
BUILD SUCCESSFUL - 32 维渲染对空值/skipped/数组 value/低置信度四种形态都有处理(本地构造假数据自查 UI 分支,不依赖后端也能看——用临时默认 @State 假数据再删,提交里不留假数据)
- 轮询有清理、40920/FAILED/降级三条异常路径有 UI
- 单次提交:
feat(app): report flow with polling and 32-dimension result view(F3)