46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
/** 商品履约能力(与 HQ / 交易硬闸一致) */
|
|
|
|
export type FulfillmentFlags = {
|
|
allowOnlinePurchase?: boolean | null;
|
|
allowOnSitePickup?: boolean | null;
|
|
allowCrossCityDelivery?: boolean | null;
|
|
};
|
|
|
|
/** 未返回时默认允许线上(存量商品) */
|
|
export function canBuyOnline(p: FulfillmentFlags): boolean {
|
|
return p.allowOnlinePurchase !== false;
|
|
}
|
|
|
|
/** 仅显式开启才展示现场取货 */
|
|
export function canPickupOnSite(p: FulfillmentFlags): boolean {
|
|
return p.allowOnSitePickup === true;
|
|
}
|
|
|
|
export function canCrossCity(p: FulfillmentFlags): boolean {
|
|
return p.allowCrossCityDelivery !== false;
|
|
}
|
|
|
|
export function normalizeFulfillmentFlags<T extends FulfillmentFlags>(p: T): T {
|
|
return {
|
|
...p,
|
|
allowOnlinePurchase: canBuyOnline(p),
|
|
allowOnSitePickup: canPickupOnSite(p),
|
|
allowCrossCityDelivery: canCrossCity(p),
|
|
};
|
|
}
|
|
|
|
/** 与交易侧一致:收货市 ≠ 开城市且 ≠ 郑州 → 跨城 */
|
|
export function isCrossCityAddress(
|
|
addressCity: string | null | undefined,
|
|
openCityName: string | null | undefined,
|
|
): boolean {
|
|
const addr = (addressCity || '').trim();
|
|
const open = (openCityName || '').trim();
|
|
if (!addr) return false;
|
|
if (addr === '郑州市') return false;
|
|
if (open && addr === open) return false;
|
|
// 尚无开城信息时,非郑州地址先按可能跨城处理(由预览接口最终裁定)
|
|
if (!open) return addr !== '郑州市';
|
|
return true;
|
|
}
|