Files
medicine_app/pages/user/addAddress.vue

501 lines
16 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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="180rpx">
<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="userphone">
<u-input type="number" v-model="addressForm.userphone" placeholder="手机号" clearable
border="surround" />
</u-form-item>
<u-form-item label="所在地区 :" prop="">
<view class="add_arrow" @click="addreShow=true">{{addressForm.areaidpathtext}}</view>
<u-picker @cancel="addcancel" :show="addreShow" ref="uPicker" :columns="columns" keyName="UName"
@confirm="addconfirm" @change="changeHandler" ></u-picker>
</u-form-item>
<u-form-item label="详细地址 :" prop="useraddress">
<u-input type="string" v-model="addressForm.useraddress" placeholder="小区楼栋/乡村名称" clearable
border="surround" />
</u-form-item>
<u-form-item label="默认地址 :">
<u-switch v-model="addressForm.isDafault" active-color="#ff9e02" @change="changeSwitch"></u-switch>
</u-form-item>
</u-form>
</view>
<view class="addFooter">
<view class="submit" @click="uploadSub">
保存
</view>
<view class="del" v-if="isShowDel" @click="deleteShow=true">
删除
</view>
</view>
<u-modal :show="deleteShow" content="你确定要删除地址吗?" :showCancelButton="true" @cancel="deleteShow=false"
@confirm="deleteSub">
</u-modal>
<music-play :playData="playData"></music-play>
<!-- 公共组件-每个页面必须引入 -->
<public-module></public-module>
</view>
</template>
<script>
import musicPlay from '@/components/music.vue'
import $http from '@/config/requestConfig.js';
import addressList1 from "@/static/json/address.json"
import {
mapState
} from 'vuex';
export default {
data() {
return {
// array: ['中国', '美国', '巴西', '日本'],
// indexp:0,
// indexq:0,
// indexc:0,
playData:{},
addreShow: false, //是否显示
columns: [], //省份数据显示,三级联动需要三维数组,展示初始数据
columnData: [], //市数据
columnDatas: [], //区地址
switchTrue: true,
switchFalse: false,
addressChanged:false, // 地址修改标记
navName: '', // 顶部导航栏标题
provId: '', // 存储省id
cityId: '', // 存储市id
countyId: '', // 存储区id
addressList: [],
// 地址
addressForm: {
addressid: '',
username: '',
userphone: '',
area: '',
useraddress: '',
isDafault: false,
areaidpathtext: ''
},
isShowDel: false,
editIndex: 0,
deleteShow: false,
rules: {
username: [{
required: true,
message: "请输入收件人姓名",
trigger: "blur"
}],
userphone: [{
required: true,
message: "请输入手机号",
},
{
// 自定义验证函数
validator: (rule, value, callback) => {
// 返回true表示校验通过返回false表示不通过
// 过滤第一层先判断输入为不为空因为required: false不是必填项所以为空应该返回true
if (value) {
return /^\d{5,15}$/.test(value);
} else {
return true
}
},
message: '手机号码不正确',
// 触发器可以同时用blur和change
trigger: ['change', 'blur'],
}
],
useraddress: [{
required: true,
message: "请输入所在地区",
trigger: "blur"
}]
}
}
},
onLoad(e) {
this.addressList = addressList1
if (e.type == 0) {
this.navName = '添加地址'
this.isShowDel = false
} else {
this.navName = '编辑地址'
this.isShowDel = true
this.editIndex = e.index
this.getAddress()
}
this.initDataPicker() //初始化省份列表
},
onShow() {
},
computed: {
...mapState(['userInfo']),
},
onReady() {
this.$refs.addForm.setRules(this.rules)
},
components:{
musicPlay
},
methods: {
// 三级联动
initDataPicker() {
// console.log(this.addressList,'addressList')
// this.$http
// .post('api/province/getProvince')
// .then(res => {
// if (res.code == 0) {
// this.addressList = res.provinceEntity
//此处的province主要用作数据的初始化即刚打开就需要进行展示的数据这个跟第一条省份数据相关我的第一条是北京市所以需要columns中的三维数组第一维度是省份数据数组第二维度是市数据数组第三维度是区数据数组
let province = []; //初始数据需要展示的省份
let province1 = [{
"cityId": this.addressList[0].cityList[0].cityId,
"provId": this.addressList[0].cityList[0].provId,
"cityName": this.addressList[0].cityList[0].cityName,
"UName": this.addressList[0].cityList[0].cityName,
"createDate": this.addressList[0].cityList[0].createDate,
"regionCode": this.addressList[0].cityList[0].regionCode,
"countyList": this.addressList[0].cityList[0].countyList
}]; //因为第一个市北京市,所以就直接添加北京市下辖的直辖市了 也即初始数据需要展示的市,北京市只有一个市辖区
let province2 = []; //初始数据需要展示的区域数据,也即是 北京市市辖区内的区
for (let i = 0; i < this.addressList.length; i++) {
this.addressList[i].UName = this.addressList[i].provName
if (this.addressList[i].cityList == null) {
// 如果没有cityList数据就添加一项用省份的信息
// console.log('存在单一',this.addressList[i].provId)
this.addressList[i].cityList = [{
"cityId": this.addressList[i].provId,
"provId": this.addressList[i].provId,
"cityName": this.addressList[i].provName,
"UName": this.addressList[i].provName,
"createDate": this.addressList[i].createDate,
"regionCode": this.addressList[i].regionCode,
"countyList": [{
"countyId": this.addressList[i].provId,
"cityId": this.addressList[i].provId,
"countyName": this.addressList[i].provName,
"UName": this.addressList[i].provName,
"createDate": this.addressList[i].createDate,
"regionCode": this.addressList[i].regionCode
}]
}]
} else {
for (let j = 0; j < this.addressList[i].cityList.length; j++) {
this.addressList[i].cityList[j].UName = this.addressList[i].cityList[j]
.cityName
for (let k = 0; k < this.addressList[i].cityList[j].countyList.length; k++) {
this.addressList[i].cityList[j].countyList[k].UName = this.addressList[i]
.cityList[j].countyList[k].countyName
}
}
}
province.push(this.addressList[i]);
}
this.addressList[0].cityList[0].countyList.map(item => {
province2.push(item);
});
//省数据 因为要做数据初始化,所以是三维数组
// 数据格式 [ [所有的省份数据:{},{}] , [第一个省份下的所有的市:{},{},{}] , [第一个市下面所有的区:{},{},{}] ]
this.columns.push(province);
this.columns.push(province1);
this.columns.push(province2);
// console.log(6666666,this.columns)
// 市数据数组筛选address.json文件将全国所有省下面的市数据放入数组
// 格式[ [第一个省下面所有市,{},{},{}] , [第二个省下面所有市{},{},{}] , [第三个省下面所有市{},{},{}] ] 注意,以上的第一第二对应着 columns[0] 的数据
this.addressList.map(item => {
let city = [];
item.cityList.map(item1 => {
city.push(item1);
});
this.columnData.push(city);
});
//区数据数组
//数据格式: [ 所有省下面所有市的所有区 [ 第一个省下面所有市的区:[ [第一个省下面第一个市的所有区] , [第一个省下面第二个市的所有区] ,] , [ 第二个省下面所有市的区:[ [第二个省下面第一个市的所有区] , [第二个省下面第二个市的所有区] ,] ]
let area = [];
this.addressList.map((item, index) => {
let area1 = []; //省下面所有市的初始化
item.cityList.map(item1 => {
area = []; //市下面的区初始化
item1.countyList.map(item2 => {
area.push(item2);
});
area1.push(area); // 每循环一个市,添加该市下面的所有区
});
this.columnDatas.push(area1); // 每循环一个省,添加该省下面的所有市
});
// };
// }).catch(e => {
// console.log(e,'e')
// })
},
changeHandler(e) { //城市选择时触发
// console.log(e,'变化了',this.columnData, this.columnDatas)
this.addressChanged = true
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]); //同上
}
},
addconfirm(e) { //点击确定按钮
// console.log(e,'选中的值')
this.addressChanged = true
this.addreShow = false;
this.addressForm.areaidpathtext = e.value[0].UName + '-' + e.value[1].UName + '-' + e.value[2].UName
this.provId = e.value[0].provId
this.cityId = e.value[1].cityId
this.countyId = e.value[2].regionCode
},
addcancel() { //点击取消按钮
this.addreShow = false;
},
// 保存地址
uploadSub() {
this.$refs.addForm.validate()
.then(res => {
let link_add = ''
if (!this.isShowDel) {
link_add = 'book/userAddress/save'
} else {
link_add = 'book/userAddress/update'
// this.addconfirm(e)
}
if (this.addressForm.areaidpath == '') {
uni.showToast({
title: '请补全所在地址信息',
icon: "none"
});
return
}
// this.addressForm.userId = this.userInfo.id
// this.addressForm.consigneePhone = this.addressForm.userphone
// this.addressForm.consigneeName = this.addressForm.username
// this.addressForm.regionCode = ''
// // this.addressForm.userid = this.userInfo.id
// if(this.addressChanged){ // 如果修改过地址区域,就重新赋值,否则保持不变
// this.addressForm.areaidpath = `${this.provId}_${this.cityId}_${this.countyId}`
// this.addressChanged = false
// }
// this.addressForm.areaid = this.countyId
// this.addressForm.isDefault = this.addressForm.isDafault ? 1 : 0
// let data = this.addressForm
let data = {
'id':this.addressForm.addressid,
'detailAddress' : this.addressForm.useraddress,
'regionCode':this.countyId,
'userId':this.userInfo.id,
'consigneePhone':this.addressForm.userphone,
'consigneeName': this.addressForm.username,
'isDefault':this.addressForm.isDafault ? 1 : 0
}
console.log(data,'保存参数')
$http.request({
url: link_add,
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data,
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
}).then(res => {
if (res.code == 0) {
uni.showToast({
title: '操作成功',
duration: 1000,
});
setTimeout(function() {
uni.navigateBack()
}, 1000);
}
})
}).catch(errors => {
uni.showToast({
title: '请补全信息',
icon: "none"
});
})
},
changeSwitch(e) {
e ? this.addressForm.isdefault = 1 : this.addressForm.isdefault = 0
this.addressForm.isDafault = e
console.log(this.addressForm, e)
},
// 编辑地址获取信息
getAddress() {
this.$http
.post(`book/userAddress/getUserAddress?userId=${this.userInfo.id}`)
.then(res => {
if (res.code == 0) {
this.addressForm = {
'useraddress':res.list[this.editIndex].detailAddress,
'userphone':res.list[this.editIndex].consigneePhone,
'username':res.list[this.editIndex].consigneeName,
'isdefault':res.list[this.editIndex].isDefault,
'isDafault':res.list[this.editIndex].isDefault == 1 ? true : false,
'areaidpathtext':res.list[this.editIndex].province +'-'+ res.list[this.editIndex].city +'-'+ res.list[this.editIndex].county
,'addressid':res.list[this.editIndex].id
}
this.countyId = res.list[this.editIndex].regionCode
// this.addressForm = res.list[this.editIndex]
if (this.addressForm.isdefault == 1) {
this.addressForm.isDafault = true
}
}
})
},
// 删除地址
deleteSub() {
let addressArr = [];
addressArr.push(this.addressForm.addressid)
this.deleteShow = false
this.$http
.get(`book/userAddress/delete?id=${this.addressForm.addressid}`)
.then(res => {
if (res.code == 0) {
uni.showToast({
title: '地址删除成功',
duration: 1000,
});
uni.navigateBack()
}
})
},
},
}
</script>
<style lang="scss" scoped>
.flexbox{display: flex;}
.selectAdd{ justify-content: space-between;
.addItem{ display: block;width: 30%}
}
.add_arrow {
height: 28px;
line-height: 28px;
width: 100%;
position: relative;
&::after {
content: '';
position: absolute;
right: 20upx;
top: 50%;
transform: translateY(-50%);
width: 40upx;
height: 40upx;
background-image: url('../../static/icon/icon_right.png');
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
}
}
.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: 34rpx;
width: 80%;
padding: 25rpx 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>