Skip to content

BizAppointmentPicker 预约选择 ​

预约选择器:左侧迷你月历 + 右侧当日时段列表。月历支持 min-date / max-date 区间、workday-only(复用 BizWorkdayCalendar 的法定节假日数据口径)与自定义 disabled-date;时段列表展示容量 / 已约 / 剩余,约满与禁用自动置灰,支持单选与多选(可设上限)。适用于医院挂号、门店服务预约、会议室预订、设备 / 场地预约、回访时间选择。

与相关组件的分工

BizScheduleTime 是「按周几的固定营业排班编辑」;BizWorkdayCalendar 是「工作日判定与展示」;本组件是「具体日期 → 当日时段 → 余量」的预约选择——三者可组合:用 ScheduleTime 配置排班规则,经业务侧展开为本组件某日的时段与容量。

基础用法(静态时段) ​

2026 年 10 月
一二三四五六日
未选择日期 · 选择一个时段
请先在左侧选择日期
已选 0 个时段

当前选择:未选择;月历绿点 = 该日有可约时段,15:00-16:00 已约满置灰。

slots 全月一套时段:选日期 → 选时段;月历绿点标记有可约时段的日期,约满时段置灰显示「已约满」。

容量与按日期映射 ​

2026 年 10 月
一二三四五六日
未选择日期 · 选择一个时段
请先在左侧选择日期
已选 0 个时段

key(0) 当天整体约满(月历禁用无绿点);其余日期按 booked 展示「余 N」,某时段约满单独置灰。

slots-by-date 按日期(YYYY-MM-DD)映射不同余量,也支持 YYYY-MM 做全月兜底;某天全部约满时月历直接禁用该日期。

多时段多选(上限) ​

2026 年 10 月
一二三四五六日
未选择日期 · 可选 2 个时段
请先在左侧选择日期
已选 0 个时段

multiple 开启多时段勾选(再次点击取消),max=2 限制上限:已选 2 个后再点提示「最多可选择 2 个时段」;未配 capacity 的时段显示「可预约」。

multiple 开启多时段勾选(再次点击取消),max 限制一次预约的时段数,超出提示并忽略。

仅工作日可约 ​

2026 年 10 月
一二三四五六日
未选择日期 · 选择一个时段
请先在左侧选择日期
已选 0 个时段

切到 2026 年 10 月可见:周末置灰,国庆假期(10/1-10/7)同样禁用,10/10 补班日可选——与 BizWorkdayCalendar 同一套法定数据口径。

workday-only 复用内置法定节假日数据:周末、国庆等假期禁用,调休补班日可选——与考勤 / 请假口径一致。

异步余量加载 ​

2026 年 10 月
一二三四五六日
未选择日期 · 选择一个时段
请先在左侧选择日期
已选 0 个时段

点击日期出现「时段加载中…」,700ms 后渲染当日时段;同一天重复切换走缓存不再请求;奇数种子日 14:00-15:00 演示单时段禁用(不可约)。

slots-request 按日期拉取时段与余量(余量天然在后端):选中日期才请求并缓存,加载中有占位;slots-loaded 事件可做埋点。

表单集成与必选校验 ​

就诊人
就诊时间
2026 年 10 月
一二三四五六日
未选择日期 · 选择一个时段
请先在左侧选择日期
已选 0 个时段
作为表单控件嵌入 el-form:自定义 validator 校验「必须选择日期与时段」,与其他字段一起走统一提交校验。

编辑回显 ​

2026 年 10 月
一二三四五六日
2026-10-27周二 · 选择一个时段
该日期暂无可约时段
已选 1 个时段 10:00-11:00

打开即回显:月份定位到 2026-10、日期高亮、10:00-11:00 带选中角标(异步加载完成后呈现);换选其他时段即时更新。

传入 v-model 初始值即回显:月份自动定位、日期高亮、已选时段带角标(异步模式下先加载该日时段再呈现选中态)。

会议室预订(多资源切换) ​

2026 年 10 月
一二三四五六日
未选择日期 · 可选 2 个时段
请先在左侧选择日期
已选 0 个时段

当前资源:A101;切换会议室后已选清空、时段重新加载;仅工作日可订、每时段容量 1(约满即占)。

资源(会议室)切换场景::key 强制重建 + 各资源独立 slots-request;配合 workday-only、每时段容量 1(约满即占)、max 限制连订时长。

占用时段(booked-slots) ​

