1
This commit is contained in:
421
pages/user/addAddress - 副本.vue
Normal file
421
pages/user/addAddress - 副本.vue
Normal file
@@ -0,0 +1,421 @@
|
||||
<template>
|
||||
<view>
|
||||
<view class="addressHeader">
|
||||
<!-- 顶部导航栏 -->
|
||||
<z-nav-bar :title="navName"></z-nav-bar>
|
||||
|
||||
</view>
|
||||
<view class="addContent">
|
||||
<u-form :model="addressForm" ref='addForm' :rules="rules" label-width="150rpx">
|
||||
<u-form-item label="收件人" prop="userName">
|
||||
<u-input type="string" v-model="addressForm.userName" placeholder="名字" clearable
|
||||
border="surround" />
|
||||
|
||||
</u-form-item>
|
||||
<u-form-item label="手机号码" prop="userTel">
|
||||
<u-input type="number" v-model="addressForm.userTel" placeholder="手机号" clearable
|
||||
border="surround" />
|
||||
</u-form-item>
|
||||
|
||||
<u-form-item label="地区" prop="">
|
||||
<u-picker @cancel="cancel" :show="show" ref="uPicker" :columns="columns" keyName="name"
|
||||
@confirm="confirm" @change="changeHandler"></u-picker>
|
||||
|
||||
<!-- <u-select v-model="show" mode="mutil-column-auto" :list="list" @confirm="confirm"></u-select> -->
|
||||
|
||||
</u-form-item>
|
||||
|
||||
|
||||
<u-form-item label="所在省" prop="">
|
||||
<picker mode="selector" @change="selectProvince" :range="provinceList" range-key="provName">
|
||||
<view class="pickerItem">
|
||||
{{province}}
|
||||
</view>
|
||||
</picker>
|
||||
</u-form-item>
|
||||
<u-form-item label="所在市" prop="" v-if="this.provId!=''">
|
||||
<picker mode="selector" @change="selectCity" :range="cityList" range-key="cityName"
|
||||
:disabled='isShowCity'>
|
||||
<view class="pickerItem">
|
||||
{{city}}
|
||||
</view>
|
||||
</picker>
|
||||
</u-form-item>
|
||||
<u-form-item label="所在区" prop="" v-if="this.cityId!=''">
|
||||
<picker mode="selector" @change="selectCount" :range="countList" range-key="countyName"
|
||||
:disabled='isShowCount'>
|
||||
<view class="pickerItem">
|
||||
{{count}}
|
||||
</view>
|
||||
</picker>
|
||||
</u-form-item>
|
||||
|
||||
<u-form-item label="详细地址" prop="addrDetail">
|
||||
<u-input type="string" v-model="addressForm.addrDetail" placeholder="小区楼栋/乡村名称" clearable
|
||||
border="surround" />
|
||||
</u-form-item>
|
||||
<u-form-item label="默认地址" prop="isDefault">
|
||||
<u-switch v-model="addressForm.isDefault" active-color="#ff9e02"></u-switch>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
</view>
|
||||
<view class="addFooter">
|
||||
<view class="del" v-if="isShowDel" @click="deleteShow=true">
|
||||
删除
|
||||
</view>
|
||||
<view class="submit" @click="uploadSub">
|
||||
保存
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<u-modal :show="deleteShow" content="你确定要删除地址吗?" :showCancelButton="true" @cancel="deleteShow=false"
|
||||
@confirm="deleteSub">
|
||||
</u-modal>
|
||||
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import address from '@/components/address.json';
|
||||
import $http from '@/config/requestConfig.js';
|
||||
import {
|
||||
mapState
|
||||
} from 'vuex';
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
show: false, //是否显示
|
||||
columns: [], //省份数据显示,三级联动需要三维数组,展示初始数据
|
||||
columnData: [], //市数据
|
||||
columnDatas: [], //区地址
|
||||
navName: '', // 顶部导航栏标题
|
||||
province: '请选择省', //用于显示
|
||||
city: '请选择市', //用于显示
|
||||
count: '请选择区', //用于显示
|
||||
provId: '', // 存储省id
|
||||
cityId: '', // 存储市id
|
||||
countyId: '', // 存储区id
|
||||
isShowDel: false, // 是否显示删除按钮
|
||||
isShowCity: true, // 是否可以选择城市
|
||||
isShowCount: true, // 是否可以选择地区
|
||||
addressList:[],
|
||||
// 地址
|
||||
addressForm: {
|
||||
addrId: '',
|
||||
userName: '',
|
||||
userTel: '',
|
||||
area: '',
|
||||
addrDetail: '',
|
||||
isDefault: false,
|
||||
},
|
||||
provinceList: [],
|
||||
cityList: [],
|
||||
countList: [],
|
||||
show: true,
|
||||
deleteShow: false,
|
||||
rules: {
|
||||
userName: [{
|
||||
required: true,
|
||||
message: "请输入收件人姓名",
|
||||
trigger: "blur"
|
||||
}],
|
||||
userTel: [{
|
||||
required: true,
|
||||
message: "请输入手机号码",
|
||||
trigger: 'blur'
|
||||
}],
|
||||
addrDetail: [{
|
||||
required: true,
|
||||
message: "请输入所在地区",
|
||||
trigger: "blur"
|
||||
}]
|
||||
}
|
||||
}
|
||||
},
|
||||
onLoad(e) {
|
||||
if (e.type == 0) {
|
||||
this.navName = '添加地址'
|
||||
this.isShowDel = false
|
||||
} else {
|
||||
this.navName = '编辑地址'
|
||||
this.isShowDel = true
|
||||
}
|
||||
this.initDataPicker() //初始化省份列表
|
||||
|
||||
},
|
||||
onShow() {
|
||||
this.getProvince()
|
||||
},
|
||||
computed: {
|
||||
...mapState(['userInfo']),
|
||||
},
|
||||
onReady() {
|
||||
this.$refs.addForm.setRules(this.rules)
|
||||
},
|
||||
methods: {
|
||||
initDataPicker() {
|
||||
|
||||
//此处的province主要用作数据的初始化,即刚打开就需要进行展示的数据,这个跟第一条省份数据相关,我的第一条是北京市,所以需要columns中的三维数组,第一维度是省份数据数组,第二维度是市数据数组,第三维度是区数据数组
|
||||
let province = []; //初始数据需要展示的省份
|
||||
let province1 = [{
|
||||
name: '市辖区',
|
||||
code: '1101'
|
||||
}]; //因为第一个市北京市,所以就直接添加北京市下辖的直辖市了 也即初始数据需要展示的市,北京市只有一个市辖区
|
||||
let province2 = []; //初始数据需要展示的区域数据,也即是 北京市市辖区内的区
|
||||
|
||||
|
||||
// this.addressList
|
||||
|
||||
address.map(item => {
|
||||
province.push(item);
|
||||
});
|
||||
|
||||
address[0].children[0].children.map(item => {
|
||||
province2.push(item);
|
||||
});
|
||||
|
||||
//省数据 因为要做数据初始化,所以是三维数组
|
||||
// 数据格式 [ [所有的省份数据:{},{}] , [第一个省份下的所有的市:{},{},{}] , [第一个市下面所有的区:{},{},{}] ]
|
||||
this.columns.push(province);
|
||||
this.columns.push(province1);
|
||||
this.columns.push(province2);
|
||||
|
||||
// 市数据数组,筛选address.json文件,将全国所有省下面的市数据放入数组
|
||||
// 格式[ [第一个省下面所有市,{},{},{}] , [第二个省下面所有市{},{},{}] , [第三个省下面所有市{},{},{}] ] 注意,以上的第一第二对应着 columns[0] 的数据
|
||||
|
||||
address.map(item => {
|
||||
let city = [];
|
||||
item.children.map(item1 => {
|
||||
city.push(item1);
|
||||
});
|
||||
this.columnData.push(city);
|
||||
});
|
||||
|
||||
//区数据数组
|
||||
//数据格式: [ 所有省下面所有市的所有区 [ 第一个省下面所有市的区:[ [第一个省下面第一个市的所有区] , [第一个省下面第二个市的所有区] ,] , [ 第二个省下面所有市的区:[ [第二个省下面第一个市的所有区] , [第二个省下面第二个市的所有区] ,] ]
|
||||
|
||||
let area = [];
|
||||
address.map((item, index) => {
|
||||
let area1 = []; //省下面所有市的初始化
|
||||
item.children.map(item1 => {
|
||||
area = []; //市下面的区初始化
|
||||
item1.children.map(item2 => {
|
||||
area.push(item2);
|
||||
});
|
||||
area1.push(area); // 每循环一个市,添加该市下面的所有区
|
||||
});
|
||||
this.columnDatas.push(area1); // 每循环一个省,添加该省下面的所有市
|
||||
});
|
||||
},
|
||||
changeHandler(e) { //城市选择时触发
|
||||
const {
|
||||
columnIndex, //当前选择的列,省 / 市 / 区
|
||||
value, // 当前选择的数组内容
|
||||
values, // values为当前变化列的数组内容
|
||||
index, // 当前列的下标值
|
||||
indexs, // 当前选择 省 市 区的下表值
|
||||
picker = this.$refs.uPicker
|
||||
} = e;
|
||||
// 当第一列值发生变化时,变化第二列和第三列的值(省份变更,市和区跟着变更)
|
||||
if (columnIndex === 0) { // 判断当前变更的是省还是市还是区
|
||||
// picker为选择器this实例,变化第二列对应的选项
|
||||
picker.setColumnValues(1, this.columnData[
|
||||
index]); //设置市为该省下面的所有市,index是当前省在省份数组的下标,对应市数组中的下表就是 该省下面的所有市 的数据
|
||||
picker.setColumnValues(2, this.columnDatas[index][0]); // 设置区域为该省下面第一个市下面的所有区域
|
||||
}
|
||||
if (columnIndex === 1) {
|
||||
// 当第二列发生变化 变化对应的第三列
|
||||
picker.setColumnValues(2, this.columnDatas[indexs[0]][index]); //同上
|
||||
}
|
||||
},
|
||||
confirm(e) { //点击确定按钮
|
||||
console.log(e)
|
||||
this.show = false;
|
||||
},
|
||||
|
||||
cancel() { //点击取消按钮
|
||||
this.show = false;
|
||||
},
|
||||
|
||||
|
||||
|
||||
// 选择省
|
||||
selectProvince(e) {
|
||||
// 获取下标
|
||||
let index = e.detail.value
|
||||
// 找到对应id
|
||||
this.provId = this.provinceList[index].provId
|
||||
// 调用获取'市'列表方法
|
||||
this.getCityList(this.provId)
|
||||
this.province = this.provinceList[index].provName
|
||||
},
|
||||
// 选择市
|
||||
selectCity(e) {
|
||||
// 获取下标
|
||||
let index = e.detail.value
|
||||
// 找到对应id
|
||||
this.cityId = this.cityList[index].cityId
|
||||
// 调用获取'市'列表方法
|
||||
this.getCountList(this.cityId)
|
||||
this.city = this.cityList[index].cityName
|
||||
},
|
||||
// 选择区
|
||||
selectCount(e) {
|
||||
// 获取下标
|
||||
let index = e.detail.value
|
||||
// 找到对应id
|
||||
this.countyId = this.countList[index].countyId
|
||||
this.count = this.countList[index].countyName
|
||||
},
|
||||
// 获取’省’列表
|
||||
getProvince() {
|
||||
this.$http.post('/api/province/getProvinceList').then(res => {
|
||||
this.provinceList = res.provinceList
|
||||
})
|
||||
},
|
||||
// 获取'市'列表
|
||||
getCityList(id) {
|
||||
this.$http.post(`/api/province/getCityList?provId=${id}`).then(res => {
|
||||
this.cityList = res.prov
|
||||
this.isShowCity = false
|
||||
})
|
||||
},
|
||||
// 获取'区'列表
|
||||
getCountList(id) {
|
||||
this.$http.post(`/api/province/getCountyList?cityId=${id}`).then(res => {
|
||||
this.countList = res.countyList
|
||||
this.isShowCount = false
|
||||
})
|
||||
},
|
||||
// 保存地址
|
||||
uploadSub() {
|
||||
this.$refs.addForm.validate()
|
||||
.then(res => {
|
||||
if (this.countyId == '') {
|
||||
uni.showToast({
|
||||
title: '请补全所在地址信息',
|
||||
icon: "none"
|
||||
});
|
||||
return
|
||||
}
|
||||
console.log(this.addressForm)
|
||||
let data = {
|
||||
userid: this.userInfo.id,
|
||||
username: this.addressForm.userName,
|
||||
userphone: this.addressForm.userTel,
|
||||
areaidpath: `${this.provId}_${this.cityId}_${this.countyId}`,
|
||||
areaid: this.countyId,
|
||||
useraddress: this.addressForm.addrDetail,
|
||||
isdefault: this.addressForm.isDefault ? 1 : 0,
|
||||
}
|
||||
$http.request({
|
||||
url: "book/useraddress/save",
|
||||
method: "POST", // POST、GET、PUT、DELETE,具体说明查看官方文档
|
||||
data,
|
||||
header: { //默认 无 说明:请求头
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
uni.showToast({
|
||||
title: '地址添加成功',
|
||||
duration: 1000,
|
||||
});
|
||||
uni.navigateBack()
|
||||
}
|
||||
})
|
||||
}).catch(errors => {
|
||||
uni.showToast({
|
||||
title: '请补全信息',
|
||||
icon: "none"
|
||||
});
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
// 编辑地址获取信息
|
||||
if (isShowDel) {
|
||||
|
||||
},
|
||||
|
||||
// 删除地址
|
||||
deleteSub() {
|
||||
let data = {
|
||||
userid: this.userInfo.id,
|
||||
}
|
||||
this.deleteShow = false
|
||||
return
|
||||
$http.request({
|
||||
url: "book/useraddress/delete",
|
||||
method: "POST", // POST、GET、PUT、DELETE,具体说明查看官方文档
|
||||
data,
|
||||
header: { //默认 无 说明:请求头
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
uni.showToast({
|
||||
title: '地址删除成功',
|
||||
duration: 1000,
|
||||
});
|
||||
uni.navigateBack()
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.addContent {
|
||||
width: 90%;
|
||||
margin: 20rpx auto 0 auto;
|
||||
|
||||
.addItem {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 25rpx 10rpx;
|
||||
|
||||
|
||||
uni-picker {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.pickerItem {
|
||||
height: 100%;
|
||||
padding: 20rpx;
|
||||
background-color: #dfdfdf;
|
||||
border-radius: 20rpx;
|
||||
border-bottom: solid 1px #ccc;
|
||||
color: #7d7d7d;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.addFooter {
|
||||
width: 100%;
|
||||
margin: 50rpx 0 0 0;
|
||||
|
||||
view {
|
||||
font-size: 30rpx;
|
||||
width: 80%;
|
||||
padding: 16rpx 0;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
border-radius: 20rpx;
|
||||
margin: 30rpx auto 0 auto;
|
||||
}
|
||||
|
||||
.submit {
|
||||
background-image: linear-gradient(90deg, #eba00b 0%, #c96713 100%)
|
||||
}
|
||||
|
||||
.del {
|
||||
background-image: linear-gradient(90deg, #bf0c0c 0%, #95110c 100%)
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user