xinelu-applet-ui/pagesB/location/location.vue
2024-06-25 18:25:50 +08:00

269 lines
6.4 KiB
Vue

<template>
<view class="location">
<view class="top_search">
<u-search @change="searchChange" v-model="searchValue" shape="round" @clear="clear" :clearabled="true"
:showAction="false" placeholder="请输入城市名"></u-search>
<view
style="width: 90%;margin: 0 auto; background: #fff;height: 200px; position: absolute;top: 40px;padding: 40rpx;box-shadow: 0pc 0px 10px #ccc;"
v-show="isShowFont">
<view @click="fontClick">{{ showFont }}</view>
</view>
</view>
<view class="atAddress">
<!-- 当前定位 -->
<text class="atAddress_txt">当前定位</text>
<view class="atAddress_city">
<view>
<image style="width: 30rpx;height: 38rpx;" :src="require('@/pagesC/images/dw2x.png')" mode="">
</image>
</view>
<view style="margin-left: 15rpx;"><text>{{ address }}</text></view>
<view class="atAddress_regain" style="margin-left: 27rpx;" @click="anewGain">重新获取...</view>
</view>
<!-- 推荐城市 -->
<view class="recommend_city">
<text class="atAddress_txt">推荐城市</text>
<view class="city_con">
<view class="city_item" @click="getAddressCon('1')">
<text>德州市</text>
</view>
<view class="city_item" @click="getAddressCon('2')">
<text>东营市</text>
</view>
<view class="city_item" @click="getAddressCon('3')">
<text>济南市</text>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
// 是否显示下拉的框
isShowFont: false,
// 显示什么字
showFont: '',
// 接收缓存地址 赋值
address: '',
searchValue: '',
}
},
onLoad() {
this.address = uni.getStorageSync('location')
if (!uni.getStorageSync('location')) {
this.getAddress()
}
},
methods: {
searchChange(value) {
if (value == '德' || value == '德州' || value == '东' || value == '东营' || value == '济' || value == '济南' ||
value == '东营市' || value == '德州市' || value == '济南市') {
this.isShowFont = true
if (value == '德' || value == '德州' || value == '德州市') {
this.showFont = '德州市'
} else if (value == '东' || value == '东营' || value == '东营市') {
this.showFont = '东营市'
} else if (value == '济' || value == '济南' || value == '济南市') {
this.showFont = '济南市'
}
} else {
this.isShowFont = false
}
},
fontClick() {
uni.setStorageSync('location', this.showFont)
this.isShowFont = false
this.address = uni.getStorageSync('location')
},
getAddressCon(value) {
if (value == '1') {
uni.setStorageSync('location', '德州市')
uni.setStorageSync("region", 1)
this.address = '德州市'
uni.navigateBack({
delta: 1
})
} else if (value == '2') {
uni.setStorageSync('location', '东营市')
uni.setStorageSync("region", 2)
this.address = '东营市'
uni.navigateBack({
delta: 1
})
} else if (value == '3') {
uni.setStorageSync('location', '济南市')
uni.setStorageSync("region", 3)
this.address = '济南市'
uni.navigateBack({
delta: 1
})
}
},
clear() {
this.searchValue = ''
},
// 重新获取城市
anewGain() {
this.getAddress()
},
//获取当前位置
getAddress() {
let that = this;
uni.getLocation({
type: 'wgs84',
//成功
success: (res) => {
// 逆地址解析 转市
let location = res.latitude + ',' + res.longitude
//调用逆解析接口
uni.request({
url: 'https://apis.map.qq.com/ws/geocoder/v1/?location=location', //腾讯官方逆解析接口,可直接复制
data: {
location: location,
'key': "7Y7BZ-PVXRA-IPYKT-C6YKF-YS3VF-LMFWJ", //自己申请的Key
},
method: "GET",
success(res) {
var address = res.data.result.address_component.city
if (address == '德州市') {
uni.setStorageSync("region", 1)
} else if (address == '东营市') {
uni.setStorageSync("region", 2)
} else if (address == '济南市') {
uni.setStorageSync("region", 3)
}
uni.setStorageSync('location', res.data.result.address_component
.city)
that.address = res.data.result.address_component.city
},
fail: res => {
console.log(res.errMsg, '解析失败返回的错误信息');
}
})
},
//失败
fail: (res) => {
// console.log('fail' + JSON.stringify(res))
uni.showToast({
icon: 'none',
title: '获取地址失败,请打开定位',
})
}
})
},
}
}
</script>
<style lang="scss">
.location {
margin-top: 20rpx;
.top_search {
position: relative;
width: 90%;
margin: 0 auto;
margin-bottom: 40rpx;
.u-search {
margin-top: 10px;
}
.u-icon__icon {
font-size: 26px !important;
}
.u-search__content {
height: 35px;
}
.u-search__content__input,
.u-search__content {
background: rgb(247, 249, 248) !important;
border-radius: 34px !important;
input::placeholder {
font-size: 20rpx !important;
}
}
}
.atAddress {
width: 90%;
margin: 0 auto;
margin-bottom: 43rpx;
.atAddress_txt {
font-size: 28rpx;
color: rgb(51, 51, 51);
font-family: "微软雅黑";
font-weight: 900;
}
.atAddress_city {
display: flex;
align-items: center;
margin-top: 36rpx;
text {
font-family: "微软雅黑";
font-weight: 900;
font-size: 30rpx;
}
.atAddress_regain {
height: 14px;
font-size: 24rpx;
color: rgb(93, 204, 227);
}
}
.recommend_city {
margin-top: 62rpx;
.city_con {
display: flex;
align-items: center;
margin-top: 32rpx;
justify-content: space-around;
.city_item {
width: 178rpx;
height: 68rpx;
background-color: rgb(246, 246, 246);
border-radius: 34rpx;
text-align: center;
line-height: 70rpx;
font-size: 24rpx;
text {
color: #999;
}
}
}
}
}
.city_list {
.province_txt {
width: 100%;
background-color: rgb(246, 246, 246);
color: rgb(102, 102, 102);
font-size: 24rpx;
height: 40rpx;
line-height: 40rpx;
}
.city_txt {
font-size: 28rpx;
color: rgb(51, 51, 51);
height: 80rpx;
line-height: 80rpx;
border-bottom: 1px solid #F6F6F6;
}
}
}
</style>