feat: 收货地址相关接口调用And地区选择器组件bug修复

This commit is contained in:
mayubo@gmail.com 2025-07-18 09:53:16 +08:00
parent b8aacb162f
commit 29dfab5b6d
18 changed files with 226 additions and 52 deletions

View File

@ -6,5 +6,10 @@ export const apiArr = {
getCarCount:"/api/v2/wechat/commodity/cart/all_count",//购物车数量
addCar:"/api/v2/wechat/commodity/cart/add",//添加购物车
deleteCar:"/api/v2/wechat/commodity/cart/delete",//删除购物车
addressList: '/api/v2/wechat/commodity/receiving_address', // 收货地址列表
addAddress: '/api/v2/wechat/commodity/receiving_address/add', // 收货地址添加
addressDel: '/api/v2/wechat/commodity/receiving_address/delete', // 收货地址删除
settingDefaultAddress: '/api/v2/wechat/commodity/receiving_address/default', // 收货地址设置默认
updateAddress: '/api/v2/wechat/commodity/receiving_address/update', // 收货地址修改
updateCar:"/api/v2/wechat/commodity/cart/update",
}

View File

@ -78,6 +78,9 @@ export default {
console.log('新市区跟旧市区不一直')
this.xsq = newDist;
this.getDistList(newDist, x);
} else {
console.log('新市区跟旧市区一直');
this.confirmDist = this.defaultDist[x]
}
return
}

View File

