@pisell/pisellos
Version:
一个可扩展的前端模块化SDK框架,支持插件系统
261 lines (260 loc) • 8.02 kB
TypeScript
import { Dayjs } from 'dayjs';
import { CartItem, ProductData } from '../../../modules';
/**
* 1. 获取资源列表
* 2. 根据当前选择的商品过滤出来对应的资源列表 getResourcesByProduct
* 3. 格式化资源相关 格式化资源列表 --> 格式化资源 --> 获取时间切片列表 --> 判断单个时间切片是否可用 formatResources
*
*/
type DateType = Dayjs;
export interface TimeSliceItem {
start_time: string;
end_time: string;
start_at: DateType;
end_at: DateType;
[key: string]: any;
}
export interface ResourceItem {
[key: string]: any;
}
interface BookingItem {
[key: string]: any;
}
/**
* @title: 判断两个时间段是否有重叠
* @description:
* @param {object} event
* @param {object} current
* @return {*}
* @Author: zhiwei.Wang
*/
export declare const isConflict: (event: {
start_at: DateType;
end_at: DateType;
}, current: {
start_at: DateType;
end_at?: DateType;
}) => boolean;
/**
* @title: 获取时间切片是否可用
* @description: 根据时间切片、资源、当前预约量判断时间切片是否可用
* @param {any} param1
* @return {*}
* @Author: zhiwei.Wang
*/
export declare const getIsUsableByTimeItem: ({ timeSlice, time, resource, currentCount, resourcesUseableMap, cut_off_time, }: {
timeSlice: TimeSliceItem;
time: any;
resource: ResourceItem;
currentCount: number;
resourcesUseableMap: Record<string, boolean>;
cut_off_time?: {
future_day: number;
unit: number;
unit_type: string;
type: string;
ongoing?: {
type: string;
unit: number;
} | undefined;
} | undefined;
}) => {
afterToDay: boolean;
capacity: boolean;
usable: boolean;
remainingCapacity: number;
reason: string;
};
/**
* @title: 获取商品下绑定的资源列表
* @description:
* @param {any} resourcesMap
* @param {any} product
* @return {*}
* @Author: zhiwei.Wang
*/
export declare const getResourcesByProduct: (resourcesMap: Record<string, ResourceItem>, resources: ResourceItem[], selectedResources: number[], capacity?: number) => ResourceItem[];
/**
* @title: 获取资源列表
* @description:
* @return {*}
* @Author: zhiwei.Wang
* @Date: 2024-01-09 13:38
*/
export declare const formatResources: ({ booking, resources, }: {
booking: BookingItem;
resources: ResourceItem[];
}) => {
list: ResourceItem[];
maps: any;
};
/**
* @title: 获取资源的时间切片列表
* @description:
* @return {*}
* @Author: zhiwei.Wang
*/
export declare const getTimeSlicesByResource: ({ resource, duration, split, currentDate, capacity, resourcesUseableMap, cut_off_time, hasFlexibleDuration, operating_day_boundary, maxBlockThreshold }: {
resource: ResourceItem;
duration: number;
split: number;
currentDate: DateType | string;
capacity?: number | undefined;
resourcesUseableMap?: Record<string, boolean> | undefined;
cut_off_time?: {
future_day: number;
unit: number;
unit_type: string;
type: string;
ongoing?: {
type: string;
unit: number;
} | undefined;
} | undefined;
hasFlexibleDuration?: boolean | undefined;
operating_day_boundary?: {
type: string;
time: string;
} | undefined;
maxBlockThreshold?: number | undefined;
}) => TimeSliceItem[];
/**
* @title: 获取时间切片列表的交集
* @description: 注意: 需要将多个时间切片列表合并在一起,然后判断交集
* @param {TimeSliceItem} times 多个时间切片
* @param {number} count 交集次数, 符合此次数的会返回
* @return {*}
* @Author: zhiwei.Wang
*/
export declare const getTimesIntersection: (times: TimeSliceItem[], count: number) => any[];
/**
* @title: 根据ids筛选资源列表
* @description:
* @param {any} resourcesMap
* @param {any} ids
* @return {*}
* @Author: zhiwei.Wang
* @Date: 2024-09-19 20:23
*/
export declare const getResourcesByIds: (resourcesMap: Record<string, ResourceItem>, ids: number[]) => ResourceItem[];
/**
* @title: 合并子资源的时间切片至组合资源
* @description:
* @param {ResourceItem[]} resources
* @param {Record<string, ResourceItem>} resourcesMap
* @return {*}
* @Author: zhiwei.Wang
*/
export declare const mergeSubResourcesTimeSlices: (resources: ResourceItem[], resourcesMap: Record<string, ResourceItem>) => void;
/**
* @title: 根据资源id列表获取时间切片
* @description: 传入一个技师id列表, 找出技师列表中公共的时间切片
* @param {ResourceItem} resources
* @param {CartItem} cart
* @return {*}
* @Author: zhiwei.Wang
*/
export declare const getTimeSlicesByResources: ({ resourceIds, resourcesMap, duration, currentDate, split, capacity, resourcesUseableMap, cut_off_time, hasFlexibleDuration, operating_day_boundary, maxBlockThreshold }: {
resourceIds: number[];
resourcesMap: any;
duration: number;
currentDate: DateType | string;
split: number;
capacity?: number | undefined;
resourcesUseableMap: Record<string, boolean>;
cut_off_time?: {
future_day: number;
unit: number;
unit_type: string;
type: string;
ongoing?: {
type: string;
unit: number;
} | undefined;
} | undefined;
hasFlexibleDuration?: boolean | undefined;
operating_day_boundary?: {
type: string;
time: string;
} | undefined;
maxBlockThreshold?: number | undefined;
}) => any[];
/**
* @title: 获取其他人的已选资源
* @description:
* @param {CartItem[]} cartItems
* @param {number | string} accountId
* @return {*}
* @Author: jinglin.tan
*/
export declare const getOthersSelectedResources: (cartItems: CartItem[], accountId: number | string, resourcesMap: Record<string, ResourceItem>) => number[];
/**
* @title: 获取其他购物车内商品的已选资源
* @description:
* @param {CartItem[]} cartItems
* @param {number | string} accountId
* @return {*}
* @Author: jinglin.tan
*/
export declare const getOthersCartSelectedResources: (cartItems: CartItem[], cartItemId: number | string, resourcesMap: Record<string, ResourceItem>) => number[];
export interface CapacityItem {
id: number;
value: number;
name: string;
}
/**
* @title: 根据日期范围过滤日程
*
* @export
* @param {any[]} schedule
* @param {string} startDate
* @param {string} endDate
* @return {*}
*/
export declare function filterScheduleByDateRange(schedule: any[], startDate: string, endDate: string): any[];
/**
* 传入商品数据,返回基于商品配置的提前量的最早开始日期和最晚结束日期
*
* @export
* @param {ProductData} product
* @return {*}
*/
export declare function checkSessionProductLeadTime(product: ProductData): {
latestStartDate: string;
earliestEndDate: string;
};
/**
* 基于商品的 resources 配置,返回可选择的资源的 id 列表
*
* @export
* @param {ProductData} product
* @return {*}
*/
export declare function getResourcesIdsByProduct(product: ProductData): number[];
/**
* 资源排序,把单个资源靠前,组合资源排在后面
*
* @export
* @param {ResourceItem[]} resourcesList
* @return {*}
*/
export declare function sortCombinedResources(resourcesList: ResourceItem[]): ResourceItem[];
/**
* 传入一个资源组,根据 formid筛出相同类型的资源
*
* @export
* @param {ResourceItem[]} resources
* @param {string} form_id
* @return {*}
*/
export declare function filterResourcesByFormItem(resources: ResourceItem[], form_id: string): ResourceItem[];
/**
* 传入两个资源,确认这两个资源是否有交集(包括组合资源)
*
* @export
* @param {ResourceItem} resource1
* @param {ResourceItem} resource2
* @return {*}
*/
export declare function checkTwoResourcesIntersection(resource1: ResourceItem, resource2: ResourceItem): true | undefined;
export {};