<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,
				list: [{
						value: 1,
						label: '中国',
						children: [{
								value: 2,
								label: '广东',
								children: [{
										value: 3,
										label: '深圳'
									},
									{
										value: 4,
										label: '广州'
									}
								]
							},
							{
								value: 5,
								label: '广西',
								children: [{
										value: 6,
										label: '南宁'
									},
									{
										value: 7,
										label: '桂林'
									}
								]
							}
						]
					},
					{
						value: 8,
						label: '美国',
						children: [{
							value: 9,
							label: '纽约',
							children: [{
								value: 10,
								label: '皇后街区'
							}]
						}]
					}

				],
				rules: {
					username: [{
						required: true,
						message: "请输入收件人姓名",
						trigger: "blur"
					}],
					userphone: [{
							required: true,
							message: "请输入手机号",
						},
						{
							// 自定义验证函数
							validator: (rule, value, callback) => {
								// 返回true表示校验通过，返回false表示不通过
								// 过滤第一层，先判断输入为不为空，因为required: false，不是必填项，所以为空应该返回true
								if (value) {
									return this.$u.test.mobile(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) {
						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>