卢春龙
2026-08-17 f525b6c3cc105bd1a997d893937689bebcc9570d
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
102
103
104
105
106
/**
 * 页面行程状态枚举:与历史 number 值保持 1:1 对齐,避免行为变化。
 */
export enum TripStatus {
  /** 发布行程 */
  PublishRoute = 1, 
  /** 发布中 */
  Publishing = 2, 
  /** 呼叫车中 */
  CallingCar = 3, 
  /** 车辆即将到达 */
  VehicleApproaching = 4, 
  /** 车辆到达上车点 */
  VehicleArrivedPickup = 5, 
  /** 车辆行驶中 */
  InService = 6, 
  /** 到达目的地 */
  ArrivedDestination = 7, 
  /** 行程已结束 */
  TripFinished = 8, 
  /** 支付成功 */
  PaymentSuccess = 9, 
  /** 取消订单时只展示上车点 */
  CancelOnlyPickup = 10, 
}
 
/**
 * socket 订单状态枚举:对应后端推送 status 字段。
 */
export enum SocketOrderStatus {
  /** 已取消 */
  Canceled = 0, 
  /** 待接单 */
  PendingAccept = 1, 
  /** 待出发 */
  PendingDeparture = 2, 
  /** 接驾中 */
  PickupOnTheWay = 3, 
  /** 待客上车 */
  WaitingPassenger = 4, 
  /** 乘客已上车 */
  PassengerOnboard = 5, 
  /** 服务中 */
  InProgress = 6, 
  /** 待客下车 */
  WaitingDropoff = 7, 
  /** 待付款 */
  PendingPayment = 8, 
  /** 待评价 */
  PendingComment = 9, 
  /** 已完成 */
  Completed = 10, 
}
 
/**
 * 取消订单弹窗类型枚举:与历史 number 值保持 1:1 对齐,避免行为变化。
 */
export enum CancelType {
  /** 呼叫车中/发布中取消:预计 N 分钟内有车应答 */
  CallingCar = 1,
  /** 接驾中取消:车辆还有 N 分钟/时长到达上车点 */
  VehicleApproaching = 2,
  /** 车辆已到达上车点后取消 */
  VehicleArrivedPickup = 3,
  /** 订单已取消(终态提示,可再来一单) */
  OrderCanceled = 4,
  /** 附近没有空余车辆,已自动取消订单 */
  NoAvailableVehicle = 5,
  /** 车辆无法继续服务,正在为您重新派车中 */
  Redispatching = 6,
  /** 行程中取消:预计 N 分钟到达目的地 */
  InService = 7,
}
 
const TRIP_STATUS_SET = new Set<number>(Object.values(TripStatus).filter((value) => typeof value === 'number') as number[]); // 行程状态值集合
const SOCKET_STATUS_SET = new Set<number>(Object.values(SocketOrderStatus).filter((value) => typeof value === 'number') as number[]); // socket 状态值集合
 
export const DEFAULT_TRIP_STATUS = TripStatus.PublishRoute; // 默认行程状态
 
/**
 * 将未知值安全转为行程状态,异常值回落到 fallback。
 */
export function toTripStatus(value: unknown, fallback: TripStatus = DEFAULT_TRIP_STATUS): TripStatus {
  const numericValue = Number(value); // 统一转数值
  if (!Number.isFinite(numericValue)) {
    return fallback;
  }
  if (!TRIP_STATUS_SET.has(numericValue)) {
    return fallback;
  }
  return numericValue as TripStatus;
}
 
/**
 * 将未知值安全转为 socket 状态,异常值回落到 fallback。
 */
export function toSocketOrderStatus(value: unknown, fallback: SocketOrderStatus = SocketOrderStatus.PendingAccept): SocketOrderStatus {
  const numericValue = Number(value); // 统一转数值
  if (!Number.isFinite(numericValue)) {
    return fallback;
  }
  if (!SOCKET_STATUS_SET.has(numericValue)) {
    return fallback;
  }
  return numericValue as SocketOrderStatus;
}