|
|
/**
|
|
|
* MotherShip 登录态官网硬约束(与 dashboard Create shipment 对齐)
|
|
|
*/
|
|
|
export const MOTHERSHIP_MAX_WEIGHT_EACH_LB = 5000;
|
|
|
|
|
|
/** YYYY-MM-DD → 本地 noon 解析,避免 UTC 偏移改星期 */
|
|
|
export function parseIsoDateLocal(iso: string): Date | null {
|
|
|
const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(iso.trim());
|
|
|
if (!m) return null;
|
|
|
const d = new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]), 12, 0, 0);
|
|
|
return Number.isNaN(d.getTime()) ? null : d;
|
|
|
}
|
|
|
|
|
|
export function toIsoDateLocal(d: Date): string {
|
|
|
const yyyy = d.getFullYear();
|
|
|
const mm = String(d.getMonth() + 1).padStart(2, "0");
|
|
|
const dd = String(d.getDate()).padStart(2, "0");
|
|
|
return `${yyyy}-${mm}-${dd}`;
|
|
|
}
|
|
|
|
|
|
/** 周六=6 / 周日=0 不可选 */
|
|
|
export function isMothershipWeekendIso(iso: string): boolean {
|
|
|
const d = parseIsoDateLocal(iso);
|
|
|
if (!d) return false;
|
|
|
const day = d.getDay();
|
|
|
return day === 0 || day === 6;
|
|
|
}
|
|
|
|
|
|
/** 若落在周末,拨到下一工作日(周一) */
|
|
|
export function snapMothershipReadyDateToWeekday(iso: string): string {
|
|
|
const d = parseIsoDateLocal(iso);
|
|
|
if (!d) return iso;
|
|
|
const day = d.getDay();
|
|
|
if (day === 6) d.setDate(d.getDate() + 2);
|
|
|
else if (day === 0) d.setDate(d.getDate() + 1);
|
|
|
return toIsoDateLocal(d);
|
|
|
}
|
|
|
|
|
|
/** 今天 YYYY-MM-DD(本地) */
|
|
|
export function todayIsoDateLocal(): string {
|
|
|
return toIsoDateLocal(new Date());
|
|
|
}
|
|
|
|
|
|
/** 默认可提货日:今天若为周末则拨到周一 */
|
|
|
export function defaultMothershipReadyDateIso(): string {
|
|
|
return snapMothershipReadyDateToWeekday(todayIsoDateLocal());
|
|
|
}
|
|
|
|
|
|
/** date input min:与官网一致,不可早于最近工作日 */
|
|
|
export function minMothershipReadyDateIso(): string {
|
|
|
return defaultMothershipReadyDateIso();
|
|
|
}
|
|
|
|
|
|
/** 所有 MotherShip 日期字段统一规范化 */
|
|
|
export function normalizeMothershipReadyDateIso(iso: string | undefined): string | undefined {
|
|
|
const trimmed = iso?.trim();
|
|
|
if (!trimmed) return undefined;
|
|
|
return snapMothershipReadyDateToWeekday(trimmed);
|
|
|
}
|
|
|
|
|
|
/** 单件重量(Weight each)不得超过 5000 lb */
|
|
|
export function isMothershipWeightEachAllowed(weightEachLb: number): boolean {
|
|
|
return (
|
|
|
Number.isFinite(weightEachLb) &&
|
|
|
weightEachLb > 0 &&
|
|
|
weightEachLb <= MOTHERSHIP_MAX_WEIGHT_EACH_LB
|
|
|
);
|
|
|
}
|