Files
pad_scanner/docs/plans/2026-05-09-registration-design.md
Misaka_Company d136dbf947 chore: remove obsolete tests, add design docs and PRD
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-09 14:32:24 +08:00

94 lines
3.0 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.
# 上架登记模块设计文档
日期2026-05-09
状态:已批准
---
## 1. 概述
基于 PRD v1.0 实现上架登记模块,完全替换现有 ScanPage。支持单次上架和连续上架锁定货位两种模式。新增配置页面管理 API 地址。
## 2. 架构
延续现有轻量架构,不引入额外状态管理框架。使用 setState + 简单状态类。
### 文件结构
```
lib/
├── main.dart # MaterialApp + 路由
├── models/
│ ├── registration_state.dart # 上架登记页面状态
│ └── api_config.dart # API 配置模型
├── pages/
│ ├── registration_page.dart # 上架登记主页(替换 ScanPage
│ └── settings_page.dart # 重构API地址 + 保存 + 测试连接
├── services/
│ ├── api_service.dart # 重写:适配 /CargoTrace/location
│ ├── code_parser.dart # 新增:码值识别
│ └── scanner_service.dart # 保持不变
```
## 3. 核心组件
### 3.1 CodeParser码值识别
静态工具类,实现 PRD §4 规则:
- 总排号:`^\d{2}(B|C|T)\d+$``^\d{2}(BW|CW)\d{4}$`
- 普通货位:`[区域货架]-[层]-[格]` 全大写横杠分隔
- 转运货位:`TRANS-` 开头
- 无效码:不匹配以上规则
返回枚举类型:`zongpaiNo` / `locationNormal` / `locationTransit` / `invalid`
### 3.2 RegistrationPage上架登记主页
状态字段:
- zongpaiNo / locationCode / isLocked / isSubmitting / statusText / errorType
扫码处理流程:
1. ScannerService 收到扫码事件
2. CodeParser 识别码值类型
3. 根据类型填入对应字段(重复同类型覆盖)
4. 锁定模式下货位号不接受新扫码值
5. 两字段均非空时确认按钮高亮
6. 提交 → 调用 ApiService → 处理结果
### 3.3 SettingsPage配置页
- API 地址输入框
- 保存设置按钮 → SharedPreferences 持久化
- 测试连接按钮 → HEAD/GET 请求验证可达性
- 返回按钮
### 3.4 ApiServiceAPI 服务)
- POST `{baseUrl}/CargoTrace/location`
- 请求体:`{ "zongpai_no": "...", "location_code": "..." }`
- 处理 200/409/400/500 响应
- 超时 5 秒
## 4. 错误处理
| 错误类型 | UI 表现 |
|---------|---------|
| 无效码 | 红色 SnackBar已有字段不受影响 |
| 重复上架 (409) | Dialog 弹窗,显示已有货位和登记时间,需手动关闭 |
| 网络异常 | 黄色提示条,数据保留,可重试 |
| 其他业务错误 | 显示后端错误描述,数据保留 |
## 5. 反馈机制(当前版本)
仅实现屏幕反馈:颜色变化、状态提示文案、弹窗。声音/振动/LED 留后续版本。
## 6. 页面布局
参照 PRD §8.1 的 ASCII 布局:
- 顶部标题栏 + 锁定货位 Toggle
- 总排号输入显示区(扫入时绿色边框)
- 货位号显示区 + 货位类型标签(蓝/橙)
- 确认上架按钮(两字段均填入时高亮)
- 底部状态提示栏