@pisell/pisellos 2.2.162 → 2.2.164
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.
- package/dist/modules/BookingContext/index.d.ts +37 -0
- package/dist/modules/BookingContext/index.js +436 -0
- package/dist/modules/BookingContext/types.d.ts +102 -0
- package/dist/modules/BookingContext/types.js +51 -0
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +157 -0
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +107 -0
- package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +65 -0
- package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +191 -0
- package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
- package/dist/modules/BookingContext/utils/flexible.js +56 -0
- package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
- package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
- package/dist/modules/BookingContext/utils/index.d.ts +11 -0
- package/dist/modules/BookingContext/utils/index.js +11 -0
- package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
- package/dist/modules/BookingContext/utils/noResource.js +77 -0
- package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
- package/dist/modules/BookingContext/utils/productExtend.js +339 -0
- package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
- package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
- package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
- package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
- package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
- package/dist/modules/BookingContext/utils/resources.js +486 -0
- package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
- package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
- package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
- package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
- package/dist/modules/Customer/index.js +23 -22
- package/dist/modules/Discount/index.js +4 -3
- package/dist/modules/Order/index.d.ts +17 -6
- package/dist/modules/Order/index.js +474 -287
- package/dist/modules/Order/types.d.ts +32 -12
- package/dist/modules/Order/utils.js +9 -8
- package/dist/modules/SalesSummary/index.js +4 -2
- package/dist/modules/index.d.ts +1 -0
- package/dist/modules/index.js +2 -1
- package/dist/solution/BaseSales/index.d.ts +38 -7
- package/dist/solution/BaseSales/index.js +797 -310
- package/dist/solution/BaseSales/types.d.ts +48 -1
- package/dist/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
- package/dist/solution/BaseSales/utils/quotationPrice.js +159 -0
- package/dist/solution/BookingByStep/index.d.ts +2 -2
- package/dist/solution/BookingTicket/index.d.ts +121 -1
- package/dist/solution/BookingTicket/index.js +401 -72
- package/dist/solution/BookingTicket/types.d.ts +2 -0
- package/dist/solution/BookingTicket/types.js +3 -0
- package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +111 -0
- package/dist/solution/BookingTicket/utils/addProductDecision.js +326 -0
- package/dist/solution/ScanOrder/index.d.ts +9 -3
- package/dist/solution/ScanOrder/index.js +231 -128
- package/dist/solution/VenueBooking/index.d.ts +4 -2
- package/dist/solution/VenueBooking/index.js +103 -55
- package/dist/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
- package/dist/solution/VenueBooking/utils/slotMerge.js +10 -0
- package/lib/model/strategy/adapter/promotion/index.js +0 -49
- package/lib/modules/BookingContext/index.d.ts +37 -0
- package/lib/modules/BookingContext/index.js +297 -0
- package/lib/modules/BookingContext/types.d.ts +102 -0
- package/lib/modules/BookingContext/types.js +34 -0
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +174 -0
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +115 -0
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +65 -0
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +177 -0
- package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
- package/lib/modules/BookingContext/utils/flexible.js +80 -0
- package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
- package/lib/modules/BookingContext/utils/formatResourceList.js +50 -0
- package/lib/modules/BookingContext/utils/index.d.ts +11 -0
- package/lib/modules/BookingContext/utils/index.js +43 -0
- package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
- package/lib/modules/BookingContext/utils/noResource.js +90 -0
- package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
- package/lib/modules/BookingContext/utils/productExtend.js +283 -0
- package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
- package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
- package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
- package/lib/modules/BookingContext/utils/resourceSelection.js +46 -0
- package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
- package/lib/modules/BookingContext/utils/resources.js +377 -0
- package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
- package/lib/modules/BookingContext/utils/serviceTimes.js +162 -0
- package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
- package/lib/modules/BookingContext/utils/timeSlices.js +124 -0
- package/lib/modules/Customer/index.js +8 -8
- package/lib/modules/Discount/index.js +5 -1
- package/lib/modules/Order/index.d.ts +17 -6
- package/lib/modules/Order/index.js +164 -68
- package/lib/modules/Order/types.d.ts +32 -12
- package/lib/modules/Order/utils.js +8 -6
- package/lib/modules/SalesSummary/index.js +4 -2
- package/lib/modules/index.d.ts +1 -0
- package/lib/modules/index.js +3 -1
- package/lib/solution/BaseSales/index.d.ts +38 -7
- package/lib/solution/BaseSales/index.js +304 -14
- package/lib/solution/BaseSales/types.d.ts +48 -1
- package/lib/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
- package/lib/solution/BaseSales/utils/quotationPrice.js +201 -0
- package/lib/solution/BookingByStep/index.d.ts +2 -2
- package/lib/solution/BookingTicket/index.d.ts +121 -1
- package/lib/solution/BookingTicket/index.js +207 -2
- package/lib/solution/BookingTicket/types.d.ts +2 -0
- package/lib/solution/BookingTicket/types.js +6 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +111 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.js +300 -0
- package/lib/solution/ScanOrder/index.d.ts +9 -3
- package/lib/solution/ScanOrder/index.js +147 -66
- package/lib/solution/VenueBooking/index.d.ts +4 -2
- package/lib/solution/VenueBooking/index.js +50 -14
- package/lib/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
- package/lib/solution/VenueBooking/utils/slotMerge.js +10 -0
- package/package.json +1 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import dayjs from 'dayjs';
|
|
2
|
+
import { getServiceTimes } from "./serviceTimes";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 结构化的「资源不可用」原因(替代 info2 `getErrorList` 输出的 i18n 文案 + type 字段)。
|
|
6
|
+
*
|
|
7
|
+
* 与 info2 type 字段映射:
|
|
8
|
+
* - `no_product` ↔ type='products'
|
|
9
|
+
* - `time_out_of_range` ↔ type='time'
|
|
10
|
+
* - `count_out_of_range` ↔ type='limit'
|
|
11
|
+
* - `resource_unbound` ↔ type='unbound'
|
|
12
|
+
*
|
|
13
|
+
* OS 这边不耦合 i18n 文案,UI 拿到 reason + params 后自行渲染(参考 docs/SDK 中给出的 i18n key 对照表)。
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 替代 info2 `utilsByBooking.ts#getErrorList`,输出结构化错误。
|
|
18
|
+
*
|
|
19
|
+
* 行为对齐:
|
|
20
|
+
* 1. cacheItem 没有 id → `no_product`(与 info2 `!cacheItem?.id` 分支等价)。
|
|
21
|
+
* 2. 资源 null / 无 _extend → 返回 []。
|
|
22
|
+
* 3. resource.usable=false 时:
|
|
23
|
+
* - 没有 _extend.usableTime → `time_out_of_range`
|
|
24
|
+
* - 有 usableTime 但 `_extend.isCountRange=false` → `count_out_of_range`
|
|
25
|
+
* 4. resource.unbound=true → 追加 `resource_unbound`。
|
|
26
|
+
* 5. 不再耦合 `_data.resourceMaps[form_id].type === 'single'` 判断(与 info2 实际未使用此变量一致)。
|
|
27
|
+
*/
|
|
28
|
+
export function getResourceErrors(resource, cacheItem) {
|
|
29
|
+
if (!(cacheItem !== null && cacheItem !== void 0 && cacheItem.id)) {
|
|
30
|
+
return [{
|
|
31
|
+
reason: 'no_product',
|
|
32
|
+
params: {}
|
|
33
|
+
}];
|
|
34
|
+
}
|
|
35
|
+
if (!resource) return [];
|
|
36
|
+
var list = [];
|
|
37
|
+
if (!resource.usable) {
|
|
38
|
+
var _resource$_extend, _resource$_extend2;
|
|
39
|
+
var _getServiceTimes = getServiceTimes(cacheItem),
|
|
40
|
+
startDate = _getServiceTimes.startDate,
|
|
41
|
+
endDate = _getServiceTimes.endDate;
|
|
42
|
+
var startText = startDate.format('hh:mm A');
|
|
43
|
+
var endText = endDate.format('hh:mm A');
|
|
44
|
+
var isCrossDay = dayjs(endDate).isAfter(startDate, 'day');
|
|
45
|
+
if (!((_resource$_extend = resource._extend) !== null && _resource$_extend !== void 0 && _resource$_extend.usableTime)) {
|
|
46
|
+
list.push({
|
|
47
|
+
reason: 'time_out_of_range',
|
|
48
|
+
params: {
|
|
49
|
+
labelText: resource.labelText,
|
|
50
|
+
startText: startText,
|
|
51
|
+
endText: endText,
|
|
52
|
+
isCrossDay: isCrossDay
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
} else if (!((_resource$_extend2 = resource._extend) !== null && _resource$_extend2 !== void 0 && (_resource$_extend2 = _resource$_extend2.usableTime) !== null && _resource$_extend2 !== void 0 && (_resource$_extend2 = _resource$_extend2._extend) !== null && _resource$_extend2 !== void 0 && _resource$_extend2.isCountRange)) {
|
|
56
|
+
list.push({
|
|
57
|
+
reason: 'count_out_of_range',
|
|
58
|
+
params: {
|
|
59
|
+
labelText: resource.labelText,
|
|
60
|
+
startText: startText,
|
|
61
|
+
endText: endText,
|
|
62
|
+
isCrossDay: isCrossDay
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (resource.unbound) {
|
|
68
|
+
list.push({
|
|
69
|
+
reason: 'resource_unbound',
|
|
70
|
+
params: {}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return list;
|
|
74
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 预约商品资源是否「需要补齐 / 已选中」——供 getProductExtend 门禁与 getIsAutoClose 共用。
|
|
3
|
+
*/
|
|
4
|
+
/** 商品是否挂了生效的资源表单(product_resource.resources status=1)。 */
|
|
5
|
+
export declare function productNeedsResourceExtend(cacheItem: any): boolean;
|
|
6
|
+
/** `_extend.resource` 是否至少有一类表单选中了具体资源。 */
|
|
7
|
+
export declare function hasActualResourceSelection(cacheItem: any): boolean;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
/**
|
|
3
|
+
* 预约商品资源是否「需要补齐 / 已选中」——供 getProductExtend 门禁与 getIsAutoClose 共用。
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/** 商品是否挂了生效的资源表单(product_resource.resources status=1)。 */
|
|
7
|
+
export function productNeedsResourceExtend(cacheItem) {
|
|
8
|
+
var _cacheItem$product_re;
|
|
9
|
+
var forms = cacheItem === null || cacheItem === void 0 || (_cacheItem$product_re = cacheItem.product_resource) === null || _cacheItem$product_re === void 0 ? void 0 : _cacheItem$product_re.resources;
|
|
10
|
+
if (!Array.isArray(forms)) return false;
|
|
11
|
+
return forms.some(function (d) {
|
|
12
|
+
return Number(d === null || d === void 0 ? void 0 : d.status) === 1;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** `_extend.resource` 是否至少有一类表单选中了具体资源。 */
|
|
17
|
+
export function hasActualResourceSelection(cacheItem) {
|
|
18
|
+
var _cacheItem$_extend;
|
|
19
|
+
var resource = cacheItem === null || cacheItem === void 0 || (_cacheItem$_extend = cacheItem._extend) === null || _cacheItem$_extend === void 0 ? void 0 : _cacheItem$_extend.resource;
|
|
20
|
+
if (!resource || _typeof(resource) !== 'object') return false;
|
|
21
|
+
return Object.values(resource).some(function (rows) {
|
|
22
|
+
return Array.isArray(rows) && rows.length > 0;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 资源运行态计算 helper(搬自 info2 `utilsByBooking.ts` + `service/addService/utils.tsx`)。
|
|
3
|
+
*
|
|
4
|
+
* 本文件输入输出全部为 plain object,不依赖 React / locales / @pisell/icon / mini-redux。
|
|
5
|
+
* 调用方传入:resource origin map(`/form/schedule` 返回) / cacheItem(含 `_extend.duration / _extend.start_date / _extend.start_time` 等)。
|
|
6
|
+
*
|
|
7
|
+
* 三个 info2 独有特性保留:
|
|
8
|
+
* 1. `resource_display_scope='all'`:取全部资源
|
|
9
|
+
* 2. `extraResources`:拖入未绑定资源时兼容渲染
|
|
10
|
+
* 3. `getNoResource2()`:占位"无资源"行
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* 从已选资源中取「最早结束」的 usableTime,供灵活时长计算上限。
|
|
14
|
+
* 与 info2 `service/addService/utils.tsx#getUsableTime` 等价。
|
|
15
|
+
*/
|
|
16
|
+
export declare function getUsableTime(cacheItem: any): any | null;
|
|
17
|
+
/** Σ cacheItem._extend.capacity[].value × _extend.quantity。 */
|
|
18
|
+
export declare function getSumCapacity(cacheItem: any, isCalcQuantity?: boolean): number;
|
|
19
|
+
/**
|
|
20
|
+
* 判断单个 time 是否可用,写回 `_extend` 标记位(isDateRange / isCountRange / isUsable / isMaxLimitRange)。
|
|
21
|
+
* 与 info2 `utilsByBooking.ts#getResourceTimeIsUsable` 等价。
|
|
22
|
+
*/
|
|
23
|
+
export declare function getResourceTimeIsUsable(item: any, cacheItem: any, resourceItem: any): any;
|
|
24
|
+
/**
|
|
25
|
+
* 在 resource.times 中找到最佳可用 time,并写回 `_extend.usableTime`。
|
|
26
|
+
* 与 info2 `utilsByBooking.ts#formatTimes` 等价。
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatTimes(resourceItem: any, cacheItem: any): any;
|
|
29
|
+
/**
|
|
30
|
+
* 单个 resource 的整体可用性 + labelText 填充。
|
|
31
|
+
* 与 info2 `utilsByBooking.ts#formatResource` 等价;不再接收 formatLabel 回调(OS 不渲染 JSX)。
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatResource(resourceItem: any, cacheItem?: any): any;
|
|
34
|
+
/**
|
|
35
|
+
* 把单个 resource origin 类型(如「技师」)的 renderList 中每个资源跑一遍 formatResource,
|
|
36
|
+
* 并维护 unbound 标记(拖入未绑定资源时 UI 用)。
|
|
37
|
+
* 与 info2 `service/addService/utils.tsx#formatResources` 等价(剥 JSX)。
|
|
38
|
+
*/
|
|
39
|
+
export declare function formatResources(params: {
|
|
40
|
+
cacheItem: any;
|
|
41
|
+
resourcesOrigin: any[];
|
|
42
|
+
}): {
|
|
43
|
+
list: any[];
|
|
44
|
+
maps: Record<string, any>;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* 计算每类资源的默认值(写入 cacheItem._extend.resource)。
|
|
48
|
+
* 与 info2 `service/addService/utils.tsx#setDefaultResource` 等价;
|
|
49
|
+
* `resourceIdFromCalendar` 替代原版 sessionStorage `serviceParams.resource_id` 读取。
|
|
50
|
+
*/
|
|
51
|
+
export declare function setDefaultResource(params: {
|
|
52
|
+
cacheItem: any;
|
|
53
|
+
resources: any[];
|
|
54
|
+
resourceIdFromCalendar?: number;
|
|
55
|
+
isAutoAllocationOn?: (formId: any) => boolean;
|
|
56
|
+
}): Record<string, any[]>;
|
|
57
|
+
/**
|
|
58
|
+
* 计算默认容量(与 info2 `setDefaultCapacitys` 等价)。
|
|
59
|
+
* package:按 _extend.other.bundle 拆 quantity;custom:按 capacity.custom[].min;其他:[{id:0,value:1}]。
|
|
60
|
+
*/
|
|
61
|
+
export declare function setDefaultCapacitys(params: {
|
|
62
|
+
capacitys: any;
|
|
63
|
+
cacheItem: any;
|
|
64
|
+
}): Array<{
|
|
65
|
+
id: number | string;
|
|
66
|
+
value: number;
|
|
67
|
+
name?: string;
|
|
68
|
+
}>;
|
|
69
|
+
/**
|
|
70
|
+
* 通过商品 `product_resource.resources[]` 关联的 form/resource id,从 resourcesOriginMap 还原资源数据。
|
|
71
|
+
* 与 info2 `service/addService/utils.tsx#getResourceByIds` 等价(保留三特性)。
|
|
72
|
+
*/
|
|
73
|
+
export declare function getResourceByIds(resourcesOriginMap: Record<string, any>, cacheItem: any, extraParams?: {
|
|
74
|
+
extraResources?: Array<{
|
|
75
|
+
form_id: number | string;
|
|
76
|
+
id: number;
|
|
77
|
+
}>;
|
|
78
|
+
resourcesOrigin?: any[];
|
|
79
|
+
resourceTab?: Record<string, any>;
|
|
80
|
+
}): any[];
|
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
3
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
5
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
6
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
7
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
8
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
9
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
10
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
11
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
12
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
13
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
14
|
+
import dayjs from 'dayjs';
|
|
15
|
+
import { cloneDeep } from 'lodash-es';
|
|
16
|
+
import { flexibleObj } from "./flexible";
|
|
17
|
+
import { getNoResource2 } from "./noResource";
|
|
18
|
+
import { getServeStartTime } from "./serviceTimes";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* 资源运行态计算 helper(搬自 info2 `utilsByBooking.ts` + `service/addService/utils.tsx`)。
|
|
22
|
+
*
|
|
23
|
+
* 本文件输入输出全部为 plain object,不依赖 React / locales / @pisell/icon / mini-redux。
|
|
24
|
+
* 调用方传入:resource origin map(`/form/schedule` 返回) / cacheItem(含 `_extend.duration / _extend.start_date / _extend.start_time` 等)。
|
|
25
|
+
*
|
|
26
|
+
* 三个 info2 独有特性保留:
|
|
27
|
+
* 1. `resource_display_scope='all'`:取全部资源
|
|
28
|
+
* 2. `extraResources`:拖入未绑定资源时兼容渲染
|
|
29
|
+
* 3. `getNoResource2()`:占位"无资源"行
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 从已选资源中取「最早结束」的 usableTime,供灵活时长计算上限。
|
|
34
|
+
* 与 info2 `service/addService/utils.tsx#getUsableTime` 等价。
|
|
35
|
+
*/
|
|
36
|
+
export function getUsableTime(cacheItem) {
|
|
37
|
+
try {
|
|
38
|
+
var _cacheItem$_extend, _cacheItem$_data;
|
|
39
|
+
var resourceByForm = (cacheItem === null || cacheItem === void 0 || (_cacheItem$_extend = cacheItem._extend) === null || _cacheItem$_extend === void 0 ? void 0 : _cacheItem$_extend.resource) || {};
|
|
40
|
+
var resourceMaps = (cacheItem === null || cacheItem === void 0 || (_cacheItem$_data = cacheItem._data) === null || _cacheItem$_data === void 0 ? void 0 : _cacheItem$_data.resourceMaps) || {};
|
|
41
|
+
var items = [];
|
|
42
|
+
var _loop = function _loop() {
|
|
43
|
+
var _resourceMaps$formId;
|
|
44
|
+
var formId = _Object$keys[_i];
|
|
45
|
+
var selected = resourceByForm[formId];
|
|
46
|
+
var maps = (_resourceMaps$formId = resourceMaps[formId]) === null || _resourceMaps$formId === void 0 ? void 0 : _resourceMaps$formId.renderListMaps;
|
|
47
|
+
if (!Array.isArray(selected) || !maps) return 1; // continue
|
|
48
|
+
items = items.concat(selected.map(function (d) {
|
|
49
|
+
return maps[d.relation_id];
|
|
50
|
+
}).filter(Boolean));
|
|
51
|
+
};
|
|
52
|
+
for (var _i = 0, _Object$keys = Object.keys(resourceByForm); _i < _Object$keys.length; _i++) {
|
|
53
|
+
if (_loop()) continue;
|
|
54
|
+
}
|
|
55
|
+
if (!items.length) return null;
|
|
56
|
+
return items.reduce(function (pre, event) {
|
|
57
|
+
var _event$_extend, _pre$_extend;
|
|
58
|
+
var endAt = dayjs((_event$_extend = event._extend) === null || _event$_extend === void 0 || (_event$_extend = _event$_extend.usableTime) === null || _event$_extend === void 0 ? void 0 : _event$_extend.end_at);
|
|
59
|
+
var preEnd = dayjs((_pre$_extend = pre._extend) === null || _pre$_extend === void 0 || (_pre$_extend = _pre$_extend.usableTime) === null || _pre$_extend === void 0 ? void 0 : _pre$_extend.end_at);
|
|
60
|
+
return endAt.isBefore(preEnd) ? event : pre;
|
|
61
|
+
}, items[0]);
|
|
62
|
+
} catch (_unused) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Σ cacheItem._extend.capacity[].value × _extend.quantity。 */
|
|
68
|
+
export function getSumCapacity(cacheItem) {
|
|
69
|
+
var _cacheItem$_extend2, _cacheItem$_extend3;
|
|
70
|
+
var isCalcQuantity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
71
|
+
var list = (cacheItem === null || cacheItem === void 0 || (_cacheItem$_extend2 = cacheItem._extend) === null || _cacheItem$_extend2 === void 0 ? void 0 : _cacheItem$_extend2.capacity) || [];
|
|
72
|
+
var sum = 0;
|
|
73
|
+
var _iterator = _createForOfIteratorHelper(list),
|
|
74
|
+
_step;
|
|
75
|
+
try {
|
|
76
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
77
|
+
var item = _step.value;
|
|
78
|
+
sum += Number((item === null || item === void 0 ? void 0 : item.value) || 0);
|
|
79
|
+
}
|
|
80
|
+
} catch (err) {
|
|
81
|
+
_iterator.e(err);
|
|
82
|
+
} finally {
|
|
83
|
+
_iterator.f();
|
|
84
|
+
}
|
|
85
|
+
return sum * (isCalcQuantity ? (cacheItem === null || cacheItem === void 0 || (_cacheItem$_extend3 = cacheItem._extend) === null || _cacheItem$_extend3 === void 0 ? void 0 : _cacheItem$_extend3.quantity) || 1 : 1);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** 当前 time 剩余容量 = totalCapacity - Σ event.pax。 */
|
|
89
|
+
function getUseableEventCount(eventList, current) {
|
|
90
|
+
return (eventList || []).reduce(function (pre, event) {
|
|
91
|
+
return pre - ((event === null || event === void 0 ? void 0 : event.pax) || 0);
|
|
92
|
+
}, current || 0);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** 判断两个时间段是否有冲突。 */
|
|
96
|
+
function isConflict(event, current) {
|
|
97
|
+
var eventStart = dayjs(event.start_at);
|
|
98
|
+
var eventEnd = dayjs(event.end_at);
|
|
99
|
+
var currentStart = dayjs(current.start_at);
|
|
100
|
+
var isBefore = currentStart.isBefore(eventEnd);
|
|
101
|
+
var isAfter = true;
|
|
102
|
+
if (current.end_at) {
|
|
103
|
+
var currentEnd = dayjs(current.end_at);
|
|
104
|
+
isAfter = currentEnd.isAfter(eventStart);
|
|
105
|
+
}
|
|
106
|
+
return isBefore && isAfter;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* 判断单个 time 是否可用,写回 `_extend` 标记位(isDateRange / isCountRange / isUsable / isMaxLimitRange)。
|
|
111
|
+
* 与 info2 `utilsByBooking.ts#getResourceTimeIsUsable` 等价。
|
|
112
|
+
*/
|
|
113
|
+
export function getResourceTimeIsUsable(item, cacheItem, resourceItem) {
|
|
114
|
+
var startDate = dayjs("".concat(dayjs(cacheItem._extend.start_date).format('YYYY-MM-DD'), " ").concat(getServeStartTime(cacheItem._extend.start_time)));
|
|
115
|
+
var isFlexible = flexibleObj.isFlexible(cacheItem._extend.duration);
|
|
116
|
+
var isMaxLimitRange = false;
|
|
117
|
+
var isDateRange = false;
|
|
118
|
+
var isCountRange = false;
|
|
119
|
+
var time = _objectSpread({}, item);
|
|
120
|
+
var timeStartDate = dayjs("".concat(time.start_date, " ").concat(time.start_time)).subtract(1, 'second');
|
|
121
|
+
var timeEndDate = dayjs("".concat(time.end_date, " ").concat(time.end_time)).add(1, 'second');
|
|
122
|
+
var totalCount = getUseableEventCount(time.event_list, resourceItem.capacity);
|
|
123
|
+
var currentCount = getSumCapacity(cacheItem);
|
|
124
|
+
var eventList = time.event_list || [];
|
|
125
|
+
if (cacheItem !== null && cacheItem !== void 0 && cacheItem.booking_id) {
|
|
126
|
+
eventList = eventList.filter(function (event) {
|
|
127
|
+
return event.id !== cacheItem.booking_id;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
var endDate = null;
|
|
131
|
+
var isCalcCount = true;
|
|
132
|
+
if (isFlexible) {
|
|
133
|
+
isDateRange = startDate.isAfter(timeStartDate) && startDate.isBefore(timeEndDate);
|
|
134
|
+
if (!isDateRange && eventList.length) {
|
|
135
|
+
isCalcCount = false;
|
|
136
|
+
isDateRange = true;
|
|
137
|
+
isCountRange = false;
|
|
138
|
+
}
|
|
139
|
+
} else {
|
|
140
|
+
endDate = startDate.add(flexibleObj.getValue(cacheItem._extend.duration), 'minute');
|
|
141
|
+
var isTimeRange = startDate.isAfter(timeStartDate) && endDate.isBefore(timeEndDate);
|
|
142
|
+
if (isTimeRange) isDateRange = true;
|
|
143
|
+
}
|
|
144
|
+
if (isCalcCount) {
|
|
145
|
+
var conflict = (eventList || []).filter(function (d) {
|
|
146
|
+
return isConflict({
|
|
147
|
+
start_at: d.start_at,
|
|
148
|
+
end_at: d.end_at
|
|
149
|
+
}, {
|
|
150
|
+
start_at: startDate,
|
|
151
|
+
end_at: endDate
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
if (resourceItem.resourceType === 'single') {
|
|
155
|
+
isCountRange = conflict.length === 0;
|
|
156
|
+
} else {
|
|
157
|
+
var conflictCount = getUseableEventCount(conflict, resourceItem.capacity);
|
|
158
|
+
isCountRange = currentCount <= conflictCount;
|
|
159
|
+
// totalCount 当前未直接参与判定,保留 reference 以与原版接近。
|
|
160
|
+
void totalCount;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
var isUsable = isDateRange && isCountRange;
|
|
164
|
+
time._extend = {
|
|
165
|
+
isMaxLimitRange: isMaxLimitRange,
|
|
166
|
+
isDateRange: isDateRange,
|
|
167
|
+
isCountRange: isCountRange,
|
|
168
|
+
isUsable: isUsable
|
|
169
|
+
};
|
|
170
|
+
return time;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* 在 resource.times 中找到最佳可用 time,并写回 `_extend.usableTime`。
|
|
175
|
+
* 与 info2 `utilsByBooking.ts#formatTimes` 等价。
|
|
176
|
+
*/
|
|
177
|
+
export function formatTimes(resourceItem, cacheItem) {
|
|
178
|
+
var usableTimes = [];
|
|
179
|
+
var _resourceItem = _objectSpread({}, resourceItem);
|
|
180
|
+
var sum = getSumCapacity(cacheItem);
|
|
181
|
+
if (_resourceItem.capacity >= sum) {
|
|
182
|
+
_resourceItem.times = (_resourceItem.times || []).map(function (time) {
|
|
183
|
+
var _time$_extend;
|
|
184
|
+
var _time = getResourceTimeIsUsable(time, cacheItem, _resourceItem);
|
|
185
|
+
if (_time !== null && _time !== void 0 && (_time$_extend = _time._extend) !== null && _time$_extend !== void 0 && _time$_extend.isDateRange) usableTimes.push(_time);
|
|
186
|
+
return _time;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
var _time = usableTimes.sort(function (a, b) {
|
|
190
|
+
var aEnd = dayjs("".concat(a.end_date, " ").concat(a.end_time)).valueOf();
|
|
191
|
+
var bEnd = dayjs("".concat(b.end_date, " ").concat(b.end_time)).valueOf();
|
|
192
|
+
return aEnd - bEnd;
|
|
193
|
+
})[0];
|
|
194
|
+
resourceItem._extend = _objectSpread(_objectSpread({}, resourceItem._extend), {}, {
|
|
195
|
+
usableTime: _time
|
|
196
|
+
});
|
|
197
|
+
return resourceItem;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* 单个 resource 的整体可用性 + labelText 填充。
|
|
202
|
+
* 与 info2 `utilsByBooking.ts#formatResource` 等价;不再接收 formatLabel 回调(OS 不渲染 JSX)。
|
|
203
|
+
*/
|
|
204
|
+
export function formatResource(resourceItem, cacheItem) {
|
|
205
|
+
var _resourceItem$_extend;
|
|
206
|
+
var _resourceItem = _objectSpread({}, resourceItem);
|
|
207
|
+
_resourceItem = formatTimes(_resourceItem, cacheItem);
|
|
208
|
+
_resourceItem.labelText = _resourceItem.main_field;
|
|
209
|
+
var usable = (_resourceItem$_extend = _resourceItem._extend) === null || _resourceItem$_extend === void 0 || (_resourceItem$_extend = _resourceItem$_extend.usableTime) === null || _resourceItem$_extend === void 0 || (_resourceItem$_extend = _resourceItem$_extend._extend) === null || _resourceItem$_extend === void 0 ? void 0 : _resourceItem$_extend.isUsable;
|
|
210
|
+
_resourceItem.usable = usable;
|
|
211
|
+
return _resourceItem;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* 把单个 resource origin 类型(如「技师」)的 renderList 中每个资源跑一遍 formatResource,
|
|
216
|
+
* 并维护 unbound 标记(拖入未绑定资源时 UI 用)。
|
|
217
|
+
* 与 info2 `service/addService/utils.tsx#formatResources` 等价(剥 JSX)。
|
|
218
|
+
*/
|
|
219
|
+
export function formatResources(params) {
|
|
220
|
+
var cacheItem = params.cacheItem,
|
|
221
|
+
resourcesOrigin = params.resourcesOrigin;
|
|
222
|
+
try {
|
|
223
|
+
var maps = {};
|
|
224
|
+
var list = resourcesOrigin.map(function (item) {
|
|
225
|
+
var _item = cloneDeep(item);
|
|
226
|
+
var renderListMaps = {};
|
|
227
|
+
_item.renderList = _item.renderList.map(function (d) {
|
|
228
|
+
var res = formatResource(d, cacheItem);
|
|
229
|
+
var unbound = !item.optional_resource.includes(res.id) && !item.default_resource.includes(res.id) && res.id !== 0;
|
|
230
|
+
if (unbound) res.unbound = true;
|
|
231
|
+
renderListMaps[res.id] = res;
|
|
232
|
+
return res;
|
|
233
|
+
}).sort(function (a, b) {
|
|
234
|
+
return b.usable ? 1 : -1;
|
|
235
|
+
});
|
|
236
|
+
maps[_item.form_id] = _objectSpread(_objectSpread({}, _item), {}, {
|
|
237
|
+
renderListMaps: renderListMaps
|
|
238
|
+
});
|
|
239
|
+
return _item;
|
|
240
|
+
});
|
|
241
|
+
return {
|
|
242
|
+
list: list,
|
|
243
|
+
maps: maps
|
|
244
|
+
};
|
|
245
|
+
} catch (err) {
|
|
246
|
+
console.warn('[BookingContext] formatResources error', err);
|
|
247
|
+
return {
|
|
248
|
+
list: [],
|
|
249
|
+
maps: {}
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/** 取可用资源中"最大空闲时长"的那一个,作为自动分派候选。 */
|
|
255
|
+
function getResourceMaxFreeTime(resource, isAutoAllocationOn) {
|
|
256
|
+
var renderList = resource.renderList,
|
|
257
|
+
form_id = resource.form_id;
|
|
258
|
+
if (!isAutoAllocationOn(form_id)) return [];
|
|
259
|
+
var usableList = (renderList || []).filter(function (d) {
|
|
260
|
+
return d.usable && d.id !== 0;
|
|
261
|
+
});
|
|
262
|
+
var defaultResource = [];
|
|
263
|
+
var maxFreeTime = 0;
|
|
264
|
+
usableList.forEach(function (d) {
|
|
265
|
+
var _d$times = d.times,
|
|
266
|
+
times = _d$times === void 0 ? [] : _d$times;
|
|
267
|
+
var currentMaxFreeTime = times.reduce(function (pre, cur) {
|
|
268
|
+
var _cur$event_list, _cur$event_list2;
|
|
269
|
+
var start = ((_cur$event_list = cur.event_list) === null || _cur$event_list === void 0 || (_cur$event_list = _cur$event_list[((_cur$event_list2 = cur.event_list) === null || _cur$event_list2 === void 0 ? void 0 : _cur$event_list2.length) - 1]) === null || _cur$event_list === void 0 ? void 0 : _cur$event_list.end_at) || cur.start_at;
|
|
270
|
+
var end = cur.end_at;
|
|
271
|
+
var diff = dayjs(end).diff(dayjs(start), 'minute');
|
|
272
|
+
return diff > pre ? diff : pre;
|
|
273
|
+
}, 0);
|
|
274
|
+
if (currentMaxFreeTime > maxFreeTime) {
|
|
275
|
+
maxFreeTime = currentMaxFreeTime;
|
|
276
|
+
defaultResource = [d];
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
return defaultResource;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* 计算每类资源的默认值(写入 cacheItem._extend.resource)。
|
|
284
|
+
* 与 info2 `service/addService/utils.tsx#setDefaultResource` 等价;
|
|
285
|
+
* `resourceIdFromCalendar` 替代原版 sessionStorage `serviceParams.resource_id` 读取。
|
|
286
|
+
*/
|
|
287
|
+
export function setDefaultResource(params) {
|
|
288
|
+
var cacheItem = params.cacheItem,
|
|
289
|
+
resources = params.resources,
|
|
290
|
+
resourceIdFromCalendar = params.resourceIdFromCalendar,
|
|
291
|
+
_params$isAutoAllocat = params.isAutoAllocationOn,
|
|
292
|
+
isAutoAllocationOn = _params$isAutoAllocat === void 0 ? function () {
|
|
293
|
+
return true;
|
|
294
|
+
} : _params$isAutoAllocat;
|
|
295
|
+
var obj = {};
|
|
296
|
+
var resourceId = Number(resourceIdFromCalendar) || 0;
|
|
297
|
+
var _iterator2 = _createForOfIteratorHelper(resources),
|
|
298
|
+
_step2;
|
|
299
|
+
try {
|
|
300
|
+
var _loop2 = function _loop2() {
|
|
301
|
+
var item = _step2.value;
|
|
302
|
+
var _item$select_type = item.select_type,
|
|
303
|
+
select_type = _item$select_type === void 0 ? {} : _item$select_type,
|
|
304
|
+
_item$optional_resour = item.optional_resource,
|
|
305
|
+
optional_resource = _item$optional_resour === void 0 ? [] : _item$optional_resour,
|
|
306
|
+
_item$default_resourc = item.default_resource,
|
|
307
|
+
default_resource = _item$default_resourc === void 0 ? [] : _item$default_resourc;
|
|
308
|
+
var renderList = item.renderList.filter(function (d) {
|
|
309
|
+
if ((select_type === null || select_type === void 0 ? void 0 : select_type.type) === 'single') {
|
|
310
|
+
if (resourceId && (optional_resource.includes(resourceId) || default_resource.includes(resourceId))) {
|
|
311
|
+
return d.id === resourceId;
|
|
312
|
+
}
|
|
313
|
+
return d.is_default === 1;
|
|
314
|
+
}
|
|
315
|
+
return d.is_default === 1 || d.id === resourceId;
|
|
316
|
+
});
|
|
317
|
+
var defaultOriginalResource = [];
|
|
318
|
+
if (renderList.length === 0) {
|
|
319
|
+
defaultOriginalResource = getResourceMaxFreeTime(item, isAutoAllocationOn);
|
|
320
|
+
} else {
|
|
321
|
+
defaultOriginalResource = renderList;
|
|
322
|
+
}
|
|
323
|
+
obj[item.form_id] = defaultOriginalResource.map(function (d) {
|
|
324
|
+
return {
|
|
325
|
+
children: d.children,
|
|
326
|
+
relation_type: d.relation_type,
|
|
327
|
+
form_id: item.form_id,
|
|
328
|
+
relation_id: d.id,
|
|
329
|
+
like_status: 'common',
|
|
330
|
+
metadata: {
|
|
331
|
+
form_name: item.title,
|
|
332
|
+
resource_name: d.main_field
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
});
|
|
336
|
+
// errors 字段由调用方在需要时通过 getResourceErrors 单独算,OS 这里不耦合。
|
|
337
|
+
};
|
|
338
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
339
|
+
_loop2();
|
|
340
|
+
}
|
|
341
|
+
} catch (err) {
|
|
342
|
+
_iterator2.e(err);
|
|
343
|
+
} finally {
|
|
344
|
+
_iterator2.f();
|
|
345
|
+
}
|
|
346
|
+
return obj;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* 计算默认容量(与 info2 `setDefaultCapacitys` 等价)。
|
|
351
|
+
* package:按 _extend.other.bundle 拆 quantity;custom:按 capacity.custom[].min;其他:[{id:0,value:1}]。
|
|
352
|
+
*/
|
|
353
|
+
export function setDefaultCapacitys(params) {
|
|
354
|
+
var capacitys = params.capacitys,
|
|
355
|
+
cacheItem = params.cacheItem;
|
|
356
|
+
if ((capacitys === null || capacitys === void 0 ? void 0 : capacitys.type) === 'package') {
|
|
357
|
+
var _cacheItem$_extend4;
|
|
358
|
+
return ((cacheItem === null || cacheItem === void 0 || (_cacheItem$_extend4 = cacheItem._extend) === null || _cacheItem$_extend4 === void 0 || (_cacheItem$_extend4 = _cacheItem$_extend4.other) === null || _cacheItem$_extend4 === void 0 ? void 0 : _cacheItem$_extend4.bundle) || []).map(function (d) {
|
|
359
|
+
var id = d._bundle_product_id;
|
|
360
|
+
var item = ((capacitys === null || capacitys === void 0 ? void 0 : capacitys.package) || []).find(function (p) {
|
|
361
|
+
return p.product_id === id;
|
|
362
|
+
});
|
|
363
|
+
return {
|
|
364
|
+
id: id,
|
|
365
|
+
value: item ? d.quantity || 0 : 0,
|
|
366
|
+
name: (item === null || item === void 0 ? void 0 : item.name) || (d === null || d === void 0 ? void 0 : d.title)
|
|
367
|
+
};
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
if ((capacitys === null || capacitys === void 0 ? void 0 : capacitys.type) === 'custom') {
|
|
371
|
+
return ((capacitys === null || capacitys === void 0 ? void 0 : capacitys.custom) || []).map(function (d) {
|
|
372
|
+
return {
|
|
373
|
+
id: d.id,
|
|
374
|
+
value: d.min,
|
|
375
|
+
name: d.name
|
|
376
|
+
};
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
return [{
|
|
380
|
+
id: 0,
|
|
381
|
+
value: 1,
|
|
382
|
+
name: ''
|
|
383
|
+
}];
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* 通过商品 `product_resource.resources[]` 关联的 form/resource id,从 resourcesOriginMap 还原资源数据。
|
|
388
|
+
* 与 info2 `service/addService/utils.tsx#getResourceByIds` 等价(保留三特性)。
|
|
389
|
+
*/
|
|
390
|
+
export function getResourceByIds(resourcesOriginMap, cacheItem, extraParams) {
|
|
391
|
+
var _cacheItem$product_re;
|
|
392
|
+
var _resources = _toConsumableArray((cacheItem === null || cacheItem === void 0 || (_cacheItem$product_re = cacheItem.product_resource) === null || _cacheItem$product_re === void 0 ? void 0 : _cacheItem$product_re.resources) || []).filter(function (d) {
|
|
393
|
+
return Number(d === null || d === void 0 ? void 0 : d.status) === 1;
|
|
394
|
+
}).map(function (item) {
|
|
395
|
+
return _objectSpread({}, item);
|
|
396
|
+
});
|
|
397
|
+
var _ref = extraParams || {},
|
|
398
|
+
_ref$extraResources = _ref.extraResources,
|
|
399
|
+
extraResources = _ref$extraResources === void 0 ? [] : _ref$extraResources,
|
|
400
|
+
_ref$resourcesOrigin = _ref.resourcesOrigin,
|
|
401
|
+
resourcesOrigin = _ref$resourcesOrigin === void 0 ? [] : _ref$resourcesOrigin,
|
|
402
|
+
_ref$resourceTab = _ref.resourceTab,
|
|
403
|
+
resourceTab = _ref$resourceTab === void 0 ? {} : _ref$resourceTab;
|
|
404
|
+
var _iterator3 = _createForOfIteratorHelper(_resources),
|
|
405
|
+
_step3;
|
|
406
|
+
try {
|
|
407
|
+
var _loop3 = function _loop3() {
|
|
408
|
+
var _resourceTab$item$cod;
|
|
409
|
+
var item = _step3.value;
|
|
410
|
+
var form_id = item.id;
|
|
411
|
+
var isAllResource = (resourceTab === null || resourceTab === void 0 || (_resourceTab$item$cod = resourceTab[item.code]) === null || _resourceTab$item$cod === void 0 ? void 0 : _resourceTab$item$cod.resource_display_scope) === 'all';
|
|
412
|
+
var extraResourceIds = [];
|
|
413
|
+
if (isAllResource) {
|
|
414
|
+
extraResourceIds = (resourcesOrigin || []).filter(function (d) {
|
|
415
|
+
return d.form_code === item.code;
|
|
416
|
+
}).map(function (d) {
|
|
417
|
+
return d.id;
|
|
418
|
+
});
|
|
419
|
+
} else {
|
|
420
|
+
extraResourceIds = extraResources.filter(function (_extraItem) {
|
|
421
|
+
return _extraItem.form_id === form_id && !!_extraItem.id && !item.optional_resource.includes(_extraItem.id) && !item.default_resource.includes(_extraItem.id);
|
|
422
|
+
}).map(function (_extraItem) {
|
|
423
|
+
return _extraItem.id;
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
extraResourceIds = Array.from(new Set(extraResourceIds));
|
|
427
|
+
item.optional_resource = (item.optional_resource || []).filter(function (d) {
|
|
428
|
+
return item.default_resource.indexOf(d) === -1;
|
|
429
|
+
});
|
|
430
|
+
var getChildrenMetadata = function getChildrenMetadata(id) {
|
|
431
|
+
var combiningResources = [];
|
|
432
|
+
var origin = resourcesOriginMap[id];
|
|
433
|
+
if (origin !== null && origin !== void 0 && origin.combined_resource && origin.combined_resource.status === 1) {
|
|
434
|
+
(origin.combined_resource.resource_ids || []).forEach(function (cid) {
|
|
435
|
+
if (resourcesOriginMap[cid]) {
|
|
436
|
+
var _resourcesOriginMap$c, _resourcesOriginMap$c2;
|
|
437
|
+
combiningResources.push(_objectSpread(_objectSpread({}, resourcesOriginMap[cid]), {}, {
|
|
438
|
+
relation_id: ((_resourcesOriginMap$c = resourcesOriginMap[cid]) === null || _resourcesOriginMap$c === void 0 ? void 0 : _resourcesOriginMap$c.relation_id) || ((_resourcesOriginMap$c2 = resourcesOriginMap[cid]) === null || _resourcesOriginMap$c2 === void 0 ? void 0 : _resourcesOriginMap$c2.id)
|
|
439
|
+
}));
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
return {
|
|
444
|
+
children: combiningResources,
|
|
445
|
+
metadata: _objectSpread(_objectSpread({}, (origin === null || origin === void 0 ? void 0 : origin.metadata) || {}), {}, {
|
|
446
|
+
combined_resource: origin === null || origin === void 0 ? void 0 : origin.combined_resource
|
|
447
|
+
})
|
|
448
|
+
};
|
|
449
|
+
};
|
|
450
|
+
var optional_resource = Array.from(new Set([].concat(_toConsumableArray(item.optional_resource), _toConsumableArray(extraResourceIds)))).map(function (d) {
|
|
451
|
+
if (!resourcesOriginMap[d]) return null;
|
|
452
|
+
return Object.assign({}, resourcesOriginMap[d], _objectSpread({
|
|
453
|
+
form_id: form_id,
|
|
454
|
+
resourceType: item.type
|
|
455
|
+
}, getChildrenMetadata(d)));
|
|
456
|
+
}).filter(function (d) {
|
|
457
|
+
return d;
|
|
458
|
+
}).concat(getNoResource2({
|
|
459
|
+
form_id: form_id
|
|
460
|
+
}));
|
|
461
|
+
var default_resource = (item.default_resource || []).map(function (d) {
|
|
462
|
+
var origin = resourcesOriginMap[d];
|
|
463
|
+
if (origin) {
|
|
464
|
+
origin.is_default = 1;
|
|
465
|
+
return Object.assign({}, origin, _objectSpread({
|
|
466
|
+
form_id: form_id,
|
|
467
|
+
resourceType: item.type
|
|
468
|
+
}, getChildrenMetadata(d)));
|
|
469
|
+
}
|
|
470
|
+
return null;
|
|
471
|
+
}).filter(function (d) {
|
|
472
|
+
return d;
|
|
473
|
+
});
|
|
474
|
+
item.renderList = optional_resource.concat(default_resource);
|
|
475
|
+
item.form_id = form_id;
|
|
476
|
+
};
|
|
477
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
478
|
+
_loop3();
|
|
479
|
+
}
|
|
480
|
+
} catch (err) {
|
|
481
|
+
_iterator3.e(err);
|
|
482
|
+
} finally {
|
|
483
|
+
_iterator3.f();
|
|
484
|
+
}
|
|
485
|
+
return _resources;
|
|
486
|
+
}
|