hengmei-two/pagesA/myAddress/myAddress.vue

367 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view>
<!-- 状态栏 -->
<status-nav :titleVal="'地址管理'" :statusTitle="true"></status-nav>
<view :style="{paddingTop:statusHNH+'px'}" class="mar-sx20 pad-zy32" style="padding-bottom: 150rpx;">
<view v-if="loading">
<view @tap="goBack(index)" v-for="(item,index) in dataList" :key="index" class="bacf radius20 pad20 mar-x20">
<view class="pad-y20 disjbac">
<view class="fon28 col3 bold">{{item.userName}} {{item.userPhone}}</view>
<image v-if="item.isActive" src="/static/public/chooseQuan.png" class="address_active" mode=""></image>
</view>
<view class="fon24 col9 mar-s25">{{item.userAddress}}</view>
<view class="disjbac fon28 col3 mar-s32">
<view @tap.stop="setMo(index)" class="disac">
<image v-if="item.isActive" src="/static/public/chooseQuan.png" class="address_active" mode=""></image>
<image v-else src="/static/public/cancle-FS.png" class="address_active" mode=""></image>
<view class="mar-z10" :class="item.isActive?'':'col9'">设为默认地址</view>
</view>
<view class="disac" style="color: #808080;">
<view @tap.stop="editAddress(index)">编辑</view>
<view @tap.stop="delAddress(index)" class="mar-y10 mar-z50">删除</view>
</view>
</view>
</view>
<view @tap.stop="obtainLngLat" class="posixzy address_add" style="bottom: 20rpx;">添加地址</view>
<view style="margin-top: 50%;">
<nothing-page v-if="dataList.length==0" :content="'暂无可用地址'"></nothing-page>
</view>
</view>
</view>
<!-- 添加地址、修改地址 -->
<view v-if="idEdit" @tap.stop="idEdit=false" class="posAll disjcac" style="padding: 0 46rpx;z-index: 3;">
<view class="bacf width100" @tap.stop="idEdit=true" style="padding: 0 55rpx;border-radius: 23rpx;">
<view class="pad-sx20 posir">
<view class="fon28 bold col3 width100 tc">收件人地址</view>
<image class="posia address-close-btn" @tap.stop="idEdit=false" src="/static/public/addressClose.png" mode="aspectFill"></image>
</view>
<view class="pad-sx20 fon28 col3">
<view class="fon26 col9 mar-s30">收件人</view>
<view class="bbot mar-s30 pad-x10">
<input type="text" class="width100" v-model="userName" placeholder="请输入姓名" />
</view>
<view class="fon26 col9 mar-s30">手机号码</view>
<view class="bbot mar-s30 pad-x10">
<input type="num" maxlength="11" class="width100" v-model="userPhone" placeholder="请输入联系电话" />
</view>
<view class="fon26 col9 mar-s30">地址</view>
<view class="disjbac">
<view class="bbot mar-s30 pad-x10 posir disac" @tap="chooseProvinceCityCounty(0)">
<input type="text" class="width100 pad-y20" disabled v-model="userProvince" placeholder="四川" />
<view class="posia disjcac fc xiao-sanj" style="right: 0;">
<image src="/static/public/address-top.png" mode=""></image>
<image src="/static/public/address-down.png" mode=""></image>
</view>
<view :class="isAddress==1?'dong':''" class="posia info-box">
<view @tap.stop="chooseProvince(index)" class="clips1" v-for="(item,index) in provinceArr" :key="index">{{item.name}}</view>
</view>
</view>
<view class="bbot mar-s30 pad-x10 posir disac mar-zy30" @tap="chooseProvinceCityCounty(1)">
<input type="text" class="width100 pad-y20" disabled v-model="userCity" placeholder="成都" />
<view class="posia disjcac fc xiao-sanj" style="right: 0;">
<image src="/static/public/address-top.png" mode=""></image>
<image src="/static/public/address-down.png" mode=""></image>
</view>
<view :class="isAddress==2?'dong':''" class="posia info-box">
<view @tap.stop="chooseCity(index)" class="clips1" v-for="(item,index) in cityArr" :key="index">{{item.name}}</view>
</view>
</view>
<view class="bbot mar-s30 pad-x10 posir disac" @tap="chooseProvinceCityCounty(2)">
<input type="text" class="width100 pad-y20" disabled v-model="userCounty" placeholder="成华区" />
<view class="posia disjcac fc xiao-sanj" style="right: 0;">
<image src="/static/public/address-top.png" mode=""></image>
<image src="/static/public/address-down.png" mode=""></image>
</view>
<view :class="isAddress==3?'dong':''" class="posia info-box">
<view @tap.stop="chooseCounty(index)" class="clips1" v-for="(item,index) in countyArr" :key="index">{{item.name}}</view>
</view>
</view>
</view>
<view class="fon26 col9 mar-s30">详细地址</view>
<view class="bbot mar-s30 pad-x10">
<input type="text" class="width100" v-model="userAddress" placeholder="请输入详细地址" />
</view>
<!-- 确认保存按钮 -->
<view @tap.stop="addAddress" class="address-btn-add"></view>
</view>
</view>
</view>
<!-- -->
<auth-userInfo-mobileInfo></auth-userInfo-mobileInfo>
</view>
</template>
<script>
import {lotusAddressJson} from '@/components/city/city.js';
export default {
data() {
return {
statusHNH:uni.getStorageSync('electric_nav_height'),
publicColor:uni.getStorageSync('publicColor'),//主题颜色
dataList:[],
idEdit:false,
userName:'',
userPhone:'',
userProvince:'',
userCity:'',
userCounty:'',
userAddress:'',
isChoose:'',//选中的id
delNum:0,//删除条件
loading:false,
provinceArr:[],
cityArr:[],
countyArr:[],
isAddress:0,
isWhere:1,
isMo:0
}
},
onShow() {
this.$toolAll.tools.isLogin()
},
onLoad(options) {
this.isWhere = options.isWhere;
if(uni.getStorageSync('phone_active')!=0){
this.checkList();
}
},
methods: {
goBack(index){//返回到订单准备页
if(this.isWhere==0) {
uni.setStorageSync('chooseAddress',this.dataList[index]);
uni.navigateBack({delta:1})
}
},
obtainLngLat(){//添加地址事件
this.idEdit = true;
this.isMo = 0;
this.clearAll();
// 获取当前位置的经纬度
wx.getLocation({
success:(res)=> {
// 逆解析经纬度
this.getDistrict(res.latitude, res.longitude)
},
})
},
getDistrict(latitude, longitude) {//获取当前位置的省市区县
let ya = this
wx.request({
url: `https://apis.map.qq.com/ws/geocoder/v1/?location=${latitude},${longitude}&key=B2ABZ-SIDKS-WD2O3-6CJ2U-CDZOT-U3FKF`,
header: {
'Content-Type':'application/json'
},
success:function(res) {
// console.log('地址数据:',res)
ya.userProvince = res.data.result.address_component.province
ya.userCity = res.data.result.address_component.city
ya.userCounty = res.data.result.address_component.district
lotusAddressJson.forEach((itema,index)=>{
if(ya.userProvince==itema.name) {
ya.chooseProvinceCityCounty(0);
ya.chooseProvince(index);
}
})
}
})
},
chooseProvinceCityCounty(index){
if(index==0){//获取省数据
this.isAddress = 1;
this.provinceArr = []
lotusAddressJson.forEach((item,index)=>{
if(item.value.slice(2) =='0000'){
this.provinceArr.push(item)
}
})
}
if(index==1){//获取市数据
if(this.cityArr.length!=0){
this.isAddress = 2;
}
}
if(index==2){//获取区数据
if(this.countyArr.length==0){
this.$toolAll.tools.showToast('暂无可选项');
} else {
this.isAddress = 3;
}
}
},
chooseProvince(index){//选择省
this.countyArr = this.cityArr = [];
this.userProvince = this.provinceArr[index].name;
lotusAddressJson.forEach(itema=>{
if(this.provinceArr[index].value==itema.parent) {
this.cityArr.push(itema)
}
})
this.isAddress = 0;
this.userCity = this.cityArr[0].name;//默认市的第一个
this.chooseCity(0);
},
chooseCity(index){//选择市
this.countyArr = [];
this.userCity = this.cityArr[index].name;
lotusAddressJson.forEach(itema=>{
if(this.cityArr[index].value==itema.parent) {
this.countyArr.push(itema)
}
})
this.isAddress = 0;
if(this.countyArr.length!=0) {
this.userCounty = this.countyArr[0].name;//默认选中第一个区
} else this.userCounty = '未知';
},
chooseCounty(index){//选择区
this.isAddress = 0;
this.userCounty = this.countyArr[index].name;
},
async checkList(){//查询地址列表
this.$requst.post('user/address').then(res=>{
if(res.code==0){
this.dataList = [];
if(res.data.length!=0){
res.data.forEach(item=>{
let newActive = false;
if(item.is_default==1) newActive = true
let obj = {
id:item.id,
user_id:item.user_id,
userName:item.name,
userPhone:item.phone,
userAddress:item.province_str + item.city_str + item.county_str + item.address,
province:item.province_str,
city:item.city_str,
county:item.county_str,
address:item.address,
isActive:newActive,
is_default:item.is_default
}
this.dataList.push(obj);
})
this.checkActive();
}
this.loading = true;
}
})
},
checkActive(){//把默认地址放到第一位
let have = this.dataList.findIndex((res)=>{
return res.isActive == true;
});
this.dataList.unshift(this.dataList[have]);
this.dataList.splice(have+1,1);
},
async addAddress(){//新增编辑地址
if(this.userName=='') {
this.$toolAll.tools.showToast('请输入姓名');
} else if(this.userPhone=='') {
this.$toolAll.tools.showToast('请输入联系电话');
} else if(this.$toolAll.tools.isPhone(this.userPhone)) {
this.$toolAll.tools.showToast('请输入正确的联系电话');
} else if(this.userAddress=='') {
this.$toolAll.tools.showToast('请输入详细地址');
} else {
let params = {
id:this.isChoose,
name:this.userName,
phone:this.userPhone,
city:'',//城市编码
county:'',//区县编码
province_str:this.userProvince,//省
city_str:this.userCity,//市
county_str:this.userCounty,//区
address:this.userAddress,
is_default:this.isMo//是否默认
}
this.$requst.post('user/address-save',params).then(res=>{
if(res.code==0){
this.idEdit = false;
if(this.isChoose!='') {
this.$toolAll.tools.showToast('地址修改成功');
} else {
this.$toolAll.tools.showToast('新增地址成功');
}
setTimeout(()=>{
this.checkList();
this.clearAll();
},1000)
}
})
}
},
setMo(index){//设置默认地址
let params = {
id:this.dataList[index].id,
name:this.dataList[index].userName,
phone:this.dataList[index].userPhone,
city:'',//城市编码
county:'',//区县编码
province_str:this.dataList[index].province,//省
city_str:this.dataList[index].city,//市
county_str:this.dataList[index].county,//区
address:this.dataList[index].address,
is_default:1//是否默认
}
this.$requst.post('user/address-save',params).then(res=>{
if(res.code==0){
this.$toolAll.tools.showToast('设置默认地址成功');
this.dataList.forEach(item=>{
item.isActive = false;
});
this.dataList[index].isActive = true;
this.dataList[index].is_default = 1;
this.checkActive();
}
})
},
editAddress(index){//编辑按钮
this.idEdit = true;
this.isChoose = this.dataList[index].id,
this.userName = this.dataList[index].userName;
this.userPhone = this.dataList[index].userPhone;
this.userProvince = this.dataList[index].province;
this.userCity = this.dataList[index].city;
this.userCounty = this.dataList[index].county;
this.userAddress = this.dataList[index].address;
this.isMo = this.dataList[index].is_default
},
delAddress(index){//删除地址事件
this.delNum++
setTimeout(()=>{
this.delNum = 0;
},3000)
if(this.delNum==1) {
this.$toolAll.tools.showToast('双击即可删除');
}
if(this.delNum==2) {
this.$requst.post('user/address-del',{id:this.dataList[index].id}).then(res=>{
if(res.code==0){
this.$toolAll.tools.showToast('删除成功');
setTimeout(()=>{
this.checkList();
},1500)
}
})
}
},
clearAll(){//清空输入框
this.isChoose = '',
this.userName = '';
this.userPhone = '';
this.userProvince = '';
this.userCity = '';
this.userCounty = '';
this.userAddress = '';
}
}
}
</script>
<style>
</style>