Files
dukang/apps/mini-user/src/lib/product-fulfillment.ts
T
jacy 797b20979d feat(mini-user): v3.5.10 同城配送提示可配置并支持换行
承运商 HTML 按收货市下发;textarea 回车在 C 端转成换行。含门店去掉分享按钮与小程序企微客服。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-25 14:29:48 +08:00

51 lines
1.6 KiB
TypeScript

import { DEFAULT_LOCAL_DELIVERY_HINT } from '@dukang/shared-types';
/** @deprecated 使用 DEFAULT_LOCAL_DELIVERY_HINT;空配置回退 */
export const LOCAL_DELIVERY_ETA_HINT = DEFAULT_LOCAL_DELIVERY_HINT;
/** 商品履约能力(与 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;
}