Files
meida/app
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
..

美搭 HarmonyOS App(ArkTS)

  • 模板:DevEco Studio 6.1 空 Ability 工程;API 6.1.1(24),runtimeOS: HarmonyOS,bundleName: com.xiangsilian.app
  • 后端:meida_backend(WSL)。本地开发默认 http://127.0.0.1:8000(模拟器可用;真机连开发机要在登录页改成局域网 IP)
  • 登录通道(V1 骨架):dev-token(后端 DEV_AUTH_ENABLED=true 本地可用);华为账号/短信为后续任务

命令行构建(Agent/CI 用的门禁)

工程配了真机调试签名(.ohos/config 下证书)后,PackageHap/SignHap 需要 java: PATH 里须有 DevEco 自带 JBR(jbr/bin),且不能有带旧环境的 hvigor 守护进程残留 (守护进程会缓存启动时的 PATH,报 spawn java ENOENT 时先 taskkill /F /PID <hvigor daemon的node进程> 再重试)。

(等价于仓库根的 app/.build-gate.bat)
set "PATH=C:\Program Files\Huawei\DevEco Studio\jbr\bin;%PATH%"
set "DEVECO_SDK_HOME=C:\Program Files\Huawei\DevEco Studio\sdk"
cd /d <repo>\app
"C:\Program Files\Huawei\DevEco Studio\tools\node\node.exe" ^
  "C:\Program Files\Huawei\DevEco Studio\tools\hvigor\bin\hvigorw.js" ^
  --mode module -p module=entry@default assembleHap --analyze=false --daemon=false

BUILD SUCCESSFUL 即门禁通过;产物 entry/build/default/outputs/default/entry-default-signed.hap (已用调试证书签名,可直接 hdc install 到真机)。

代码约定

  • ets/core/:网络与会话地基(ApiClient/AuthStore/ContextHolder/ApiTypes)——共享层,改动需全量构建验证
  • ets/pages/:页面。页面间跳转一律 router.pushUrl({url: 'pages/Xxx'}) 路径方式,禁止 import 其它页面(并行开发的冲突隔离约定)
  • 组件级复用放 ets/components/(各自任务目录内自建子目录)
  • 文案:骨架期中文硬编码即可(i18n 后置);错误提示只 catch ApiError,用其 message/hint(后端文案已保证无价格字样)
  • 状态管理:页面内 @State;跨页少量状态走 AppStorage
  • 不引第三方 ohpm 包(保持零依赖,后续按需评估)