2026 年 10 月
一二三四五六日
未选择日期 · 选择一个时段
请先在左侧选择日期
已选 0 个时段
booked-slots 命中的时段红字标注「已约 · 原因(占用人)」并禁点;与 disabled / capacity 各自独立叠加。

撞占拦截提示 ​

2026 年 10 月
一二三四五六日
未选择日期 · 选择一个时段
请先在左侧选择日期
已选 0 个时段
点选已占时段弹出 booked-tip 提示(附占用原因),可按业务自定义文案。

按日切换占用 ​

2026 年 10 月
一二三四五六日
未选择日期 · 选择一个时段
请先在左侧选择日期
已选 0 个时段
date-change 时业务拉取当日占用并替换 booked-slots(顾问日程 / 场地档期场景)。

多选与容量叠加 ​

2026 年 10 月
一二三四五六日
未选择日期 · 可选 2 个时段
请先在左侧选择日期
已选 0 个时段
multiple 多选 + capacity 余量与 booked 占用并存:约满、占用、可约三态同屏。

占用动态释放 ​

2026 年 10 月
一二三四五六日
未选择日期 · 选择一个时段
请先在左侧选择日期
已选 0 个时段

4 秒后 09:00-10:00 档释放,占角标消失恢复可选。

booked-slots 缩减后已占时段恢复可选、月历圆点联动(余量刷新场景)。

回显撞占兜底 ​

2026 年 10 月
一二三四五六日
2026-10-26周一 · 选择一个时段
已选 2 个时段 g1、g2
modelValue 回显撞占的时段自动剔除并提示;getSelection 只返回有效时段。

Props ​

属性名类型默认值说明
model-value / v-modelBizAppointmentSelection | nullnull选中结果 { date, slotIds }
slotsBizAppointmentSlot[][]静态时段:全部日期共用一套
slots-by-dateRecord<string, BizAppointmentSlot[]>—静态时段:按日期映射(YYYY-MM-DD 精确 > YYYY-MM 全月兜底 > slots)
slots-request(date) => Promise<BizAppointmentSlot[]>—异步时段数据源(优先级最高,按日拉取余量并缓存)
multiplebooleanfalse多时段选择
maxnumber—multiple 时最多可选时段数
monthstring当月初始月份(YYYY-MM)
workday-onlybooleanfalse仅工作日可约(复用 BizWorkdayCalendar 法定节假日口径)
disabled-date(date) => boolean—额外日期禁用判定(与区间 / workday-only 叠加)
min-date / max-datestring—可约起止日期(YYYY-MM-DD,含端点)
show-remainingbooleantrue是否展示时段剩余名额
booked-slotsBizBookedSlot[][]已占时段:命中 slotId 禁用并标注「已约 · 原因(占用人)」,与 disabled / capacity 叠加
booked-textstring'已约'占用时段展示文案
booked-tipstring'该时段已被预约,请选择其他时段'撞占提示文案(点选 / 回显 / 余量刷新触发)
loading-textstring'时段加载中…'异步加载占位文案
empty-textstring'该日期暂无可约时段'无时段占位文案

BizAppointmentSlot ​

字段类型说明
idstring时段标识(当日内唯一,如 '09:00-10:00')
labelstring展示名(缺省取 id)
start / endstring开始 / 结束时间(HH:mm,展示用)
capacitynumber容量(缺省视为不限)
bookednumber已约数(与 capacity 计算剩余,booked ≥ capacity 置灰)
disabledboolean单时段禁用(维护 / 闭诊)

Events ​

事件名参数说明
update:model-value / changeBizAppointmentChangePayload | null选中变化:{ date, slotIds, slots };清空选择时为 null
date-change(date)选中日期变化(切换日期会先清空时段选择)
slots-loaded(date, slots)异步时段加载完成

Expose ​

名称类型说明
goToday() => void回到今天(今天可约则同时选中)
switchMonth(ym) => void切换月份(YYYY-MM)
getSelection() => payload | null当前完整选中(含时段对象,可直接提交)

行为要点 ​

  • 切换日期清空时段:预约语义下跨日保留时段易误提交,切日即清空(外部经 v-model 重新赋值可恢复);
  • 静态模式日期预判:slots / slots-by-date 模式月历可预判「全满日禁用 + 绿点标记」,异步模式日期状态未知不标记;
  • 数据源切换自动重置:slots / slotsByDate / slotsRequest 引用变化时清空已选与缓存(多资源切换配合 :key 双保险);
  • 约满与禁用不可点:按钮置灰且点击无效,非弹错式打断。