# 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** — 给 `` 加 `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 内部价格