Commit Graph
34 Commits
Author SHA1 Message Date
xsl 2b0df49aa7 feat(auth): 正式登录系统——华为账号登录(Account Kit,client_id 占位拦截防 crash)+ 邮箱验证码登录(发码冷却倒计时);dev-token 与服务器地址挪入开发者高级设置;client_id 填入 6917613748100335131 2026-09-15 00:03:13 +08:00
xsl eb86810a77 fix(tryon): 再来一次回到初始进入界面——resetResult 漏清 resultSrc 导致效果图残留预览区;新增 resetToEntry 连本人照一起清(结果操作行与全屏查看器两个入口) 2026-09-15 00:03:13 +08:00
xsl 247da63509 feat(report): 诊断流四项修复 + 形象深度诊断端侧——表单草稿跨页保留(AppStorage);照片预览改竖版 3:4;40920 改中性兜底+历史报告入口(initialTab 参数);重新生成 40900 弹窗引导;深度诊断卡替换预约占位(生成/查看/防套娃)+ 色板/场景/30天计划渲染 + 「深度」徽标 2026-09-15 00:03:11 +08:00
xsl 1a6fde919b fix(hair): 图片区布局修复——Stack 显式定高 320(额度胶囊 Row height(100%) 在自适应 Stack 里会被 Scroll 视口撑飞,导致图片区下坠出大片空白);裁切回 Cover 居中(人脸通常居中,顶部锚定会只显示天花板);选图/拍照用户取消静默化(13900042 不再误报「读取照片失败」)
真机走查验证:布局紧贴页签、选中描边+「试戴『×××』」按钮、试戴成功自动切效果图页签、额度 3→2 递减
2026-09-12 13:23:54 +08:00
xsl f244f14ab8 feat(billing): 任务换额度端侧闭环(T2b 定稿 4 任务)
- TaskBonusPanel 重写:每日任务/新手任务分组、五态按钮、真实「去完成」跳转(first_report→诊断落地页;report_feedback/share_report→报告结果页)、40311/40310 文案、panel_view/task_tap 埋点
- ReportPdfPage 分享成功→静默 claim share_report;ReportResultPage SUCCEEDED 展示→静默 claim first_report(后端 40910 幂等兜底,老用户首进补发一次属预期回填)
- ChatPage/ReportResultPage 修 bonus_granted 类型误写(boolean→number)
- docs:T2b 任务书(验收 11 条)+ 产品方案 §3.2 任务目录定稿(签到对话+10/日、报告反馈发型+2/日、分享换装+3/日、首测重生成+1/终身;邀请好友砍)

偏差说明:share_report 落点为报告结果页而非 PDF 预览页(该页强依赖本地 pdfPath,直达需下迭代加持久化)。
2026-09-12 00:25:08 +08:00
xsl fcc506920f feat(report): 美学诊断照片必选——本地直传链路 + 报告创建照片卡 + 授权文案改属实
- ReportCreatePage:必选照片卡(人脸授权→相册/拍照→预览/重选),未选红字+汇总条拦截;提交先上传拿真 object_key 再建报告(上传失败不碰配额可重试);删除 buildMockPhotoKey 模拟链路;照片引导按需求文档 §3.4/§5.1(正面全身照)
- core/UploadApi.ets:POST /uploads/direct 原始字节上传(绕开真机 multiFormDataList 0 字节 bug),带鉴权信封解包
- FacePhotoConsent:加可选 usageText(诊断页传报告口径文案,试穿/发型页零影响);处理方/保存两行按本地磁盘降级路线改属实(去「第三方」「生成后即删除」),CONSENT_VERSION v1→v2 全体重询一次
- 后端配套:meida_backend a1d0171(本地直传+存在性校验);联调 E2E 已验证(真 key 全链路 succeeded / 假 key 404 零流水)
2026-09-12 00:24:29 +08:00
xsl 9161a2013c fix(chat): TTS 朗读净化——不念 Markdown/英文标点/表情符号(中文停顿标点保留做自然停顿) 2026-09-11 23:45:15 +08:00
xsl aafacbf020 feat(hair): 发型/换发色交互重排——页签单图区(顶对齐裁切)+ 点选+吸底按钮触发 + 换发色拆独立页 + 60款男女全量重分类
- 发型设计:原图/效果图改单区域+胶囊页签切换(无结果置灰);点选发型只选中不生成,吸底「试戴『×××』」按钮触发;移除页内换发色卡与「上次结果」回看(相册留存即可)
- 换发色独立页 HairColorPage(主页新入口卡):8 色圆点+强度滑杆,每次在原图上换色不叠加;两页图片均顶部对齐裁切(容器定高 clip,头顶不被居中裁掉)
- 60 款发型男女分类按缩略图模特呈现全量重分(男30/女30;旧版互串 18 款)
- 两页仍共用 hairstyle 每日额度(P0-5 合并计数)
2026-09-11 23:45:15 +08:00
xsl a850735d60 feat(app): 任务换额度+端侧埋点+试穿限次+报告反馈预约卡+网络错误态——PM/开发双Agent迭代2-3
- 新增 core/Tracker.ets:埋点唯一入口,事件名正则校验,preferences 队列(≥20立即/
  30s节流/后台flush,每批50,上限200丢最旧),PII 键剔除,失败静默;首批10点位
