Skip to content

客户端小程序 — 淋浴服务

上级文档:客户端小程序


概述

对应主文档 §8.7

淋浴服务允许用户在店内启动淋浴设备。淋浴权益通过服务端下发,支持按用户级别/会员等级配置不同时长,运营可在管理后台灵活调整默认规则。淋浴控制可通过个人中心或线下扫码触发。

页面路由

路由页面说明
/pages/shower/index淋浴控制权益展示 + 启动 + 倒计时

功能入口

入口触发方式说明
个人中心菜单列表「淋浴控制」始终可见
首页快捷入口仅在门店内时显示基于最近进店记录判断
线下扫码淋浴间张贴二维码登录后直接跳转淋浴页

淋浴权益体系

架构设计原则:权益时长由服务端下发,前端不做任何时长计算。用户无个人权益配置时,按门店默认配置执行。

权益来源优先级

服务端 GET /api/v1/shower/allowance 返回当前用户在指定门店的可用淋浴权益:

优先级从高到低:
1. 用户级权益配置(如 VIP 用户 30min/次,续费老用户 25min/次)
2. 门店级默认配置(如普通用户 20min/次)
3. 全局默认配置(兜底值)

权益方案

用户类型每次时长获取方式说明
普通用户20 分钟每次刷脸进店自动赠送 1 次门店默认配置,运营可调
VIP 用户30 分钟会员等级权益服务端按等级下发
续费老用户25 分钟连续续费奖励服务端配置

运营可配置项(管理后台)

配置项说明默认值
门店默认时长无个人权益时的每次淋浴时长20 分钟
每日最大次数每人每天可使用的淋浴次数1 次
进店自动赠送刷脸进店是否自动发放淋浴次数开启
赠送次数每次进店赠送的淋浴次数1 次
VIP 时长加成VIP 等级对应的额外时长按等级配置
超时是否自动关闭倒计时归零后是否自动关闭水阀开启

淋浴主页面要素

  • 返回按钮 + 「淋浴控制」标题
  • 当前门店名称
  • 淋浴间状态(空闲/使用中/离线)
  • 可用淋浴次数 + 每次可用时长(从服务端获取)
  • 「启动淋浴」按钮

淋浴状态展示

展示文案条件按钮状态
「启动淋浴」有可用次数 + 设备在线可用
「今日已用完」每日次数已用完置灰
「请先进入健身房」未进入过门店置灰 + 引导
「设备不可用」淋浴间离线或故障置灰
「暂无会员权益」无有效会员套餐置灰 + 购买引导

倒计时页面要素

  • 返回按钮 + 「淋浴中」标题
  • 大字号倒计时显示(MM:SS)
  • 进度条(剩余时长占比)
  • 「提前结束」按钮
  • 底部显示门店名称 + 淋浴间编号

淋浴操作流程

进入淋浴页

    ├─ GET /api/v1/shower/allowance?storeId=xxx
    │   返回:{ duration, remainingToday, showerRoomStatus }

    ├─ 无可用次数 → 展示对应提示

    ├─ 设备离线 → 展示不可用提示

    └─ 可启动 → 点击「启动淋浴」

         ├─ POST /api/v1/shower/start

         ├─ 成功 → 倒计时页面
         │         │
         │         ├─ 倒计时结束 → 自动发送 POST /api/v1/shower/stop
         │         ├─ 用户点击「提前结束」 → POST /api/v1/shower/stop
         │         └─ 页面切后台 → 服务端倒计时继续执行

         └─ 失败 → 展示错误原因

异常处理

异常处理
设备离线「淋浴设备暂时不可用,请联系工作人员」
无权益「暂无可用淋浴次数」+ 引导进入健身房
指令成功但设备未响应「淋浴启动异常,请联系客服」
网络中断重新拉取状态,服务端倒计时继续执行
倒计时页面被关闭服务端倒计时继续,水阀按时自动关闭
重复启动服务端校验,返回「当前已有进行中的淋浴」

接口

GET /api/v1/shower/allowance?storeId=xxx
  Auth: JWT
  Response: {
    duration: number,          // 本次可用时长(秒)
    remainingToday: number,    // 今日剩余可用次数
    maxPerDay: number,         // 每日最大次数
    showerRoomStatus: 'idle' | 'in_use' | 'offline'
  }

POST /api/v1/shower/start
  Auth: JWT
  Body: { storeId: string }
  Response: {
    success: boolean,
    endTime: string,           // ISO 时间,用于倒计时
    duration: number           // 实际分配时长(秒)
  }

POST /api/v1/shower/stop
  Auth: JWT
  Body: { storeId: string }
  Response: { success: boolean }

GET /api/v1/shower/status?storeId=xxx
  Auth: JWT
  Response: {
    active: boolean,
    remainingSeconds: number,
    endTime: string,
    showerRoomStatus: string
  }

扩展预留

  • 按时长计费:未来可支持按实际使用时长扣费(非赠送权益模式)
  • 购买额外时长:用户可付费购买额外淋浴时长
  • 预约淋浴:高峰期可预约淋浴间时段
  • 多人同时使用:门店可配置淋浴间数量,支持排队

飞创 Fitron 内部规划文档