主题
客户端小程序 — 会员权益与订单
上级文档:客户端小程序
概述
对应主文档 §8.5、§8.6、§13.5
会员权益页展示用户当前的会员状态和套餐信息,订单页记录所有历史购买。这两个模块是用户确认「我能用什么」的核心页面。
页面路由
| 路由 | 页面 | 说明 |
|---|---|---|
/pages/profile/membership | 我的会员 | 当前有效套餐 + 入场资格 |
/pages/order/list | 我的订单 | 订单列表(按状态 Tab 筛选) |
/pages/order/detail | 订单详情 | 单笔订单完整信息 |
我的会员
页面要素
- 返回按钮 + 「我的会员」标题
- 当前有效会员卡卡片(如有):套餐名称、状态标识、到期时间、进度条
- 历史会员卡列表(如有)
- 未录脸提醒条(黄色):「请尽快完成人脸录入(未录脸无法入场)」
- 底部「续费 / 购卡」按钮
会员状态展示规则
| 状态 | 展示 | 入场资格 | 操作入口 |
|---|---|---|---|
| 有效权益 | 🟢 + 进度条 + 剩余天数 | ✅ 可入场(需已录脸) | 无 |
| 无权益 | 空态 + 引导 | ❌ | 「立即购买」 |
| 未录脸 | 黄色提醒条 | ❌ | 「立即录入」 |
| 套餐不适用当前门店 | 灰色提示 | ❌ | 「更换门店」或「购买适配套餐」 |
会员卡片字段
| 字段 | 说明 |
|---|---|
| 套餐名称 | 如「月卡」「次卡 10 次」 |
| 状态标识 | 🟢 使用中 / 🔵 有效 / ⬛ 已过期 |
| 到期时间 | 有效期截止日期 |
| 剩余天数 | 日卡/月卡/季卡/年卡展示进度条 |
| 剩余次数 | 次卡/体验卡展示「已用/总数」 |
| 购买时间 | 订单创建时间 |
| 购买门店 | 下单时选择的门店 |
我的订单
页面要素
- 返回按钮 + 「我的订单」标题
- Tab 筛选栏:全部 / 使用中 / 已过期
- 订单卡片列表
- 空态(无订单时):图标 + 「暂无订单」+ 「去逛逛」按钮
订单卡片字段
| 字段 | 说明 |
|---|---|
| 套餐名称 | 产品名称 |
| 订单状态 | 带状态标签 |
| 支付金额 | 实付金额 |
| 创建时间 | 订单生成时间 |
| 有效期/到期时间 | 期限类展示到期日,次数类展示剩余次数 |
订单状态与页面处理
| 状态 | 说明 | 操作 |
|---|---|---|
PENDING | 待支付 | 「继续支付」 |
PAID | 已支付待生效 | 显示「处理中」 |
ACTIVE | 使用中 | 展示权益摘要 |
EXPIRED | 已过期 | 展示历史记录 |
CANCELLED | 已取消 | 不允许继续支付 |
REFUNDING | 退款中 | 提示「处理中」 |
REFUNDED | 已退款 | 权益失效提示 |
订单详情页要素
- 返回按钮 + 「订单详情」
- 订单状态 + 状态说明
- 产品信息:名称、类型、有效期
- 金额明细:原价、优惠、实付
- 时间线:创建时间、支付时间、生效时间、到期时间
- 退款信息(如适用):退款金额、退款时间、退款状态
- 底部操作:根据状态动态展示(继续支付 / 查看会员 / 联系客服)
异常处理
| 异常 | 处理 |
|---|---|
| 订单为空 | 展示空态 + 「去逛逛」按钮跳转产品列表 |
| 查询失败 | 展示错误态 + 「重试」按钮 |
| 状态延迟 | 以前端最新接口返回为准 |
| 待支付订单超时 | 显示「已取消」,不可继续支付 |
接口
GET /api/v1/user/membership?storeId=xxx
Auth: JWT
Response: {
memberships: [
{
id, productName, productType,
status: 'ACTIVE' | 'EXPIRED' | ...,
startDate, endDate,
timesTotal, timesUsed,
storeId, storeName
}
],
canEnterStore: boolean,
faceEnrolled: boolean
}
GET /api/v1/orders
Auth: JWT
Query: { status?, page, pageSize }
Response: { items: Order[], total: number }
GET /api/v1/orders/:id
Auth: JWT
Response: Order {
id, status, product, amount, discount, paidAmount,
createdAt, paidAt, activatedAt, expiredAt,
refundAmount, refundStatus, refundAt, ...
}