RouteApi.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import { UpdateServerRequestModule } from '@/api/RequestModules';
  2. import { DataModel } from '@imengyu/js-request-transform';
  3. export class RouteApi extends UpdateServerRequestModule<DataModel> {
  4. constructor() {
  5. super();
  6. }
  7. async getRouteInfo(outlinkId: number) {
  8. return (await this.get<RouteInfo>('/scenic-spot-route/get-by-outlink-id/' + outlinkId, '获取路线信息')).data;
  9. }
  10. }
  11. export interface RouteInfo {
  12. id: number;
  13. intro: string;
  14. outlinkId: number;
  15. items: {
  16. id: number;
  17. atDay: number;
  18. costDays: number;
  19. order: number;
  20. routeId: number;
  21. scenicSpot: {
  22. id: number;
  23. name: string;
  24. address: string;
  25. latitude: number;
  26. longitude: number;
  27. image: string;
  28. images: string[];
  29. intro: string;
  30. outlinkId: number;
  31. },
  32. scenicSpotId: number;
  33. toNextRoute: {
  34. bicycling: RouteToNextRouteData;
  35. driving: RouteToNextRouteData;
  36. walking: RouteToNextRouteData;
  37. ebicycling: RouteToNextRouteData;
  38. transit: {
  39. distance: number
  40. duration: number;
  41. steps: ({
  42. direction: string;
  43. distance: number;
  44. duration: number;
  45. mode: 'WALKING';
  46. polyline: number[];
  47. steps: RouteToNextRouteData;
  48. }|{
  49. mode: 'TRANSIT';
  50. lines: {
  51. destination: {id: string, title: string};
  52. distance: number;
  53. duration: number;
  54. end_time: string;
  55. getoff: {id: string, title: string, location: {lat: number, lng: number}};
  56. geton: {id: string, title: string, location: {lat: number, lng: number}};
  57. id: string;
  58. polyline: number[];
  59. price: number;
  60. running_status: number;
  61. start_time: string;
  62. station_count: number;
  63. stations: {id: string, title: string, location: {lat: number, lng: number}}[];
  64. title: string;
  65. vehicle: string;
  66. }[];
  67. })[];
  68. };
  69. };
  70. toNextBestWay: '' | RouteToNextBestWay;
  71. }[];
  72. }
  73. export type RouteToNextBestWay = 'driving' | 'walking' | 'bicycling' | 'ebicycling' | 'transit';
  74. interface RouteToNextRouteData {
  75. distance: number
  76. duration: number;
  77. polyline: number[];
  78. steps: {
  79. act_desc: string;
  80. dir_desc: string;
  81. distance: number;
  82. instruction: string;
  83. polyline_idx: number[];
  84. road_class: number;
  85. road_name: string;
  86. }[];
  87. }
  88. export function formatDistance(distance: number) {
  89. if (distance < 1000) {
  90. return distance + '米';
  91. } else {
  92. return (distance / 1000).toFixed(2) + 'km';
  93. }
  94. }
  95. export function formatDuration(duration: number) {
  96. if (duration >= 60)
  97. return Math.floor(duration / 60) + '小时' + (duration % 60) + '分钟';
  98. return duration + '分钟';
  99. }
  100. export function getRouteToNextBestWayText(way: RouteToNextBestWay|'') {
  101. switch (way) {
  102. case 'driving':
  103. return '🚗 驾车';
  104. case 'walking':
  105. return '🚶 步行';
  106. case 'ebicycling':
  107. return '🚴 电动车';
  108. case 'bicycling':
  109. return '🚴 自行车';
  110. case 'transit':
  111. return '🚌 公交';
  112. default:
  113. return '🔄 灵活选择';
  114. }
  115. }
  116. export default new RouteApi();