You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

175 lines
5.1 KiB

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