131 lines
3.6 KiB
Vue
131 lines
3.6 KiB
Vue
<template>
|
||
<view class="gg-header">
|
||
<view class="gg-header-location u-p-r-50" @click="show = true">
|
||
<text class="u-p-r-10">{{ currentPickUpArea }}</text>
|
||
<u-icon color="gray" name="arrow-down-fill" size="20"></u-icon>
|
||
</view>
|
||
<!-- 如果利用v-model操作,会造成searchKeyword对于父组件的二次重渲染问题,所以将value与blur拆分,
|
||
并且利用update:searchKeyword的方式将数据传递到父组件,并进行本组件的数据搜索操作 -->
|
||
<u-search
|
||
:clearabled="false"
|
||
:show-action="true"
|
||
:value="searchKeyword"
|
||
class="gg-header-search"
|
||
height="70"
|
||
input-align="left"
|
||
@blur="onBlurSearch"
|
||
@custom="searchLocation"
|
||
@search="searchLocation"
|
||
></u-search>
|
||
<u-picker v-model="show" :default-selector="[0]" :range="findAllList" mode="selector" range-key="regionName"
|
||
@confirm="findAllListConfirm"></u-picker>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import {mapState, mapMutations, mapActions} from 'vuex';
|
||
import {BAIDU_MAP_AK} from '../../common/const.js';
|
||
// 百度地址资料:https://lbsyun.baidu.com/index.php?title=wxjsapi/guide/geocoding
|
||
const bmap = require('../../common/bmap-wx.min.js');
|
||
const BMap = new bmap.BMapWX({
|
||
ak: BAIDU_MAP_AK
|
||
});
|
||
|
||
export default {
|
||
name: 'PickUpLocationHeader',
|
||
props: ['searchKeyword'],
|
||
data() {
|
||
return {
|
||
show: false,
|
||
latitude: '',
|
||
longitude: ''
|
||
};
|
||
},
|
||
computed: {
|
||
...mapState('pickUpLocationModule', ['findAllList', 'currentPickUpArea'])
|
||
},
|
||
methods: {
|
||
...mapMutations('pickUpLocationModule', ['setCurrentPickUpAreaMutation']),
|
||
...mapActions('pickUpLocationModule', ['getSysRegionFindAllListAction']),
|
||
findAllListConfirm(index) {
|
||
// 通过百度地图进行地址解析,返回经纬度,并通知父组件进行列表显示处理
|
||
// 发起geocoding检索请求
|
||
BMap.geocoding({
|
||
address: this.findAllList[index],
|
||
fail: e => {
|
||
console.log(e);
|
||
},
|
||
success: data => {
|
||
let wxMarkerData = data.wxMarkerData;
|
||
this.latitude = wxMarkerData[0].latitude;
|
||
this.longitude = wxMarkerData[0].longitude;
|
||
// 通过父组件查询数据
|
||
this.$emit('getSearchLeader', {
|
||
latitude: this.latitude,
|
||
longitude: this.longitude
|
||
});
|
||
|
||
this.setCurrentPickUpAreaMutation(this.findAllList[index])
|
||
}
|
||
});
|
||
},
|
||
searchLocation(value) {
|
||
if (value && value.trim().length > 0) {
|
||
BMap.geocoding({
|
||
address: value,
|
||
fail: e => {
|
||
console.log(e);
|
||
},
|
||
success: data => {
|
||
let wxMarkerData = data.wxMarkerData;
|
||
this.latitude = wxMarkerData[0].latitude;
|
||
this.longitude = wxMarkerData[0].longitude;
|
||
|
||
// 通过父组件查询数据
|
||
this.$emit('getSearchLeader', {
|
||
latitude: this.latitude,
|
||
longitude: this.longitude
|
||
});
|
||
}
|
||
});
|
||
}
|
||
},
|
||
onBlurSearch(value) {
|
||
this.$emit('update:searchKeyword', value);
|
||
}
|
||
},
|
||
watch: {
|
||
searchKeyword: {
|
||
handler(newVal, oldVal) {
|
||
console.log(newVal, oldVal)
|
||
this.searchLocation(newVal);
|
||
},
|
||
immediate: true
|
||
}
|
||
},
|
||
mounted() {
|
||
this.getSysRegionFindAllListAction();
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.gg {
|
||
&-header {
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
|
||
&-location {
|
||
text {
|
||
color: gray;
|
||
}
|
||
}
|
||
|
||
&-search {
|
||
flex: 1;
|
||
}
|
||
}
|
||
}
|
||
</style>
|