# 2026-06-17

## 微信小程序"登录后才能看商品"过审方案

### 背景
客户要求登录才能看到商品，但微信审核禁止"一进入就强制登录"。实施游客态 + 行为节点拦截。

### 改动落点（6 个文件）

1. **src/utils/auth.ts** — 新增 `getUserMode()` / `isGuest()`，导出 `UserMode` 类型
2. **src/utils/login-guard.ts** — 新增 `requireLogin({ action, redirect, silent })` 拦截器
   - 非阻塞：默认用 `Taro.showModal` 二次确认，**不要直接 navigateTo 注册页**
   - `action` 类型枚举：`addToCart | buyNow | checkout | favorite | receiveCoupon | viewOrder | payOrder | submitComment`
   - 内置每个 action 的默认 redirect 文案
3. **src/components/common/Price/index.tsx** — 新增 `loginMask` 模式 + `maskText` 自定义
   - 游客态 + `loginMask=true` → 显示"登录后查看价格"
   - 登录态 → 走原逻辑，所有 Price 调用点零改动兼容
4. **src/components/common/ProductCard/index.tsx** — 给 `<Price>` 加 `loginMask`，划线价游客态隐藏
5. **src/pages/shop/product-detail.tsx** — 主价签 `loginMask`；划线价/会员价游客态隐藏
   - `toggleFavorite` / `handleAddCart` / `handleBuyNow` 改用 `requireLogin` 替换原来的 showToast + setTimeout navigateTo
6. **src/pages/shop/cart.tsx** — 去掉"未登录直接挡"
   - 游客态：显示空购物车 + 推荐位 + "去登录后查看购物车"按钮
   - 推荐位价格统一显示"登录后查看价格"
   - 顺手修了 `setRecommendGoods` 未声明的潜在运行 bug

### 关键经验
- **绝不在 useLaunch / onLoad / tabBar 切换时调登录**（审核必毙）
- **价格脱敏是过审最稳方案**，比"行为拦截+保留价格"风险低
- 拦截用 `Taro.showModal` 而非 `navigateTo`，避免被判"拒绝服务"
- 项目里 `Price` 公共组件是天然改造点，加一个 `loginMask` prop 一处改全场生效

### 还没改的（可后续）
- checkout.tsx 已是登录后路径，但里面的价格 / 余额展示可以加 `loginMask` 兜底
- 各 `index.tsx` 页面（首页/分类/搜索）的非 ProductCard 价格展示位（如果有）
- 优惠券中心 `receiveCoupon` 行为点
- SkuSelector 内部价格
