已完成用户APP首期功能开发
交付用户端首期页面、配套接口、后台资源及测试文档。用户APP构建、静态分析和三个管理后台构建通过;完整测试仍有2项失败,后端模型注释检查未通过,详见交付记录。
This commit is contained in:
102
docs/操作日志_用户端APP_A1_20260907.md
Normal file
102
docs/操作日志_用户端APP_A1_20260907.md
Normal file
@@ -0,0 +1,102 @@
|
||||
# 用户端 App A1 操作日志
|
||||
|
||||
操作时间:2026-09-07,收尾核对 20:17(Asia/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.go,PublicProducts
|
||||
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 个人中心截图无溢出,预览保留供试用。
|
||||
|
||||
本机仅运行 API(12426)与 Web 预览(18571);数据库与缓存保持原远程地址。曾因误解创建两个本任务容器,未初始化或使用;Docker 后来停止,删除结果未确认,未启动 Docker 强行处理,更未删除既有 workbuddy 容器。
|
||||
|
||||
## 风险与当前状态
|
||||
|
||||
业务实现和测试已落地,A1 严格视觉一致性仍未验收;详见视觉记录。没有进入 A2 或创建 53 个空页面。设计素材/完整设备与交易规则按后续批次推进。
|
||||
|
||||
分页门面暂读完所有页,数据多时延迟和查询量增加;A2 应改为显式逐页加载。商品关联查询目前逐项执行,不将本次小样本验证声称为压力测试。页面内幂等号不能保证跨重启恢复,旧地址接口幂等扩展仍待 A2。
|
||||
|
||||
现有退款/支付的允许动作是候选能力,执行时仍可能因状态并发或业务限制拒绝;最终结果以服务端为准。未验证正式商户、短信供应商、Android/iOS 实机。远程缺已发布协议与商品图,未造运营数据填空。
|
||||
Reference in New Issue
Block a user