/** 商品履约能力(与 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(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; }