@pisell/pisellos 2.2.93 → 2.2.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/modules/Order/index.d.ts +1 -1
  2. package/dist/plugins/app-types/app/app.d.ts +1 -0
  3. package/dist/server/index.d.ts +55 -0
  4. package/dist/server/index.js +826 -207
  5. package/dist/server/modules/index.d.ts +6 -0
  6. package/dist/server/modules/index.js +7 -0
  7. package/dist/server/modules/order/index.d.ts +87 -0
  8. package/dist/server/modules/order/index.js +916 -0
  9. package/dist/server/modules/order/types.d.ts +530 -0
  10. package/dist/server/modules/order/types.js +141 -0
  11. package/dist/server/modules/order/utils/filterBookings.d.ts +6 -0
  12. package/dist/server/modules/order/utils/filterBookings.js +350 -0
  13. package/dist/server/modules/order/utils/filterOrders.d.ts +15 -0
  14. package/dist/server/modules/order/utils/filterOrders.js +226 -0
  15. package/dist/server/modules/resource/index.d.ts +88 -0
  16. package/dist/server/modules/resource/index.js +1202 -0
  17. package/dist/server/modules/resource/types.d.ts +121 -0
  18. package/dist/server/modules/resource/types.js +47 -0
  19. package/dist/solution/BookingByStep/index.d.ts +1 -1
  20. package/dist/solution/BookingTicket/index.d.ts +1 -1
  21. package/dist/solution/Sales/index.d.ts +96 -0
  22. package/dist/solution/Sales/index.js +562 -0
  23. package/dist/solution/Sales/types.d.ts +66 -0
  24. package/dist/solution/Sales/types.js +26 -0
  25. package/dist/solution/index.d.ts +1 -0
  26. package/dist/solution/index.js +2 -1
  27. package/lib/modules/Order/index.d.ts +1 -1
  28. package/lib/plugins/app-types/app/app.d.ts +1 -0
  29. package/lib/server/index.d.ts +55 -0
  30. package/lib/server/index.js +343 -1
  31. package/lib/server/modules/index.d.ts +6 -0
  32. package/lib/server/modules/index.js +16 -2
  33. package/lib/server/modules/order/index.d.ts +87 -0
  34. package/lib/server/modules/order/index.js +543 -0
  35. package/lib/server/modules/order/types.d.ts +530 -0
  36. package/lib/server/modules/order/types.js +34 -0
  37. package/lib/server/modules/order/utils/filterBookings.d.ts +6 -0
  38. package/lib/server/modules/order/utils/filterBookings.js +320 -0
  39. package/lib/server/modules/order/utils/filterOrders.d.ts +15 -0
  40. package/lib/server/modules/order/utils/filterOrders.js +197 -0
  41. package/lib/server/modules/resource/index.d.ts +88 -0
  42. package/lib/server/modules/resource/index.js +571 -0
  43. package/lib/server/modules/resource/types.d.ts +121 -0
  44. package/lib/server/modules/resource/types.js +35 -0
  45. package/lib/solution/BookingByStep/index.d.ts +1 -1
  46. package/lib/solution/BookingTicket/index.d.ts +1 -1
  47. package/lib/solution/Sales/index.d.ts +96 -0
  48. package/lib/solution/Sales/index.js +413 -0
  49. package/lib/solution/Sales/types.d.ts +66 -0
  50. package/lib/solution/Sales/types.js +35 -0
  51. package/lib/solution/index.d.ts +1 -0
  52. package/lib/solution/index.js +3 -1
  53. package/package.json +1 -1
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Resource 模块主键类型
3
+ */
4
+ export type ResourceId = number | string;
5
+ /**
6
+ * Sales / ScheduleEventResource:预约条目内关联资源(仅 ID 与占用,详情由设备端基准数据解析)
7
+ * @see 统一 Sales 数据协议 3.4.1 resources
8
+ */
9
+ export interface ScheduleEventResource {
10
+ /** 表单 ID。来源:ScheduleEventResource.form_id */
11
+ form_id: number;
12
+ /** 关联类型(如 form)。来源:ScheduleEventResource.relation_type */
13
+ relation_type: string;
14
+ /** 关联资源 ID(设备端用此 ID 从本地基准数据取资源详情)。来源:ScheduleEventResource.relation_id */
15
+ relation_id: number;
16
+ /** 占用容量。来源:ScheduleEventResource.capacity */
17
+ capacity: number;
18
+ /** 特殊状态。来源:ScheduleEventResource.like_status */
19
+ like_status?: string;
20
+ /** 资源元数据。来源:ScheduleEventResource.metadata */
21
+ metadata?: Record<string, unknown> | null;
22
+ /** 子资源(组合资源场景),结构同父级 */
23
+ children?: ScheduleEventResource[];
24
+ }
25
+ /**
26
+ * 资源预订数据结构
27
+ */
28
+ export interface ResourceBooking {
29
+ id: ResourceId;
30
+ resource_id?: ResourceId;
31
+ resourceId?: ResourceId;
32
+ user_id?: string | number;
33
+ userId?: string | number;
34
+ start_time?: string | number;
35
+ end_time?: string | number;
36
+ startTime?: string | number;
37
+ endTime?: string | number;
38
+ status?: string;
39
+ notes?: string;
40
+ metadata?: Record<string, any> | null;
41
+ [key: string]: any;
42
+ }
43
+ /**
44
+ * 资源数据结构(兼容历史数据)
45
+ */
46
+ export interface ResourceData {
47
+ id: ResourceId;
48
+ form_record_id?: ResourceId;
49
+ main_field?: string;
50
+ form_id?: number | string;
51
+ capacity?: number;
52
+ like_status?: 'common' | 'like';
53
+ type?: string;
54
+ resourceType?: string;
55
+ resource_form_id?: number | string | '';
56
+ schedule?: any[] | '';
57
+ times?: any;
58
+ metadata?: Record<string, any> | null;
59
+ children?: ResourceData[];
60
+ bookings?: ResourceBooking[];
61
+ [key: string]: any;
62
+ }
63
+ /**
64
+ * 查询选项
65
+ */
66
+ export interface QueryOptions {
67
+ includeBookings?: boolean;
68
+ [key: string]: any;
69
+ }
70
+ /**
71
+ * Resource 模块状态
72
+ */
73
+ export interface ResourceState {
74
+ /** 资源列表 */
75
+ list: ResourceData[];
76
+ /** 资源 Map 缓存(以 id 为 key,加速查询) */
77
+ map: Map<ResourceId, ResourceData>;
78
+ /** 预订列表 */
79
+ bookings: ResourceBooking[];
80
+ }
81
+ /**
82
+ * 与 ResourceDataSource 对齐的分页查询参数
83
+ */
84
+ export interface ResourcePageQuery {
85
+ 'ids[]'?: ResourceId[] | ResourceId;
86
+ ids?: ResourceId[];
87
+ num?: number | string;
88
+ skip?: number | string;
89
+ }
90
+ /**
91
+ * 与 ResourceDataSource 对齐的分页返回结构
92
+ */
93
+ export interface ResourcePageResult {
94
+ list: ResourceData[];
95
+ count: number;
96
+ skip: number;
97
+ size: number;
98
+ }
99
+ /**
100
+ * ResourceSyncMessage - pubsub 同步消息结构
101
+ */
102
+ export interface ResourceSyncMessage {
103
+ module?: string;
104
+ action?: string;
105
+ operation?: string;
106
+ id?: ResourceId;
107
+ ids?: ResourceId[];
108
+ body?: Partial<ResourceData>;
109
+ change_types?: string[];
110
+ relation_resource_ids?: ResourceId[];
111
+ _channelKey?: string;
112
+ }
113
+ /**
114
+ * Resource 模块钩子
115
+ */
116
+ export declare enum ResourceHooks {
117
+ onResourcesLoaded = "resource:onResourcesLoaded",
118
+ onResourcesChanged = "resource:onResourcesChanged",
119
+ onResourcesSyncCompleted = "resource:onResourcesSyncCompleted",
120
+ onBookingsChanged = "resource:onBookingsChanged"
121
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Resource 模块主键类型
3
+ */
4
+
5
+ /**
6
+ * Sales / ScheduleEventResource:预约条目内关联资源(仅 ID 与占用,详情由设备端基准数据解析)
7
+ * @see 统一 Sales 数据协议 3.4.1 resources
8
+ */
9
+
10
+ /**
11
+ * 资源预订数据结构
12
+ */
13
+
14
+ /**
15
+ * 资源数据结构(兼容历史数据)
16
+ */
17
+
18
+ /**
19
+ * 查询选项
20
+ */
21
+
22
+ /**
23
+ * Resource 模块状态
24
+ */
25
+
26
+ /**
27
+ * 与 ResourceDataSource 对齐的分页查询参数
28
+ */
29
+
30
+ /**
31
+ * 与 ResourceDataSource 对齐的分页返回结构
32
+ */
33
+
34
+ /**
35
+ * ResourceSyncMessage - pubsub 同步消息结构
36
+ */
37
+
38
+ /**
39
+ * Resource 模块钩子
40
+ */
41
+ export var ResourceHooks = /*#__PURE__*/function (ResourceHooks) {
42
+ ResourceHooks["onResourcesLoaded"] = "resource:onResourcesLoaded";
43
+ ResourceHooks["onResourcesChanged"] = "resource:onResourcesChanged";
44
+ ResourceHooks["onResourcesSyncCompleted"] = "resource:onResourcesSyncCompleted";
45
+ ResourceHooks["onBookingsChanged"] = "resource:onBookingsChanged";
46
+ return ResourceHooks;
47
+ }({});
@@ -344,7 +344,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
344
344
  };
