@pisell/pisellos 3.0.4 → 3.0.6

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 (189) hide show
  1. package/dist/modules/Account/index.d.ts +2 -6
  2. package/dist/modules/Account/index.js +21 -103
  3. package/dist/modules/Account/types.d.ts +12 -1
  4. package/dist/modules/AccountList/index.d.ts +20 -1
  5. package/dist/modules/AccountList/index.js +243 -75
  6. package/dist/modules/AccountList/types.d.ts +33 -1
  7. package/dist/modules/AccountList/types.js +8 -0
  8. package/dist/modules/AccountList/utils.d.ts +9 -0
  9. package/dist/modules/AccountList/utils.js +25 -0
  10. package/dist/modules/BaseModule.d.ts +2 -2
  11. package/dist/modules/BaseModule.js +1 -1
  12. package/dist/modules/Cart/index.d.ts +8 -5
  13. package/dist/modules/Cart/index.js +101 -25
  14. package/dist/modules/Cart/types.d.ts +82 -5
  15. package/dist/modules/Cart/types.js +22 -0
  16. package/dist/modules/Cart/utils.d.ts +106 -13
  17. package/dist/modules/Cart/utils.js +289 -76
  18. package/dist/modules/Date/index.d.ts +6 -6
  19. package/dist/modules/Date/index.js +41 -58
  20. package/dist/modules/Date/types.d.ts +22 -6
  21. package/dist/modules/Date/utils.d.ts +4 -3
  22. package/dist/modules/Date/utils.js +81 -30
  23. package/dist/modules/Discount/index.d.ts +4 -4
  24. package/dist/modules/Discount/index.js +11 -11
  25. package/dist/modules/Order/index.d.ts +11 -5
  26. package/dist/modules/Order/index.js +47 -18
  27. package/dist/modules/Order/types.d.ts +10 -3
  28. package/dist/modules/Order/utils.d.ts +10 -0
  29. package/dist/modules/Order/utils.js +15 -0
  30. package/dist/modules/Product/index.d.ts +14 -1
  31. package/dist/modules/Product/index.js +35 -0
  32. package/dist/modules/Product/types.d.ts +27 -3
  33. package/dist/modules/ProductList/index.js +11 -5
  34. package/dist/modules/Resource/types.d.ts +1 -0
  35. package/dist/modules/Resource/utils.js +1 -1
  36. package/dist/modules/Rules/index.d.ts +3 -3
  37. package/dist/modules/Rules/index.js +121 -53
  38. package/dist/modules/Rules/types.d.ts +5 -1
  39. package/dist/modules/Schedule/index.d.ts +18 -0
  40. package/dist/modules/Schedule/index.js +111 -0
  41. package/dist/modules/Schedule/type.d.ts +157 -0
  42. package/dist/modules/Schedule/type.js +1 -0
  43. package/dist/modules/Schedule/types.d.ts +182 -0
  44. package/dist/modules/Schedule/types.js +1 -0
  45. package/dist/modules/Schedule/utils.d.ts +67 -0
  46. package/dist/modules/Schedule/utils.js +729 -0
  47. package/dist/modules/Step/index.d.ts +14 -3
  48. package/dist/modules/Step/index.js +54 -2
  49. package/dist/modules/Summary/index.d.ts +12 -5
  50. package/dist/modules/Summary/index.js +33 -7
  51. package/dist/modules/Summary/types.d.ts +23 -2
  52. package/dist/modules/Summary/utils.d.ts +14 -4
  53. package/dist/modules/Summary/utils.js +46 -4
  54. package/dist/modules/index.d.ts +10 -0
  55. package/dist/modules/index.js +11 -1
  56. package/dist/plugins/index.d.ts +3 -3
  57. package/dist/plugins/request.d.ts +3 -3
  58. package/dist/plugins/request.js +30 -30
  59. package/dist/plugins/shopStore.d.ts +1 -1
  60. package/dist/solution/BookingByStep/index.d.ts +97 -24
  61. package/dist/solution/BookingByStep/index.js +1024 -322
  62. package/dist/solution/BookingByStep/types.d.ts +3 -10
  63. package/dist/solution/BookingByStep/types.js +11 -15
  64. package/dist/solution/BookingByStep/utils/products.d.ts +1 -1
  65. package/dist/solution/BookingByStep/utils/products.js +3 -0
  66. package/dist/solution/BookingByStep/utils/resources.d.ts +60 -6
  67. package/dist/solution/BookingByStep/utils/resources.js +293 -52
  68. package/dist/solution/ShopDiscount/index.d.ts +4 -4
  69. package/dist/solution/ShopDiscount/index.js +16 -16
  70. package/dist/solution/ShopDiscount/types.d.ts +2 -2
  71. package/dist/solution/ShopDiscount/utils.js +1 -1
  72. package/lib/core/index.js +7 -2
  73. package/lib/modules/Account/index.d.ts +2 -6
  74. package/lib/modules/Account/index.js +15 -30
  75. package/lib/modules/Account/types.d.ts +12 -1
  76. package/lib/modules/AccountList/index.d.ts +20 -1
  77. package/lib/modules/AccountList/index.js +122 -13
  78. package/lib/modules/AccountList/types.d.ts +33 -1
  79. package/lib/modules/AccountList/utils.d.ts +9 -0
  80. package/lib/modules/AccountList/utils.js +39 -0
  81. package/lib/modules/BaseModule.d.ts +2 -2
  82. package/lib/modules/BaseModule.js +14 -3
  83. package/lib/modules/Cart/index.d.ts +8 -5
  84. package/lib/modules/Cart/index.js +81 -8
  85. package/lib/modules/Cart/types.d.ts +82 -5
  86. package/lib/modules/Cart/types.js +20 -2
  87. package/lib/modules/Cart/utils.d.ts +106 -13
  88. package/lib/modules/Cart/utils.js +188 -45
  89. package/lib/modules/Date/index.d.ts +6 -6
  90. package/lib/modules/Date/index.js +13 -28
  91. package/lib/modules/Date/types.d.ts +22 -6
  92. package/lib/modules/Date/utils.d.ts +4 -3
  93. package/lib/modules/Date/utils.js +47 -13
  94. package/lib/modules/Discount/index.d.ts +4 -4
  95. package/lib/modules/Discount/index.js +9 -2
  96. package/lib/modules/Guests/index.js +4 -1
  97. package/lib/modules/Order/index.d.ts +11 -5
  98. package/lib/modules/Order/index.js +24 -3
  99. package/lib/modules/Order/types.d.ts +10 -3
  100. package/lib/modules/Order/utils.d.ts +10 -0
  101. package/lib/modules/Order/utils.js +45 -0
  102. package/lib/modules/Payment/index.js +1 -6
  103. package/lib/modules/Product/index.d.ts +14 -1
  104. package/lib/modules/Product/index.js +19 -0
  105. package/lib/modules/Product/types.d.ts +27 -3
  106. package/lib/modules/ProductList/index.js +21 -7
  107. package/lib/modules/Resource/index.js +4 -1
  108. package/lib/modules/Resource/types.d.ts +1 -0
  109. package/lib/modules/Resource/utils.js +7 -4
  110. package/lib/modules/Rules/index.d.ts +3 -3
  111. package/lib/modules/Rules/index.js +118 -43
  112. package/lib/modules/Rules/types.d.ts +5 -1
  113. package/lib/modules/Schedule/index.d.ts +18 -0
  114. package/lib/modules/Schedule/index.js +81 -0
  115. package/lib/modules/Schedule/type.d.ts +157 -0
  116. package/lib/modules/Schedule/type.js +17 -0
  117. package/lib/modules/Schedule/types.d.ts +182 -0
  118. package/lib/modules/Schedule/types.js +17 -0
  119. package/lib/modules/Schedule/utils.d.ts +67 -0
  120. package/lib/modules/Schedule/utils.js +600 -0
  121. package/lib/modules/Step/index.d.ts +14 -3
  122. package/lib/modules/Step/index.js +38 -1
  123. package/lib/modules/Summary/index.d.ts +12 -5
  124. package/lib/modules/Summary/index.js +15 -1
  125. package/lib/modules/Summary/types.d.ts +23 -2
  126. package/lib/modules/Summary/utils.d.ts +14 -4
  127. package/lib/modules/Summary/utils.js +30 -1
  128. package/lib/modules/index.d.ts +10 -0
  129. package/lib/modules/index.js +21 -1
  130. package/lib/plugins/index.d.ts +3 -3
  131. package/lib/plugins/request.d.ts +3 -3
  132. package/lib/plugins/request.js +48 -11
  133. package/lib/plugins/shopStore.d.ts +1 -1
  134. package/lib/solution/BookingByStep/index.d.ts +97 -24
  135. package/lib/solution/BookingByStep/index.js +693 -145
  136. package/lib/solution/BookingByStep/types.d.ts +3 -10
  137. package/lib/solution/BookingByStep/types.js +37 -14
  138. package/lib/solution/BookingByStep/utils/products.d.ts +1 -1
  139. package/lib/solution/BookingByStep/utils/products.js +3 -0
  140. package/lib/solution/BookingByStep/utils/resources.d.ts +60 -6
  141. package/lib/solution/BookingByStep/utils/resources.js +286 -54
  142. package/lib/solution/BuyTickets/index.js +34 -20
  143. package/lib/solution/ShopDiscount/index.d.ts +4 -4
  144. package/lib/solution/ShopDiscount/index.js +10 -2
  145. package/lib/solution/ShopDiscount/types.d.ts +2 -2
  146. package/package.json +4 -2
  147. package/dist/core/index.d.ts.map +0 -1
  148. package/dist/effects/index.d.ts.map +0 -1
  149. package/dist/index.d.ts.map +0 -1
  150. package/dist/modules/Account/index.d.ts.map +0 -1
  151. package/dist/modules/Account/types.d.ts.map +0 -1
  152. package/dist/modules/AccountList/types.d.ts.map +0 -1
  153. package/dist/modules/Cart/index.d.ts.map +0 -1
  154. package/dist/modules/Cart/types.d.ts.map +0 -1
  155. package/dist/modules/Date/types.d.ts.map +0 -1
  156. package/dist/modules/Date/utils.d.ts.map +0 -1
  157. package/dist/modules/Guests/index.d.ts.map +0 -1
  158. package/dist/modules/Guests/types.d.ts.map +0 -1
  159. package/dist/modules/Order/index.d.ts.map +0 -1
  160. package/dist/modules/Order/types.d.ts.map +0 -1
  161. package/dist/modules/Payment/index.d.ts.map +0 -1
  162. package/dist/modules/Payment/types.d.ts.map +0 -1
  163. package/dist/modules/Product/index.d.ts.map +0 -1
  164. package/dist/modules/Product/types.d.ts.map +0 -1
  165. package/dist/modules/ProductList/types.d.ts.map +0 -1
  166. package/dist/modules/Resource/index.d.ts.map +0 -1
  167. package/dist/modules/Resource/types.d.ts.map +0 -1
  168. package/dist/modules/Resource/utils.d.ts.map +0 -1
  169. package/dist/modules/Rules/types.d.ts.map +0 -1
  170. package/dist/modules/Step/index.d.ts.map +0 -1
  171. package/dist/modules/Step/tyeps.d.ts.map +0 -1
  172. package/dist/modules/Summary/index.d.ts.map +0 -1
  173. package/dist/modules/Summary/types.d.ts.map +0 -1
  174. package/dist/modules/Summary/utils.d.ts.map +0 -1
  175. package/dist/modules/index.d.ts.map +0 -1
  176. package/dist/plugins/index.d.ts.map +0 -1
  177. package/dist/plugins/request.d.ts.map +0 -1
  178. package/dist/plugins/shopStore.d.ts.map +0 -1
  179. package/dist/plugins/window.d.ts.map +0 -1
  180. package/dist/solution/BookingByStep/types.d.ts.map +0 -1
  181. package/dist/solution/BookingByStep/utils/products.d.ts.map +0 -1
  182. package/dist/solution/BuyTickets/index.d.ts.map +0 -1
  183. package/dist/solution/BuyTickets/types.d.ts.map +0 -1
  184. package/dist/solution/PlaceOrder/index.d.ts.map +0 -1
  185. package/dist/solution/ShopDiscount/types.d.ts.map +0 -1
  186. package/dist/solution/ShopDiscount/utils.d.ts.map +0 -1
  187. package/dist/solution/index.d.ts.map +0 -1
  188. package/dist/store/createStore.d.ts.map +0 -1
  189. package/dist/types/index.d.ts.map +0 -1
