<template>
	<view>
		<!--标题栏-->
		<bar-title bgColor="bg-white" isBack :title="id?'编辑地址': '新增地址'">
			<block slot="content">{{id?'编辑地址': '新增地址'}}</block>
		</bar-title>
		
		<!--表单-->
		<view class="cu-form-group margin-top">
			<view class="title">收货人名</view>
			<input v-model="name" placeholder="您的姓名"/>
		</view>
		<view class="cu-form-group">
			<view class="title">手机号码</view>
			<input v-model="phone" placeholder="卖家和快递员联系您的方式"/>
		</view>
		<view class="cu-form-group">
			<view class="title">所在地区</view>
			<picker mode="multiSelector" @columnchange="bindMultiPickerColumnChange" :value="areasIndex" range-key="name" :range="areas" @change="multChange">
				<view class="picker">
					<block v-for="(item,index) in areas" :key="index" v-if="index < 3">
						{{areas[index] && areas[index][areasIndex[index]] && areas[index][areasIndex[index]].name}}
						<block v-if="index < areas.length - 1">，</block>
					</block>
				</view>
			  </picker>
		</view>
		<view class="cu-form-group">
			<view class="title">详细地址</view>
			<input v-model="address" placeholder="请输入详细的地址信息"/>
		</view>
		
		<view class="bg-white wecanui-footer-fixed foot-pb">
			<view class="flex flex-direction">
				<button class="cu-btn bg-red" @click="submit">提交保存</button>
			</view>
		</view>
		
	</view>
</template>

<script>
	import barTitle from '@/components/zaiui-common/basics/bar-title';
	import _tool from '@/static/zaiui/util/tools.js';	//工具函数
	export default {
		components: {
			barTitle,
		},
		data() {
			return {
				name: '',
				phone: '',
				id: '',
				address: '',
				addressShow: false,
				areas: [[{name: '省份选择', value: '-1'}],[{name: '城市选择', value: '-1'}],[{name: '县区选择', value: '-1'}]],
				areasIndex: [0,0,0],
				roleDeep: 4,
				type: 2
			}
		},
		onLoad(options) {
			this.id = options.id || '';
			if(!this.id) {
				this.loadAreas(0, 1);
				return;
			}
			
			this.reqByuser({
				url: '?l=address.getInfo',
				data: {
					id: this.id
				},
				success: res => {
					if(res.data.status == 1) {
						let data = res.data.data;
						
						this.phone = data.phone;
						this.address = data.address;
						this.city = data.city;
						this.type = data.type;
						this.name = data.name;
						this.initAreasIndex([data.province_id, data.city_id, data.county_id])
					}
				}
			})
		},
		onReady() {
			_tool.setBarColor(true);
			uni.pageScrollTo({
			    scrollTop: 0,
			    duration: 0
			});
		},
		methods: {
			initAreasIndex(areas) {
				let _areas = [].concat(areas);
				let loop = (id, level) => {
					this.loadAreas(id, level, 0, res => {
						let index = res.findIndex(item => areas[level-1] == item.id);
						if(level == 1) {
							index++;
						}
						this.areasIndex[level-1] = Math.max(0, index);
						let nextId = _areas.shift();
						if(nextId && level<3) {
							loop(nextId, level+1)
						} else {}
					}, 1);
				}
				loop(0,1)
			},
			loadAreas(parent, level, next, callback) {
				if(level > 4) return;
				this.req({
					url: 'http://center.yuandaibao.com/package/area/?l=data.get',
					data: {
						level,
						parent,
					},
					success: res => {
						if(res.data.status == 1) {
							let data = res.data.data;
							if(level-1 < 3) {
								let list = data.list;
								if(parent == 0) {
									list = [{name: '省份选择', value: '-1'}, ...list]
								}
								this.areas.splice(level-1,1,list)
							}
							typeof callback == 'function' && callback(data.list)
							if(next && level < this.roleDeep - 1) {
								// let firstNode = data.list[0].value == -1 ? data.list[1] : data.list[0];
								let firstNode = data.list[0];
								if(firstNode.id !== -1) {
									this.loadAreas(firstNode.id, level + 1);
								}
							}
						}
					}
				});
			},
			multChange(e) {
				let area = this.areas.map((item, index) => {
					return item[e.detail.value[index]] && item[e.detail.value[index]].value
				}).join(',');
				area += ',' + this.streetAreas[this.streetIndex].value;
				if (this.areas.length == this.roleDeep && area.indexOf('-1') == -1) {
					const role = this.roles[this.roleIndex];
				}
			},
			bindMultiPickerColumnChange(e) {
				// 矫正下游select index
				let areasIndex = this.areasIndex.map((item, index) => {
					if(index == e.detail.column) {
						return e.detail.value
					}
					if(index < e.detail.column) {
						return item;
					}
					return 0;
				});
				this.$set(this, 'areasIndex', areasIndex);
				
				if(e.detail.column < this.roleDeep -1) {
					let value = this.areas[e.detail.column][e.detail.value].id;
					if(e.detail.column == 0) {
						this.areas.splice(2,1, [{name: '县区选择', value: '-1'}])
					}
					this.streetAreas = [{name: '街道选择', value: '-1'}];
					this.streetIndex = 0;
					if(value == -1) {
						let arr = [].concat(this.areas);
						arr.splice(e.detail.column+1, 5)
						this.areas = arr;
						return;
					}
					this.loadAreas(this.areas[e.detail.column][e.detail.value].id, e.detail.column+2, 1);
				}
			},
			// 打开窗口
			selectAddress(){
				this.$refs.addressEl.show();
			},
			// 确认选中
			confirmChange(address){
				console.log(address)
				this.address = address.province + '/' + address.city + '/' + address.area;
			},
			submit() {
				let { name, phone, type, id, address } = this;
				let area = this.areas.map((item, index) => item[this.areasIndex[index]].id).join(',');
				// let _address = this.areas.map((item, index) => item[this.areasIndex[index]].name).join('')
				
				// _address += address;
					
				if(!name) {
					uni.showToast({
						icon:'error',
						title:'请填写昵称'
					})
					return;
				}
				if(!phone) {
					uni.showToast({
						icon:'error',
						title:'请填写手机号'
					})
					return;
				}
				if(!/1\d{10}/.test(phone)) {
					uni.showToast({
						icon:'error',
						title:'手机号格式错误'
					})
					return;
				}
				if(!area || area.indexOf('-1') > -1) {
					uni.showToast({
						icon:'error',
						title:'请填写地址'
					})
					return;
				}
				if(!address) {
					uni.showToast({
						icon:'error',
						title:'请填写详细地址'
					})
					return;
				}
				
				let data = {
						name,  
						province: this.areas[0][this.areasIndex[0]].id,
						city: this.areas[1][this.areasIndex[1]].id, 
						county: this.areas[2][this.areasIndex[2]].id, 
						address,
						phone, type, id
					};
					
				this.reqByuser({
					url: '?l=address.up',
					data,
					success: res => {
						if(res.data.status == 1) {
							uni.showToast({
								icon: 'success',
								title: '提交成功'
							})
							uni.navigateBack({})
						}
					}
				})
			},
			
		}
	}
</script>

<style lang="scss">
	/* #ifdef APP-PLUS */
		@import "../../static/colorui/main.css";
		@import "../../static/colorui/icon.css";
		@import "../../static/zaiui/style/app.scss";
	/* #endif */
	.wecanui-footer-fixed .flex-direction {
		padding: 18.18upx;
	}
</style>
