Files
platforms/docs/操作日志_用户端APP_A1_20260907.md
czl231 3ef33b531d 已完成用户APP首期功能开发
交付用户端首期页面、配套接口、后台资源及测试文档。用户APP构建、静态分析和三个管理后台构建通过;完整测试仍有2项失败,后端模型注释检查未通过,详见交付记录。
2026-09-13 00:57:32 +08:00

103 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 用户端 App A1 操作日志
操作时间2026-09-07收尾核对 20:17Asia/Shanghai
操作类型扩展、缺陷修复。影响模块Flutter 用户端、共享设计系统、Go Client API平台资源定义不变。
## 操作前状态
git 初始无既有业务改动;先读仓库规范、主开发文档、产品说明与 5 张最新 PNG。用户端已有登录、首页、商城、订单、我的及部分二级能力。基线 analyze 无问题、Flutter 33 项通过、Go 全量通过。尚无 58 页进度文件。
确认未开放功能入口不隐藏37 邀请注册归 A2持久化环境使用仓库既有远程 PostgreSQL 与 Redis。
## 关键变更
以下路径相对 D:/5k/platforms增删行为 20:17 的 git diff --numstat 快照,后续视觉收敛补记见表后,不将格式化行数等同业务功能数。
| 文件 | 核心函数/类 | 行数(新增/删除,或新文件总行) | 变化与理由 |
| --- | --- | --- | --- |
| apps/heqi_design_system/lib/src/theme.dart | HeqiTheme._theme | +23/-3 | 明确蓝白容器与对比色、一级标题位置、筛选标签可读性 |
| apps/heqi_design_system/lib/src/components.dart | HeqiSurfaceSection.build | +6/-4 | Material 承载 ListTile 点击墨水层 |
| apps/heqi_design_system/pubspec.yaml | version | +1/-1 | 0.1.1 补丁版本,无公共 API 破坏 |
| apps/user_app/lib/app/dependencies.dart | UserSession.login/resetPassword | +44/-1 | 显式记住登录、实际同意版本和展示时间,复用密码重置接口 |
| apps/user_app/lib/app/router.dart | createRouter | +25/-6 | 首页/商城游客可见,受保护页安全回跳、服务入口定位 |
| apps/user_app/lib/data/repositories/client_repository.dart | _readPages/products/_records | +20/-2 | 可选分页兼容旧数组,不将异常降级为空 |
| apps/user_app/lib/data/repositories/primary_repository.dart | PrimaryRepository | 新 53 | 公开内容/商品/归属强类型适配;非法金额失败而非变零 |
| apps/user_app/lib/domain/models/primary_models.dart | PublishedContent/ProductSummary/ServiceRelation | 新 35 | 明确首页和商城字段 |
| apps/user_app/lib/domain/models/order_summary.dart | OrderSummary.fromRecord/OrderItemSummary.fromJson | 新 65 | 隔离状态、金额、动作和成交快照,缺少权限默认不显示操作 |
| apps/user_app/lib/ui/core/async_content.dart | AsyncContentState.refresh/build | 新 79 | 首次、刷新、空、错误、重试;迟到请求不覆盖最新结果 |
| apps/user_app/lib/ui/core/feature_entry.dart | showUnavailableFeature/FeatureEntry | 新 36 | 保留功能入口并明确不可办理 |
| apps/user_app/lib/ui/core/text_entry_dialog.dart | TextEntryDialog | 新 59 | 弹窗自行释放控制器,避免关闭动画报错 |
| apps/user_app/lib/ui/features/auth/login_page.dart | _login/_sendCode/_modeTab/build | +221/-45 | 验证码/密码登录、冷却、协议确认、可见标签与横排品牌 |
| apps/user_app/lib/ui/features/auth/login_support.dart | showPublishedAgreements/ResetPasswordDialog | 新 174 | 读取后台协议、现有验证码重置闭环,不写死政策正文 |
| apps/user_app/lib/ui/features/home/home_page.dart | _load/build | +147/-86 | 服务归属和公开内容,设备保留入口,真实维修跳转 |
| apps/user_app/lib/ui/features/home/service_relation_card.dart | ServiceRelationCard.typed | +8/-0 | 保留旧 Map 构造方式并新增强类型入口 |
| apps/user_app/lib/ui/features/shop/shop_page.dart | _buy/build | +195/-134 | 后台分类/搜索/图片/库存、显式下单和页面内幂等重试 |
| apps/user_app/lib/ui/features/orders/orders_page.dart | _openActions/_performActions | +38/-26 | 服务端动作控制、提交锁、跨 Tab 刷新、原请求号重试 |
| apps/user_app/lib/ui/features/orders/order_list.dart | OrderList | 新 124 | 订单搜索/状态筛选/快照/时间与金额 |
| apps/user_app/lib/ui/features/profile/profile_page.dart | _load/_addAddress/_createTicket/didUpdateWidget | +202/-99 | 并行读取、手机脱敏、账户与服务入口、表单生命周期和点击锁 |
| backend/api/internal/logic/client/user/auth.go | Login/loginRequest | +10/-5 | 可选同意版本写入,旧登录兼容 |
| backend/api/internal/logic/client/user/shop.go | PublicProducts/ListShopOrders | +49/-9 | 修复公开商品误查私有订单明细;分类/图片/分页/订单动作 |
| backend/api/internal/logic/client/user/gasorder.go | ListGasOrders | +26/-2 | 本人订单项、状态名、允许动作、分页 |
| backend/api/internal/logic/client/user/list_response.go | paginateClientList/respondClientPage/clientOrderState | 新 50 | 分页上下限、旧数组响应、状态标签 |
| backend/api/internal/logic/client/user/login_consent.go | recordLoginConsents | 新 48 | 发布版本锁定,保留实际展示时间,阅读唯一键幂等 |
测试改动login_page_test.dart、orders_page_test.dart新增 primary_pages_test.dart、primary_repository_test.dart、test/support/a1_fixture.dart、tool/a1_visual_test.dart、primary_api_test.go。
视觉收敛补记login_page.dart 使用独立验证码按钮orders_page.dart 的 _openRefunds 将退款列表保留在筛选入口,主 Tab 收敛为三类,旧 initialTab 映射保留profile_page.dart 的 _assetSummary 改为三列资产摘要_openRequestedRepair 消费一次性 query修复重复从首页报修无法再开表单的问题。新增 scripts/compare-user-app-a1.ps1 复现并排图;末次增删行统计以 git diff 为准。
文档改动58 页开发进度、新 v1.1 项目文档v1.0 原件保留、本日志、A1 视觉记录、docs/13 与文档导航。生成 40 张实现截图和 5 张并排对照。未新增生产依赖、表或路由;开发配置和凭据未改写。
## 代码行为示例
公开商品原先用商品 ID 查询 ec_order_item可能读到同 ID 的无关订单项;现在只查询关联的商品图片、分类,响应继续剔除内部主键。
```go
// backend/api/internal/logic/client/user/shop.goPublicProducts
impl.DBService.Where("ec_product_id = ? AND status = ?", product.ID, common.StatusEnable)
```
```dart
// apps/user_app/lib/domain/models/order_summary.dart权限缺失时不自行推导
actions: Set.unmodifiable((raw['allowed_actions'] as List? ?? []).whereType<String>()),
```
## 验证结果
| 验证 | 结果 |
| --- | --- |
| 用户端 flutter analyze | 无问题 |
| 用户端 flutter test --no-pub | 44 项通过,比基线增加 11 项 |
| flutter test --no-pub --update-goldens tool/a1_visual_test.dart | 40 项尺寸/缩放/滚动检查通过,视觉差异另列 |
| flutter build web --release --no-pub --dart-define=API_BASE_URL=http://127.0.0.1:12426 | 通过 |
| 共享包 analyze/test | 无问题3 项通过 |
| 服务端 App analyze/test | 无问题21 项通过 |
| Go go test ./... / go vet ./... / go build | 均通过 |
| Go 协议重复确认、旧版本拒绝测试 | 通过;重复请求使用内容版本唯一键 |
| 平台 pnpm contract:check | 48 个资源通过 |
中间测试曾发现:订单新增搜索框使旧退款测试选择器多匹配;登录 hint 与 error 文案相同使旧测试多匹配;新 HTTP Fixture 默认 Latin-1 不支持中文。已分别限定弹窗输入、直接验证 errorText、使用 UTF-8负向测试验证具体 1714 码以防错误通过。不是忽略失败或降低断言。
共享包分析曾引起本机包源及 SDK 间接锁版本自动变化,已恢复本次产生的无关 pubspec.lock 改动,保留有意义的包版本与代码变更。
## 远程联调事实
1. 只读事务核对既有角色、管理员、指定测试用户、商品Redis 仅 PING。
2. 启动 API 前确认不自动迁移表;基础初始化所需记录已存在。未执行 migrate/mock-data。
3. 使用任务指定账号登录;公开内容、商品分页、资料、钱包、地址、订单、服务归属返回 code=0。令牌、密码没有写入仓库、日志说明或截图。
4. 对现有 MOCK 商品创建未支付订单,同 request_no 重试返回同一 identity价格按整数分由服务器计算库存只扣一次。
5. 使用现有取消接口恢复库存,保留已取消订单 01a07bc0-6237-7ec2-8cbc-1c05f16ad10b没有删除订单/支付/资金事实。
6. 浏览器验证游客入口提示、受保护订单跳转登录并回跳、订单记录、个人中心实际余额与脱敏手机号、商品关键词筛选。
7. 未勾选“记住登录状态”后刷新浏览器,访问订单重新进入登录页,确认没有恢复旧持久会话。
8. 最终 Web 构建中再次登录后三类订单主标签正常连续两次从首页进入报修均打开表单并消费查询参数均取消而未新建工单。390×844 个人中心截图无溢出,预览保留供试用。
本机仅运行 API12426与 Web 预览18571数据库与缓存保持原远程地址。曾因误解创建两个本任务容器未初始化或使用Docker 后来停止,删除结果未确认,未启动 Docker 强行处理,更未删除既有 workbuddy 容器。
## 风险与当前状态
业务实现和测试已落地A1 严格视觉一致性仍未验收;详见视觉记录。没有进入 A2 或创建 53 个空页面。设计素材/完整设备与交易规则按后续批次推进。
分页门面暂读完所有页数据多时延迟和查询量增加A2 应改为显式逐页加载。商品关联查询目前逐项执行,不将本次小样本验证声称为压力测试。页面内幂等号不能保证跨重启恢复,旧地址接口幂等扩展仍待 A2。
现有退款/支付的允许动作是候选能力执行时仍可能因状态并发或业务限制拒绝最终结果以服务端为准。未验证正式商户、短信供应商、Android/iOS 实机。远程缺已发布协议与商品图,未造运营数据填空。