navigation.html 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <!-- navigation.html:手机端导航组件模板,实现符合大厂UI规范的导航界面 -->
  2. <div class="navigation-container">
  3. <!-- 顶部区域:地图显示区域 -->
  4. <div class="map-area">
  5. <div class="map-content">
  6. <!-- 地图容器 -->
  7. <div id="amap-container"></div>
  8. </div>
  9. </div>
  10. <!-- 顶部状态:输入框位于顶部,显示返回和搜索按钮 -->
  11. <div #topInputContainer class="input-container top-state" [class.visible]="isInputBoxAtTop()">
  12. <!-- 返回按钮 -->
  13. <button class="nav-button back-button" (click)="switchToBottomInput()">
  14. <i class="icon-back"></i>
  15. </button>
  16. <!-- 输入框 -->
  17. <input #topInput type="text" placeholder="请输入地址" class="location-input top-input" [(ngModel)]="searchKeyword"
  18. (ngModelChange)="onSearchKeywordChange()">
  19. <!-- 搜索按钮 -->
  20. <button class="nav-button search-button" (click)="performSearch()">
  21. <i class="icon-search"></i>
  22. </button>
  23. </div>
  24. <!-- 底部状态:输入框位于底部 -->
  25. <div class="bottom-controls">
  26. <div #bottomInputContainer class="input-container bottom-state" [class.visible]="!isInputBoxAtTop()"
  27. (click)="switchToTopInput()">
  28. <!-- 输入框 -->
  29. <input type="text" placeholder="请输入地址" class="location-input bottom-input">
  30. </div>
  31. <!-- 底部按钮区域 -->
  32. <div class="bottom-button-area" *ngIf="showRouteButton">
  33. <button class="route-btn" (click)="planRoute()">路线</button>
  34. <button class="navigate-btn">导航</button>
  35. </div>
  36. </div>
  37. <!-- 路线规划面板 -->
  38. <div class="route-panel" *ngIf="showRoutePanel">
  39. <!-- 路线类型选择 -->
  40. <div class="route-type-selector">
  41. <button
  42. [class.active]="routeType === 'driving'"
  43. (click)="switchRouteType('driving')"
  44. class="route-type-btn"
  45. >
  46. <i class="icon-driving"></i>
  47. <span>驾车</span>
  48. </button>
  49. <button
  50. [class.active]="routeType === 'walking'"
  51. (click)="switchRouteType('walking')"
  52. class="route-type-btn"
  53. >
  54. <i class="icon-walking"></i>
  55. <span>步行</span>
  56. </button>
  57. <button
  58. [class.active]="routeType === 'bus'"
  59. (click)="switchRouteType('bus')"
  60. class="route-type-btn"
  61. >
  62. <i class="icon-bus"></i>
  63. <span>公交</span>
  64. </button>
  65. </div>
  66. <!-- 路线结果面板 -->
  67. <div id="route-panel" class="route-result-panel"></div>
  68. </div>
  69. <!-- 搜索结果和历史记录区域 -->
  70. <div #historyPanel class="history-panel" [class.visible]="isInputBoxAtTop() || searchSuggestions.length > 0">
  71. <!-- 搜索提示结果区域(独立区域) -->
  72. <div class="search-results-section">
  73. <div class="section-header">
  74. <h3>搜索结果</h3>
  75. </div>
  76. <div class="search-results-list">
  77. <div class="search-result-item" *ngFor="let suggestion of searchSuggestions"
  78. (click)="selectSuggestion(suggestion)">
  79. <div class="result-icon">
  80. <i class="icon-poi"></i>
  81. </div>
  82. <div class="result-content">
  83. <div class="result-name-row">
  84. <div class="result-name">{{ suggestion.name }}</div>
  85. <div class="result-distance" *ngIf="suggestion.distance">{{ suggestion.distance }}</div>
  86. </div>
  87. <div class="result-address">{{ suggestion.district }} {{ suggestion.address }}</div>
  88. </div>
  89. </div>
  90. <div *ngIf="searchSuggestions.length === 0" class="no-results">
  91. 暂无搜索结果
  92. </div>
  93. </div>
  94. </div>
  95. <!-- 历史记录区域 -->
  96. <div class="history-section">
  97. <div class="section-header">
  98. <h3>搜索历史</h3>
  99. </div>
  100. <div class="history-list">
  101. <div class="history-item" *ngFor="let item of historyItems" (click)="selectHistoryItem(item)">
  102. <i class="icon-history"></i>
  103. <span class="history-text">{{ item }}</span>
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. </div>