Integrate高德 SDK with simulator-safe build flags, add map views for operating area and punch points, refactor main tabs and key feature screens to UIKit with Diffable lists, and document Swift concurrency defaults in AGENTS.md. Co-authored-by: Cursor <cursoragent@cursor.com>
2.2 KiB
2.2 KiB
Main 模块业务逻辑
模块职责
Main 模块负责登录后的主界面 Tab 容器。
主界面由 MainTabBarController 承载,使用系统 UITabBarController 展示首页、订单、数据、我的四个 Tab。每个 Tab 内部包裹独立的 TabNavigationController,导航路径由 AppRouter 单独保存。
Tab 结构
当前 Tab 来自 AppTab:
home:首页orders:订单statistics:数据profile:我的
各 Tab 根页面已接入真实业务页面:HomeViewController、OrdersViewController、StatisticsViewController、ProfileViewController。
导航流程
MainTabBarController读取AppServices.appRouter作为选中 Tab 状态源。- 用户点击 TabBar 或通过
AppRouter.select切换 Tab 时,两边状态保持同步。 - 每个 Tab 由
TabNavigationController创建独立UINavigationController栈。 - Tab 内 push 子页面时,通过
AppRoute.hidesTabBarWhenPushed控制是否隐藏系统 TabBar,默认隐藏。 - 跨 Tab 跳转通过
AppRouter.select或AppRouter.selectOrders(entry:)处理。
订单角标
MainTabBadgeViewModel通过OrdersAPI.writeOffList获取待核销数量,失败时静默清空角标。- 角标展示在订单 Tab 的
tabBarItem.badgeValue上。 - 账号景区或门店变化、切换到订单 Tab 时会刷新角标。
扫码核销
系统 TabBar 不展示中间扫码按钮;订单页内部的扫码核销入口仍然可用。如需全局扫码入口,可通过首页或订单页进入。
后续迁移规则
迁移新页面时:
- 优先替换对应 Tab 的根 ViewController。
- 保持每个 Tab 自己的
TabNavigationController导航栈。 - 跨 Tab 跳转通过
AppRouter.select切换 Tab。 - 需要从首页或全局入口进入订单核销时,优先使用
AppRouter.selectOrders(entry:)或AppRouter.routeToOrderVerification(scannedCode:)。 - Tab 内跳转通过当前 Tab 的
RouterPath.navigate或扩展后的AppRoute处理。 - 普通业务子页面默认隐藏 TabBar;只有确有产品需求时,才在
AppRoute策略中单独放开。 - 真实业务页面接入后,应同步补充该模块文档和单元测试。