addressSearch.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <view class="page">
  3. <service-widget @btnClick="btn_click"></service-widget>
  4. <view class="search">
  5. <view class="region dis a-c j-s" style="position: absolute; z-index: 9;">
  6. <text>{{city}}</text>
  7. <view style="width: 1px;height: 60%;background-color: #999;"></view>
  8. </view>
  9. <u-search style="position: relative;" placeholder="请输入位置/地名等" v-model="address" :height='80'
  10. :animation='true' :input-style="{paddingLeft: '50px'}" @search="search" @custom="search">
  11. </u-search>
  12. </view>
  13. <view class="addressContent dis f-c">
  14. <view class="dis f-c" style="margin-bottom: 15px;" v-for="(item,index) in addressList" :key="index"
  15. @click="addressClick(item)">
  16. <text style="font-size: 16px;">{{item.name}}</text>
  17. <view class="dis a-c" style="color: #999;">
  18. <text>{{item.distance}}</text>
  19. <view style="width: 1px;height: 16px;background-color: #999;margin: 0 10px;"></view>
  20. <text>{{item.address}}</text>
  21. </view>
  22. </view>
  23. </view>
  24. </view>
  25. </template>
  26. <script>
  27. export default {
  28. data() {
  29. return {
  30. city: "",
  31. address: "",
  32. mapKey: '197d1a12301a306f82533a23651807b8',
  33. latitude: 0,
  34. longitude: 0,
  35. addressList: [],
  36. }
  37. },
  38. async onLoad(params) {
  39. if (!!params) {
  40. let data = JSON.parse(params.info);
  41. this.latitude = data.latitude;
  42. this.longitude = data.longitude;
  43. this.city = data.address.city;
  44. }
  45. },
  46. methods: {
  47. btn_click() {
  48. uni.navigateTo({
  49. url: '/pages/chat/chat'
  50. })
  51. },
  52. search(val) {
  53. this.address = val;
  54. this.addressConversion();
  55. },
  56. addressConversion() {
  57. uni.request({
  58. url: `https://restapi.amap.com/v3/place/around?key=${this.mapKey}&location=${this.longitude},${this.latitude}&radius=10000&types=&city=${this.city}&keywords=${this.address}`,
  59. method: "GET",
  60. success: (res) => {
  61. this.addressList = res.data.pois;
  62. this.addressList.map(val => {
  63. val.distance = this.conversion(val.distance);
  64. return val;
  65. })
  66. }
  67. });
  68. },
  69. conversion(data) {
  70. if (data < 1000) {
  71. return data + 'm'
  72. } else {
  73. return data / 1000 + 'km'
  74. }
  75. },
  76. addressClick(val) {
  77. let data = val.location.split(',')
  78. //选中之后返回上一页并修改数据
  79. let pages = getCurrentPages(); //获取所有页面栈实例列表
  80. let nowPage = pages[pages.length - 1]; //当前页页面实例
  81. let prevPage = pages[pages.length - 2]; //上一页页面实例
  82. prevPage.$vm.city = val.cityname; //城市
  83. prevPage.$vm.keywords = val.name; //关键词
  84. prevPage.$vm.latitude = data[1]; //经度
  85. prevPage.$vm.longitude = data[0]; //纬度
  86. uni.navigateBack({
  87. delta: 1
  88. });
  89. },
  90. }
  91. }
  92. </script>
  93. <style lang="scss" scoped>
  94. .mymap__map {
  95. width: 100%;
  96. height: 400px;
  97. }
  98. .search {
  99. padding: 10px;
  100. background-color: #fff;
  101. position: fixed;
  102. top: 44;
  103. left: 0;
  104. right: 0;
  105. z-index: 99;
  106. }
  107. .region {
  108. width: 70px;
  109. height: 40px;
  110. background-color: #f2f2f2;
  111. padding: 5px 10px;
  112. border-bottom-left-radius: 50px;
  113. border-top-left-radius: 50px;
  114. }
  115. .addressContent {
  116. padding: 20px;
  117. width: 100%;
  118. height: auto;
  119. background-color: #fff;
  120. position: absolute;
  121. top: 60px;
  122. view {
  123. font-size: 12px;
  124. }
  125. }
  126. </style>