345
345
  setOtherData(key: string, value: any): void;
346
346
  getOtherData(key: string): any;
347
- getProductTypeById(id: number): Promise<"normal" | "duration" | "session">;
347
+ getProductTypeById(id: number): Promise<"duration" | "session" | "normal">;
348
348
  /**
349
349
  * 提供给 UI 的方法,减轻 UI 层的计算压力,UI 层只需要传递 cartItemId 和 resourceCode 即返回对应的 renderList
350
350
  *
@@ -131,7 +131,7 @@ export declare class BookingTicketImpl extends BaseModule implements Module {
131
131
  * 获取当前的客户搜索条件
132
132
  * @returns 当前搜索条件
133
133
  */
134
- getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "skip" | "num">;
134
+ getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "num" | "skip">;
135
135
  /**
136
136
  * 获取客户列表状态(包含滚动加载相关状态)
137
137
  * @returns 客户状态
@@ -0,0 +1,96 @@
1
+ import dayjs from 'dayjs';
2
+ import { Module, ModuleOptions, PisellCore } from '../../types';
3
+ import { BaseModule } from '../../modules/BaseModule';
4
+ import type { RequestPlugin } from '../../plugins/request';
5
+ import { SalesState, SalesModuleAPI, Reservation, SalesResourceBookingItem, SalesTimelineHighlights } from './types';
6
+ import type { BookingData } from '../../server/modules/order/types';
7
+ export * from './types';
8
+ /**
9
+ * Sales 解决方案基础骨架
10
+ *
11
+ * 当前阶段仅提供:
12
+ * - solution 目录结构
13
+ * - 标准入口导出
14
+ * - 基础生命周期占位
15
+ *
16
+ * 不提前实现 store 编排、初始化流程细节、状态计算逻辑。
17
+ */
18
+ export declare class SalesImpl extends BaseModule implements Module, SalesModuleAPI {
19
+ protected defaultName: string;
20
+ protected defaultVersion: string;
21
+ protected defaultTimelineBucketMinutes: number;
22
+ isSolution: boolean;
23
+ protected store: SalesState;
24
+ protected options: ModuleOptions;
25
+ protected otherParams: Record<string, any>;
26
+ protected request: RequestPlugin;
27
+ constructor(name?: string, version?: string);
28
+ initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
29
+ /** 获取当前 store 快照 */
30
+ getState(): SalesState;
31
+ /** 获取当前选择日期 */
32
+ getCurrentDay(): dayjs.Dayjs;
33
+ /** 设置当前选择日期,会自动归一到当天 00:00:00 */
34
+ setCurrentDay(currentDay: dayjs.ConfigType): dayjs.Dayjs;
35
+ /** 获取当前预约列表 */
36
+ getReservationList(): Reservation[];
37
+ /** 覆盖设置当前预约列表 */
38
+ setReservationList(reservationList: Reservation[]): Reservation[];
39
+ /** 重置预约列表为空 */
40
+ resetReservationList(): Reservation[];
41
+ destroy(): Promise<void>;
42
+ /**
43
+ * 时间轴粒度(分钟)
44
+ * - 默认 15 分钟
45
+ * - 可通过 registerModule 时的 options.otherParams.timelineBucketMinutes 覆盖
46
+ */
47
+ private getTimelineBucketMinutes;
48
+ /**
49
+ * 解析营业日统计窗口:
50
+ * - 当 operating_day_boundary.type === 'start_time'
51
+ * 使用「今天 + boundary.time」到「明天 + boundary.time」
52
+ * - 否则回退自然日(00:00 到次日 00:00)
53
+ */
54
+ private getTimelineRangeByOperatingBoundary;
55
+ /**
56
+ * 统计时间轴每个时间片的预约数量。
57
+ * 算法使用差分数组,复杂度 O(n + s):
58
+ * - n = booking 数量
59
+ * - s = 时间片数量
60
+ */
61
+ getTimelineHighlights(bookingList?: BookingData[], startDateTime?: string, endDateTime?: string): SalesTimelineHighlights;
62
+ /** dayjs 未启用插件时,手动封装 >= 判断 */
63
+ private isSameOrAfter;
64
+ /** dayjs 未启用插件时,手动封装 <= 判断 */
65
+ private isSameOrBefore;
66
+ /**
67
+ * 将 booking 的日期/时间字段统一组装为 dayjs
68
+ * - date + time 都有:按完整时间解析
69
+ * - 只有一个字段:按单字段解析(兼容历史数据)
70
+ * - 都没有:返回 invalid
71
+ */
72
+ private toBookingDateTime;
73
+ /**
74
+ * 预约状态映射(面向 UI 的统一状态)
75
+ * 说明:locked 逻辑后续会补业务规则,这里先保留分支占位。
76
+ */
77
+ private getBookingStatus;
78
+ private getResourceId;
79
+ /**
80
+ * 资源下 bookings 的返回裁剪策略:
81
+ * 1) 优先返回当前时刻正在进行中的预约(允许并发返回多条)
82
+ * 2) 若无 active,返回已超时且仍占用中的预约(允许并发多条)
83
+ * 3) 若仍无,返回最近一组未来预约(同 start_time 的并发预约全部返回)
84
+ * 4) 最后兜底返回一条(避免资源有历史预约时完全无反馈)
85
+ */
86
+ private pickBookingsForCurrentPoint;
87
+ /**
88
+ * 标准化单条 booking:
89
+ * - 过滤终态(rejected/cancelled/completed)
90
+ * - 注入 status / isTimeout / reserved_status
91
+ */
92
+ private normalizeMatchedBooking;
93
+ getResourceBookingList(currentTime: string, bookingList?: BookingData[]): Promise<SalesResourceBookingItem[]>;
94
+ }
95
+ export { SalesImpl as Sales };
96
+ export default SalesImpl;