# 需求追溯表 · 【E2E全流程】202611040252

> 原型阶段追溯。PRD 工程附录的每条 P0/P1 都在下面有对应页面；`data-req` 已写进对应 HTML，`node tools/design-check.mjs . --strict` 用于页面质量检查。PRD §九 补了 F1–F11 工程编号，`node tools/trace.mjs pc50` 当前 11/11 覆盖。

## 一、PRD 工程附录（P0 / P1）

| 需求编号 | 需求名称 | 优先级 | 原型文件 | 覆盖状态 |
|---|---|---|---|---|
| R1 | 游客浏览与登录后提交预约 | P0 | `h5/services.html`、`h5/service.html`、`h5/time.html`、`h5/login.html`、`h5/result.html`、`h5/my.html`；`mp/` 同名六页 | 已覆盖：游客可看列表/详情/时段；提交时跳登录并带 `next` 回原页；重复提交复用已有预约；时段被占用拦截 |
| R2 | 门店预约名单与状态处理 | P0 | `pc/bookings.html`（详情抽屉内处理状态） | 已覆盖：日期/项目/状态组合筛选；空态；待确认→已确认/已完成/已取消；已取消再次确认被拦截并提示；只读金山店 |
| R3 | 服务项目新增与编辑 | P0 | `pc/services.html`、`pc/service-edit.html` | 已覆盖：名称/价格必填；价格 ≤0 拦截；上下架；改价后顾客端列表/详情读取新值 |
| R4 | 订单列表与名单导出 | P0 | `pc/orders.html`（导出操作区为页内弹窗） | 已覆盖：时间/状态/项目筛选；每页 6 条分页；导出当前筛选全部结果；无结果不生成文件 |
| R5 | 会员信息聚合 | P1 | `pc/bookings.html`（预约详情里的「会员信息」区块） | 已覆盖：按手机号聚合昵称、手机号、累计预约与已完成次数；同一顾客多条预约合并统计 |

## 二、报价模块 / PRD 功能清单

| 编号 | 功能 | 优先级 | 主要页面 | 覆盖状态 |
|---|---|---|---|---|
| F1 | 服务项目浏览 | P0 | `h5/services.html`、`h5/service.html`、`mp/services.html`、`mp/service.html` | 已覆盖：只展示上架项目；价格来自门店后台；空列表有空态 |
| F2 | 预约时间选择 | P0 | `h5/time.html`、`mp/time.html` | 已覆盖：未来 7 天；已占用/已过时段置灰；当天无时段有空态与换一天动作 |
| F3 | 登录后提交预约 | P0 | `h5/time.html`、`h5/login.html`、`h5/result.html`；`mp/` 同名三页 | 已覆盖：未登录点提交跳登录；`?next=` 回原页保留项目/日期/时段；提交生成待确认预约；防重复提交 |
| F4 | 我的预约 | P0 | `h5/my.html`、`mp/my.html` | 已覆盖：未登录显示登录门；登录后只显示本人；后台改状态后刷新可见 |
| F5 | 预约名单查看 | P0 | `pc/bookings.html` | 已覆盖：日期/项目/状态组合筛选；名单条数与结果一致；空态；分页 |
| F6 | 预约状态处理 | P0 | `pc/bookings.html`（详情抽屉） | 已覆盖：状态变更写入记录时间；已取消/已完成不可再改；点击禁用项有拦截提示 |
| F7 | 服务项目新增 / 编辑 | P0 | `pc/services.html`、`pc/service-edit.html` | 已覆盖：新增/编辑名称、价格、时长、简介、上下架；非法价格不保存；顾客端同步 |
| F8 | 订单列表 | P0 | `pc/orders.html` | 已覆盖：管理员全部门店；时间/状态/项目筛选；固定每页 6 条；分页 |
| F9 | 名单导出 | P0 | `pc/orders.html`（导出弹窗） | 已覆盖：按当前筛选导出 CSV；行数与筛选结果一致；无结果不生成空文件；字段完整 |
| F10 | 会员信息 | P1 | `pc/bookings.html`（会员信息区块） | 已覆盖：昵称、手机号、累计预约、已完成、最近一次；按用户聚合 |
| F11 | 预约提醒 | P1 | `h5/result.html`、`mp/result.html`、`pc/bookings.html` | 已覆盖（演示）：结果页显示已订阅微信提醒；门店确认/完成时显示已发送提醒；不接真实订阅消息接口 |

## 三、明确不做 / 原型模拟

| 项目 | 处理方式 | 原因 |
|---|---|---|
| 多门店切换 | 不做切换器；顾客端固定金山店；管理员订单含全部门店列 | PRD 第一版不做多门店切换，客户未提供门店名与营业规则 |
| 在线支付 / 储值 / 积分 / 优惠券 / 评价 | 不做 | PRD 第一版明确不做 |
| 微信授权、短信、订阅消息、真实 CSV 后端 | 前端原型模拟 | 本阶段只做原型，不写业务代码、不接真实接口 |
| 导出超时与断点续传 | 弹窗内写明「超时重试 / 不产生残缺文件」 | 原型无真实大数据量，无法如实模拟耗时 |
| 跨门店接口权限 | 页面按金山店过滤 + 登录守卫 + 说明 | 接口层权限属于开发阶段；原型不能替代服务端校验 |

## 四、页面级 `data-req` 对照

| 页面 | `data-req` |
|---|---|
| `prototype/h5/services.html` | F1 |
| `prototype/h5/service.html` | F1 |
| `prototype/h5/time.html` | F2,F3 |
| `prototype/h5/login.html` | F3,F4 |
| `prototype/h5/result.html` | F3,F4,F11 |
| `prototype/h5/my.html` | F4,F10,F11 |
| `prototype/mp/services.html` | F1 |
| `prototype/mp/service.html` | F1 |
| `prototype/mp/time.html` | F2,F3 |
| `prototype/mp/login.html` | F3,F4 |
| `prototype/mp/result.html` | F3,F4,F11 |
| `prototype/mp/my.html` | F4,F10,F11 |
| `prototype/pc/login.html` | F5,F6,F7 |
| `prototype/pc/admin-login.html` | F8,F9 |
| `prototype/pc/bookings.html` | F5,F6,F10,F11 |
| `prototype/pc/services.html` | F7 |
| `prototype/pc/service-edit.html` | F7 |
| `prototype/pc/orders.html` | F8,F9 |