- 新增 core/DailyLimiter.ets:试穿/试戴各3次/日本地软限制,自然日重置,失败不计数;
  setBonus 支持服务端 bonus_granted 加成,「做任务多换几次」真兑现
- 新增 components/f1/TaskBonusPanel.ets + core/TaskBonusState.ets:签到真实 claim
  链路,40910/40310 处理,已领态面板与报告页互通;个人中心与对话耗尽态接入
- 报告页:维度「准/不准」反馈卡(DimensionCard 无网络走回调)+ 静默 claim
  report_feedback 闭环;全面报告预约留资卡(card_view/reserve_result 埋点)
- 新增 components/f2/NetworkBanner.ets:首页/对话/个人中心三处网络错误统一横幅+重试;
  对话耗尽横幅恢复 reset_at 时间显示
- 文案纪律:无价格/购买/会员/升级字样;hvigor assembleHap 构建 0 error
- 子模块 meida_backend 指向 7bcbb8d(迭代1-3 后端)
2026-09-11 21:51:25 +08:00
xsl 1b534f5133 feat(fitting): 试衣间布局 v2.1——紧凑预览 300vp+三列纯图卡+全屏查看器(设计师 Agent 出稿)
- 预览区 3:4 大图(437vp/占屏57%) → 固定 300vp + Contain 不裁切(用户要求预览变小且不裁切)
- 新增 ImageViewer 全屏查看器:点预览/生成完成自动弹出;原图|效果图页签与预览角标共用 showOriginal;保存走三态口径
- 衣橱网格双列带文字行 → 三列纯图卡(104×139,品类图内左下角标),首屏可见 6 卡 vs 原 3 卡
- 试穿胶囊 52×120→44×96、品类 chips 高 32→28、角标 12→11
- 设计稿:docs/美搭配与美学诊断-UI规范.md §10(含 7 条冲突修订表与 8 条验收)
2026-09-03 22:14:39 +08:00
xsl d2c603566b feat(fitting): 我的衣橱为空时默认打开精选衣橱——首次用户直接看到 30 件可试衣服 2026-09-03 21:52:08 +08:00
xsl 20fcef71f6 fix(fitting): 预览区 45% 屏(≈正方形)改 3:4 竖版长方形
生成结果实为 768x1024(3:4,已下载 OSS 原图核实),旧预览块宽100%×高45%屏
接近正方形,Cover 把竖图上下裁掉显成方形。改 aspectRatio(3/4) 后与人像照/
结果图同比例,不再裁切;保存到相册本就是原图长方形,不受影响。
2026-09-03 21:26:37 +08:00
xsl cc9db866dc fix(fitting): 生成完成预览图不切换——@Builder 内方法调用不被状态追踪,改 @State resultSrc 直绑
ArkUI build 内 Image(this.previewSrc()) 方法体内部读取的 @State 不参与依赖更新,
statusText 刷新但预览图停在旧帧。改为 resultSrc @State 直绑三元;生成提交即用
OSS URL 展示,转存完成后切本机副本。真机 21:05 全链路成功一次(生成+转存+对比);
此后服务端 ComfyUI 持续 503,直绑修复的默认效果图展示待服务稳定后复验。
2026-09-03 21:21:50 +08:00
xsl 3a7bbafc46 fix(app): Segment/@Prop 响应式修复 + 相册选择超时 120s + 换装 500 纯文本 body 友好提示
- Segment.selected 改 @Prop:发型页性别分段高亮不跟手(父层刷新不同步)
- FormRow value/errorText 改 @Prop:诊断表单选择器行文案不回填(真机复测通过)
- SELECT_TIMEOUT_MS 60s→120s:相册选择器冷启动超时后系统浮层成孤儿,点击全失效
- changeCloth 非 JSON body(服务端 500 Internal Server Error)→『服务繁忙,请稍后重试』
- 真机验证:换装请求链路 OK(cloth post 390KB/打点齐全);服务端 GPU(ComfyUI 正式+备份)当前宕机,生成结果待服务恢复后复验
2026-09-03 21:01:16 +08:00
xsl 8a901176c4 feat(app): 美搭配 v2(衣橱+精选30件)/发型 v2(男女分栏+换发色修复)/美学诊断两页——多 Agent 一轮交付
- fix(tryon): 鸿蒙 http.multiFormDataList 真机发空包(400 请上传图片)→ TryonApi 手工构造 multipart,真机验证通过;换发型/换发色/换装全链路 MEIDA_TRYON 打点
- feat(hair): 60 款发型视觉分类男女(26/34)Segment 分栏;双图对比、8 色圆点、吸底应用发色
- feat(fitting): FittingRoomPage 预览+试穿黑胶囊+我的衣橱(preferences+filesDir 持久化)+精选衣橱(rawfile 30 件+manifest)+品类过滤+双槽位生成
- feat(diagnosis): 紫渐变落地页+五字段填写页(@Prop 修选择器回填)+预填跳 ReportCreatePage
- chore(theme): 9 个色板 token 收口;首页入口改版
2026-09-02 23:40:16 +08:00
xsl 0b5d151e50 feat(app): 五轮产品评审迭代 35 项修复(报告域/对话/试衣发型/照片链/合规)
报告域:
- 报告 Tab 列表接入 GET /reports(重启可找回);重新生成采纳新 report_id
- 任务状态前后端大小写归一——轮询完成检测与「导出 PDF」按钮首次真正可达
- FAILED 重试换新幂等键;导出→重生成→再导出幂等冲突死路修复
- PDF 下载前 unlink 可重入;预览页常驻挂载+失败态重试;分享/另存文案拆分

