加载中…
预约 book

模块说明

book 提供预约体系:预约项目浏览(列表/分类/详情)、排班里链路(排班日期 → 时段选择 → 联系信息 → 提交预约)、会员预约管理(我的预约/详情/取消)、工作端核销(确认/拒绝/完成/签到)。

鉴权级别:列表/详情/排班查询公开(schedule、time 支持可选登录以展示个性化时段);联系信息页与提交预约必须登录;会员管理必须登录;工作端必须员工身份。

接口一览

前台

方法 URL 鉴权 说明
GET /api/book 公开 预约项目列表
GET /api/book/{id} 公开 预约项目详情
GET /api/book/class 公开 预约分类列表
GET /api/book/schedule 可选 排班日期列表
GET /api/book/date 公开 日期可选项
GET /api/book/time 可选 时段列表
GET /api/book/contact 必须 联系信息页数据
POST /api/book/booking 必须 提交预约

会员

方法 URL 鉴权 说明
GET /api/user/book 必须 我的预约列表
GET /api/user/book/{id} 必须 预约详情
POST /api/user/book/cancel 必须 取消预约

工作端(work_required)

方法 URL 鉴权 说明
GET /api/book/work 员工 工作端预约列表(多条件筛选)
GET /api/book/work/{id} 员工 工作端预约详情
POST /api/book/work/confirm 员工 确认预约
POST /api/book/work/reject 员工 拒绝预约(可附原因)
POST /api/book/work/complete 员工 完成预约
POST /api/book/work/checkin 员工 核销签到

预约列表与详情

列表 GET /api/book

参数 必填 说明
class_id 否 分类 ID 筛选
page 否 页码,默认 1

每页数量取站点配置 pagination.book(默认 10)。

{
  "code": "OK",
  "message": "",
  "data": {
    "title": "预约项目",
    "class_exist": true,
    "item_list": [ { "id": 1, "name": "...", "price": "...", "...": "" } ],
    "pager": { "...": "分页信息" }
  },
  "errors": {},
  "request_id": "9f2a5c8e1b3d7f40"
}

详情 GET /api/book/{id}

{
  "code": "OK",
  "message": "",
  "data": {
    "title": "项目名称",
    "item": { "id": 1, "name": "...", "content": "<p>…</p>", "...": "" }
  },
  "errors": {},
  "request_id": "9f2a5c8e1b3d7f40"
}
场景 响应
项目不存在 422 INVALID_PARAMS(illegal)

分类 GET /api/book/class

返回 title + class_list(一维分类列表)。

排班里链路

排班日期 GET /api/book/schedule

参数 必填 说明
class_id 是 分类 ID(缺失 → 422 INVALID_PARAMS)
date 否 指定日期(YYYY-MM-DD);非法格式视为空

返回排班日期数据(buildScheduleJsonPayload,含可选日期与余量信息,以实际返回为准)。支持登录态传入(个性化展示)。

日期 GET /api/book/date

参数 id(项目 ID)、current_date;返回日期选择数据。公开。

时段 GET /api/book/time

参数 必填 说明
id 是 项目 ID
date 是 预约日期(YYYY-MM-DD)
current_time 否 当前选中时段回显

返回时段列表数据(含可预约状态)。支持登录态传入。

联系信息页 GET /api/book/contact

参数 必填 说明
id 是 项目 ID
date 是 预约日期
start_time 是 开始时间(如 10:00)
{
  "code": "OK",
  "message": "",
  "data": {
    "item": { "...": "预约项目信息" },
    "date": "2026-01-02",
    "start_time": "10:00",
    "end_time": "11:00",
    "price": "...",
    "custom_fields": [ { "...": "自定义表单字段(站点配置)" } ]
  },
  "errors": {},
  "request_id": "9f2a5c8e1b3d7f40"
}
场景 响应
缺少日期/时间 422 INVALID_PARAMS(book_time_empty)
时段不可预约 422 BUSINESS_RULE_VIOLATION(book_time_wrong)
会员被列入黑名单 403 FORBIDDEN(book_blacklisted)

提交预约 POST /api/book/booking

参数 必填 说明
id 是 项目 ID
date 是 预约日期(YYYY-MM-DD)
start_time 是 开始时间
contact_id 否 联系信息 ID
people_count 否 人数,默认 1
remark 否 备注
custom 否 自定义字段(数组,或 JSON 字符串——小程序表单嵌套对象的兼容形态)
{
  "code": "OK",
  "message": "预约成功",
  "data": { "book_sn": "B202601020001" },
  "errors": {},
  "request_id": "9f2a5c8e1b3d7f40"
}
场景 响应
提交失败(时段冲突/库存不足等) 422 BUSINESS_RULE_VIOLATION(具体原因)

会员预约管理

  • 列表 GET /api/user/book:参数 page;返回 book_list(已剔除小程序专用 view_url 字段)与 pager;
  • 详情 GET /api/user/book/{id}:返回 book(含 book_tips 站点提示);不存在或非本人均 403 FORBIDDEN;
  • 取消 POST /api/user/book/cancel:参数 id、reason(可选原因);不可取消(过了可取消时限等)→ 422 BUSINESS_RULE_VIOLATION;成功 message=取消成功。

工作端接口

工作端全部要求员工对 book 的权限(未登录 401 / 非员工 403)。

  • 列表 GET /api/book/work:筛选参数 keyword(关键词)、item_id、status、date_start、date_end、page;返回 book_list、pager、item_list(项目筛选选项)、status_list(状态选项)、user_id;
  • 详情 GET /api/book/work/{id}:不存在 422 INVALID_PARAMS;返回 book(含 book_tips);
  • 确认/拒绝/完成/签到:均为 POST,参数 id(拒绝另支持 reason);状态不符等失败 → 422 BUSINESS_RULE_VIOLATION;成功返回操作成功文案。

注意事项

  • 里链路时序:schedule(选日期)→ time(选时段)→ contact(联系信息页,需登录)→ booking(提交);date 为日期选择的辅助接口;
  • custom 字段同时兼容数组与 JSON 字符串两种形态(小程序 wx.request 表单兼容行为);
  • 会员详情与工作端详情对"不存在"的响应不同(403 vs 422),客户端需注意区分;
  • book_sn 为预约单号,用于后续查询与核销。
添加日期:2026-10-06