feat:购物车地址页完成

This commit is contained in:
qiaojiale 2025-07-15 17:35:24 +08:00
parent e30d9cf0f8
commit 2c3b890ef1
5 changed files with 233 additions and 33 deletions

View File

@ -21,9 +21,6 @@
style="line-height: 50px; text-align: center;">{{ item.short_name }}</view> style="line-height: 50px; text-align: center;">{{ item.short_name }}</view>
</picker-view-column> </picker-view-column>
</picker-view> </picker-view>
</view> </view>
</u-popup> </u-popup>
</view> </view>
@ -47,10 +44,8 @@ export default {
provList: [], // provList: [], //
cityList: [], // cityList: [], //
distList: [], // distList: [], //
defaultCity: [], // defaultCity: [], //
defaultDist: [], // / defaultDist: [], // /
confirmProv: {}, // confirmProv: {}, //
confirmProv1: {}, confirmProv1: {},
confirmCity: {}, // confirmCity: {}, //
@ -102,7 +97,6 @@ export default {
this.defaultDist = res.rows; this.defaultDist = res.rows;
this.confirmDist = res.rows[0] // this.confirmDist = res.rows[0] //
}, },
async init() { async init() {
uni.showLoading({ uni.showLoading({
title: '加载中', title: '加载中',

View File

@ -1,11 +1,16 @@
.container {} page {
background-color: #f6f7fb;
}
.container {
background-color: #fff;
}
.row { .row {
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
margin: 0 30rpx; margin: 0 30rpx;
margin-top: 30rpx; padding-top: 30rpx;
} }
.row_label { .row_label {
@ -72,7 +77,6 @@
background: #F6F6FA; background: #F6F6FA;
border-radius: 10rpx 10rpx 10rpx 10rpx; border-radius: 10rpx 10rpx 10rpx 10rpx;
padding: 30rpx 24rpx; padding: 30rpx 24rpx;
margin-top: 20rpx;
} }
@ -105,3 +109,55 @@
color: #999999; color: #999999;
margin-top: 6rpx; margin-top: 6rpx;
} }
.choseAddress {
font-size: 28rpx;
color: #999999;
padding-bottom: 20rpx;
}
.isdef {
display: flex;
align-items: center;
justify-content: space-between;
padding: 30rpx 20rpx;
background-color: #fff;
}
.isdef_left1 {
font-size: 32rpx;
color: #222222;
}
.isdef_left2 {
font-size: 28rpx;
color: #999999;
margin-top: 10rpx;
}
.isdef_right {
width: 28rpx;
height: 28rpx;
}
.noneborder {
border-bottom: none;
}
.btn {
width: 600rpx;
height: 90rpx;
background: linear-gradient(91deg, #FF7658 0%, #FF370B 100%);
border-radius: 100rpx 100rpx 100rpx 100rpx;
font-size: 36rpx;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
position: fixed;
left: 50%;
transform: translateX(-50%);
bottom: 120rpx;
}

View File

@ -19,10 +19,14 @@
<div class="tabItem" :class="{ 'active': tab == 1 }" @click="changeTab(1)">地区选择</div> <div class="tabItem" :class="{ 'active': tab == 1 }" @click="changeTab(1)">地区选择</div>
</div> </div>
<div class="tabItems" v-if="tab == 0">
<div class="row"> <div class="row">
<div class="row_label">地址</div> <div class="row_label">地址</div>
<div class="row_con"> <div class="row_con">
<u--input placeholder="请选择地址" @click="chooseAddress" border="none" disabled></u--input> <div class="choseAddress" @click="chooseAddress">
请选择地址
</div>
<div class="currentAddress"> <div class="currentAddress">
<div class="currentAddress1"> <div class="currentAddress1">
<div class="currentAddress1_left">当前定位和平里社区综合 服务站</div> <div class="currentAddress1_left">当前定位和平里社区综合 服务站</div>
@ -30,24 +34,67 @@
</div> </div>
<div class="currentAddress2">河北衡水市桃城区</div> <div class="currentAddress2">河北衡水市桃城区</div>
</div> </div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="row_label">门牌号</div> <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>
<!-- <div class="tips">记得完善门牌号</div> -->
</div>
</div>
</div>
<div class="tabItems" v-if="tab == 1">
<view>
<picker-view indicator-style="height: 50px;" style="width: 100%; height: 400rpx;" :value="id"
@change="bindChange">
<picker-view-column>
<view v-for="(item, index) in provList" :key="index"
style="line-height: 50px; text-align: center;">{{ item.short_name }}</view>
</picker-view-column>
<picker-view-column>
<view v-for="(item, index) in defaultCity" :key="index"
style="line-height: 50px; text-align: center;">{{ item.short_name }}</view>
</picker-view-column>
<picker-view-column>
<view v-for="(item, index) in defaultDist" :key="index"
style="line-height: 50px; text-align: center;">{{ item.short_name }}</view>
</picker-view-column>
</picker-view>
</view>
<div class="row">
<div class="row_label"><span>*</span>详细地址</div>
<div class="row_con"> <div class="row_con">
<u--input placeholder="例6栋201室" clearable border="none" v-model="value" @change="change"></u--input> <u--input placeholder="小区、门牌号" clearable border="none" v-model="value" @change="change"></u--input>
<div class="tips">记得完善门牌号</div>
</div> </div>
</div> </div>
</div>
<div class="line"></div>
<div class="isdef">
<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="" /> -->
</div>
</div>
<div class="btn">确定</div>
</view> </view>
</template> </template>
<script> <script>
import { import {
apiArr apiArr
} from '../../../api/doorToDoor'; } from '../../../api/area';
import { import {
picUrl, picUrl,
menuButtonInfo, menuButtonInfo,
@ -61,8 +108,20 @@ export default {
localHeight: "", localHeight: "",
value: '', value: '',
type: "error", type: "error",
tab: 0 tab: 0,
provList: [], //
cityList: [], //
distList: [], //
defaultCity: [], //
defaultDist: [], // /
confirmProv: {}, //
confirmProv1: {},
confirmCity: {}, //
confirmDist: {}, // /
sf: true,
xsq: {},
value2: '',
} }
}, },
methods: { methods: {
@ -71,14 +130,85 @@ export default {
}, },
chooseAddress() { chooseAddress() {
console.log(123); console.log(123);
NavgateTo("/pages/shopcity/shopcity")
NavgateTo("/pages/shopcity/index")
}, },
/////////////////////////////////// ///////////////////////////////////////////
//
async getProvList() {
const res = await request(apiArr.getArea, 'POST', {}, { silent: false });
this.provList = res.rows;
this.confirmProv1 = res.rows[0]
//
this.getCityList();
},
//
async getCityList(sq, x) {
console.log('11swq', sq);
if (!this.sf) {
console.log('省份没变,查市跟区', this.cityList)
let newDist = this.cityList[sq];
console.log('新的市信息', newDist);
if (this.xsq.ad_code !== newDist.ad_code) {
console.log('新市区跟旧市区不一直')
this.xsq = newDist;
this.getDistList(newDist, x);
}
return
}
const res = await request(apiArr.getArea, 'POST', { parent_ad_code: this.confirmProv1.ad_code }, { silent: false });
this.cityList = res.rows;
let newDist;
this.defaultCity = res.rows;
this.confirmCity = res.rows[0]; //
this.getDistList(newDist, x);
},
// /
async getDistList(xsq, 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 init() {
uni.showLoading({
title: '加载中',
mask: true
});
try {
this.getProvList()
uni.hideLoading();
} catch (error) {
uni.hideLoading();
console.log('获取省市区信息异常', error);
}
},
//
bindChange(e) {
console.log('[1231331], e', e);
const { value } = e.detail;
// // /
let newCrty = this.provList[value[0]];
console.log('新的省份信息', newCrty);
console.log('旧的省信息', this.confirmProv1);
if (newCrty.ad_code === this.confirmProv1.ad_code) {
console.log('省份信息没变');
this.sf = false;
} else {
this.sf = true;
}
console.log('this.cityListthis.cityList', this.cityList);
this.confirmProv1 = newCrty
this.getCityList(value[1], value[2])
},
/////////////////////////////////// ///////////////////////////////////////////
}, },
onLoad(options) { onLoad(options) {
const meun = menuButtonInfo(); const meun = menuButtonInfo();
this.top = meun.top; this.top = meun.top;
this.localHeight = meun.height; this.localHeight = meun.height;
this.init()
}, },
onReachBottom() { onReachBottom() {

View File

@ -1,7 +1,7 @@
<template> <template>
<view class="container"> <view class="container">
<div class="hasAddress" v-if="false"> <div class="hasAddress">
<div class="addressList"> <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 3" :key="index" :class="{ 'addressItem_def': index == 0 }">
<div class="addressItem_top"> <div class="addressItem_top">
@ -24,7 +24,7 @@
</div> </div>
<div class="addressItem_footer_right"> <div class="addressItem_footer_right">
<div class="btn1">删除</div> <div class="btn1" @click="deleteItem">删除</div>
<div class="btn2">修改</div> <div class="btn2">修改</div>
</div> </div>
</div> </div>
@ -35,7 +35,7 @@
</div> </div>
</div> </div>
<div class="empty"> <div class="empty" v-if="false">
<image src="http://192.168.0.172:5500/7.15/shop_noAdd.png"></image> <image src="http://192.168.0.172:5500/7.15/shop_noAdd.png"></image>
<div class="empty_text">暂无收货地址</div> <div class="empty_text">暂无收货地址</div>
@ -69,6 +69,19 @@ export default {
addAddress(){ addAddress(){
NavgateTo("../addAddress/index") NavgateTo("../addAddress/index")
}, },
deleteItem(){
uni.showModal({
title: '提示',
content: '是否删除地址',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
},
}, },
onLoad(options) { onLoad(options) {
const meun = menuButtonInfo(); const meun = menuButtonInfo();

View File

@ -8,11 +8,18 @@
"miniprogram": { "miniprogram": {
"list": [ "list": [
{ {
"name": "packages/shop/addAddress/index", "name": "packages/shop/address/index",
"pathName": "packages/shop/addAddress/index", "pathName": "packages/shop/address/index",
"query": "", "query": "",
"scene": null, "scene": null,
"launchMode": "default" "launchMode": "default"
},
{
"name": "packages/shop/addAddress/index",
"pathName": "packages/shop/addAddress/index",
"query": "",
"launchMode": "default",
"scene": null
} }
] ]
} }