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.
352 lines
8.4 KiB
352 lines
8.4 KiB
2 years ago
|
<!-- 自提点 -->
|
||
|
<template>
|
||
|
<view class="map-box">
|
||
|
<!-- 标题栏 -->
|
||
|
<shopro-navbar>
|
||
|
<view class="search-wrap u-flex" slot="content">
|
||
|
<u-search
|
||
|
class="u-m-r-20"
|
||
|
placeholder="输入自提点名称"
|
||
|
@change="onSearch"
|
||
|
@search="onSearch"
|
||
|
@clear="clearSearch"
|
||
|
v-model="searchVal"
|
||
|
:showAction="false"
|
||
|
height="60"
|
||
|
></u-search>
|
||
|
</view>
|
||
|
</shopro-navbar>
|
||
|
|
||
|
<map id="map" :style="{ width: '750rpx', height: mapHeight + 'px' }" :latitude="latitude" :longitude="longitude" show-location @tap="onMap"></map>
|
||
|
<view class="dragLayer safe-area-inset-bottom" :class="moveCard">
|
||
|
<view class="oilStation">
|
||
|
<!-- 上下箭头 -->
|
||
|
<view class="oilStation-top">
|
||
|
<view class="touch-guide u-flex u-row-center u-col-center" @tap="onShowCard">
|
||
|
<image class="touch-jintou" :src="$IMG_URL + (showCard ? '/imgs/order/arrows2.png' : '/imgs/order/arrows1.png')" mode=""></image>
|
||
|
</view>
|
||
|
</view>
|
||
|
|
||
|
<!-- 自提点列表 -->
|
||
|
<scroll-view class="oilStation-bottom" enable-back-to-top scroll-y @scrolltolower="loadMore">
|
||
|
<view class=" list-content">
|
||
|
<u-radio-group style="width: 100%;" v-model="storeId" active-color="#e9b561">
|
||
|
<view style="width: 100%;" @tap="selStoreAddress(address.id, index)" v-for="(address, index) in addressList" :key="address.id">
|
||
|
<view class="address-item u-flex u-col-center u-row-between">
|
||
|
<view class="address-left">
|
||
|
<!-- 门店 -->
|
||
|
<view class="address-name">{{ address.name }}</view>
|
||
|
<!-- 时间 -->
|
||
|
<view class="time-box ">
|
||
|
<view class=" u-flex u-col-center">
|
||
|
<text class="u-iconfont uicon-clock u-m-r-20" style="color: #999;"></text>
|
||
|
{{ address.openhours }}
|
||
|
</view>
|
||
|
<view class="u-flex u-col-center u-p-l-30 u-m-t-20">
|
||
|
<text v-for="week in address.openweeks_arr" :key="week">{{ weekMap[week] }}、</text>
|
||
|
</view>
|
||
|
</view>
|
||
|
<!-- 地址 -->
|
||
|
<view class="address-detail u-flex u-col-center">
|
||
|
<text class="u-iconfont uicon-map u-m-r-20" style="color: #999;"></text>
|
||
|
{{ address.province_name }}{{ address.city_name }}{{ address.area_name }}{{ address.address }}
|
||
|
</view>
|
||
|
<!-- 电话 -->
|
||
|
<view class="address-phone u-flex u-col-center">
|
||
|
<text class="u-iconfont uicon-phone u-m-r-20" style="color: #999;"></text>
|
||
|
{{ address.phone }}
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class="address-right u-flex-col u-row-center u-col-center">
|
||
|
<u-radio :name="address.id"></u-radio>
|
||
|
<text class="address-distance u-m-t-10">{{ address.distance_text || 0 }}</text>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</u-radio-group>
|
||
|
|
||
|
<!-- 更多 -->
|
||
|
<u-loadmore v-if="addressList.length" height="80rpx" :status="loadStatus" icon-type="flower" color="#ccc" />
|
||
|
</view>
|
||
|
</scroll-view>
|
||
|
<view class="foot_box u-flex u-row-center u-col-center"><button class="u-reset-button save-btn" @tap="onSave">确认</button></view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
export default {
|
||
|
data() {
|
||
|
return {
|
||
|
longitude: 0,
|
||
|
latitude: 0,
|
||
|
mapHeight: 0,
|
||
|
showCard: false,
|
||
|
moveCard: 'dragLayer-bottom',
|
||
|
distance: 0,
|
||
|
storeId: 0, //默认门店ID
|
||
|
addressList: [], //门店列表
|
||
|
storeInfo: [], //当前门店信息
|
||
|
weekMap: {
|
||
|
1: '周一',
|
||
|
2: '周二',
|
||
|
3: '周三',
|
||
|
4: '周四',
|
||
|
5: '周五',
|
||
|
6: '周六',
|
||
|
7: '周日'
|
||
|
},
|
||
|
loadStatus: 'loadmore',
|
||
|
currentPage: 1,
|
||
|
lastPage: 1,
|
||
|
searchVal: ''
|
||
|
};
|
||
|
},
|
||
|
computed: {},
|
||
|
onLoad(options) {
|
||
|
this.latitude = this.$Route.query.lat;
|
||
|
this.longitude = this.$Route.query.lng;
|
||
|
this.storeId = this.$Route.query.storeId;
|
||
|
this.getStoreAddress();
|
||
|
},
|
||
|
onReady() {
|
||
|
this.editHeight();
|
||
|
},
|
||
|
methods: {
|
||
|
// 选中门店
|
||
|
onSave() {
|
||
|
if (this.storeId) {
|
||
|
uni.$emit('SELECT_STORE', { storeInfo: JSON.stringify(this.storeInfo) });
|
||
|
this.$Router.back();
|
||
|
} else {
|
||
|
this.$u.toast('请选择门店');
|
||
|
}
|
||
|
},
|
||
|
// 搜索
|
||
|
onSearch() {
|
||
|
this.addressList = [];
|
||
|
this.$u.debounce(this.getStoreAddress());
|
||
|
},
|
||
|
|
||
|
// 清除搜索框
|
||
|
clearSearch() {
|
||
|
this.searchVal = '';
|
||
|
this.onSearch();
|
||
|
},
|
||
|
// 设置地图,卡片高度。
|
||
|
editHeight() {
|
||
|
let that = this;
|
||
|
uni.getSystemInfo({
|
||
|
success: res => {
|
||
|
let view = uni
|
||
|
.createSelectorQuery()
|
||
|
.in(this)
|
||
|
.select('.dragLayer');
|
||
|
view.fields(
|
||
|
{
|
||
|
size: true,
|
||
|
scrollOffset: true
|
||
|
},
|
||
|
data => {
|
||
|
that.mapHeight = res.windowHeight - data.height;
|
||
|
//#ifdef APP-PLUS
|
||
|
that.mapHeight = res.windowHeight - data.height - 40;
|
||
|
//#endif
|
||
|
}
|
||
|
).exec();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
// 点击地图
|
||
|
onMap() {
|
||
|
this.showCard = false;
|
||
|
this.moveCard = 'dragLayer-bottom';
|
||
|
},
|
||
|
// 选择门店
|
||
|
selStoreAddress(id, index) {
|
||
|
this.storeId = id;
|
||
|
this.latitude = this.addressList[index].latitude;
|
||
|
this.longitude = this.addressList[index].longitude;
|
||
|
this.storeInfo = this.addressList[index];
|
||
|
},
|
||
|
loadMore() {
|
||
|
if (this.currentPage < this.lastPage) {
|
||
|
this.currentPage += 1;
|
||
|
this.getStoreAddress();
|
||
|
}
|
||
|
},
|
||
|
// 获取商品支持的自提点。
|
||
|
getStoreAddress() {
|
||
|
let that = this;
|
||
|
that.loadStatus = 'loading';
|
||
|
that.$http('goods.regimentDelivery', {
|
||
|
id: that.$Route.query.goodsId,
|
||
|
latitude: that.$Route.query.lat,
|
||
|
longitude: that.$Route.query.lng,
|
||
|
keyword: that.searchVal,
|
||
|
page: that.currentPage,
|
||
|
per_page: 3
|
||
|
}).then(res => {
|
||
|
if (res.code == 1) {
|
||
|
that.addressList = [...that.addressList, ...res.data.data];
|
||
|
that.lastPage = res.data.last_page;
|
||
|
that.loadStatus = that.currentPage < res.data.last_page ? 'loadmore' : 'nomore';
|
||
|
if (this.currentPage === 1) {
|
||
|
this.storeId = res.data.data[0].id;
|
||
|
this.storeInfo = res.data.data[0];
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
|
||
|
// 点击显隐
|
||
|
onShowCard() {
|
||
|
this.showCard = !this.showCard;
|
||
|
this.moveCard = this.showCard ? 'dragLayer-top' : 'dragLayer-bottom';
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss">
|
||
|
.search-wrap {
|
||
|
/* #ifdef MP-WEIXIN */
|
||
|
width: 460rpx;
|
||
|
/* #endif */
|
||
|
/* #ifndef MP-WEIXIN */
|
||
|
width: 100%;
|
||
|
/* #endif */
|
||
|
}
|
||
|
/* 浮层 */
|
||
|
.dragLayer {
|
||
|
width: 750rpx;
|
||
|
position: fixed;
|
||
|
z-index: 996;
|
||
|
background-color: #fff;
|
||
|
border-top-left-radius: 20rpx;
|
||
|
border-top-right-radius: 20rpx;
|
||
|
bottom: 0;
|
||
|
box-shadow: 0px 1rpx 18rpx 0px rgba(83, 83, 83, 0.35);
|
||
|
display: flex;
|
||
|
height: 100%;
|
||
|
}
|
||
|
|
||
|
// 点击上下
|
||
|
.dragLayer-bottom {
|
||
|
height: 450rpx !important;
|
||
|
/*#ifdef APP-PLUS */
|
||
|
height: 800rpx !important;
|
||
|
/*#endif*/
|
||
|
transition: all ease-in-out 0.2s;
|
||
|
}
|
||
|
.dragLayer-top {
|
||
|
height: 800rpx !important;
|
||
|
transition: all ease-in-out 0.2s;
|
||
|
}
|
||
|
.oilStation {
|
||
|
width: 690rpx;
|
||
|
margin: 0 30rpx;
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
flex: 1;
|
||
|
height: 100%;
|
||
|
}
|
||
|
.oilStation-top {
|
||
|
justify-content: center;
|
||
|
align-items: center;
|
||
|
flex-direction: column;
|
||
|
}
|
||
|
.touch-guide {
|
||
|
justify-content: center;
|
||
|
align-items: center;
|
||
|
height: 100rpx;
|
||
|
}
|
||
|
.touch-jintou {
|
||
|
width: 60rpx;
|
||
|
height: 8rpx;
|
||
|
}
|
||
|
// 确认门店
|
||
|
.foot_box {
|
||
|
height: 100rpx;
|
||
|
background-color: #fff;
|
||
|
.save-btn {
|
||
|
color: #fff;
|
||
|
width: 690rpx;
|
||
|
line-height: 80rpx;
|
||
|
background: linear-gradient(90deg, rgba(233, 181, 97, 1), rgba(238, 204, 138, 1));
|
||
|
box-shadow: 1rpx 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
|
||
|
border-radius: 40rpx;
|
||
|
font-size: 28rpx;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 自提点列表
|
||
|
.oilStation-bottom {
|
||
|
justify-content: space-between;
|
||
|
align-items: center;
|
||
|
flex-direction: row;
|
||
|
flex: 1;
|
||
|
height: 100%;
|
||
|
overflow: hidden;
|
||
|
}
|
||
|
.list-content {
|
||
|
background-color: #fff;
|
||
|
overflow-x: hidden;
|
||
|
}
|
||
|
.address-item {
|
||
|
border-bottom-width: 1px;
|
||
|
border-bottom-style: solid;
|
||
|
border-bottom-color: #eef1f4;
|
||
|
padding: 15rpx 0 15rpx;
|
||
|
width: 100%;
|
||
|
justify-content: space-between;
|
||
|
align-items: center;
|
||
|
flex-direction: row;
|
||
|
}
|
||
|
.address-name {
|
||
|
font-size: 30rpx;
|
||
|
|
||
|
font-weight: 600;
|
||
|
color: rgba(51, 51, 51, 1);
|
||
|
margin-bottom: 30rpx;
|
||
|
}
|
||
|
.time-box,
|
||
|
.address-detail,
|
||
|
.address-phone {
|
||
|
flex-direction: row;
|
||
|
align-items: center;
|
||
|
font-size: 24rpx;
|
||
|
|
||
|
font-weight: 400;
|
||
|
color: #666;
|
||
|
margin-bottom: 20rpx;
|
||
|
}
|
||
|
.address-icon {
|
||
|
color: #bdbdbd;
|
||
|
margin-right: 10rpx;
|
||
|
font-size: 30rpx;
|
||
|
}
|
||
|
.address-left {
|
||
|
flex: 1;
|
||
|
}
|
||
|
.address-right {
|
||
|
align-items: center;
|
||
|
color: #a8700e;
|
||
|
font-size: 24rpx;
|
||
|
margin-bottom: 20rpx;
|
||
|
white-space: nowrap;
|
||
|
}
|
||
|
.more {
|
||
|
width: 750rpx;
|
||
|
height: 90rpx;
|
||
|
justify-content: center;
|
||
|
align-items: center;
|
||
|
}
|
||
|
|
||
|
.more-text {
|
||
|
font-size: 24rpx;
|
||
|
color: #ccc;
|
||
|
}
|
||
|
</style>
|