import type { PisellReservationTableRow } from '../types'; import type { FloorRoomCardBooking, FloorRoomCardData } from './floorRoomCardModel'; /** * 图元多段联系人之间的间隔(中点两侧为 nbsp)。 * 普通空格在部分 inline-flex / flex 排版下会与相邻文本折叠,看起来像「了点没空格」。 */ export declare const FLOOR_ROOM_CARD_GUEST_SEGMENT_SEP = "\u00A0\u00B7\u00A0"; /** 统一的起止毫秒(供资源墙/卡片兼容层复用,避免重复推断) */ export declare function floorRoomCardBookingStartEndMs(booking: Pick): { start: number; end: number; }; /** 日程时刻按展示「整分」对齐(该分钟 00.000) */ export declare function reservationScheduleMinuteFloorMs(ms: number): number; /** * 大屏等资源墙:写在日程上的「结束」表示该分钟整段结束前不算 overtime; * expired 从「结束时刻所在分钟的下一分钟」整点开始。 * 例:结束 9:00 → 9:00:00~9:00:59 仍 non-expired,9:01:00 起 expired。 */ export declare function reservationScheduleOccupiedOvertimeThresholdMs(endMs: number): number; /** * 大屏等资源墙:未到「开始分钟」的下一分钟整点不算迟到(与结束侧对称)。 * 例:开始 8:00 → 8:00:00~8:00:59 仍 boardingSoon,8:01:00 起 late。 */ export declare function reservationScheduleReservedLateThresholdMs(startMs: number): number; /** * 预留态时间行:图元内仅展示时刻 + 文案后缀,不展示开始日期。 */ export declare function formatFloorRoomCardBookingStartLine(booking: Pick, endSuffix: string): string; /** * 占用态时间行:图元内仅展示结束时刻 + 后缀,不展示结束日期。 */ export declare function formatFloorRoomCardBookingEndLine(booking: Pick, endSuffix: string): string; /** * 「下一条」等时段:图元内只写起止时刻,不写日期。 */ export declare function formatFloorRoomCardBookingTimeRange(booking: Pick): string; /** 预约时段内进度 0–100(与 demo getProgressPercent 一致,使用真实时间) */ export declare function getFloorRoomCardProgressPercent(startDate: string, startTime: string, endDate: string, endTime: string, nowMs?: number): number; /** * 进度条百分比:优先宿主 `progressPercent`(0–100),否则按起止时间与当前时刻推算。 */ export declare function resolveFloorRoomCardProgressPercent(booking: Pick, nowMs?: number): number; /** 将分钟数格式化为「10m」「1h 5m」等(图元迟到/超时展示) */ export declare function formatFloorRoomCardDurationMinutes(totalMin: number): string; /** 已超过结束时刻的加时时长文案 */ export declare function getFloorRoomCardOvertime(endDate: string, endTime: string, nowMs?: number): string | null; /** 已逾开始时刻的「迟到」时长 */ export declare function getFloorRoomCardLateTime(startDate: string, startTime: string, nowMs?: number): string | null; /** 距开始时刻的倒计时分钟(不含文案前缀);仅本地起止时间推算 */ export declare function getFloorRoomCardArrivalMinutes(room: FloorRoomCardData, nowMs?: number): number | null; /** * 预留态「还有 n 分钟」:优先宿主 `remainingReserveTime`(分钟,>0),否则 {@link getFloorRoomCardArrivalMinutes} */ export declare function resolveFloorRoomCardReservedCountdownMinutes(room: FloorRoomCardData, nowMs?: number): number | null; /** * 多预约列表中单条:与 {@link resolveFloorRoomCardReservedCountdownMinutes} 一致,但针对当前行 booking。 */ export declare function resolveFloorRoomCardReservedCountdownMinutesForBooking(booking: FloorRoomCardBooking, nowMs?: number): number | null; /** * 紧凑多预约行:仅当该条 booking 有宿主 `lateTime`(分钟)时为 late,否则 not_arrived(不按本地时刻推算迟到)。 */ export declare function getFloorRoomCardReservedRowBodyType(booking: FloorRoomCardBooking, _nowMs?: number): 'not_arrived' | 'late'; declare type BookingTimeFields = Pick; /** 当前时刻是否落在预约时段内 [start, end)(进行中) */ export declare function isFloorRoomCardBookingInProgress(booking: BookingTimeFields, nowMs?: number): boolean; /** 当前时刻是否在预约开始之前(未开始) */ export declare function isFloorRoomCardBookingNotStarted(booking: BookingTimeFields, nowMs?: number): boolean; /** * 第一条预约进行中且其后仍有未开始的时段:返回第一条「未开始」预约,用于 Next 行。 * 不依赖 cardType(不必 late/timeout)。 */ export declare function getFloorRoomCardNextNotStartedBooking(data: FloorRoomCardData, nowMs?: number): FloorRoomCardBooking | null; /** * 多条预约里恰好一条 `hostBookingStatus === 'occupied'` 时:把该条排到首位,便于标准占用卡用 bookings[0] 展示。 * 多条同时为 occupied 或未标记 host 时不改顺序。 */ export declare function reorderBookingsForSingleOccupiedPrimary(list: FloorRoomCardBooking[]): FloorRoomCardBooking[]; /** * 多条预约且仅一条为 occupied:按开始时间排序后,取占用段之后的下一条(用于 Next 行)。 */ export declare function getFloorRoomCardNextAfterSingleOccupiedBooking(data: FloorRoomCardData): FloorRoomCardBooking | null; /** * 多条均为预留(无 occupied):`bookings` 已按开始时间排好,主卡为 [0],Next 为紧邻的下一条。 */ export declare function getFloorRoomCardNextAfterPrimaryReserved(data: FloorRoomCardData): FloorRoomCardBooking | null; /** * 接口标记 `isNext` 的预约:按开始时间取第一条,供 Next 行展示。 */ export declare function getFloorRoomCardExplicitNextBooking(data: FloorRoomCardData): FloorRoomCardBooking | null; /** * 与 {@link buildCardBodyViewModel} Next 行同一套优先级:接口 `is_next`/`isNext` → * 单 occupied 后一条 → 多条 reserved 第二条 →「进行中」后首条未开始。 */ export declare function resolveFloorRoomCardNextBookingLikeBodyModel(data: FloorRoomCardData, nowMs?: number): FloorRoomCardBooking | null; /** Next 条客人一行:与图元同源,多层联系人用 ` · ` 拼接 */ export declare function formatFloorRoomCardNextGuestStripLine(b: FloorRoomCardBooking): string; /** 单层 holder:姓名优先;预留态可手机号尾号脱敏 */ export declare function formatFloorRoomCardGuestDisplayLineFromHolder(holder: FloorRoomCardBooking['holder'], showPhone: boolean): string; /** * 图元联系人:按 holder → contacts_info → customer 各层格式化后合并; * 无 {@link FloorRoomCardBooking.contactTiers} 时退化为单层 {@link FloorRoomCardBooking.holder}。 */ export declare function floorRoomCardGuestSegments(booking: FloorRoomCardBooking, showPhone: boolean): string[]; /** * 联系人展示字符串(单层或多层 ` · `);与平面图 / 资源墙单行摘要一致。 */ export declare function formatFloorRoomCardGuestDisplayLine(booking: FloorRoomCardBooking, showPhone: boolean): string; /** * 主区域展示用:第一条非 `isNext`;若全部为 next 则回退首条。 */ export declare function getFloorRoomCardPrimaryBooking(data: FloorRoomCardData): FloorRoomCardBooking | undefined; /** * 多条预约且均为预留态(host 为 reserved 或未标):按开始时间排序,主卡只展示最近一档,其余走 Next。 */ export declare function reorderBookingsAllReservedChronological(list: FloorRoomCardBooking[]): FloorRoomCardBooking[]; /** 与 demo getCardType 一致 */ export declare function getFloorRoomCardType(room: FloorRoomCardData): 'empty' | 'locked' | 'multi_occupied' | 'multi_reserved' | 'not_arrived' | 'late' | 'payed' | 'payment_required' | 'timeout'; /** * 平面图 RoomCard 联系人手机号展示:与 {@link ReservationFloorRoomCard} ContactInfo 一致。 */ export declare function maskPisellReservationPhoneTail(phone: string): string | null; /** * 房间标题:优先数据行 `main_field` 展示名(` ## ` 前为主名称),其次 `code`,最后图元编辑名。 * 与平面图 `reservationCards` 绑定桌位卡一致。 */ export declare function displayRoomTitleFromRow(row: PisellReservationTableRow, sceneElementName: string | undefined): string; /** * 展示用名称:`main_field` 按 ` ## ` 分段且有两段及以上时取**第二段**(常见「内部码 ## 展示名」), * 否则取第一段;再无则回退 {@link displayRoomTitleFromRow}。 */ export declare function displayRoomShowNameFromRow(row: PisellReservationTableRow, sceneElementName: string | undefined): string; export {};