# 鼎味肉市小程序新原型:用户动线 > 当前真相:本文件与同目录 `stories.md`、`scenario-model.json`、`cases.json` 和 HTML 共同构成顾客小程序唯一当前真相包。旧版动线保留在上一级 `customer-miniapp/` 作为历史输入,不再追加当前产品行为。 > > 本轮把购买主路径重新收敛为“选 SKU → 一页确认 → 原生支付 → 结果”。当前 HTML 保留 `cart.html`(可选待选内容预览)与 `checkout.html`(唯一确认页)两个职责清晰的路由;真实微信支付、回调校验和服务端幂等仍是实现阶段工作。 > > 同目录的 `scenario-model.json`、`cases.json` 和 `fixture-contract.json` 已同步当前 CASE 的可见路径、状态边界和待选内容语义;支付契约、计划持久化和后端幂等仍未实现,不把静态覆盖文件当成线上实现证据。 ## 0. 购买路径的总原则 ### 0.1 页面跳转预算 “跳转”只统计用户主动进入的新全屏页面;底部抽屉、地址选择器和微信原生支付浮层不算新的业务页面。购买路径的预算如下: | 起点 | 目标动线 | 用户主动跳转 | 说明 | |:---|:---|---:|:---| | 买肉页,直接加入 | `buy → 订单确认 → 原生支付 → 支付结果` | 1 | 买肉页是实际商品列表,不经过完整购物车页 | | 首页开始购买 | `home → buy → 订单确认 → 原生支付 → 支付结果` | 2 | 首页只负责分流,不承担商品比较 | | 买肉页,先看详情 | `buy → product-detail → 订单确认 → 原生支付 → 支付结果` | 2 | 详情是可选确认层,多一次跳转是合理成本 | | 计划采购 | `plan → 订单确认 → 原生支付 → 支付结果` | 1 | 计划清单直接生成采购快照,不再先进入购物车 | | 地址管理 | `我的 → 地址管理` | 1 | 这是服务任务,不嵌入每次购买的必经路由 | | 支付后查看订单 | `支付结果 → 订单详情` | 1 | 这是购买完成后的服务动作,不计入购买主路径 | 设计目标不是消灭所有页面,而是把页面只放在“用户必须做出新决策”的地方:商品选择、最终确认和支付。购物车预览、地址选择、订单详情都不能在主路径中制造额外的决策层。 ### 0.2 目标购买层级 ```text 商品列表 / 计划清单 ↓ 选购完成 统一订单确认页:商品、数量、金额、地址、时段、Quote ↓ 唯一主动作 微信原生支付浮层 ↓ 回调 支付结果页:成功 / 待支付 / 失败或取消 ``` - `cart.html` 的职责降为“待选内容的快速预览”:在买肉页或计划页以抽屉/轻量层承载,不作为每次购买的必经全屏页面。 - `checkout.html` 的职责升级为“统一订单确认页”:自由选购和计划采购都进入同一页面,商品行、金额、地址和配送时段在这里一次核对。 - `address.html` 只承担地址管理;确认页内使用地址选择器或轻量编辑层,不把顾客送去一个完整地址页再返回。 - `order-success.html` 是支付回调后的结果承载,不是顾客还要完成一次决策的结算页;`order-detail.html` 只作为支付后的可选服务入口。 - 当前原型用 `checkout-payment` 打开原生样式支付模拟层,再由 `payment-confirm` 进入 `order-success.html`;真实微信支付接入、回调校验和服务端幂等仍属于实现阶段,不把模拟结果当成线上支付证据。 ## 1. 模块范围与路径目录 | 路径 ID | 用户目标 / 场景 | 类型 | 起点 | 终点 | Story / CASE | 原型区域 | source_refs | Spec | |:---|:---|:---|:---|:---|:---|:---|:---|:---| | PATH-REDESIGN-HOME-DOORS | 首页完成“自己选 / 帮我安排”分流 | happy | home | buy / plan | S-001 / CASE-REDESIGN-001 | home.html | REQ-001/FR-019 | planned | | PATH-REDESIGN-SESSION-GATE | 会话失效后关闭写入口 | permission | states | denied | S-007 / CASE-REDESIGN-002 | states.html | REQ-003/FR-004 | planned | | PATH-REDESIGN-WEEKLY-PLAN | 配置一周餐次、保存菜谱、汇总 SKU 并进入统一确认 | happy | plan | checkout | S-003 / CASE-REDESIGN-003 | basket.html | REQ-003/FR-006 | planned | | PATH-REDESIGN-PLAN-EMPTY | 无计划时安排第一顿或新建菜谱 | empty | plan | plan-recipe / home / buy | S-003 / CASE-REDESIGN-004 | basket.html / states.html | REQ-003/FR-006 | planned | | PATH-REDESIGN-CART-CHECKOUT | 从待选内容预览进入统一确认 | optional | cart-preview | checkout | S-004 / CASE-REDESIGN-005 | cart.html | REQ-003/FR-010 | planned | | PATH-DESIGN-PURCHASE-CONFIRM | 自选或计划内容在一页核对并发起支付 | happy | buy / plan / cart-preview | checkout | S-004 / DESIGN-STORY-PAYMENT | REQ-003/FR-010 | design-only | | PATH-DESIGN-CHECKOUT-CONFIRM | 核对商品、地址、配送时段和 Quote | happy / boundary | checkout | native-payment | S-004 / DESIGN-STORY-PAYMENT | REQ-003/FR-010 | design-only | | PATH-DESIGN-PAYMENT-RESULT | 处理支付成功、待支付、失败或取消 | happy / error | native-payment | order-success / checkout | DESIGN-STORY-PAYMENT | REQ-003/FR-010 | design-only | | PATH-DESIGN-ORDER-RECEIPT | 查看支付回执并选择后续动作 | happy | order-success | order-detail / home | DESIGN-STORY-PLAN-ORDER | REQ-003/FR-010 | design-only | | PATH-DESIGN-ORDER-DETAIL | 查看订单状态、履约进度和追溯边界 | happy / boundary | orders | order-detail / help | S-006 / DESIGN-STORY-PLAN-ORDER | REQ-003/FR-007/FR-010 | design-only | | PATH-DESIGN-ADDRESS-RETURN | 从服务入口管理地址并返回原页面 | happy / boundary | profile / address | original operation | S-006 | REQ-003/FR-007 | design-only | | PATH-REDESIGN-CART-UNKNOWN | UNKNOWN 时查询原操作 | boundary | states | original operation query | S-007 / CASE-REDESIGN-006 | REQ-003/FR-010 | planned | | PATH-REDESIGN-TRACE-SUMMARY | 商品详情与周期页展示可确认事实 | happy | product-detail / subscription | summary | S-002 / CASE-REDESIGN-007 | REQ-001/FR-021 | planned | | PATH-REDESIGN-TRACE-BOUNDARY | 履约前隐藏实际批次 | boundary | subscription | hidden until fulfillment | S-005 / CASE-REDESIGN-008 | REQ-003/FR-010 | planned | | PATH-REDESIGN-OFFLINE | 离线暂停写操作 | error | states | offline | S-007 / CASE-REDESIGN-009 | REQ-003/FR-009 | planned | | PATH-REDESIGN-NOT-READY | 未就绪不展示业务数据 | error | states | not-ready | S-007 / CASE-REDESIGN-010 | REQ-002/FR-005 | planned | | PATH-REDESIGN-SUBSCRIPTION-ACTIVE | 查看当前合约与下一次窗口 | happy | subscription | future-cycle settings | S-005 / CASE-REDESIGN-011 | REQ-001/FR-020 | planned | | PATH-REDESIGN-SUBSCRIPTION-EMPTY | 无合约时不伪造配送事实 | permission | subscription | sign-in / options | S-005 / CASE-REDESIGN-012 | REQ-003/FR-004 | planned | | PATH-REDESIGN-ACCOUNT-SERVICE | 查看本人服务入口 | happy | profile | service rows | S-006 / CASE-REDESIGN-013 | REQ-003/FR-007 | planned | | PATH-REDESIGN-ACCOUNT-GATE | 匿名访问受保护服务被拒绝 | permission | profile | sign-in gate | S-006 / CASE-REDESIGN-014 | REQ-003/FR-004 | planned | | PATH-REDESIGN-REPEAT | 有完成订单时发起复购建议 | happy / boundary | profile | buy | S-008 / CASE-REDESIGN-015 | REQ-009/FR-008 | planned | | PATH-REDESIGN-REPEAT-ABSENT | 无历史时隐藏复购入口 | permission | profile | profile | S-008 / CASE-REDESIGN-016 | REQ-003/FR-004 | planned | ### 1.1 设计阶段扩展路径(暂不计入当前场景覆盖) | 路径 ID | 用户目标 / 场景 | 起点 | 终点 | 对应故事 | 状态 | |:--|:--|:--|:--|:--|:--| | PATH-DESIGN-RECIPE-SAVE | 上传照片、写配方、确认 SKU 和份量并保存 | plan / profile | my-recipes | DESIGN-STORY-RECIPE-SAVE | design-only | | PATH-DESIGN-RECIPE-MANAGE | 从我的页预览或计划页顶部进入完整菜谱管理 | profile / plan | my-recipes | DESIGN-STORY-RECIPE-SAVE | design-only | | PATH-DESIGN-PLAN-RESTORE | 离开后恢复家庭计划和已保存菜谱 | home / plan | plan | S-003 | design-only | | PATH-DESIGN-PLAN-ORDER | 完成一周计划并进入统一订单确认 | plan | checkout | DESIGN-STORY-PLAN-ORDER | design-only | | PATH-DESIGN-PLAN-SYNC | 计划变更后更新采购快照再确认 | plan / checkout | checkout | DESIGN-STORY-PLAN-ORDER | design-only | | PATH-DESIGN-PLAN-REUSE | 已下单计划复制到下一周 | plan / order | next-week-plan | DESIGN-STORY-PLAN-ORDER | design-only | | PATH-DESIGN-PAYMENT-RECOVERY | 支付取消、失败或待支付后恢复 | checkout / result | checkout / orders | DESIGN-STORY-PAYMENT | design-only | ## 2. PATH 详情锚点 ### PATH-REDESIGN-HOME-DOORS 首页 → `.intent-bar` 的 `home-self-select` / `.home-focus` 的 `home-planner`;终点分别是 `buy.html` / `basket.html`。已登录且有常买记录时,`.quick-section` 的常买 SKU 进入 `buy.html#`,仍由商品行完成加入,不把快捷入口误画成已下单。 ### PATH-REDESIGN-WEEKLY-PLAN 计划页当前周状态 → `plan-day-*` 时间轴切换 → `plan-period-*` 午餐/晚餐切换 → 选中日 `plan-meal-slot-*` → `plan-recipe-picker` 选择或新建菜谱 → 计划自动保存 → `plan-shopping-list` 核对 SKU 需求 → `plan-order-confirm` 进入统一订单确认页 → 原生支付。 计划清单是“本周需要什么”的事实汇总,不是第二个购物车;进入确认页后只生成本次采购快照,不直接修改计划历史。 ### PATH-REDESIGN-PLAN-EMPTY 空计划说明 → `plan-day-*` → `plan-meal-add-*` → `plan-recipe-picker` → 选择已保存菜谱或上传照片、写配方、确认 SKU 和份量;如果顾客暂时不做计划,再由 `empty-home` 或 `empty-buy` 回到其他入口。不填充假计划。 ### PATH-DESIGN-RECIPE-SAVE 计划页空餐次 → “新建菜谱” → 上传照片 → 写配方文字 → 确认 SKU 和份量 → 保存到“我的菜谱” → 留在当前选择流程 → 安排到当前餐次。保存菜谱只产生可复用记录,不创建购物车、订单或支付事实。 ### PATH-DESIGN-PLAN-RESTORE 首页“继续本周计划”或计划 Tab → 恢复最近家庭计划 → 恢复菜谱记录、餐次和 SKU 汇总 → 从上次停留的空餐次或已安排餐次继续。 ### PATH-DESIGN-PLAN-ORDER 计划达到完成条件 → 主 CTA 从“继续安排”切换为“按本周计划下单” → 锁定计划版本 → 按 SKU 和份量生成采购快照 → 检查 SKU、地址和配送能力 → 直接进入 `checkout.html` 统一确认 → 原生支付。中间不再插入完整购物车页面。 ### PATH-DESIGN-PLAN-SYNC 已生成采购快照后顾客修改计划 → 计划状态变为“需要同步” → 重新按 SKU 汇总 → 重新检查 Quote 和配送能力 → 用户确认后再进入订单确认。不能静默覆盖已经生成的采购内容。 ### PATH-REDESIGN-CART-CHECKOUT 购物车入口只打开待选内容预览;页面由一张可编辑商品卡和底部“合计 + 去确认”组成。顾客可以编辑数量或点击唯一的 `cart-checkout` 进入 `checkout.html`;来源上下文只决定返回/继续入口,不在顾客画布中增加来源卡、流程说明或确认范围。该路径保留用于“我想先看已选内容”的辅助场景,但不再是买肉和计划采购的必经路径。 ### PATH-DESIGN-PURCHASE-CONFIRM `buy.html` 或 `basket.html` 完成选择 → `checkout.html` 统一订单确认页。确认页按“配送卡、订单明细卡、支付卡”的顺序只编排三组订单信息,不在顾客画布里解释来源或设计理由: 1. 配送卡:地址和配送时段置顶;点击后从底部选择,主页面各自只显示一个最终值; 2. 订单明细卡:商品行只展示规格、数量和行金额,配送费与唯一应付合计在卡片底部收束; 3. 支付卡:只确认微信支付方式;底部固定区只保留“确认并支付”动作,不重复渲染总额。 进入确认页不代表订单已创建、已支付或已绑定实际批次;数量、地址或时段变化都要重新校验 Quote。 ### PATH-DESIGN-CHECKOUT-CONFIRM 统一确认页 → 地址、时段、商品、数量和 Quote 均有效 → 点击 `checkout-payment` → 调用微信原生支付。确认页不再先经过一个购物车页面,再进入第二个只显示配送信息的页面;来源说明和实现解释留在评审侧栏。地址与时段通过底部选择层编辑,商品数量在确认页只读,配送时段和订单金额各自只有一个主页面事实位置;支付浮层仅作为后续平台确认层。 ### PATH-DESIGN-PAYMENT-RESULT 原生支付回调分为三种结果: - 成功:进入 `order-success.html`,显示订单号、配送时段和后续查看入口; - 取消 / 失败:回到确认页,保留已选内容和失败原因,允许重新发起,但不创建第二笔订单; - 待确认:显示“支付状态确认中”,使用原 `operationId` 查询,不重复提交。 支付结果页不强迫顾客马上进入订单详情;“查看订单”和“回首页”是两个后续动作。 ### PATH-DESIGN-ADDRESS-RETURN 从“我的”进入 `address.html?from=profile` 管理配送地址;从统一确认页只使用地址选择器或轻量编辑层。确认页不把顾客送去完整地址页再返回,避免 `checkout → address → checkout` 的额外双跳。地址保存成功后回到确认页并重新校验配送范围与时段。 ### PATH-DESIGN-ORDER-RECEIPT `order-success.html` → `success-view-order` → `order-detail.html`;也可以回首页继续浏览。订单详情承载订单快照、配送进度和履约后的追溯事实,不成为支付链路的必经页。 ### PATH-DESIGN-ORDER-DETAIL `profile.html` → `profile-orders` → `orders.html` → `order-row-*` → `order-detail.html`;订单详情遇到包裹问题再进入 `help.html#after-sales`。订单详情只读取已经产生的订单快照,不把计划草稿或公开供给摘要写成履约事实。 ### PATH-REDESIGN-CART-UNKNOWN UNKNOWN 说明 → `unknown-query`,使用原 `operationId` 查询,不生成第二笔订单、支付或写命令。 ### PATH-REDESIGN-TRACE-SUMMARY / PATH-REDESIGN-TRACE-BOUNDARY 商品目录和详情显示标准规格、固定价格与公开供给摘要;周期配送页显示计划供给边界。实际 Lot、包裹和检疫事实只能在履约后通过订单/包裹查看。 ### PATH-REDESIGN-OFFLINE / PATH-REDESIGN-NOT-READY 状态页 `state-offline` → `offline-retry`,离线时暂停写操作;状态页 `state-not-ready` → `not-ready-home`,不展示假价格、假库存、假订单或支付成功。 ### PATH-REDESIGN-SUBSCRIPTION-ACTIVE / PATH-REDESIGN-SUBSCRIPTION-EMPTY 周期配送页展示当前合约、下一次窗口和未来周期管理边界;无合约时只展示说明/方案入口,不伪造当前配送事实。 ### PATH-REDESIGN-ACCOUNT-SERVICE / PATH-REDESIGN-ACCOUNT-GATE 我的页 → 订单、地址、菜谱和唯一的帮助与规则入口。匿名态只读公开说明,受保护服务在认证后重新读取;我的页不承担下单确认。 ## 3. 导航与页面职责 | 入口 | 路由 | 页面只负责什么 | 离开页面的主要动作 | |---|---|---|---| | 首页 | `/pages/customer/home` | 判断当前意图,给出两条主路,并为有记录的顾客提供常买 SKU 快速下单 | 按部位找肉、开始做计划、快速下单常买 SKU、查看热度菜谱 | | 买肉 | `/pages/customer/buy` | 按分类展示可购买 SKU,并提供详情和加入动作 | 切换分类、看商品详情、加入待选内容、打开购物车预览 | | 商品详情 | `/pages/customer/product-detail` | 确认单个 SKU 的规格、切法和固定价 | 加入待选内容、返回买肉 | | 计划 | `/pages/customer/basket` | 编辑一周餐次、保存/复用菜谱、汇总 SKU 并发起计划下单 | 安排一顿、新建/选择菜谱、核对 SKU、进入统一确认 | | 购物车预览 | `/pages/customer/cart` | 在需要时快速查看和编辑待选内容;不是购买必经页 | 返回浏览、进入统一确认 | | 订单确认 | `/pages/customer/checkout` | 一次核对商品、数量、Quote、地址和配送时段,并发起支付 | 选择地址/时段、确认并支付;商品改量返回来源页 | | 支付结果 | `/pages/customer/order-success` | 承载支付回调结果和后续入口 | 查看订单、回首页 | | 我的订单 | `/pages/customer/orders` | 按时间查看订单状态和摘要 | 进入订单详情 | | 订单详情 | `/pages/customer/order-detail` | 查看订单快照、配送进度和履约后追溯边界 | 查看售后帮助、查看地址快照 | | 地址管理 | `/pages/customer/address` | 管理本人配送地址;不成为每次下单的必经页 | 保存地址、返回来源页 | | 周期配送 | `/pages/customer/subscription` | 查看当前合约和未来周期边界 | 管理未来周期 | | 我的 | `/pages/customer/profile` | 身份、Top 2 菜谱预览、地址、订单,以及一个帮助与规则入口 | 管理全部菜谱、查看帮助与规则或进入订单/地址 | | 我的菜谱 | `/pages/customer/recipes` | 查看、创建、编辑、移除和复用家庭菜谱记录 | 排入计划、返回我的 | | 帮助与规则 | `/pages/customer/help` | 集中承载售后、配送、称重和追溯说明 | 回到我的或进入订单上下文 | 底部固定五个 Tab:`首页 / 买肉 / 计划 / 订阅 / 我的`。计划固定在中间第三位,并以动作色高亮、抬高图标和更强文字权重强调;购物车不是第六个 Tab,而是待选内容的辅助入口。 ## 4. 主路径 ### F-001 自选采购:从商品列表到支付 目标路径:`home.html` → `buy.html` → 选择分类与 SKU → 直接加入待选内容 → 打开购物车预览(可选)或直接进入 `checkout.html` → 核对商品、地址、配送时段和 Quote → 微信原生支付 → `order-success.html`。 从买肉页开始时,顾客只需一次主动页面跳转即可进入统一确认页;从首页开始时,买肉页是唯一的商品浏览页。商品详情是可选路径,不应被强制插入每个 SKU 的购买过程。 - 成功条件:顾客能在商品目录中选分类、识别 SKU、打开详情或直接加入,并看到数量反馈;确认页只出现一个“确认并支付”主动作。 - 事实约束:列表与详情显示标准规格固定价;确认页显示服务端 Quote;商品目录不提前承诺实际批次。 - 交互约束:商品图片/名称详情入口与加入按钮是两个明确动作;购物车预览可编辑,但不再制造一层必经结算。 - 支付约束:原生支付取消、失败或待确认时回到原确认上下文;重试必须复用原操作,不生成第二笔订单。 - 状态边界:目录加载中不填充假商品;商品下架、价格缺失、供给不可用或配送地址失效时,关闭确认动作并保留原因。 - 回流:从确认页返回买肉时,分类、已选数量和当前地址上下文不丢失。 ### F-002 开始做计划:从家庭菜谱到一周采购 `home.html` → `basket.html` → 查看当前周与七日时间轴 → 选择日期和午餐/晚餐 → 安排或替换菜谱 → 计划自动保存 → 展开采购清单核对 SKU → `按本周计划下单` → 直接进入 `checkout.html` → 核对 Quote、地址和配送时段 → 原生支付。 - 成功条件:顾客不需要手算肉量,能把照片/配方/SKU 菜谱排进餐次,计划离开后可恢复,完成后可以一次生成本周采购确认。 - 首要焦点:进入计划页第一眼是当前周、保存状态和继续动作,不是购物车摘要。 - 中段焦点:七日时间轴先承载全周概览,选中日承载餐次、照片、配方、SKU 和份量;菜谱保存只在选择上下文出现。 - 末段焦点:采购清单按 SKU 汇总需求量、购买量和包装余量;计划完成后主按钮切换为 `按本周计划下单`。 - 确认边界:计划清单生成采购快照后直接进入统一确认;确认页只读显示采购数量,需要改量时返回计划清单,不能在确认页静默改写已保存计划。 - 数量规则:同一 SKU 的多顿需求合并展示来源;标准规格为 `500g/份` 时,不承诺可变重量精确购买。 - 失败边界:SKU 下架、价格变化、地址失效或供给不可用时,保留菜谱和计划记录,阻止生成无效采购快照。 - 回流:顾客离开后恢复家庭计划;采购快照与计划不一致时显示“需要同步”;已下单计划可以复制到下一周。 ### F-002B 保存与复用菜谱 `basket.html` 空餐次 → `plan-recipe-picker` → `我的菜谱` 或 `新建菜谱` → 上传照片 → 写配方文字 → 确认 SKU 和份量 → 保存 → 留在当前选择流程 → 排入餐次。 - 菜谱记录只包含照片、配方文字、SKU 和份量,不建立复杂食材映射。 - 保存菜谱不创建购物车、订单或支付事实;它是家庭可复用资产。 - `profile.html` 只展示最近 Top 2 菜谱预览和“管理全部”;完整管理进入 `recipes.html`,安排到哪一天仍回到计划页。 ### F-002C 计划下单与下周复用 `basket.html` 达到完成条件 → `按本周计划下单` → 锁定计划版本 → 生成采购快照 → `checkout.html` 统一确认 → 原生支付 → 计划显示“已下单” → 复制到下一周生成新版本。 - “按本周计划下单”只负责生成本次采购快照和进入确认,不绕过最终事实核对。 - 订单、计划和采购快照各自保留;支付成功后计划不消失,计划变更不能静默改写已支付订单。 ### F-002D 计划页眼位与焦点分配 | 眼位 | 用户此刻要回答的问题 | 应该突出什么 | 应该弱化什么 | 主动作 | |---|---|---|---|---| | 第一眼 | 我在规划哪一周?进度到哪里? | 当前周、保存状态、已安排/待安排数量 | 家庭设置、购物车角标、规则全文 | 继续安排 / 开始安排 | | 第二眼 | 这一餐吃什么?对应哪个 SKU? | 选中日、餐次、照片、配方、SKU 和份量 | 复杂配料、非肉类材料、订单事实 | 安排一顿 / 替换 | | 第三眼 | 本周买多少?是否可以下单? | SKU 汇总、数量异常、同步状态、主 CTA | 推荐故事、装饰统计 | 按本周计划下单 | ### F-003 回购:从订单记录重新核对 `profile.html` → 已登录且存在完成订单 → 点击订单复购入口 → 返回 `buy.html` 重新选择当前 SKU → 可进入详情并加入待选内容 → 统一确认与支付。 - 历史内容只是建议,不代表新订单。 - 当前地址、价格、配送窗口和库存/供给摘要必须重新读取。 ### F-004 周期配送:查看未来影响 `home.html` → `subscription.html` → 查看当前合约/下一次时间窗口 → 选择未来周期设置 → 保存前显示“只影响未来周期” → 返回订阅页。 - 未登录:进入登录/授权态;不开放匿名写操作。 - 无合约:显示可选方案行和规则说明,不显示假的当前合约。 ### F-005 我的与状态服务:身份、帮助和恢复 `profile.html` → 订单/地址/帮助/订阅服务入口 → 查看本人可读事实或进入授权门禁;异常状态统一进入 `states.html`,再从当前状态提供重新认证、重试或返回入口。 - 已登录:可以进入本人订单、地址、订阅和帮助;服务入口不暴露内部 actor、customerId 或权限快照。 - 未登录或会话过期:受保护写操作显示 permission gate,不自动重放原命令;浏览公开壳仍可继续。 - `loading`、`offline`、`not-ready`、`unknown`、图片失败和支付恢复均沿用 `states.html` 的可解释状态,不以成功态填充业务数据。 - 覆盖 `PATH-REDESIGN-SESSION-GATE`、`PATH-REDESIGN-CART-UNKNOWN`、`PATH-REDESIGN-OFFLINE`、`PATH-REDESIGN-NOT-READY`、`PATH-REDESIGN-ACCOUNT-SERVICE`、`PATH-REDESIGN-ACCOUNT-GATE` 和 `PATH-REDESIGN-REPEAT-ABSENT`。 ### PATH-REDESIGN-SESSION-GATE:会话失效门禁 `states.html` 显示会话失效原因和重新认证入口;不自动重放原写命令。 ### PATH-REDESIGN-ACCOUNT-GATE:匿名服务门禁 匿名顾客进入受保护的订单、地址或菜谱写入口时看到登录/授权要求;公开浏览入口仍可用。 ### PATH-REDESIGN-NOT-READY:能力未就绪 显示能力尚未开放和可用入口,不展示假业务数据或伪造成功结果。 ### PATH-REDESIGN-REPEAT:有历史订单的复购建议 从订单摘要回到当前 `buy.html` 重新核对 SKU、价格和配送事实;历史内容只作为建议,不直接创建新订单。 ### PATH-REDESIGN-REPEAT-ABSENT:无历史时隐藏复购 没有完成订单时不显示复购动作;顾客仍可从公开目录开始正常采购。 ### PATH-REDESIGN-SUBSCRIPTION-EMPTY:无周期合约 订阅页显示说明和可选方案,不伪造已生效合约、扣款或下一次配送窗口。 ### PATH-REDESIGN-TRACE-BOUNDARY:履约前隐藏实际批次 商品详情和周期配送只显示已确认的公开供给摘要;实际批次和包裹追溯延后到订单/履约事实。 ## 5. 失败与边界路径 | 状态 | 用户看到什么 | 允许动作 | 禁止动作 | |---|---|---|---| | `loading` | 结构骨架和“正在读取” | 等待、返回 | 假装已加载业务事实 | | `empty` | “暂无内容”与回到入口 | 回首页/买肉/订阅 | 填充假商品、假计划 | | `offline` | 当前仅可看缓存,写操作暂停 | 重试连接、浏览已缓存 | 创建重复写命令 | | `image-failed` | 保留文字、替代图形或说明 | 重试图片、继续主流程 | 把图片缺失变成商品缺失 | | `permission-denied` | 重新认证或重试 | 重新认证、保留草稿 | 自动重放旧写命令 | | `not-ready` | 能力未就绪、无业务数据 | 返回可用入口 | 画成成功空态或成交 | | `quote-changed` | 金额或配送能力发生变化 | 回到确认页重新核对 | 用旧金额直接支付 | | `payment-cancelled` | 支付未完成,内容仍保留 | 返回确认、重新支付 | 再建一笔订单 | | `payment-unknown` | 正在确认支付状态 | 使用原 `operationId` 查询 | 新建第二个提交命令 | ## 6. 组件决策与动线关系 | 组件 | 使用位置 | 为什么这里使用 | 不使用的位置 | |---|---|---|---| | 首页主路径入口 | 首页 | 真正的二选一,帮助顾客从意图出发 | 商品、订单、服务入口 | | 常买 SKU 快捷入口 | 首页 | 让有记录的顾客快速回到当前目录位置 | 匿名态不伪造个人常买;不替代商品行事实核对 | | 分类侧栏 | 买肉 | 让顾客用电商/奶茶小程序熟悉的方式切换商品类别 | 首页主分流、订单确认 | | SKU 商品卡 | 买肉 | 直接承载商品图、名称、规格、固定价和加入动作 | 首页主分流、确认页事实摘要 | | 商品详情页 | 商品详情 | 只补充单个 SKU 的规格事实和加入动作 | 商品目录中堆叠长说明 | | 购物车预览层 | 买肉、计划及其他非确认页 | 让顾客快速查看待选内容,随时关闭,不制造必经页面 | 确认页自身,不重复一份购物车 | | 统一订单确认页 | 自选和计划采购 | 把商品、金额、地址、时段和 Quote 放在同一承诺层 | 计划编辑页、商品列表 | | 地址选择器 | 订单确认页 | 在原上下文内更换地址,避免来回跳页 | 每次购买都跳完整地址管理页 | | 原生支付浮层 | 订单确认页 | 使用平台熟悉的支付确认,不再造一层伪结算页面 | 商品列表、计划编辑页 | | 订单结果 | 支付回调后 | 明确成功、待支付、失败和取消 | 支付前的确认页 | | 信息行 | 订阅、我的、订单详情 | 并排比较事实与动作 | 首页主分流、买肉商品主列表 | | 七日时间轴 | 计划 | 同时呈现一周日期与已安排/待安排状态 | 订单确认、商品目录 | | 选中日餐次行 | 计划 | 只展开当前日期的餐次,承载菜谱、人数、肉量和编辑动作 | 首页主分流、订单确认 | | 菜谱选择器 | 计划 | 为具体餐次选择已保存菜谱或推荐菜谱 | 首页主分流、买肉目录 | | 新建菜谱入口 | 计划 / 我的菜谱 | 用照片、配方文字、SKU 和份量保存家庭记录 | 计划首屏、商品目录主列表 | | 采购清单汇总行 | 计划 | 把多顿菜谱需求合并成可核对的 SKU 购买量 | 订单确认最终金额 | | 计划下单 CTA | 计划 | 计划完成后按 SKU 生成采购快照并进入确认 | 计划未完成时、普通自由选购 | | 固定底部五 Tab | 全部页面 | 保持位置记忆和页面职责 | 不增加购物车第六 Tab | ## 7. 原型交互覆盖 | 流程节点 | 页面/区域 | `data-test` | |---|---|---| | 首页两条主路 | `home.html` `.intent-bar` / `.home-focus` | `home-self-select`, `home-planner` | | 首页常买 SKU | `home.html` `.quick-section` | `home-frequent-*` | | 地址读取 | `home.html` 顶栏 | `home-address` | | 买肉分类 | `buy.html` 左侧分类栏 | `category-*` | | 买肉商品列表 | `buy.html` SKU 商品卡 | `sku-detail-*`, `sku-add-*` | | 商品详情 | `product-detail.html` | `detail-back`, `detail-add` | | 计划当前周与状态 | `basket.html` 计划页首屏 | `plan-week`, `plan-status`, `plan-continue` | | 计划日期切换 | `basket.html` 七日时间轴 | `plan-day-*` | | 计划时段切换 | `basket.html` 选中日面板 | `plan-period-lunch`, `plan-period-dinner` | | 计划餐次编辑 | `basket.html` 选中日菜谱卡 / 空餐次 | `plan-meal-slot-*`, `plan-meal-add-*`, `plan-replace-*`, `plan-adjust-*`, `plan-remove-*` | | 菜谱选择 | `basket.html` 菜谱选择器 | `plan-recipe-picker`, `plan-recipe-*`, `plan-recipe-confirm` | | 菜谱管理 | `recipes.html` 完整管理页 | `recipes-summary`, `recipes-new`, `recipe-management-list`, `recipe-editor` | | 肉品采购清单 | `basket.html` 汇总区 | `plan-shopping-list`, `plan-quantity-*`, `plan-source-*`, `plan-sync-warning` | | 计划进入确认 | `basket.html` 清单底部 | `plan-order-confirm`;保留 `data-legacy-test="plan-add-to-cart"` 仅用于旧覆盖映射 | | 购物车预览 | `cart.html` 或待选抽屉 | `cart-edit-*`, `cart-checkout`(辅助路径) | | 统一订单确认 | `checkout.html` | `checkout-items`, `checkout-address`, `checkout-slot-*`, `checkout-payment` | | 支付调用与结果 | `checkout.html` / `order-success.html` | `checkout-payment`, `payment-confirm`, `payment-cancel`, `payment-check-unknown`, `success-view-order` | | 未来周期 | `subscription.html` | `subscription-manage`, `subscription-option-*` | | 身份与服务 | `profile.html` | `profile-orders`, `profile-address`, `profile-help` | | 地址管理 | `address.html` | `address-save`, `address-return` | | 订单与详情 | `orders.html` / `order-detail.html` | `order-row-*`, `order-detail-*` | | 状态分支 | `states.html` | `state-loading`, `state-empty`, `state-offline`, `state-image-failed`, `state-permission`, `state-not-ready`, `state-unknown` | | 状态恢复动作 | `states.html` | `empty-home`, `empty-buy`, `offline-retry`, `image-retry`, `permission-refresh`, `unknown-query`, `not-ready-home` | | 底部主导航 | 全部顾客页面 | `nav-home`, `nav-buy`, `nav-plan`, `nav-subscription`, `nav-profile` | | 全局购物车入口 | 首页/买肉/计划/订阅/我的 | `home-cart`, `buy-cart`, `basket-cart`, `subscription-cart`, `profile-cart` | | 帮助与规则 | `help.html` | `help-after-sales`, `help-delivery-rules`, `help-trace` | | 菜谱预览与管理入口 | `profile.html` / `basket.html` | `profile-recipes-manage`, `plan-manage-recipes` | | 当前真相包索引 | `index.html` | `open-home`, `open-states`, `index-*`;仅用于评审导航 | ### 7.1 设计阶段新增锚点(暂不计入浏览器覆盖) | 设计节点 | 计划中的承载位置 | 需要表达的事实 | |---|---|---| | 我的菜谱来源 | 计划页菜谱选择器 | 已保存菜谱可以直接排入当前餐次 | | 新建菜谱 | 计划页选择器或 `recipes.html` | 上传照片、写配方、确认 SKU 和份量 | | 菜谱完整管理 | `recipes.html` | 查看、编辑、移除和排入计划 | | 自动保存状态 | 计划页当前周区域 | 计划和菜谱记录已经保存,可离开后恢复 | | 计划完成 CTA | 计划页采购清单之后 | 从继续安排切换为按本周计划下单 | | 统一订单确认 | `checkout.html` | 自选和计划采购共用一页核对商品、金额、地址和时段 | | 支付状态 | `checkout.html` / `order-success.html` | 成功、待支付、失败和取消必须与订单创建区分 | | 采购快照同步 | 计划页 / 订单确认 | 计划变更后需要重新汇总和核对 | | 下单后复用 | 计划页 / 首页 | 已下单、查看订单、复制到下一周 | 这些锚点已同步到 `cases.json` 与 `scenario-model.json` 的当前可见路径;真实后端契约和持久化仍需在实现阶段建立浏览器覆盖。 ## 8. PATH 见证点 | PATH | 主 CASE / 结果 | 浏览器起点与可见动作 | |---|---|---| | PATH-REDESIGN-HOME-DOORS | CASE-REDESIGN-001 · 两条主路可见 | `home.html` → `home-self-select` 或 `home-planner` | | PATH-REDESIGN-SESSION-GATE | CASE-REDESIGN-002 · 过期身份被拒绝 | `states.html` → `state-permission` → `permission-refresh` | | PATH-REDESIGN-WEEKLY-PLAN | CASE-REDESIGN-003 · 计划日期、餐次、清单和确认承接可追踪 | `basket.html` → `plan-week` → `plan-day-*` → `plan-meal-slot-*` → `plan-shopping-list` → 目标 `plan-order-confirm` | | PATH-REDESIGN-PLAN-EMPTY | CASE-REDESIGN-004 · 空计划可恢复 | `basket.html` → `plan-day-*` → `plan-meal-add-*` → `plan-recipe-picker` | | PATH-REDESIGN-CART-CHECKOUT | CASE-REDESIGN-005 · 待选预览可进入确认 | `cart.html` 或待选抽屉 → `cart-checkout` | | PATH-DESIGN-PURCHASE-CONFIRM | 设计验收 · 自选和计划共用确认页 | `buy.html` / `basket.html` → `checkout.html` → `checkout-payment` | | PATH-DESIGN-PAYMENT-RESULT | 设计验收 · 支付状态可恢复且不重复提交 | `checkout.html` → 原生支付 → 成功/取消/待确认 | | PATH-REDESIGN-CART-UNKNOWN | CASE-REDESIGN-006 · 只查询原操作 | `states.html` → `state-unknown` → `unknown-query` | | PATH-REDESIGN-TRACE-SUMMARY | CASE-REDESIGN-007 · 商品详情事实可见 | `product-detail.html` → SKU 详情事实 | | PATH-REDESIGN-TRACE-BOUNDARY | CASE-REDESIGN-008 · 批次不提前承诺 | `subscription.html` → 实际批次说明 | | PATH-REDESIGN-OFFLINE | CASE-REDESIGN-009 · 写操作暂停 | `states.html` → `state-offline` → `offline-retry` | | PATH-REDESIGN-NOT-READY | CASE-REDESIGN-010 · 未就绪不伪造业务数据 | `states.html` → `state-not-ready` → `not-ready-home` | | PATH-REDESIGN-SUBSCRIPTION-ACTIVE | CASE-REDESIGN-011 · 当前合约与未来窗口 | `subscription.html` → `subscription-manage` | | PATH-REDESIGN-SUBSCRIPTION-EMPTY | CASE-REDESIGN-012 · 无合约不伪造 | `subscription.html` → 登录/方案说明 | | PATH-REDESIGN-ACCOUNT-SERVICE | CASE-REDESIGN-013 · 我的页服务入口 | `profile.html` → `profile-orders` / `profile-address` | | PATH-REDESIGN-ACCOUNT-GATE | CASE-REDESIGN-014 · 匿名受保护服务门禁 | `profile.html` → 登录要求 | | PATH-REDESIGN-REPEAT | CASE-REDESIGN-015 · 复购回到当前目录 | `profile.html` → 订单记录 → `buy.html` | | PATH-REDESIGN-REPEAT-ABSENT | CASE-REDESIGN-016 · 无历史不显示复购 | `profile.html` → 无复购入口 |