@ -3,14 +3,14 @@
<div class="row">
<div class="row_label"><span>*</span>收货人</div>
<div class="row_con">
<u--input placeholder="请输入姓名" clearable border="none" v-model="value" @change="change"></u--input>
<u--input placeholder="请输入姓名" clearable border="none" v-model="name"></u--input>
</div>
</div>
<div class="row">
<div class="row_label"><span>*</span>手机号</div>
<div class="row_con">
<u--input placeholder="请输入手机号" clearable border="none" v-model="value" @change="change"></u--input>
<u--input type="number" placeholder="请输入手机号" clearable border="none" v-model="phone" ></u--input>
</div>
</div>
@ -24,24 +24,23 @@
<div class="row_label">地址</div>
<div class="row_con">
<div class="choseAddress" @click="chooseAddress">
请选择地址
<text v-if="showOrientation">请选择地址</text>
<text v-if="!showOrientation" style="color: #000;">{{ orientation.region }} {{orientation.district}}</text>
</div>
<div class="currentAddress">
<div class="currentAddress" v-if="showOrientation">
<div class="currentAddress1">
<div class="currentAddress1_left">当前定位和平里社区综合 服务站</div>
<div class="currentAddress1_right">使用</div>
<div class="currentAddress1_left">当前定位{{orientation.district}}</div>
<div class="currentAddress1_right" @click="headerConfirmClick">使用</div>
</div>
<div class="currentAddress2">河北衡水市桃城区</div>
<div class="currentAddress2">{{orientation.region}}</div>
</div>
</div>
</div>
<div class="row">
<div class="row_label">门牌号</div>
<div class="row_con noneborder">
<u--input placeholder="例6栋201室" clearable border="none" v-model="value"
@change="change"></u--input>
<u--input placeholder="例6栋201室" clearable border="none" v-model="houseNumber"></u--input>
<!-- <div class="tips">记得完善门牌号</div> -->
</div>
</div>
@ -69,24 +68,24 @@
<div class="row">
<div class="row_label"><span>*</span>详细地址</div>
<div class="row_con">
<u--input placeholder="小区、门牌号" clearable border="none" v-model="value" @change="change"></u--input>
<u--input placeholder="小区、门牌号" clearable border="none" v-model="houseNumber"></u--input>
</div>
</div>
</div>
<div class="line"></div>
<div class="isdef">
<div class="isdef" @click="headerSettingDefaultAddressClick">
<div class="isdef_left">
<div class="isdef_left1">设置默认地址</div>
<div class="isdef_left2">提醒下单时会优先选择</div>
</div>
<div class="isdef_right">
<img src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png" alt="" />
<!-- <img src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png" alt="" /> -->
<img v-if="isDefault == 2" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png" alt="" />
<img v-if="isDefault == 1" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png" alt="" />
</div>
</div>
<div class="btn">确定</div>
<div class="btn" @click="headerSubmitClick">确定</div>
</view>
</template>
@ -95,6 +94,7 @@
import {
apiArr
} from '../../../api/area';
import { apiArr as apiArr2 } from '../../../api/shop';
import {
picUrl,
menuButtonInfo,
@ -122,6 +122,16 @@ export default {
sf: true,
xsq: {},
value2: '',
isShow: false,
id: '',
type: '',
orientation: uni.getStorageSync('location'),
name: '',
phone: '',
houseNumber: '',
isDefault: 2,
showOrientation: true,
}
},
methods: {
@ -130,6 +140,7 @@ export default {
},
chooseAddress() {
console.log(123);
this.isShow = true;
NavgateTo("/pages/shopcity/shopcity")
},
/////////////////////////////////// ///////////////////////////////////////////
@ -143,8 +154,9 @@ export default {
},
//
async getCityList(sq, x) {
async getCityList(sq, x,) {
console.log('11swq', sq);
console.log('获取x', x);
if (!this.sf) {
console.log('省份没变,查市跟区', this.cityList)
let newDist = this.cityList[sq];
@ -153,6 +165,9 @@ export default {
console.log('新市区跟旧市区不一直')
this.xsq = newDist;
this.getDistList(newDist, x);
} else {
console.log('新市区跟旧市区一直');
this.confirmDist = this.defaultDist[x]
}
return
}
@ -166,11 +181,101 @@ export default {
},
// /
async getDistList(xsq, x) {
console.log('页面传递的x',x);
const res = await request(apiArr.getArea, 'POST', { parent_ad_code: xsq ? xsq.ad_code : this.confirmCity.ad_code }, { silent: false });
this.distList = res.rows;
this.defaultDist = res.rows;
this.confirmDist = res.rows[0] //
},
async headerSubmitClick() {
console.log('省' ,this.confirmProv1);
console.log('xsq' ,this.xsq);
console.log('confirmCity' ,this.confirmCity);
console.log('confirmDist' ,this.confirmDist);
const { confirmProv1, xsq, confirmCity, confirmDist } = this;
if(!this.name) {
uni.showToast({
title: '请输入收货人名称',
icon: 'none'
})
return
}
if(!this.phone) {
uni.showToast({
title: '请输入收货人手机号',
icon: 'none'
})
return
}
if(this.tab == 0 && this.showOrientation) {
uni.showToast({
title: '请输入收货地址',
icon: 'none'
})
return
}
if(!this.houseNumber) {
uni.showToast({
title: '请输入门牌号',
icon: 'none'
})
return
}
if(this.type === 'edit') {
const res = await request(apiArr2.updateAddress, "POST", {
id: this.id,
name: this.name,
phone: this.phone,
address: this.tab === 0 ? this.orientation.region + this.orientation.district : `${confirmProv1.short_name}${xsq.short_name ? xsq.short_name : confirmCity.short_name}${confirmDist.short_name}`,
house_number: this.houseNumber,
is_default: this.isDefault
}, { nested: true})
console.log('编辑成功', res);
if(res.code === 1) {
uni.showToast({
title: '地址更新成功',
icon: 'success',
mask: true
})
setTimeout(() => {
uni.navigateBack({
delta: 1
})
}, 1000)
}
} else {
const res = await request(apiArr2.addAddress, 'POST', {
name: this.name,
phone: this.phone,
address: this.tab === 0 ? this.orientation.region + this.orientation.district : `${confirmProv1.short_name}${xsq.short_name ? xsq.short_name : confirmCity.short_name}${confirmDist.short_name}`,
house_number: this.houseNumber,
is_default: this.isDefault
}, { nested: true})
if(res.code === 1) {
uni.showToast({
title: '地址添加成功',
icon: 'success',
mask: true
})
setTimeout(() => {
uni.navigateBack({
delta: 1
})
}, 1000)
}
}
},
headerConfirmClick() {
this.showOrientation = false;
this.isShow = true;
this.orientation = uni.getStorageSync('location');
},
headerSettingDefaultAddressClick() {
this.isDefault = this.isDefault == 2 ? 1 : 2;
},
async init() {
uni.showLoading({
title: '加载中',
@ -205,11 +310,35 @@ export default {
/////////////////////////////////// ///////////////////////////////////////////
},
onLoad(options) {
console.log('12231', options);
if(options.item) {
const item = JSON.parse(options.item);
console.log('1231', item);
this.name = item.name;
this.phone = item.phone;
this.orientation = {
region: item.address,
district: ''
}
this.showOrientation = false;
this.id = item.id;
this.type = 'edit';
this.isShow = false;
this.isDefault = item.is_default;
this.houseNumber = item.house_number;
}
const meun = menuButtonInfo();
this.top = meun.top;
this.localHeight = meun.height;
this.init()
},
onShow() {
if(!this.isShow ) return;
if(this.orientation.district !== uni.getStorageSync('location').district) {
this.orientation = uni.getStorageSync('location');
this.showOrientation = false;
}
},
onReachBottom() {
},

View File

@ -3,29 +3,27 @@
<div class="hasAddress">
<div class="addressList">
<div class="addressItem" v-for="item, index in 3" :key="index" :class="{ 'addressItem_def': index == 0 }">
<div class="addressItem" v-for="item, index in list" :key="index" :class="{ 'addressItem_def': index == 0 }">
<div class="addressItem_top">
高世霞 15901518415 <div class="is_def">默认</div>
</div>
<div class="addressItem_mid">
河北 衡水 桃城区 上海公馆 赞寓17层
{{item.name}} {{item.phone}} <div v-if="item.is_default === 1" class="is_def">默认</div>
</div>
<div class="addressItem_mid">{{item.address}}{{ item.house_number }}</div>
<div class="addressItem_footer">
<div class="addressItem_footer_left">
<div>
<div v-if="item.is_default !== 1" @click="headerSettingDefault(item.id)">
<image src="http://192.168.0.172:5500/7.15/shop_checked1.png"></image>
设为默认
</div>
<div v-if="false">
<div v-if="item.is_default === 1">
<image src="http://192.168.0.172:5500/7.15/shop_checked2.png"></image>
已默认
</div>
</div>
<div class="addressItem_footer_right">
<div class="btn1" @click="deleteItem">删除</div>
<div class="btn2">修改</div>
<div class="btn1" @click="deleteItem(item.id )">删除</div>
<div class="btn2" @click="editItem(item)">修改</div>
</div>
</div>
</div>
@ -46,11 +44,8 @@
</template>
<script>
import { apiArr } from '../../../api/shop';
import {
apiArr
} from '../../../api/doorToDoor';
import {
picUrl,
menuButtonInfo,
request,
NavgateTo
@ -62,32 +57,66 @@ export default {
localHeight: "",
value: 3,
type: "error",
list: [],
}
},
methods: {
addAddress(){
NavgateTo("../addAddress/index")
},
deleteItem(){
editItem(item) {
NavgateTo(`../addAddress/index?item=${JSON.stringify(item)}`)
},
async headerSettingDefault(id) {
const res = await request(apiArr.settingDefaultAddress, 'POST', { id }, { silent: true, nested: true });
if(res.code === 1){
uni.showToast({
title: '设置成功',
icon: 'success',
mask: true
})
this.init();
}
},
deleteItem(id){
const _this = this;
uni.showModal({
title: '提示',
content: '是否删除地址',
success: function (res) {
success: async function (res) {
if (res.confirm) {
console.log('用户点击确定');
const res = await request(apiArr.addressDel, 'POST', { id });
uni.showToast({
title: '删除成功',
icon: 'success',
mask: true
})
_this.init();
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
},
async init() {
const res = await request(apiArr.addressList, 'POST', {});
this.list = res.address_list;
}
},
onLoad(options) {
const meun = menuButtonInfo();
this.top = meun.top;
this.localHeight = meun.height;
},
onShow() {
this.init();
},
onReachBottom() {
},

View File

@ -189,6 +189,7 @@ export default {
district: res.address.match(/市(.*)/)[1],
lat: res.latitude,
lng: res.longitude,
region: res.address.match(/^(.*?省.*?(?:市|自治州|盟).*?(?:县|区|旗))/)[1], //
};
uni.setStorageSync("location", selectLocation); //
// uni.setStorageSync('city', selectLocation.cityName); //

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -8,23 +8,30 @@
"miniprogram": {
"list": [
{
"name": "packages/shop/goods/index",
"pathName": "packages/shop/goods/index",
"query": "id=32",
"name": "packages/community/choseCommunity/index",
"pathName": "packages/community/choseCommunity/index",
"query": "",
"scene": null,
"launchMode": "default"
},
{
"name": "packages/shop/shopCar/index",
"pathName": "packages/shop/shopCar/index",
"name": "添加收货模式",
"pathName": "packages/shop/addAddress/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "packages/shop/goods/index",
"pathName": "packages/shop/goods/index",
"query": "id=30",
"name": "收货地址",
"pathName": "packages/shop/address/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "packages/shop/submitOrder/index",
"pathName": "packages/shop/submitOrder/index",
"query": "",
"launchMode": "default",
"scene": null
}