search.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <template>
  2. <view class='app'>
  3. <view class="search-wrap">
  4. <view class="city" @click="navTo('cityList?city='+city)">
  5. <image class="icon"
  6. src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAC70lEQVRIS8VW7VXcMBDctQsAKshRQYRcAJcKIBUAFQAVhFSQowKggpAKuBTgRVcBRwWQAiTljZ/Ek235436hf3e2NTuzO7vL9EmHPwmXZgMrpRZlWZ4Q0dJ7v2TmfQTtvX9n5jURra21D8aY9zlkJoGVUvtFUVwS0VUEG7oYQRDRyjl3OxXAKLBSSpVleUdEKrDbENG9c84Q0TYEsCiKAs/Pmflr+M9Yay+MMXgvewaBAVoUxVNg+c9ae2qMgaSDp6qqUwRGRHtg75w7MsbEAFvfZYEhb1mWT2Dqvd8455ZT0sVbQ2rWgT2Yf8t9mwXWWt8w8w8iAtNF90NcHmVFYLnnZVmCKZj/FJGbrkw94BDxCyT23l+ICKRrTnj2i5nP04u898j7dRqA1ho5vwuSH3aD6wEnH2xEpCmqCBrlhxKwT3i0BDMi6smqtTZQpksA3/WAq6p6JKIT7/2tiFxFYK31ipkvvfd/nXMotMavQYVHZj4e+oaI/tR1jcL7ODnGKIzjUBQfVVxVFYD2rLUHAzl9g6wicpCotIRKCFZEoMwo8JaZv6TAoWu95C5IFIkBI5+NhZRSEbiVtqzUWuse42CvN+SxruujnJFjPlNFEuBZjBvgrg201j0lMpK+isgiUaGx5Vypo4cf6rr+sE3HHt9jFwOroih+5+xXVRWseJbzcs7HMS+tQgGLeFFOaiJqBRrejwWJ7tVqt0Odq5E15z8wD5OqGQjoXJhIaaPB/4lCLflj0KMt03u/FZHDAYajf8eamN0yky4Ve+21iKx2AZ/q9Vk7JRXZ9Fr8ttZivA3O1jSoMMOfQxpavX60gaQPk/a5DbN1dK0J7fOZmWGpXpucDTx3tibpmT3D5+xcWH9ghTiBeitNZ0XCDFdDm8doVXcLKVzcgIf5OtRAXsPkmqyHScZJW8S2GVca+LepdGZuRueuK9Js4CSPADxLVcEcds7dzN3LRu005ltskynjuq6xPOx0dmK8080TL38a8H+fVUE94KTW6AAAAABJRU5ErkJggg=="></image>
  7. <text>{{ city }}</text>
  8. <image class="c-icon"
  9. src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAvElEQVQ4T+3TwQ3CMAwF0G9lAQbgwgRlhEgegBEQm3UEFrCUEWACLgzAAlaQpQa1EJxK9MChvaVKXp3vmrDwQwt7WMHfE31lGGPchBBuAM4icppDM3MP4KCqu5TSw85MmsLMFyLqcs59CzWMiI4556uI7EsBE3CoMrXQMaaqsVT3UaG9aKEeVgU9tIV9BWuo5V0ye7/muIHupJTrA+iICNYAD3MrLF8d0LutVXU7bkDt11pnec7A+Xv+P8Mn98h9FeV7S88AAAAASUVORK5CYII="></image>
  10. </view>
  11. <input auto-focus class="input" focus maxlength="30" placeholder="请输入地址关键字搜索" @confirm='bindConfirm'
  12. @input="bindConfirm"></input>
  13. </view>
  14. <view class="addr-list">
  15. <view v-for="(item, index) in list" :key="index" class="addr-item b-b" @click="confirm(item)">
  16. <text class="title">{{ item.title }}</text>
  17. <text class="addr">{{ item.address }}</text>
  18. </view>
  19. </view>
  20. </view>
  21. </template>
  22. <script>
  23. const QQMapWX = require('./js/qqmap-wx-jssdk.min.js')
  24. var qqmapsdk = new QQMapWX({
  25. key: 'FALBZ-J2G3I-ZY5GX-5ATUZ-GHOOZ-YVFAR'
  26. })
  27. export default {
  28. data() {
  29. return {
  30. city: '',
  31. keyword: '',
  32. list: []
  33. }
  34. },
  35. onLoad(options) {
  36. uni.setNavigationBarTitle({
  37. title: '搜索地址'
  38. })
  39. this.city = options.city || '';
  40. },
  41. methods: {
  42. //选择地址
  43. confirm(item) {
  44. const pages = getCurrentPages()
  45. const prePages = pages[pages.length - 2].$vm
  46. prePages.tempAddress = item;
  47. prePages.position = {
  48. longitude: item.location.lng,
  49. latitude: item.location.lat,
  50. }
  51. prePages.map = {
  52. longitude: item.location.lng,
  53. latitude: item.location.lat,
  54. }
  55. // #ifdef H5 || MP-WEIXIN
  56. prePages.getAddressList(1); //h5没触发地图regionchange事件,需要手动调用获取新地址列表。微信小程序开发工具自动触发,真机不触发,同样需要调用一下。
  57. // #endif
  58. uni.navigateBack({
  59. delta: 1
  60. })
  61. },
  62. //搜索地址
  63. searchList() {
  64. qqmapsdk.getSuggestion({
  65. keyword: this.keyword,
  66. policy: 1, //默认0,常规策略 policy=1:本策略主要用于收货地址、上门服务地址的填写,
  67. page_size: 20, //每页条目数,最大限制为20条,默认值10
  68. page_index: 1,
  69. region: this.city || '全国',
  70. success: res => {
  71. this.list = res.data;
  72. },
  73. fail: err => {
  74. this.list = [];
  75. }
  76. })
  77. },
  78. bindConfirm(e) {
  79. this.keyword = e.detail.value;
  80. this.searchList()
  81. },
  82. navTo(url) {
  83. uni.navigateTo({
  84. url
  85. })
  86. }
  87. }
  88. }
  89. </script>
  90. <style lang="scss" scoped>
  91. view {
  92. box-sizing: border-box;
  93. }
  94. .app {
  95. padding-top: 100 rpx;
  96. }
  97. .search-wrap {
  98. position: fixed;
  99. left: 0;
  100. top: var(--window-top);
  101. z-index: 90;
  102. display: flex;
  103. background-color: #fff;
  104. align-items: center;
  105. width: 100%;
  106. height: 100 rpx;
  107. padding: 0 30 rpx;
  108. background-color: #fff;
  109. .city {
  110. display: flex;
  111. align-items: center;
  112. justify-content: center;
  113. font-size: 30 rpx;
  114. color: #333;
  115. }
  116. .icon {
  117. width: 34 rpx;
  118. height: 34 rpx;
  119. margin-right: 4 rpx;
  120. }
  121. .c-icon {
  122. width: 22 rpx;
  123. height: 22 rpx;
  124. margin-left: 4 rpx;
  125. }
  126. .input {
  127. flex: 1;
  128. margin-left: 16 rpx;
  129. padding: 0 28 rpx;
  130. height: 70 rpx;
  131. line-height: 70 rpx;
  132. font-size: 30 rpx;
  133. color: #333;
  134. background-color: #f5f5f5;
  135. border-radius: 100 rpx;
  136. }
  137. }
  138. .addr-list {
  139. background-color: #fff;
  140. .addr-item {
  141. display: flex;
  142. flex-direction: column;
  143. padding: 24 rpx 30 rpx;
  144. position: relative;
  145. &:after {
  146. position: absolute;
  147. z-index: 3;
  148. left: 0;
  149. top: auto;
  150. bottom: 0;
  151. right: 0;
  152. height: 0;
  153. content: '';
  154. transform: scaleY(.5);
  155. border-bottom: 1px solid #e5e5e5;
  156. }
  157. }
  158. .left {
  159. flex: 1;
  160. display: flex;
  161. flex-direction: column;
  162. padding-right: 50 rpx;
  163. }
  164. .title {
  165. font-size: 28 rpx;
  166. color: #303133;
  167. }
  168. .addr {
  169. margin-top: 10 rpx;
  170. font-size: 24 rpx;
  171. color: #909399;
  172. line-height: 1.4;
  173. }
  174. }
  175. </style>