@@ -1,13 +1,4 @@
1
- import { ProductList, CartModule } from "../../modules";
2
- import { AccountModule } from "../../modules/Account";
3
- import { AccountListModule } from "../../modules/AccountList";
4
- import { DateModule } from "../../modules/Date";
5
- import { GuestListModule } from "../../modules/Guests";
6
- import { OrderModule } from "../../modules/Order";
7
- import { PaymentModule } from "../../modules/Payment";
8
- import { ResourceListModule } from "../../modules/Resource";
9
- import { StepModule } from "../../modules/Step";
10
- import { SummaryModule } from "../../modules/Summary";
1
+ import { ProductList, CartModule, Product, AccountModule, AccountListModule, DateModule, GuestListModule, OrderModule, PaymentModule, ResourceListModule, StepModule, SummaryModule, ScheduleModule } from '../../modules';
11
2
  export interface BookingByStepState {
12
3
  cart: CartModule;
13
4
  summary: SummaryModule;
@@ -20,6 +11,8 @@ export interface BookingByStepState {
20
11
  accountList: AccountListModule;
21
12
  order: OrderModule;
22
13
  payment: PaymentModule;
14
+ currentProduct?: Product;
15
+ schedule: ScheduleModule;
23
16
  }
24
17
  export declare function createModule<T extends keyof BookingByStepState>(moduleName: T, solutionName: string, name?: string, version?: string): BookingByStepState[T];
25
18
  export declare enum BookingByStepHooks {
@@ -24,30 +24,53 @@ __export(types_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(types_exports);
26
26
  var import_modules = require("../../modules");
27
- var import_AccountList = require("../../modules/AccountList");
28
- var import_Date = require("../../modules/Date");
29
- var import_Order = require("../../modules/Order");
30
- var import_Payment = require("../../modules/Payment");
31
- var import_Step = require("../../modules/Step");
32
- var import_Summary = require("../../modules/Summary");
33
27
  function createModule(moduleName, solutionName, name, version) {
34
28
  switch (moduleName) {
35
29
  case "cart":
36
- return new import_modules.CartModule(`${solutionName}_${name || moduleName}`, version);
30
+ return new import_modules.CartModule(
31
+ `${solutionName}_${name || moduleName}`,
32
+ version
33
+ );
37
34
  case "summary":
38
- return new import_Summary.SummaryModule(`${solutionName}_${name || moduleName}`, version);
35
+ return new import_modules.SummaryModule(
36
+ `${solutionName}_${name || moduleName}`,
37
+ version
38
+ );
39
39
  case "step":
40
- return new import_Step.StepModule(`${solutionName}_${name || moduleName}`, version);
40
+ return new import_modules.StepModule(
41
+ `${solutionName}_${name || moduleName}`,
42
+ version
43
+ );
41
44
  case "products":
42
- return new import_modules.ProductList(`${solutionName}_${name || moduleName}`, version);
45
+ return new import_modules.ProductList(
46
+ `${solutionName}_${name || moduleName}`,
47
+ version
48
+ );
43
49
  case "date":
44
- return new import_Date.DateModule(`${solutionName}_${name || moduleName}`, version);
50
+ return new import_modules.DateModule(
51
+ `${solutionName}_${name || moduleName}`,
52
+ version
53
+ );
45
54
  case "accountList":
46
- return new import_AccountList.AccountListModule(`${solutionName}_${name || moduleName}`, version);
55
+ return new import_modules.AccountListModule(
56
+ `${solutionName}_${name || moduleName}`,
57
+ version
58
+ );
47
59
  case "order":
48
- return new import_Order.OrderModule(`${solutionName}_${name || moduleName}`, version);
60
+ return new import_modules.OrderModule(
61
+ `${solutionName}_${name || moduleName}`,
62
+ version
63
+ );
49
64
  case "payment":
50
- return new import_Payment.PaymentModule(`${solutionName}_${name || moduleName}`, version);
65
+ return new import_modules.PaymentModule(
66
+ `${solutionName}_${name || moduleName}`,
67
+ version
68
+ );
69
+ case "schedule":
70
+ return new import_modules.ScheduleModule(
71
+ `${solutionName}_${name || moduleName}`,
72
+ version
73
+ );
51
74
  default:
52
75
  throw new Error(`Unknown module type: ${moduleName}`);
53
76
  }
@@ -1,4 +1,4 @@
1
- import { ProductData, ProductResourceItem } from "../../../modules";
1
+ import { ProductData, ProductResourceItem } from '../../../modules';
2
2
  /**
3
3
  * 获取商品的可用资源
4
4
  * @param product 商品数据
@@ -50,6 +50,9 @@ var getAvailableProductResources = (products) => {
50
50
  if (tempResourceIds) {
51
51
  rule.resourceFormIds = [...new Set(tempResourceIds)];
52
52
  }
53
+ if (product == null ? void 0 : product._schedule) {
54
+ rule.schedule = product == null ? void 0 : product._schedule;
55
+ }
53
56
  rules.push(rule);
54
57
  });
55
58
  return { resourceIds: [...new Set(resourceIds)], rules, resourcesMap };
@@ -27,15 +27,17 @@ interface BookingItem {
27
27
  * @return {*}
28
28
  * @Author: zhiwei.Wang
29
29
  */
30
- export declare const getIsUsableByTimeItem: ({ timeSlice, time, resource, currentCount }: {
30
+ export declare const getIsUsableByTimeItem: ({ timeSlice, time, resource, currentCount, resourcesUseableMap, }: {
31
31
  timeSlice: TimeSliceItem;
32
32
  time: any;
33
33
  resource: ResourceItem;
34
34
  currentCount: number;
35
+ resourcesUseableMap: Record<string, boolean>;
35
36
  }) => {
36
37
  afterToDay: boolean;
37
38
  capacity: boolean;
38
39
  usable: boolean;
40
+ remainingCapacity: number;
39
41
  };
40
42
  /**
41
43
  * @title: 获取商品下绑定的资源列表
@@ -45,8 +47,7 @@ export declare const getIsUsableByTimeItem: ({ timeSlice, time, resource, curren
45
47
  * @return {*}
46
48
  * @Author: zhiwei.Wang
47
49
  */
48
- export declare const getResourcesByProduct: (resourcesMap: Record<string, ResourceItem>, cartItem: CartItem, cartList: CartItem[]) => ResourceItem[];
49
- export declare const getSumCapacity: () => number;
50
+ export declare const getResourcesByProduct: (resourcesMap: Record<string, ResourceItem>, resources: ResourceItem[], selectedResources: number[], capacity?: number) => ResourceItem[];
50
51
  /**
51
52
  * @title: 获取资源列表
52
53
  * @description:
@@ -54,7 +55,7 @@ export declare const getSumCapacity: () => number;
54
55
  * @Author: zhiwei.Wang
55
56
  * @Date: 2024-01-09 13:38
56
57
  */
57
- export declare const formatResources: ({ booking, resources }: {
58
+ export declare const formatResources: ({ booking, resources, }: {
58
59
  booking: BookingItem;
59
60
  resources: ResourceItem[];
60
61
  }) => {
@@ -67,11 +68,13 @@ export declare const formatResources: ({ booking, resources }: {
67
68
  * @return {*}
68
69
  * @Author: zhiwei.Wang
69
70
  */
70
- export declare const getTimeSlicesByResource: ({ resource, duration, split, currentDate }: {
71
+ export declare const getTimeSlicesByResource: ({ resource, duration, split, currentDate, capacity, resourcesUseableMap, }: {
71
72
  resource: ResourceItem;
72
73
  duration: number;
73
74
  split: number;
74
75
  currentDate: DateType | string;
76
+ capacity?: number | undefined;
77
+ resourcesUseableMap?: Record<string, boolean> | undefined;
75
78
  }) => TimeSliceItem[];
76
79
  /**
77
80
  * @title: 获取时间切片列表的交集
@@ -100,11 +103,62 @@ export declare const getResourcesByIds: (resourcesMap: Record<string, ResourceIt
100
103
  * @return {*}
101
104
  * @Author: zhiwei.Wang
102
105
  */
103
- export declare const getTimeSlicesByResources: ({ resourceIds, resourcesMap, duration, currentDate, split }: {
106
+ export declare const getTimeSlicesByResources: ({ resourceIds, resourcesMap, duration, currentDate, split, capacity, resourcesUseableMap, }: {
104
107
  resourceIds: number[];
105
108
  resourcesMap: any;
106
109
  duration: number;
107
110
  currentDate: DateType | string;
108
111
  split: number;
112
+ capacity?: number | undefined;
113
+ resourcesUseableMap: Record<string, boolean>;
109
114
  }) => any[];
115
+ /**
116
+ * @title: 获取其他人的已选资源
117
+ * @description:
118
+ * @param {CartItem[]} cartItems
119
+ * @param {number | string} accountId
120
+ * @return {*}
121
+ * @Author: jinglin.tan
122
+ */
123
+ export declare const getOthersSelectedResources: (cartItems: CartItem[], accountId: number | string, resourcesMap: Record<string, ResourceItem>) => number[];
124
+ /**
125
+ * @title: 获取其他购物车内商品的已选资源
126
+ * @description:
127
+ * @param {CartItem[]} cartItems
128
+ * @param {number | string} accountId
129
+ * @return {*}
130
+ * @Author: jinglin.tan
131
+ */
132
+ export declare const getOthersCartSelectedResources: (cartItems: CartItem[], cartItemId: number | string, resourcesMap: Record<string, ResourceItem>) => number[];
133
+ interface CapacityItem {
134
+ id: number;
135
+ value: number;
136
+ name: string;
137
+ }
138
+ /**
139
+ * @title: 基于选择的商品格式化容量
140
+ * @description:
141
+ * @param {any} param1
142
+ * @return {*}
143
+ * @Author: zhiwei.Wang
144
+ */
145
+ export declare const formatDefaultCapacitys: ({ capacity, product_bundle, }: any) => CapacityItem[];
146
+ /**
147
+ * @title: 获取总容量
148
+ * @description:
149
+ * @param {object} capacity 为 formatDefaultCapacitys()的结果
150
+ * @return {*}
151
+ * @Author: zhiwei.Wang
152
+ */
153
+ export declare const getSumCapacity: ({ capacity }: {
154
+ capacity: CapacityItem[];
155
+ }) => number;
156
+ /**
157
+ * @title: 传入资源,如果有子资源,会根据组合资源的 capacity 计算修改子资源的 capacity
158
+ * @description:
159
+ * @param {object} resource
160
+ * @return {*}
161
+ * @Author: jinglin.tan
162
+ */
163
+ export declare const checkSubResourcesCapacity: (resource: ResourceItem) => void;
110
164
  export {};
@@ -29,8 +29,12 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  // src/solution/BookingByStep/utils/resources.ts
30
30
  var resources_exports = {};
31
31
  __export(resources_exports, {
32
+ checkSubResourcesCapacity: () => checkSubResourcesCapacity,
33
+ formatDefaultCapacitys: () => formatDefaultCapacitys,
32
34
  formatResources: () => formatResources,
33
35
  getIsUsableByTimeItem: () => getIsUsableByTimeItem,
36
+ getOthersCartSelectedResources: () => getOthersCartSelectedResources,
37
+ getOthersSelectedResources: () => getOthersSelectedResources,
34
38
  getResourcesByIds: () => getResourcesByIds,
35
39
  getResourcesByProduct: () => getResourcesByProduct,
36
40
  getSumCapacity: () => getSumCapacity,
@@ -71,85 +75,159 @@ var formatResource = (resourceItem, booking) => {
71
75
  _resourceItem.labelText = _resourceItem.main_field;
72
76
  return _resourceItem;
73
77
  };
74
- var checkCapacity = ({ event_list, timeSlice, resource, currentCount = 1 }) => {
78
+ var checkCapacity = ({
79
+ event_list,
80
+ timeSlice,
81
+ resource,
82
+ currentCount = 1
83
+ }) => {
75
84
  if (currentCount > resource.capacity) {
76
- return false;
85
+ return {
86
+ status: false,
87
+ capacity: resource.capacity
88
+ };
77
89
  }
78
90
  let conflict = (event_list || []).filter((d) => {
79
- return isConflict({ start_at: d.start_at, end_at: d.end_at }, { start_at: timeSlice.start_at, end_at: timeSlice.end_at });
91
+ return isConflict(
92
+ { start_at: d.start_at, end_at: d.end_at },
93
+ { start_at: timeSlice.start_at, end_at: timeSlice.end_at }
94
+ );
80
95
  });
96
+ let conflictCount = getUseableEventCount(conflict, resource.capacity);
81
97
  if (resource.resourceType === "single") {
82
98
  if (conflict.length === 0) {
83
- return true;
99
+ return {
100
+ status: true,
101
+ capacity: conflictCount
102
+ };
84
103
  } else {
85
- return false;
104
+ return {
105
+ status: false,
106
+ capacity: conflictCount
107
+ };
86
108
  }
87
109
  } else {
88
- let conflictCount = getUseableEventCount(conflict, resource.capacity);
89
110
  if (currentCount <= conflictCount) {
90
- return true;
111
+ return {
112
+ status: true,
113
+ capacity: conflictCount
114
+ };
91
115
  } else {
92
- return false;
116
+ return {
117
+ status: false,
118
+ capacity: conflictCount
119
+ };
93
120
  }
94
121
  }
95
122
  };
96
- var getIsUsableByTimeItem = ({ timeSlice, time, resource, currentCount = 1 }) => {
123
+ var getIsUsableByTimeItem = ({
124
+ timeSlice,
125
+ time,
126
+ resource,
127
+ currentCount = 1,
128
+ resourcesUseableMap = {}
129
+ }) => {
130
+ var _a;
97
131
  let status = {
98
132
  afterToDay: false,
99
133
  capacity: false,
100
- usable: false
134
+ usable: false,
135
+ remainingCapacity: 0
136
+ // 剩余容量
101
137
  };
102
138
  let earliest = (0, import_dayjs.default)();
103
139
  if (!checkAfterToDay(timeSlice.start_at, earliest)) {
104
140
  return status;
105
141
  }
106
142
  status.afterToDay = true;
107
- if (!checkCapacity({ event_list: time == null ? void 0 : time.event_list, timeSlice, resource, currentCount })) {
143
+ const checkCapacityResult = checkCapacity({
144
+ event_list: time == null ? void 0 : time.event_list,
145
+ timeSlice,
146
+ resource,
147
+ currentCount
148
+ });
149
+ if ((_a = resource.combined_resource) == null ? void 0 : _a.status) {
150
+ const resourceIds = resource.combined_resource.resource_ids;
151
+ resourceIds.forEach((id) => {
152
+ if ((resourcesUseableMap == null ? void 0 : resourcesUseableMap[id]) === false) {
153
+ checkCapacityResult.status = false;
154
+ }
155
+ });
156
+ }
157
+ if (!checkCapacityResult.status) {
108
158
  return status;
109
159
  }
160
+ status.remainingCapacity = checkCapacityResult.capacity;
110
161
  status.capacity = true;
111
162
  status.usable = true;
112
163
  return status;
113
164
  };
114
- var getResourcesByProduct = (resourcesMap, cartItem, cartList) => {
115
- var _a;
116
- const product = cartItem._productOrigin;
117
- return (((_a = product == null ? void 0 : product.product_resource) == null ? void 0 : _a.resources) || []).reduce((acc, item) => {
165
+ var getResourcesByProduct = (resourcesMap, resources, selectedResources, capacity = 1) => {
166
+ return (resources || []).reduce((acc, item) => {
118
167
  if ((item == null ? void 0 : item.status) == 1) {
119
168
  const form_id = item.id;
120
169
  item.optional_resource = (item.optional_resource || []).filter(
121
170
  (d) => item.default_resource.indexOf(d) == -1
122
171
  );
123
- const selectedResources = cartList.reduce((acc2, d) => {
124
- var _a2;
125
- if (d.holder_id !== cartItem.holder_id) {
126
- if ((_a2 = d._origin) == null ? void 0 : _a2.resources) {
127
- d._origin.resources.forEach((n) => {
128
- acc2.push(n.id);
129
- });
172
+ let optional_resource = item.optional_resource.reduce(
173
+ (childAcc, d) => {
174
+ if (resourcesMap[d] && !selectedResources.includes(resourcesMap[d].id)) {
175
+ const combiningResources = [];
176
+ if (resourcesMap[d].combined_resource && resourcesMap[d].combined_resource.status === 1) {
177
+ resourcesMap[d].combined_resource.resource_ids.forEach(
178
+ (id) => {
179
+ if (resourcesMap[id]) {
180
+ combiningResources.push(resourcesMap[id]);
181
+ }
182
+ }
183
+ );
184
+ }
185
+ childAcc.push(
186
+ Object.assign({}, resourcesMap[d], {
187
+ form_id,
188
+ resourceType: item.type,
189
+ children: combiningResources,
190
+ metadata: {
191
+ ...resourcesMap[d].metadata,
192
+ combined_resource: resourcesMap[d].combined_resource
193
+ }
194
+ })
195
+ );
130
196
  }
131
- }
132
- return acc2;
133
- }, []);
134
- let optional_resource = item.optional_resource.reduce((childAcc, d) => {
135
- if (resourcesMap[d] && !selectedResources.includes(resourcesMap[d].id)) {
136
- childAcc.push(Object.assign({}, resourcesMap[d], {
137
- form_id,
138
- resourceType: item.type
139
- }));
140
- }
141
- return childAcc;
142
- }, []);
143
- let default_resource = item.default_resource.reduce((childAcc, d) => {
144
- if (resourcesMap[d] && !selectedResources.includes(resourcesMap[d].id)) {
145
- childAcc.push(Object.assign({}, resourcesMap[d], {
146
- form_id,
147
- resourceType: item.type,
148
- is_default: 1
149
- }));
150
- }
151
- return childAcc;
152
- }, []);
197
+ return childAcc;
198
+ },
199
+ []
200
+ );
201
+ let default_resource = item.default_resource.reduce(
202
+ (childAcc, d) => {
203
+ if (resourcesMap[d] && !selectedResources.includes(resourcesMap[d].id)) {
204
+ const combiningResources = [];
205
+ if (resourcesMap[d].combined_resource && resourcesMap[d].combined_resource.status === 1) {
206
+ resourcesMap[d].combined_resource.resource_ids.forEach(
207
+ (id) => {
208
+ if (resourcesMap[id]) {
209
+ combiningResources.push(resourcesMap[id]);
210
+ }
211
+ }
212
+ );
213
+ }
214
+ childAcc.push(
215
+ Object.assign({}, resourcesMap[d], {
216
+ form_id,
217
+ resourceType: item.type,
218
+ is_default: 1,
219
+ children: combiningResources,
220
+ metadata: {
221
+ ...resourcesMap[d].metadata,
222
+ combined_resource: resourcesMap[d].combined_resource
223
+ }
224
+ })
225
+ );
226
+ }
227
+ return childAcc;
228
+ },
229
+ []
230
+ );
153
231
  item.renderList = optional_resource.concat(default_resource);
154
232
  item.renderList = item.renderList.filter((d) => {
155
233
  const latestTime = d.times.reduce((latest, current) => {
@@ -163,10 +241,10 @@ var getResourcesByProduct = (resourcesMap, cartItem, cartList) => {
163
241
  return acc;
164
242
  }, []);
165
243
  };
166
- var getSumCapacity = () => {
167
- return 1;
168
- };
169
- var formatResources = ({ booking, resources }) => {
244
+ var formatResources = ({
245
+ booking,
246
+ resources
247
+ }) => {
170
248
  try {
171
249
  let _list = [...resources];
172
250
  let maps = {};
@@ -195,7 +273,9 @@ var getTimeSlicesByResource = ({
195
273
  resource,
196
274
  duration,
197
275
  split = 10,
198
- currentDate = (0, import_dayjs.default)()
276
+ currentDate = (0, import_dayjs.default)(),
277
+ capacity,
278
+ resourcesUseableMap = {}
199
279
  }) => {
200
280
  const { times } = resource;
201
281
  const timeSlices = [];
@@ -219,8 +299,12 @@ var getTimeSlicesByResource = ({
219
299
  timeSlice,
220
300
  time,
221
301
  resource,
222
- currentCount: getSumCapacity()
302
+ currentCount: capacity || 1,
303
+ resourcesUseableMap
223
304
  });
305
+ if ((resourcesUseableMap == null ? void 0 : resourcesUseableMap[resource.id]) !== false) {
306
+ resourcesUseableMap[resource.id] = _status.usable;
307
+ }
224
308
  if (_status.usable) {
225
309
  timeSlices.push({
226
310
  ...timeSlice,
@@ -256,19 +340,167 @@ var getTimeSlicesByResources = ({
256
340
  resourcesMap,
257
341
  duration,
258
342
  currentDate,
259
- split
343
+ split,
344
+ capacity,
345
+ resourcesUseableMap
260
346
  }) => {
261
347
  let resources = getResourcesByIds(resourcesMap, resourceIds);
262
- let timeSliceList = resources.reduce((acc, item) => {
263
- return acc.concat(getTimeSlicesByResource({ resource: item, duration, split, currentDate }));
264
- }, []);
348
+ resources.sort((a, b) => {
349
+ var _a, _b, _c, _d;
350
+ const aIsCombined = ((_b = (_a = a.metadata) == null ? void 0 : _a.combined_resource) == null ? void 0 : _b.status) === 1;
351
+ const bIsCombined = ((_d = (_c = b.metadata) == null ? void 0 : _c.combined_resource) == null ? void 0 : _d.status) === 1;
352
+ if (aIsCombined && !bIsCombined)
353
+ return 1;
354
+ if (!aIsCombined && bIsCombined)
355
+ return -1;
356
+ return 0;
357
+ });
358
+ let timeSliceList = resources.reduce(
359
+ (acc, item) => {
360
+ return acc.concat(
361
+ getTimeSlicesByResource({
362
+ resource: item,
363
+ duration,
364
+ split,
365
+ currentDate,
366
+ capacity,
367
+ resourcesUseableMap
368
+ })
369
+ );
370
+ },
371
+ []
372
+ );
265
373
  let intersection = getTimesIntersection(timeSliceList, resources.length);
266
374
  return intersection;
267
375
  };
376
+ var getOthersSelectedResources = (cartItems, accountId, resourcesMap) => {
377
+ return cartItems.reduce((acc, d) => {
378
+ var _a;
379
+ if (d.holder_id !== accountId) {
380
+ if ((_a = d._origin) == null ? void 0 : _a.resources) {
381
+ d._origin.resources.forEach((n) => {
382
+ if (n.metadata.combined_resource && n.metadata.combined_resource.status === 1) {
383
+ if (n.metadata.combined_resource.resource_ids.some(
384
+ (m) => acc.includes(m)
385
+ )) {
386
+ return acc;
387
+ }
388
+ acc.push(...n.metadata.combined_resource.resource_ids);
389
+ n.metadata.combined_resource.resource_ids.forEach((m) => {
390
+ resourcesMap[m].capacity -= n.num;
391
+ });
392
+ } else {
393
+ Object.values(resourcesMap).forEach((m) => {
394
+ if (m.combined_resource && m.combined_resource.status === 1) {
395
+ if (m.combined_resource.resource_ids.includes(n.id)) {
396
+ acc.push(m.id);
397
+ resourcesMap[m.id].capacity -= n.num;
398
+ }
399
+ }
400
+ });
401
+ }
402
+ acc.push(n.id);
403
+ resourcesMap[n.id].capacity -= n.num;
404
+ });
405
+ }
406
+ }
407
+ return acc;
408
+ }, []);
409
+ };
410
+ var getOthersCartSelectedResources = (cartItems, cartItemId, resourcesMap) => {
411
+ return cartItems.reduce((acc, d) => {
412
+ var _a;
413
+ if (d._id !== cartItemId) {
414
+ if ((_a = d._origin) == null ? void 0 : _a.resources) {
415
+ d._origin.resources.forEach((n) => {
416
+ if (n.metadata.combined_resource && n.metadata.combined_resource.status === 1) {
417
+ if (n.metadata.combined_resource.resource_ids.some(
418
+ (m) => acc.includes(m)
419
+ )) {
420
+ return acc;
421
+ }
422
+ acc.push(...n.metadata.combined_resource.resource_ids);
423
+ n.metadata.combined_resource.resource_ids.forEach((m) => {
424
+ resourcesMap[m].capacity -= n.num;
425
+ });
426
+ } else {
427
+ Object.values(resourcesMap).forEach((m) => {
428
+ if (m.combined_resource && m.combined_resource.status === 1) {
429
+ if (m.combined_resource.resource_ids.includes(n.id)) {
430
+ acc.push(m.id);
431
+ resourcesMap[m.id].capacity -= n.num;
432
+ }
433
+ }
434
+ });
435
+ }
436
+ acc.push(n.id);
437
+ resourcesMap[n.id].capacity -= n.num;
438
+ });
439
+ }
440
+ }
441
+ return acc;
442
+ }, []);
443
+ };
444
+ var formatDefaultCapacitys = ({
445
+ capacity,
446
+ product_bundle
447
+ }) => {
448
+ if ((capacity == null ? void 0 : capacity.type) === "package") {
449
+ return (product_bundle || []).map((d) => {
450
+ const id = d.bundle_product_id;
451
+ const item = ((capacity == null ? void 0 : capacity.package) || []).find(
452
+ (item2) => item2.product_id === id
453
+ );
454
+ return {
455
+ id,
456
+ value: item ? d.num || 0 : 0,
457
+ name: (item == null ? void 0 : item.name) || (d == null ? void 0 : d.title)
458
+ };
459
+ });
460
+ }
461
+ if ((capacity == null ? void 0 : capacity.type) === "custom") {
462
+ return ((capacity == null ? void 0 : capacity.custom) || []).map((d) => {
463
+ return {
464
+ id: d.id,
465
+ value: d.min,
466
+ name: d.name
467
+ };
468
+ });
469
+ }
470
+ return [{ id: 0, value: 1, name: "" }];
471
+ };
472
+ var getSumCapacity = ({ capacity }) => {
473
+ let sum = 0;
474
+ for (let item of capacity || []) {
475
+ sum += item.value;
476
+ }
477
+ return sum;
478
+ };
479
+ var checkSubResourcesCapacity = (resource) => {
480
+ if (resource.children && resource.children.length) {
481
+ let countCapacity = resource.capacity;
482
+ resource.children.forEach((child, index) => {
483
+ if (index === resource.children.length - 1) {
484
+ child.capacity = countCapacity;
485
+ return;
486
+ }
487
+ if (child.capacity <= countCapacity) {
488
+ countCapacity -= child.capacity;
489
+ } else {
490
+ child.capacity = countCapacity;
491
+ countCapacity = 0;
492
+ }
493
+ });
494
+ }
495
+ };
268
496
  // Annotate the CommonJS export names for ESM import in node:
269
497
  0 && (module.exports = {
498
+ checkSubResourcesCapacity,
499
+ formatDefaultCapacitys,
270
500
  formatResources,
271
501
  getIsUsableByTimeItem,
502
+ getOthersCartSelectedResources,
503
+ getOthersSelectedResources,
272
504
  getResourcesByIds,
273
505
  getResourcesByProduct,
274
506
  getSumCapacity,