Files
xinlong-shop-taro/.workbuddy/memory/2026-07-04.md
赵忠林 994695c405 feat(store): 新增门店中心及VIP会员升级功能
- 个人信息页新增门店名称和门店地址展示,支持异步加载与只读显示
- 用户信息卡片整体改为绿色渐变背景,添加光晕和白色边框样式
- 新增升级VIP会员入口,突出展示并添加推荐标签
- 新建VIP会员升级页面,包含门店信息表单和VIP权益预览
- 提交升级申请调用新增api,支持状态检测表单只读
- 门店中心页面重构,简化订单管理,新增功能卡片及VIP审核入口
- 页面加载校验店员身份,非店员拒绝访问并提示
- 购物相关页面和组件全面支持VIP会员价格优先显示dealerPrice
- 新增ShopDealerApply模型门店相关字段,丰富会员申请数据记录
2026-07-04 10:26:47 +08:00

3.9 KiB
Raw Blame History

2026-07-04 工作日志

VIP会员审核功能开发

功能概述

为 xinlong-shop-taro 小程序新增了 VIP 会员审核功能,包含以下三个核心模块:

1. VIP会员审核菜单入口user.tsx

  • 在"门店中心"下方添加了"VIP会员审核"菜单项
  • 仅门店店员身份显示(与门店中心相同的 storeInfo 判断条件)
  • 点击跳转到 /pages/user/vip-review/index
  • 同时在页面加载、useDidShow、下拉刷新时调用 checkAndCacheVipStatus 更新当前用户的 VIP 状态缓存

2. VIP会员审核页面vip-review/index.tsx

  • 新建页面 src/pages/user/vip-review/index.tsx
  • 页面进入时验证当前用户是否为店员(通过 getMyClerk()
  • 三个 Tab待审核(applyStatus=10)、已通过(20)、已驳回(30)
  • 展示申请人的门店名称、门店地址、申请时间
  • 店员可"通过"(设 applyStatus=20或"驳回"(设 applyStatus=30附带驳回原因
  • 使用 updateShopDealerApply API 进行审核操作
  • 与 vip-upgrade/index.tsx 配套:用户提交申请 → 店员实地考察 → 审核通过/驳回

3. VIP会员价格特权dealerPrice

  • 创建了 VIP 状态工具 src/utils/vip.ts
    • isVipMember() - 同步从缓存读取 VIP 状态
    • checkAndCacheVipStatus(userId) - 异步检查并缓存(查询 ShopDealerApply applyStatus=20
    • getDisplayPrice(product) - 获取商品对当前用户的实际价格
  • 创建了 src/hooks/useVipStatus.ts Hook
  • 修改了以下页面/组件支持 VIP 显示 dealerPrice
    • ProductCard - 商品列表卡片价格
    • product-detail.tsx - 商品详情页价格 + 立即购买传参
    • SkuSelector - SKU 选择弹窗价格 + 确认时 fakeSku 价格
    • cart.tsx - 购物车商品价格 + 推荐商品价格
    • CartContext.tsx - calcPrice 计算总价时使用 dealerPrice
    • checkout.tsx - 结算页金额计算 + 单价显示

4. 路由注册

  • app.config.ts 中注册了 pages/user/vip-review/index

5. VIP升级页字段来源修正

  • 修改 vip-upgrade/index.tsx
  • 门店名称和门店地址不再从 user 对象读取,统一从 shop-dealer-apply 表最新记录读取
  • 待审核(10) 和 已通过(20) 时只读展示;已驳回(30) 时允许编辑并重新提交
  • TypeScript 类型检查通过

6. 审核通过时添加 VIP 角色

  • vip-review/index.tsx 中新增了 assignVipRole 辅助函数
  • 审核通过applyStatus=20自动调用 addUserRole 给申请人添加 VIP会员 角色roleId=2032, roleCode=vip
  • 先调用 listUserRole({ userId }) 检查用户是否已有 VIP 角色,避免重复绑定
  • TypeScript 类型检查通过

7. 门店中心改造为仪表盘

  • store/center/index.tsx 从订单管理页改造为功能入口仪表盘
  • 新建 store/orders/index.tsx,将原订单管理逻辑完整搬入
  • VIP会员审核入口从 user.tsx 独立菜单移除,统一放入门店中心仪表盘
  • 门店中心仪表盘功能卡片支持扩展FEATURE_CARDS 数组,新增只需加一项)
  • VIP会员审核卡片显示待审核数量角标红底白字
  • TypeScript 类型检查通过

8. 门店中心顶部显示店员头像和门店名称

  • 修改 store/center/index.tsx 顶部信息区
  • 左侧显示圆形店员头像(读取 storeInfo.avatar),无头像时显示默认 👤 图标
  • 右侧显示门店名称(storeInfo.storeName)和店员姓名 + 手机号(storeInfo.namestoreInfo.phone
  • TypeScript 类型检查通过

涉及文件(补充)

  • 修改:src/pages/store/center/index.tsx

9. 商品详情页价格下方 0 值隐藏

  • 修改 product-detail.tsx 价格区域
  • dealerPricesalePricememberStorePrice 增加 Number(value) > 0 判断
  • 0 或无效值时不再渲染,避免价格下方出现单独的 "0"
  • TypeScript 类型检查通过

涉及文件(补充)

  • 修改:src/pages/shop/product-detail.tsx