# P02 竞拍列表 · 设计说明（bid.vue）

> 单元：`bid` ｜ group=core ｜ P02 ｜ 依据：pages.json unit#2 + 规格表 P02 + 执行方案 §5.2
> 实现：`vue/src/pages/bid.vue` ｜ 状态帧 fixtures：`design/fixtures/bid.states.json`

## 1. 区块与密度对照

| 区块 | 实现落点 | 密度 | 达成 |
|---|---|---|---|
| ① 顶栏搜索+筛选入口 | `.topbar`：搜索→search；筛选按钮开抽屉 | — | ✓ |
| ② 筛选栏 4 维 | 抽屉内：品类(cats 5 项)/成色(conds 5 档)/价格区间(digit 双输入)/状态(竞拍中·已结束) | **4 维（≥4）** | ✓ |
| ③ 吸顶排序条 4 项 | `.sortbar`：即将截拍(默认)/最新/最热/价格↑↓（价格点切升降序，chevron 旋转） | **4 项（≥4）** | ✓ |
| ④ 双列瀑布流 | ItemCard×8（复用 P01 卡） | — | ✓ |
| ⑤ TabBar | active=bid | — | ✓ |

## 2. 状态帧

| 帧 | 渲染 | 说明 |
|---|---|---|
| normal | 筛选收起+满列表 | 默认排序=即将截拍 |
| empty | 「该筛选下暂无拍品」+清除筛选（回默认并关抽屉） | clearFilter() |
| loading | SkeletonList×4 | — |
| extreme | **筛选抽屉默认展开**并预填价格区间 0–999999（E 维抽屉+D 维极端区间一帧双证；价格行 flex 子项 min-width:0 已修，0 与 999999 双输入完整可见）；列表首位压测卡为**页内内联卡（计数 fmtCount=999+，不改共享 ItemCard）**，其余按 endTs 升序 | isExtreme 初始化 drawer/pMin/pMax |
| error | 黄条+保留缓存列表 | — |
| guest | N/A（浏览免登录） | — |

## 3. 维度差异

- B：筛选变更即时刷新+回列表顶（onSort/onCategory notify 语义）；筛选组合记忆=tab 切走再回保持（SPA 页内 state 保持，交付语义）。
- **默认排序语义修复（验收项）**：默认 sortKey=「即将截拍」，列表源改为 sortedItems（endTs 升序），演示帧排序结果与排序条一致（吧唧 00:22:58 居首）。
- 触达（§0.7）：顶栏搜索/筛选 44px；抽屉 chips 32px 高（chip 类多选小件，热区扩展=交付语义，uni-app 实现加 hit-slop）；关闭×32px；底部重置/确定 44px。
- C：价格区间 digit 键盘（inputmode=decimal）；错误提示「请输入正确金额」在 applyPrice() 校验（正则两位小数+非负），红字+perr 前置「!」图标（Form 类错误样式与共享 FormField 同构）。
- E：筛选抽屉右滑 60% 宽（`.drawer width:60%`）+遮罩点击关闭+「×」+重置/确定。
- D：金额 fmtMoney 同源；订单号无（列表无单号）。
- I：GET /items?filters&sort&page。

## 4. 走查规避

- 复用共享 ItemCard：同商品跨页同图同价（items 键唯一来源）。
- extreme 帧抽屉展开为演示形态，正常交付默认收起（documented 于 fixtures json）。

## 5. 占位与缺口

- 「请输入正确金额」错误为交互触发（静态帧未展示——pages.json 未列 validation 独立帧，C 维代码在案：applyPrice）。
- 空态沿用共享 EmptyState 图标式（规格 §0.4「插画」的正式插画资产列素材缺口，需主代理批准）。
- 无其余素材缺口（本页图位经 ItemCard/内联卡；冲突项同 home.md §5 的 items[5] 登记，不再重复）。

## 6. 压测样值声明

extremeItem 同 home（items[0] 覆写：299999.99/9999/超长标题/+3 天）；抽屉预填 pMin='0'、pMax='999999'；压测卡计数经页内 fmtCount 呈现 999+（共享 ItemCard 直出原始计数，故压测数据不经 ItemCard 渲染）。
