All files / src/entities/fulfillment/model fulfillmentStatus.ts

38.46% Statements 5/13
25% Branches 3/12
100% Functions 2/2
38.46% Lines 5/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101                        5x                                             3x                                         2x                                                             26x                     26x    
import type { Fulfillment, FulfillmentStatusHistory } from "@plain-journal/foundation";
 
export interface FulfillmentStatusPresentation {
  label: string;
  title: string;
  detail: string;
  tone: "active" | "success" | "warning" | "muted";
}
 
export function fulfillmentStatusPresentation(
  fulfillment: Fulfillment,
): FulfillmentStatusPresentation {
  switch (fulfillment.status) {
    case "CREATED":
      return {
        label: "待拣货",
        title: "履约单已经建立",
        detail: "Payment 成功事实已推进到 Fulfillment,仓库尚未开始拣货。",
        tone: "active",
      };
    case "PICKING":
      return {
        label: "拣货中",
        title: "仓库正在拣货",
        detail: "商品正在按订单快照准备,尚未完成打包。",
        tone: "active",
      };
    case "PACKED":
      return {
        label: "已打包",
        title: "包裹等待发出",
        detail: "仓库已完成打包,承运商和运单将在发货后显示。",
        tone: "active",
      };
    case "SHIPPED":
      return {
        label: "已发货",
        title: "包裹已经发出",
        detail: "发货事实已经确认,物流轨迹会按承运商事件追加。",
        tone: "active",
      };
    case "IN_TRANSIT":
      return {
        label: "运输中",
        title: "包裹正在运输",
        detail: "物流节点是追加事实,刷新页面可读取最新轨迹。",
        tone: "active",
      };
    case "DELIVERING":
      return {
        label: "派送中",
        title: "包裹正在派送",
        detail: "确认实际收到商品后,才使用确认收货动作。",
        tone: "active",
      };
    case "SIGNED":
      return {
        label: "已签收",
        title: "签收事实已经确认",
        detail: "Fulfillment 已记录签收,Trade 将通过消息最终收敛订单状态。",
        tone: "success",
      };
    case "EXCEPTION":
      return {
        label: "异常",
        title: "履约需要处理",
        detail: "异常事实已被保留,不会把未完成履约伪装成已签收。",
        tone: "warning",
      };
    case "CANCELED":
      return {
        label: "已取消",
        title: "履约已经取消",
        detail: "当前履约单不再继续推进。",
        tone: "muted",
      };
    default:
      return {
        label: "待确认",
        title: "履约状态待确认",
        detail: "请刷新 Fulfillment 状态,以服务端事实为准。",
        tone: "warning",
      };
  }
}
 
export function fulfillmentHistoryLabel(item: FulfillmentStatusHistory): string {
  const labels: Record<string, string> = {
    CREATED: "履约单建立",
    PICKING: "开始拣货",
    PACKED: "完成打包",
    SHIPPED: "包裹发出",
    IN_TRANSIT: "运输途中",
    DELIVERING: "正在派送",
    SIGNED: "确认签收",
    EXCEPTION: "履约异常",
    CANCELED: "履约取消",
  };
  return labels[item.toStatus] ?? item.toStatus;
}