Files
suixinkan_ios_new/suixinkan/Features/Account/Account.md
汉秋 1970572edd 迁移合作订单完整能力,并统一 AppRoleCode 角色权限与首页菜单展示。
新增 CooperationOrder 模块(双 Tab 列表、获客员绑定、主 Tab 扫码)、订单来源/带客单绑定及配套 API 测试;同步引入 roleCode 权限匹配与相关单元测试。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 13:33:00 +08:00

2.2 KiB
Raw Blame History

Account 模块业务逻辑

模块职责

Account 模块负责同步账号进入业务页前必须具备的上下文数据,包括角色权限、景区、门店和当前景区下的景点/打卡点。

该模块只做读取和上下文装配,不负责登录 token 存储,也不负责页面导航。

数据边界

  • 角色权限:由 /api/yf-handset-app/role-permission 返回,写入 PermissionContext
  • 景区列表:由 /api/yf-handset-app/photog/scenic/list-all 返回,用于账号业务作用域。
  • 门店列表:由 /api/app/store/all 返回,并通过 scenic_id 关联景区。
  • 景点/打卡点:由 /api/yf-handset-app/photog/scenic-spot/list-all 按当前景区懒加载。

加载流程

登录成功或冷启动恢复时,AccountContextLoader 会并行请求用户资料和角色权限。权限成功后继续读取景区和门店:

  1. 用户资料刷新 AccountContext.profile
  2. 角色权限刷新 PermissionContext,按 role_code 优先匹配当前角色,并计算权限 URI 集合。
  3. 景区列表失败时,从角色权限里的景区数据去重兜底。
  4. 门店列表失败时不阻断登录,只写入空门店列表。
  5. 当前景区确定后,ScenicSpotContext 再按景区 ID 拉取景点/打卡点。

切换规则

  • 切换角色时,当前景区优先保留在新角色可访问景区中,否则选择新角色第一个景区。
  • 切换景区时,当前门店优先保留同景区门店,否则选择该景区第一个门店。
  • 切换景区后,景点/打卡点列表会重新加载。

缓存规则

AccountSnapshotStore 只保存非敏感上下文快照,包括当前 role_codecurrentRoleCode)、当前景区 ID、当前门店 ID 和基础账号展示信息。旧版快照中的 currentRoleId 会在读取时一次性迁移为 role_code

角色匹配优先级:role_code → legacy role_id → 角色名 → 权限列表推断。登录时还会从 V9 响应的 app_role_code 写入初始角色 hint。

景点/打卡点列表只保存在内存中,不长期落盘。后续业务需要离线缓存时,需要按账号类型、业务账号 ID 和景区 ID 做隔离。