# 【小程序·前端待办】小蒙马(GROUP)下单放开「必须有儿童/小童」限制,允许纯成人下单

> **类型**: 前端待办(hl-mini 小程序) - 业务规则放开
> **仓库**: hl-mini(v1 分支,C 端小程序)
> **日期**: 2026-06-01
> **背景**: wx 反馈——小蒙马下单时「只有成人、没有儿童」也应能下单;现状是没有非成人(儿童/小童)就被拦,无法下单。
> **后端**: 已支持纯成人下单,**无需改后端**(依据见下)。

---

## 一、需求

小蒙马(GROUP / 团队产品)下单,**允许只有成人、不带任何儿童/小童/幼童**也能正常下单。当前前端在确认下单时强制「至少 1 名儿童或小童」,需放开。

## 二、前端拦截点(要改的地方)

`packages/product/_shared/components/booking-popup/booking-popup.js` → `onConfirm()` 内:

```js
// 约 758-761 行 —— 这段是唯一的硬拦截,删除即可
if (isGroupProduct && (childCount + youngChildCount) < 1) {
  wx.showToast({ title: '至少需要1名儿童或小童', icon: 'none' });
  return;
}
```

- **改法**:删掉上面这个 `if` 块。保留上方 `adultCount < 1 → '至少需要1名成人'` 的校验(成人仍是必须的)。
- 删除后,小蒙马即可纯成人下单(成人 ≥1、儿童/小童/幼童均可为 0)。

### 可选(体验,非阻塞)
同文件约 274 行,小蒙马儿童 stepper 默认起始值为 1(`isGroupProduct ? 1 : ...`)。这只是默认值,用户本就能手动减到 0(line 279-280 已把 min 设为 0),不影响纯成人下单。是否把默认值也改为 0 由前端按交互习惯决定,**与本次放开无强依赖**。

## 三、后端为什么不用改(依据)

后端全链路已支持纯成人,逐处确认:

| 位置 | 结论 |
|------|------|
| `MpOrderSaveReqVO` / `AdminOrderSaveReqVO`(下单请求) | `adultCount @Min(1)`,childCount/youngChildCount/babyCount **无下限、默认可为 0/null** |
| `GroupTourBatchService.getGroupQuote`(团报价) | 纯成人时 `childTotal/toddlerTotal/infantTotal = 0`,`grandTotal` 正常,不依赖非成人 |
| `GroupOrderStrategy.validate`(下单校验) | 只校验班期状态/报名截止/出发日期/房间库存,**无人群结构校验** |
| `OrderCreateService.calcTotalPeople` | null-safe,纯成人 `totalPeople = 成人数 > 0`,正常扣减库存 |
| `PricingRuleHelper.singleRoomSurcharge` | 单房差只看 `adultCount`(奇数成人),与是否有儿童无关 |

即:前端删掉那段校验后,纯成人下单会被后端正常受理、报价、扣库存。

## 四、验证建议(前端改完自测)

小蒙马产品 → 选报名中班期 → 成人 2、儿童/小童/幼童全 0 → 应能正常进入支付/确认页,不再弹「至少需要1名儿童或小童」。
