route.types.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { RouteEntity } from '@d8d/server/modules/routes/route.entity';
  2. import { ActivityEntity } from '@d8d/server/modules/activities/activity.entity';
  3. import { LocationResponse } from './location.types';
  4. import { VehicleType, TravelMode } from '@d8d/server/modules/routes/route.schema';
  5. // 路线类型定义
  6. export type Route = RouteEntity;
  7. // 路线创建请求
  8. export interface CreateRouteRequest {
  9. name: string;
  10. description?: string | null;
  11. startLocationId: number;
  12. endLocationId: number;
  13. pickupPoint: string;
  14. dropoffPoint: string;
  15. departureTime: Date;
  16. vehicleType: string;
  17. travelMode: string;
  18. price: number;
  19. seatCount: number;
  20. availableSeats: number;
  21. activityId: number;
  22. }
  23. // 路线更新请求
  24. export interface UpdateRouteRequest {
  25. name?: string;
  26. description?: string | null;
  27. startLocationId?: number;
  28. endLocationId?: number;
  29. pickupPoint?: string;
  30. dropoffPoint?: string;
  31. departureTime?: Date;
  32. vehicleType?: string;
  33. travelMode?: string;
  34. price?: number;
  35. seatCount?: number;
  36. availableSeats?: number;
  37. activityId?: number;
  38. isDisabled?: number;
  39. }
  40. // 路线响应
  41. export interface RouteResponse {
  42. id: number;
  43. name: string;
  44. description: string | null;
  45. startLocationId: number;
  46. endLocationId: number;
  47. startLocation: LocationResponse;
  48. endLocation: LocationResponse;
  49. pickupPoint: string;
  50. dropoffPoint: string;
  51. departureTime: Date;
  52. vehicleType: string;
  53. travelMode: string;
  54. price: number;
  55. seatCount: number;
  56. availableSeats: number;
  57. activityId: number;
  58. activity?: ActivityEntity;
  59. routeType: 'departure' | 'return';
  60. isDisabled: number;
  61. isDeleted: number;
  62. createdAt: Date;
  63. updatedAt: Date;
  64. }
  65. // 路线列表响应
  66. export interface RouteListResponse {
  67. items: RouteResponse[];
  68. total: number;
  69. page: number;
  70. pageSize: number;
  71. }
  72. // 路线搜索参数
  73. export interface RouteSearchParams {
  74. keyword?: string;
  75. vehicleType?: string;
  76. travelMode?: string;
  77. routeType?: 'departure' | 'return';
  78. minPrice?: number;
  79. maxPrice?: number;
  80. activityId?: number;
  81. isDisabled?: number;
  82. page?: number;
  83. pageSize?: number;
  84. sortBy?: string;
  85. sortOrder?: 'ASC' | 'DESC';
  86. }
  87. // 车辆型号枚举到中文的映射
  88. export const vehicleTypeMap = {
  89. 'bus': '大巴',
  90. 'minibus': '中巴',
  91. 'car': '小车',
  92. 'business': '商务车'
  93. } as const;
  94. // 获取车辆型号的中文显示
  95. export const getVehicleTypeText = (vehicleType: string) => {
  96. return vehicleTypeMap[vehicleType as keyof typeof vehicleTypeMap] || vehicleType || '未知车型';
  97. };
  98. // 出行方式枚举到中文的映射
  99. export const travelModeMap = {
  100. 'carpool': '拼车',
  101. 'charter': '包车'
  102. } as const;
  103. // 获取出行方式的中文显示
  104. export const getTravelModeText = (travelMode: string) => {
  105. return travelModeMap[travelMode as keyof typeof travelModeMap] || travelMode || '未知出行方式';
  106. };