对话页:
- 「内容由 AI 生成」常驻标识(CR-05)+ 快捷问题 chips + 额度 0 置灰与恢复时间
- 发送失败回填输入+重试+request_key 幂等;40301 额度同步

试衣间/发型设计:
- 人脸照片知情同意弹窗(preferences 持久化+版本+「我的」撤回入口)
- 生成期防中断(keepScreenOn/返回挽留/取消出口/genSeq 防串扰)
- 结果转存 filesDir/results:杀 App 回看、飞行模式离线保存、保存三态文案
- R4N1 照片输入链修复:裁除 describe 挂起载体、选图/拍照超时兜底、
  openSource URI 直建失败回退 fd 口径(R5N2)
- @Builder 改 $$ 对象传参修复槽位预览不刷新(R5N1);发型列表三态

全局:
- 会话过期四处「重新登录」出路;UTC 时间显示归正(差 8h)
- 10 处技术黑话清理;主色统一 Theme.ets;配额卡 4 张真实消耗集
- 登录页内测口径;f2 ErrorView/LoadingView 换用;调试入口 debug 守卫

门禁:App 构建 BUILD SUCCESSFUL;后端 576 单测绿(子仓 00ef56b);
28 项静态检查 PASS;真机 PDF 全链/照片送达/零崩溃验证通过
2026-08-30 23:17:11 +08:00
xsl 9e5ce14bce feat(report): 报告 PDF 导出端侧链路 + 新页面路由注册
- ReportResultPage:「导出 PDF 报告」按钮(仅 succeeded 显示)→ POST /reports/{id}/export(request_key 幂等,失败重试沿用同键不重复扣 hd_export)→ 任务轮询 → 下载到 filesDir/reports/ → 跳预览页
- ReportPdfPage:PDF Kit PdfView 预览(LAYOUT_SINGLE)+ Share Kit systemShare 分享 + DocumentViewPicker 另存
- main_pages.json 注册 LlmTestPage/TryonPage/HairDesignPage/ReportPdfPage 四条路由
- 后端配套:meida_backend cd0ddb1(export 管线);E2E 已验证(导出→下载→渲染逐页目检)
2026-08-30 13:18:25 +08:00
xsl d9868fb4f7 feat(tryon): 试衣间 + 发型设计(Phase A 直连线上 API)
- TryonApi.ets:直连 meida.xiangsilian.com——换装 /change_cloth_base64(JSON+Base64,超时 320s)、发型 /hair/api/*(multipart,实测 5~10s)
- ImageCodec.ets:相册选图→解码→缩放→Base64 的公共链路
- TryonPage(模特/服装双图换装)+ HairDesignPage(60 款发型试戴/换发色),首页两张入口卡
- docs/试衣间与发型设计-产品方案.md:Phase A 直连内测 / Phase B 服务端代理 + 合规纳管的分工结论
- 待补:真机实测耗时(T-P0-13/14 基线);Phase B 迁服务端时代码改动集中在 TryonApi 一处
2026-08-30 13:18:15 +08:00
xsl b31c7490f2 spike(llm): T18 端侧小模型——MNN native 骨架 + 局域网模型服务
- cpp/:liblocalllm.so NAPI 骨架(loadModel/chat/benchmark/release),预置 libMNN.so 3.6.1 鸿蒙包(已验证含 createLLM 符号;.gitignore 挡预编译库与 models/,获取方式见任务文档)
- LocalLlm.ets:native 调用的 ets 封装;LlmTestPage:模型从局域网服务器下载→加载→首 token/速度 benchmark
- scripts/serve-models.mjs:开发期局域网模型文件服务器(Qwen3-0.6B-MNN 456MB,SHA256 与 ModelScope 官方清单逐文件核对)
- build-profile.json5 接 externalNativeOptions(arm64-v8a);ProfileContent 加「端侧LLM调试」入口(内部调试用)
- docs/开发任务包/T18-端侧小模型SPIKE.md:目标/验证项/回退线;真机 benchmark 数据回来后写 T18-REPORT 三问三答
2026-08-30 13:18:03 +08:00
xsl 120bbeceff chore(env): 后端本机联调环境(WSL)+ meida_backend 子仓
- meida_backend 收为 git submodule(git.xiangsilian.com/xsl/meida_backend.git),含 PDF 导出管线提交
- WSL Ubuntu-22.04 镜像网络模式跑 PG(pgvector)@55432 + Redis@56379 + uvicorn@8666 + celery,Windows/Hyper-V 防火墙已放行
- app 默认后端地址 192.168.3.25→192.168.3.19:8666(宿主机)
- docs/本地联调指南.md 全面更新到本机拓扑;.gitignore 增补本地素材/调研产物与 graphify 本机文件
2026-08-30 13:17:49 +08:00
xsl 312ef2b716 chore(app): 真机调试配套——调试签名(.ohos 证书)/应用名美搭/新图标/默认地址改局域网 8666;构建门禁脚本 .build-gate.bat(签名打包需 JBR java,README 记录 spawn java ENOENT 系旧 hvigor 守护进程缓存坏 PATH 所致);.gitignore 收录 .hvigor 构建缓存 2026-08-16 11:41:06 +08:00
xsl 83fd48b910 feat(app): AI 对话语音输入(微信式)+ 回复语音朗读——ASR V2 引擎自采修复 1002200006 busy(recognitionMode 0 不再自建采集器)+ busy 自愈;TTS V2 长文分段串行朗读(单次 500 字符上限)+ 状态回调;按住说话/松开发送/上滑取消,麦克风权限运行时申请 2026-08-16 11:40:47 +08:00
xsl db9c4da0e3 fix(app): 我的页 Tab 内嵌修复 + 身高体重改滚轮选择器——ProfileContent 组件化(占位+跳页方案把用户锁死在独立路由页,只能登出);身高 100-250/体重 25-300 滚轮选择(showTextPickerDialog),不再键盘输入 2026-08-16 11:40:42 +08:00
xsl 98a134c7a2 F3: 表单校验反馈修复——点名缺失字段+自动滚动+@Builder按引用传参
用户真机反馈"还有 2 项未完成,点击不了提交并生成报告",排查出两层问题:

1. 表层(可见性):汇总条只报数量不报字段名,缺失字段在视野外。
   - 汇总条改为点名缺失字段:"请完成:核心诉求、心理风格"
   - 校验失败自动滚动到第一个缺失字段(componentUtils.getRectangleById
     取 windowOffset 相对 form_root 的内容坐标,Scroller.scrollTo 动画滚动)
   - 汇总条本身可点击,点击重新跳到第一个缺失字段
   - 必填项标签加红色 * 标记

2. 根因(@Builder 陷阱):字段级红字从未渲染过。FieldLabel 按值传参
   (label/err/required),ArkUI 规定 @Builder 按值传参不随 @State 变化
   刷新——err 停在初始空串。改为 $$ 按引用传参(FieldLabelParams),
   真机 dumpLayout 验证红字已随校验结果出现。

真机验证(uitest 注入 + dumpLayout + 截图):
- 空表单提交:红字四项齐现、汇总条点名、自动滚到首个错误
- 完整表单提交:进 40920 对话框(本期已生成),链路正常
2026-08-15 13:35:06 +08:00
xsl c24924fa43 fix(app): 真机首验三连修——信封解析/DatePicker 折叠/跳转兜底
真机+模拟器注入实测发现并修复:
1. ApiClient 把一切非 200 HTTP 吞成 50000「服务开小差了」——后端业务
   错误(40920/40301/42910…)走非 200 状态码但 body 是统一信封,先验
   信封形状再判成败。这是「提交不起作用」的直接原因(用户二次提交
   =409,红字被布局挤在视野外)
2. 生日 DatePicker 默认展开高约半屏:九型必填项与提交按钮被推出视野、
   滚动手势被选择器消费。改点击展开,表单一屏可见
3. 校验失败加顶部汇总红条(字段红字可能在视野外的可见性兜底)
4. 轮询完成不自动跳结果页:@Builder 传函数给子组件在真机调用无效
   (手动按钮同一方法正常)——加「查看报告」兜底按钮 + replaceUrl
   显式 catch + 完成态文案引导,回调保留 try/catch 与日志
验证:40920 对话框正常弹出;新用户提交→轮询→查看报告→32 维结果页
完整渲染(含降级黄条、报告编号)
2026-08-15 13:11:26 +08:00
xsl dff8084bbb fix(app): dev-token 登录改走无鉴权通道(自拦 40100 鸡生蛋)
真机首验即中:loginByDevToken 走了带鉴权的 post(),而 ApiClient 对
未登录一律 40100 短路——登录接口被自己的守卫拦死,UI 表现为
「请先登录」且无解。改走既有 postWithoutAuth。编译门禁无法发现
此类运行时逻辑环,真机验证首个战果。
2026-08-15 12:25:59 +08:00
xsl e409ff08cc merge: F3 报告流(问卷/轮询/32 维结果页)(FE 第一批) 2026-08-15 00:50:24 +08:00
xsl 995c18e7d5 feat(app): report flow with polling and 32-dimension result view(F3) 2026-08-15 00:49:47 +08:00
xsl ef25fa70c9 merge: F1 登录页与个人中心(FE 第一批) 2026-08-15 00:44:09 +08:00
xsl 336b638a1f feat(app): login page with dev-token flow and profile with quota cards(F1)
登录页(LoginPage):
- 品牌区 + 设备标识输入(随机生成一次并持久化到 preferences,可改可重生成)
- 高级设置折叠区:展示/编辑 baseUrl(AuthStore.setBaseUrl),带格式校验与恢复默认
- 登录闭环:loading 态 → AuthStore.loginByDevToken → 成功 router.replaceUrl 首页;
  失败 catch ApiError 用 ErrorBanner 展示 message+hint;已登录态进入直接跳首页

个人页(ProfilePage):
- 用户 ID 脱敏(前 6 后 4)+ 登出(AlertDialog 确认 → AuthStore.logout → 回登录页)
- agent_chat/tryon/report_basic 三配额卡并行拉取,进度条 used/(limit+bonus),
  剩余数大字;周期文案:日配额=明日恢复、report_basic=一次性额度、月度=日期
- 最近流水(limit=10):tx_type 中文映射(消耗/退还/奖励),status 徽标配色区分
- Refresh 下拉刷新(加分项)

共享组件 components/f1/:ErrorBanner、QuotaCard、LedgerItem

偏差说明:
- 设备标识在 @State 之外额外持久化(meida_login/device_key),保证跨启动稳定不重生
- Scroll 隐藏滚动条用 .scrollBar(BarState.Off)(本 SDK 无 scrollBarBarState 属性)
- router.replaceUrl / AlertDialog.show 有 deprecation WARN,属规程指定路由方式,构建门禁通过
2026-08-15 00:43:46 +08:00
xsl 45e4ba52b8 merge: F4 AI 穿搭对话页(FE 第一批) 2026-08-15 00:42:28 +08:00
xsl 1de70f31d6 feat(app): AI chat page with quota hint and error states(F4) 2026-08-15 00:41:55 +08:00
xsl 198761677c feat(app): app shell tabs with home entries and common loading/error views(F2) 2026-08-15 00:40:53 +08:00
xsl 9503c6e259 feat(app): FE 骨架协调提交——core 网络层/路由注册/页面桩
- DevEco 6.1 模板工程(API 6.1.1(24),bundle com.xiangsilian.app)+ INTERNET 权限
- core/:ApiClient(统一信封解包+401 自动刷新重试)/AuthStore(双令牌持久化+
  dev-token 通道+baseUrl 可配)/ContextHolder/ApiTypes —— 全部通过 ArkTS 严格编译
- 七页面注册 main_pages(桩态);Index 按登录态分流;页面间约定 router 路径跳转
  零 import(并行冲突隔离)
- app/README:CLI 构建门禁命令与代码约定
2026-08-15 00:33:55 +08:00