/** * 平面图绑定桌 RoomCard 数据结构(对齐 demo/card mock,供展示与 getCardType) */ export declare type FloorRoomCardHolder = { name: string; phone?: string; }; /** 联系人三层数据源(holder → contacts_info → customer),解析顺序与短路规则同源,但可同时存在多条供合并展示 */ export declare type FloorRoomCardContactTierSource = 'holder' | 'contacts_info' | 'customer'; export declare type FloorRoomCardContactTier = { source: FloorRoomCardContactTierSource; name: string; phone?: string; }; /** 宿主单条 booking.status,用于多条列表时区分占用/预留肤(与行级聚合 status 解耦) */ export declare type FloorRoomCardHostBookingStatus = 'reserved' | 'occupied' | 'locked' | 'empty'; export declare type FloorRoomCardBooking = { booking_id: string; /** * 宿主 `floorMapSourceBookings` 行 `id`;同一订单多时段时多条可共用 `booking_id`, * 点击命中与 DOM 需用此行级 id 区分。 */ recordId?: string; start_date: string; start_time: string; end_date: string; end_time: string; number: number; holder?: FloorRoomCardHolder; /** * 三层联系人同时存在时全部参与图元展示(用 ` · ` 拼接,单层内不换行);无则回退仅用 {@link holder}。 * `customer_id` 为 0/1 时仅不出现 **customer** 层;holder、contacts_info 不受 id 影响。 */ contactTiers?: FloorRoomCardContactTier[]; amount: string | number; /** 来自宿主 `booking.status`(小写);多条 occupied 时参与 multi_occupied,纯预留多条则排序后主卡+Next */ hostBookingStatus?: FloorRoomCardHostBookingStatus; /** 宿主:迟到时长(分钟);有值才展示「迟到 +Xm」,前端不按开始时间推算 */ lateTime?: number; /** 宿主:超时时长(分钟);有值才展示「+Xm」,前端不按结束时间推算 */ timeoutTime?: number; /** 宿主:进行中进度 0–100(100 为满条),优先于起止时间推算 */ progressPercent?: number; /** * 宿主:距预约开始剩余分钟(`remainingReserveTime`),预留 not_arrived 时用于「还有 n 分钟」展示,优先于本地起止时间推算 */ remainingReserveTime?: number; /** * 宿主订单支付状态(来源:接口 `booking.order.payment_status` 等,映射到模型)。 * - `paid`:已付(绿) * - 其它(含宿主曾返回的 `partially_paid`):按需付款展示(红);映射层应写入 `unpaid` * - 未设:按需付款展示 */ order_payment_status?: string; /** * 订单商品项数:`products` 有效行数优先,否则 `order.summary.product_quantity`;无则 0。 */ product_quantity?: number; /** * 订单商品总件数:仅当 `products[]` 可用时按各行 `product_quantity` 汇总;无则不写入,避免把项数误当总件数。 */ product_total_quantity?: number; /** * 仅详情弹窗使用:把订单总价等额外汇总信息拼到商品汇总行末尾。 */ items_summary_suffix?: string; /** * 仅详情弹窗使用:展示在 RoomCard 正文顶部的订单号,来源于 `order.shop_full_order_number`。 */ order_display_number?: string; /** 接口 `is_next` / `isNext`:为 true 时仅展示在 Next 行,不参与主档/多条约预览主列表 */ isNext?: boolean; }; export declare type FloorRoomCardRoomStatus = 'empty' | 'reserved' | 'occupied' | 'locked'; /** 细分态:与 demo `CARD_CLASS` / `getCardType` 一致 */ export declare type FloorRoomCardSubStatus = 'not_arrived' | 'late' | 'payed' | 'payment_required' | 'timeout' | ''; export declare type FloorRoomCardData = { main_field: string; capacity: number | string; status: FloorRoomCardRoomStatus; sub_status: FloorRoomCardSubStatus; bookings: FloorRoomCardBooking[]; /** * 「当前订单总数」展示位(接口直出 `bookingCount`):>0 时在卡片标题旁以 * `(N/M)` 形态展示分母 M;上层(如平面图)单独透传,**不写入 `main_field`**, * 避免标题被裁剪时把计数一起截没。null / undefined / ≤0 时整体不渲染。 */ bookingCount?: number; /** * 「已完成订单数」展示位(接口 `compeleteBookingCount` → 内部 `completeBookingCount`):`(N/M)` 分子 N。 * 缺失按 0 渲染;仅在 `bookingCount > 0` 时与分母联动展示,避免空态卡出现 `(0/0)`。 */ completeBookingCount?: number; };