# 收货地址列表 · 设计说明（addresses.vue）

> 单元：`addresses` ｜ group=account ｜ P 依据：P13 工具区「收货地址」（担保交易发货地址）
> 实现：`vue/src/pages/addresses.vue` ｜ 组状态帧 fixtures：`design/fixtures/account.states.json`

## 1. 区块与密度对照

| 区块 | 实现落点 | 密度 | 达成 |
|---|---|---|---|
| ① 地址卡 | `.acard`：姓名+脱敏手机 138\*\*\*\*5678+省市区+详情+Pill「默认」绿色 | **卡信息点 5** | ✓ |
| ② 编辑/删除 | 行内按钮：编辑→address-edit；删除→二次确认 Sheet「删除后不可恢复」（deleting 帧=实帧） | — | ✓ |
| ③ 新增收货地址 | 底部固定主按钮（46pt 高，grad-brand）→address-edit | — | ✓ |

## 2. 状态帧

| 帧 | 渲染 |
|---|---|
| normal | addresses 2 条（默认标签在第 1 条） |
| empty | EmptyState「还没有收货地址，新增后可用于担保交易收货」+底部新增按钮常驻 |
| loading | SkeletonList×2 |
| error | ErrorRetry |
| deleting | 删除确认 Sheet 实帧（目标=地址 1，文案含省市区+详情） |
| guest | EmptyState「登录后管理收货地址」→login（必登录） |

## 3. 九维 A–I

- **A**：差异=删除确认帧；空态新增引导。
- **B**：删除二次确认（dims B）；删除后 toast+列表移除（交互示意）。
- **C**：N/A（表单在 address-edit，pages.json na_reason）。
- **D**：手机号脱敏 138\*\*\*\*5678（§0.3 口径，与 mock 同源）。
- **E**：编辑→address-edit；删除=确认弹层；新增→address-edit。
- **F**：按 §0.5（担保交易发货地址消费方=订单流程）。
- **G**：按 §0.6。
- **H**：「默认」=绿底徽章+文字双通道；删除=danger 描边+图标+文字。
- **I**：`GET /addresses`；`DELETE /address/{id}`（占位）。

## 4. 决策点

| 决策触点 | 对应 |
|---|---|
| 选默认地址+管理收货信息 | 默认徽章+编辑/删除行内操作+底部新增 |

## 5. 占位

- 地址数据为 mock 示意【占位】；手机号仅存脱敏态（正式接口出参即脱敏，符合 I 维出参白名单纪律）。

## 7. 视觉验收修复轮（2026-10-10）

| 验收问题 | 处置 | 落点 |
|---|---|---|
| [中] deleting 帧取消/删除按钮被帧底裁半 | 已修（根因=board 模式页面根 `height:100%` 膨胀至 840）：`.pg` 改 `flex:1 1 auto` → board 恒 812，弹层锚定帧内；headless probe 实测 sheetBottom=pgBottom | addresses.vue `.pg`；根因记录 fixtures `pipeline_issues P-2`（App 外壳缺 .phone-stage 包裹，提请底座跟进） |
| [低] error 文案「点击重试 重试」重复 | 已修：黄条文案改「地址加载失败，已保留缓存内容」 | addresses.vue ErrorRetry |
| [低] loading 骨架双列网格与单列列表形态错配 | 已修：改单列满宽骨架×2（弃共享双列 SkeletonList） | addresses.vue `.skl1` |
| [低] 编辑/删除按钮 30px 触达不足 | 已修：高 32px + `::before inset:-6` 热区扩展 ≥44pt（删除为破坏性入口） | addresses.vue `.op` |
